суббота, 17 декабря 2011 г.

Диалог выбора на Android или контекстное меню с картинками.

Задача выбора элемента из списка возникает в Android-приложениях регулярно. В принципе, для выбора элемента можно воспользоваться стандартным контекстным меню. Но у контекстного меню есть ряд ограничений:
  • В контекстном меню функции вызова (onCreateContextMenu) и обработки результатов(onContextItemSelected) реализуются в Activity.
  • Нельзя выбрать несколько элементов.
  • В контекстном меню показывается только название элемента. Картинки не отображаются.
Наиболее напрягает необходимость реализации функций в Activity. Типичная ситуация - вам нужна вспомогательная функция, которая предлагает пользователю что-нибудь выбрать из списка и затем выполняет действие над выбранным элементом. Такая функция может вызываться из множества разных Activity. И что, мне в каждой Activity реализовывать функции onCreateContextMenu и onContextItemSelected? Так не пойдет.

Лучше сделать диалог. А поскольку подобные диалоги нужны сплошь и рядом, нужно сделать более-менее универсальный диалог, который подойдет для выбора элементов в большинстве случаев. О реализации такого диалога и пойдет речь.

пятница, 28 октября 2011 г.

Три недели в Као-Лаке.Отдых в Таиланде в октябре 2011.

Несколько дней назад вернулся из Таиланда. Отдыхали всей семьей в курортном городе Као-Лак (Khaolak, 80 км от Пхукета) в течении трех недель. Отдохнули хорошо, хотя и не без проблем.

Путешествовали мы самостоятельно, без турагентства. На Као-Лак летели через Бангкок. Из Бангкока мы успели уехать до начала наводнения, так что обошлось без экстрима.

Ребенок у нас еще совсем маленький - менее двух лет. Так что отдых наш был несколько специфичным: пляж, отель, море, прогулки вблизи отеля, никаких экскурсий. Тем не менее, о чем рассказать - есть.

четверг, 15 сентября 2011 г.

Книга Version Control by Example в свободном доступе.

Eric Sink раздает на своем сайте свою новую книжку, посвященную системам контроля верстки: Version Control by Example (SVN, GIT, Mercurial, Veracity). Раздает бесплатно, причем можно даже заказать в бумажном виде.

Книжка интересная, так что заказал. Бумажный вариант читать все-таки на порядок удобнее, чем PDF.

Update 9.11.2011 Пришла книжка. Почитаем...

понедельник, 12 сентября 2011 г.

Книги которые стоит прочитать. Разные версии топов.

Хороших книг мало, и выловить их из книжного моря - не просто. То ли дело фильмы - в этой области работает Экслер, рецензии которого позволяют составить более менее внятное представление о фильмах, режиссерах, актерах и состоянии дел в кинематографе. И всегда подобрать что-нибудь для души.

С книгами все не так. Авторов и книг на несколько порядков больше, чем режиссеров и фильмов. "Объективно" оценить книгу, похоже, гораздо сложнее, чем фильм. Сплошь и рядом - рецензия отличная, интригует; начинаешь читать - туфта. Бывает и наоборот. Так что вопрос "что почитать" всегда актуален.

Хорошо помогают сориентироваться в книжном многообразии списки "лучших" книг. Просишь кого-нибудь составить список самых лучших, на его взгляд, книжек. Просматриваешь - если со многими позициями согласен, то есть неплохие шансы, что достойны прочтения и неизвестные тебе книги/авторы из этого списка. Разумеется, желательно чтобы "кто-нибудь" был ни "абы кто".

В интернете выложено множество подобных списков и рейтингов от самых разных составителей. Попробую в этом топике собрать ссылки на самые интересные из них. А заодно, на интересные книжные блоги.

понедельник, 11 июля 2011 г.

Производительность Android приложения.

Очень часто приходится слышать о проблемах с производительностью Android приложений. Начинаешь разрабатывать собственное приложение - точно, скорости не хватает, какие-то непонятные тормоза лезут... По моему опыту, вопросом - "что можно сделать, чтобы поднять производительность приложения на Android", - задаешься очень быстро. Особенно после первого релиза своего первого приложения :)

Традиционно в низкой производительности Android приложений винят Java. Но только ли Java виноват? Не только. Во многих случаях виноват вовсе не он.

Производительность приложения зависит от многих аспектов. И в первую очередь, от грамотности использования имеющихся в вашем распоряжении инструментов - языка программирования, библиотек, утилит. Повышение производительности - это комплексный вопрос, и подходить к нему нужно разносторонне.

Цель этой статьи - перечислить основные моменты, влияющие на производительность. Моменты, на которые стоит обратить самое пристальное внимание как при кодировании, так и при проектировании приложения.

среда, 6 июля 2011 г.

Мультфильмы для самых маленьких

Какие мультики показывать малышам в возрасте 1-3 года? Большинство обычных мультфильмов им не интересны - они до них еще не доросли. Малышам нужны мультфильмы попроще... и, желательно, с обучающим эффектом. Ниже - список таких мультфильмов.

понедельник, 4 июля 2011 г.

Сбор статистики в приложении на Android

Всегда интересно знать, как пользователи работают с вашим приложением: какие функции наиболее востребованы, какие кнопки нажимаются, какие настройки меняются, какие ошибки совершаются. Неплохо так же представлять себе, что это за пользователи - какая версия прошивки у их девайсов, где они географически расположены и т.д.

Такая информация неоценима для разработчика, ведь с ее помощью можно оптимизировать юзабилити, определиться с приоритеностью функционала, найти пути повышения продаж. Вопрос только как такую статистику собирать.

четверг, 12 мая 2011 г.

Конвертация даты из внутреннего формата MSSQL

Переводил базу из MsSQL в MYSQL. Стандартные инструменты из MySQL Migration Toolkit оказались бессильны перед этой базой - кодировка портилась, хоть тресни. Пришлось конвертить ручками, через SQL скрипты. Все было хорошо.. пока не обнаружилось, что в MSSQL-ном скрипте в некоторых таблицах данные типа DateTime оказались записаны в виде:
CAST(0x00008F5800000000 AS DateTime) //2000-06-21 00:00:00
CAST(0x00008F5900000000 AS DateTime) //2000-06-22 00:00:00
Это - внутренний формат даты в MSSQL. Вопрос - как из внутреннего формата преобразовать дату в нормальный вид?

вторник, 10 мая 2011 г.

Перенос данных с Firebird 1.5 на Firebird 2.5

Появилась необходимость перетащить базу с Firebird 1.5 на Firebird 2.5. После полуторки были еще FB 2.0 и FB 2.1, структура базы поменялась значительно. Почитал форумы - выяснилось, что наиболее надежный способ переноса базы - заново пересоздавать базу из скриптов на FB2.5.

С переносом метаданных все понятно - с помощью IBExpert извлекаем метаданные (команда Extract Metadata) из базы под FB 1.5 и создаем новенькую пустую базу на FB 2.5. А вот как перетаскивать сами данные?

Несмотря на то, что в IBExpert есть множество средств импорта/экспорта данных, готового инструмента для переноса данных между базами - нет. К счастью, IBExpert поддерживает мощный скриптовый язык IBEBlock. И на нем достаточно просто создать скрипт с требуемой функциональностью. Далее расскажу подробнее о получившемся скрипте и опишу итоговую процедуру переноса базы с FB1.5 на FB2.5.

пятница, 29 апреля 2011 г.

Android. Реализация SendEmail

Отправить email из приложения. Это типичная задача, с которой сталкиваешься при разработке под Android. И делов то всего - скопипастить готовый код. Но есть несколько особенностей, которые легко пропустить... и потратить кучу времени в поисках ошибки.

четверг, 14 апреля 2011 г.

Применение Data Mining в космических приложениях.

Выкладываю свою статью "Применение Data Mining в космических приложениях". Статья обзорная и содержит информацию взятую исключительно из открытых источников. Все ссылки ведут на полнотекстовые PDF.

Статья была опубликована в прошлом году, в сборнике трудов конференции "Интеллект и наука". Полная ссылка: В.В. Деревянко, "Применение Data Mining в космических приложениях", Интеллект и наука: труды X Международной научно-практической конференции "Интеллект и наука" (г. Железногорск, 28-29 апреля 2010 г) - Красноярск: ИПК СФУ, 2010. - 344 с (страницы 26-33).

Публикуется с любезного разрешения ИПК СФУ.

вторник, 12 апреля 2011 г.

Делокализация Delphi приложения

Достался мне недавно в сопровождение проект на Delphi. Проект старый и довольно большой по объему. Все бы ничего, да только написан он был датскими программистами для датских клиентов. В результате - GUI на датском, текстовые сообщения в исходниках - на датском, комментарии - на датском. Даже названия функций - и те во многих случаях написаны по датски.

Я датский практически не знаю. Для нормальной работы мне нужен английский язык. Комментарии не проблема - их можно перевести прямо в исходниках. А вот что делать с самими исходниками?. С одной стороны, все строки в исходниках должны быть написаны на английском. С другой стороны, для пользователя ничего не должно измениться. Интерфейс программы был на датском языке, значит должен оставаться на датском.

В результате, мне пришлось провести де-локализацию исходных кодов с последующей обратной локализацией приложения. Другими словами: в исходниках датские строки я заменил английскими, а в процессе работы приложение подменяет английские строки датским переводом.

Далее речь пойдет о том, как все это было сделано.

среда, 6 апреля 2011 г.

В 2011 году поменялись КБК.

Собрался платить налог за первый квартал (УСН, 6%). Обнаружил, что поменялись КБК:
в 2010 был: 18210501010011000110
в 2011 стал: 18210501011011000110
Не ошибитесь. Все-таки с налоговиками не соскучишься - то ОКАТО поменяют, то КБК, то форму какую-нибудь изменят, то отчетность новую введут. Вот сиди и отслеживай...

Update. Все оказалось еще интереснее - КБК за 2010 год тоже поменяли.

воскресенье, 20 марта 2011 г.

Android - установка и настройка среды разработки.

Программирование на Android начинается с установки Eclipse. В данной статье я рассмотрю порядок установки и настройки Eclipse для работы с Android под Windows. Причем постараюсь рассмотреть его "от" и "до", включая генерацию цифровой подписи, автоматизацию сборки приложения, настройку ProGuard и подключение средств статистического анализа.

четверг, 10 марта 2011 г.

Kill Word. Автоматизация удаления зависших процессов, запущенных из сервиса.

Имеется сервис, конвертирующий документы из doc в html. В качестве конвертера используется Microsoft Word. Сервис управляет им через средства автоматизации. При каждом запросе на конвертацию сервис запускает экземпляр Word, открывает в нем документ, дает команду "сохранить в в виде HTML" и закрывает Word. Все прекрасно работает, но иногда процессы Word подвисают. Одна операция на сотню или даже тысячу запусков приводит к ошибке и подвисшему процессу winword.exe в Process Explorer.

Если включить в настройках сервиса галочку "Разрешить взаимодействие с рабочим столом" и сделать окно Word видимым, то причина зависания проясняется: Word что-то сообщил пользователю и ждет нажатия кнопки. Процесс Word работает на невидимом рабочем столе, так что ответить ему никто никогда не сможет.

Причины появления сообщений об ошибках могут быть самыми разными - при гигантском разнообразии конвертируемых документов без ошибок не обойтись. Остается только периодически удалять ручками такие зависшие процессы. Но конечно же, лучше этот процесс автоматизировать.

воскресенье, 27 февраля 2011 г.

Отчетность ИП в ПФРФ за 2010.

Каждый индивидуальный предприниматель платит взносы в пенсионный фон на страховую и накопительную часть. До 2010 года никакой отчетности по этим взносам в ПФРФ предоставлять не требовалось (по крайней мере для ИП, которые не нанимают работников). Сходил, сделал сверку - и все. С нынешнего года нужно предоставлять "декларацию" - отчетность по форме РСВ-2. Ее надо представить в пенсионный фонд до 1 марта 2011 года.

На сайте ПФРФ есть брошюрка, где все подробно расписано. Бланк формы РСВ-2 в брошюрке приведен, но в виде PDF его использовать не удобно. Не проблема - вот бланк РСВ-2 в формате Excel. Но и он скорее всего будет бесполезен. И вот почему.

воскресенье, 20 февраля 2011 г.

Как разделить Android приложение на Pro и Free версии.

Если вы разрабатываете бесплатное приложение под Android, то это совсем не значит, что оно не принесет вам доход. Путей монетаризации достаточно: показ рекламы, пожертвования пользователей, продажа специальной "Pro" версии приложения, в которой нет рекламы и/или есть дополнительный функционал.

Типичный сценарий таков. Вы разрабатываете Free версию приложения, в которой реклама есть. И предлагаете приобрести Pro версию, в которой рекламы нет. Бесплатность приложения привлекает большое количество пользователей. Больше пользователей - больше кликов по рекламе, больше покупок Pro версии.

Возникает чисто технический вопрос: как сделать две версии приложения - Pro и Free, - на базе одних и тех же исходных кодов? Вот об этом и поговорим.

суббота, 22 января 2011 г.

Named Folders 3.0. Релиз, итоги.

Выложил релиз Named Folders 3.0 - плагина для Far Manager, позволяющего быстро перемещаться между директориями в Far (версия x86, версия x64). С момента начала работы над третьей версией плагина прошло уже четыре месяца.. и 14 билдов.

пятница, 21 января 2011 г.

Конвертер PDF в HTML. Вариантов море, а нужного нет.

Появилась задача: конвертация PDF-файлов в HTML в автоматическом режиме на сервере. Условия просты: текст должен конвертироваться в текст (не в картинку), форматирование страницы должно быть максимально приближено к оригиналу, плюс все это должно делаться локально - документ должен оставаться на сервере и никуда не передаваться. Оказалось, что найти подходящий конвертер очень и очень не просто.

пятница, 14 января 2011 г.

Даблклик по виджету на Android

Как известно, даблклика (даблтапа - double tap) на андроиде нет. Но порой требуется, чтобы одинарный и двойной щелчок по виджету приводили к разным действиям. Приходится реализовывать даблклик обходным путем. Например, так, как описано ниже.

вторник, 11 января 2011 г.

Реестр intents

Наткнулся на крайне полезный ресурс
Registry of intents protocols.

С этими интентами под Андроид ведь просто беда.. каждый раз приходится выискивать - какие параметры у какого intent есть. А тут - все по полочкам разложено. Удобно.