Недавно мне понадобилось решить задачу поиска кратчайшего пути с клетки A в клетку B алгоритмически, и реализовать это программно. «Наверняка это уже тысячу раз кто-то делал и в интернете полно готовых решений». — подумал я, и каково же было мое разочарование… Несколько дней поисков ничего конкретного не дали. Максимум, что удалось найти, это упоминание, что решить данную задачу можно используя теорию графов и алгоритмом поиска в ширину (BFS — breadth first search). В этой статье я попробую подробно разобрать данный способ нахождения кратчайшего пути шахматных фигур с примерами кода и пояснениями.
Читать далее…
Сегодня я хотел бы поведать о достаточно сложной задаче, которую мне недавно удалось решить. Краткую суть ее можно увидеть в заголовке поста. Может возникнуть вопрос: зачем такое вообще могло понадобиться? Такое ощущение, что никто до меня этим вопросом не задавался, ибо гугл был крайне скуден на ответы. Ведь это же очень логично и очевидно — так гораздо легче отлаживать. Для того, чтобы опробовать новый звук или изменения в уровневой логике, не нужно перекомпилировать каждый раз проект, можно даже не перезапускать приложение. Сейчас расскажу, как мне удалось этого добиться.
Читать далее…
Давно мне не давало покоя отсутствие функции Скрыть все окна в Mac OS X. Почему это так важно для меня? Я чувствую дискомфорт от нагромождения окон на экране, или если в браузере открыта бесконечная куча вкладок, или ярлыков на рабочем столе тьма тьмущая, у меня все это вызывает приступы паники. Чтобы максимально сосредоточить внимание на конкретной задаче, мне нужно, чтоб на экране было не более трех окон. Прошло уже 5 лет, как я мигрировал с Windows, и все это время я пользовался убогим воркэраундом — Скрыть остальные (Option-Cmd-H) в меню приложений. Сегодня же я нашел и осуществил вполне себе достойный способ скрыть все окна одним кликом мыши. Сейчас расскажу, как мне удалось это сделать.
Читать далее…
Периодически возникает задача преобразовать plist файл из бинарного представления обратно в XML. Возникает эта задача как правило тогда, когда нужно из IPA архива извлечь plist файл проекта и посмотреть, что у него внутри. Это затруднено тем, что сборщик IPA (утилита xcrun) упаковывает все, что только можно, чтобы уменьшить размер приложения, и вероятно это ускоряет запуск приложения. Решил раз на пятый это дело скинуть себе в блог, чтоб не искать каждый раз мучительно.
Читать далее…
История создания данного продукта возвращает меня на 5 лет назад во времена, когда я только начал входить в мир Apple технологий, а именно — мигрировать на операционную систему Mac OS X. Как и для многих пенреход был связан с некоторыми неудобставми из-за отсутствия привычных программ и элементов управления системой. Одним из недоразуменей стало отсутствие аналога кнопки Пуск для запуска программ путем выбора из списка. Честно говоря, до сих пор не уверен, что я правильно запускаю программы в OS X (для этого я использую Spotlight). И вот, спустя несколько лет я решил устранить этот недостаток.
Читать далее…
Настала пора поведать общественности о моем скромном участии в интересном и перспективном проекте с весьма оригинальным названием Timera (от слов time и camera). По удачному стечению обстоятельств я пребывал в активной фазе поисков новых гаризонтов развития в тот самый момент, когда руководство стартапа искало кандидата на вакансию iOS-разработчика. Суть проекта довольно проста — ее визуальное представление можно видеть на главной иллюстрации к посту (изображение кликабельно). Пользователю представляется инструмент для создания временнОго туннеля путем совмещения фотографии из прошлого с фотографией, сделанной камерой смартфона. Идея мне очень понравилась и я незамедлительно начал интегрироваться в процесс разработки, в ходе которого пришлось столкнуться и преодолеть немало сложных и интересных задач. Читать далее…
Давненько не обновлял блог, материала как всегда полно, но собрать что-то воедино и запостить руки не доходят. Сегодня я хотел бы написать мини-пост с элементами мемуаринга о том, что недавно на этом свете для меня стало одной загадкой меньше. Речь пойдет о приложении Duck Hunt для легендарного девайса Dendy.
Dendy — восьмибитная телевизионная приставка, клон японской Nintendo Entertainment System, подключалась к телевизору обычным коаксиальным кабелем, после чего видеосигнал настраивался на одном из каналов. Приложения запускались с помощью сменных картриджей, которые из себя представляли по сути печатную плату с микросхемой ROM, хранящий код приложения. Читать далее…
Сегодня хотел бы записать на память один нетривиальный процесс, касающийся внедрения механизма Apple Push Notification Service, который осуществляет рассылку коротких сообщений на устройства пользователей приложений в AppStore. И хотел бы я записать последовательность действий, производимых при создании и установки SSL Push Certificate, без которого не будет работать серверная часть, рассылающая пуши. Также если останется место, напишу, как реализовать самый простецкий push-сервер на php. Сама функция Push Notification очень полезна для оповещения пользователей о новых событиях в системе. Такие монстры, как Skype, Google, WhatsApp используют технологию push, чтобы осуществлять вызов абонентов или уведомлять о новых сообщениях на манер, как это делает стандартное приложение PhoneApp. Читать далее…
Как же долго я не мог себя заставить начать двигаться в направлении реализации мультиязычности на своем сайте… Эта задача оставалась нереализованной на протяжении двух лет. Обусловлено это по большей части тем, что движок сайта собственноручный, основанный на Zend Framework. Много раз я пытался подступиться к решению проблемы локализации Zend Framework, но ничего достойного никак не находилось. На официальном ресурсе (zendframework.ru) есть целая ветка форума, но там я тоже не нашел для себя идеального решения. В итоге, пришлось собирать его из разных источников. И вот, что в итоге получилось. Читать далее…
Долгое время не мог подступиться к одной проблеме, которая то и дело периодически всплывала. В очередной раз я твердо решил, что мириться с таким положением дел не представляется более возможным и в очередной раз приступил к исследованиям. А проблема в следующем. Предположим, имеется в наличие монохромная картинка (например, иконка звезды для кнопки Избранные), а также некий каркас приложения, который реализует использование скинов (кастомизация пользовательского интерфейса). Если один клиент хочет, чтобы звезда была красной, а другой, чтобы синей, то дизайнеру придется каждый раз переделывать изображение. Но зачем, когда должно существовать более простой способ придать оттенок изображению с помощью графических функций CoreGraphics. Читать далее…