Search
Write a publication
Pull to refresh
42
0
Дмитрий Серединов @dals

User

Send message

Синглтон (Перевод с английского главы «Singleton» из книги «Pro Objective-C Design Patterns for iOS» Carlo Chung)

Reading time11 min
Views29K
В математике и логике синглтон определяется как «множество, содержащее ровно один элемент». Поэтому неважно, насколько велика сумка, каждый раз при попытке достать из неё шарик будем получать один и тот же. В каких ситуациях нужен синглтон в программировании? Подумайте о ресурсах, которые невозможно скопировать, но можно использовать совместно. Например, на iPhone установлен единственный модуль GPS и определять текущие координаты умеет только он. Класс CLLocationManager из фреймворка CoreLocation предоставляет единственную точку входа ко всем сервисам GPS-модуля. Кто-нибудь может подумать: если можно сделать копию CLLocationManager, можно ли получить дополнительный набор GPS-сервисов для своего приложения? Это звучит, как фантастика – вы создали два программных GPS по цене одного аппаратного. Но в реальности вы все равно получаете только один GPS единовременно, так как в iPhone есть только один GPS, который создает настоящие соединения со спутниками. Так что, если вы думаете, что создали супер-приложение, которое может манипулировать двумя отдельными GPS-соединениями одновременно, и хотите похвастаться этим перед друзьями, подумайте дважды.

Класс синглтона в объектно-ориентированном приложении всегда возвращает один и тот же экземпляр самого себя. Он обеспечивает глобальную точку доступа для ресурсов, которые предоставляет объект класса. Паттерн с такой функциональностью называется Синглтон.
В этой главе мы изучим возможности реализации и использования паттерна Синглтон в Objective-C и фреймворке Cocoa Touch на iOS.
Читать дальше →

Инвижин? Хуижин!* Как мы делали бесплатный аналог InvisionApp

Reading time6 min
Views72K

*Whoision — официальное название сервиса, с налетом еле заметной иронии.

Все веб-дизайнеры хорошо знакомы с InvisionApp — веб-сервисом, который помогает получать качественную обратную связь от клиента и демонстрировать результаты своей работы онлайн.

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

На весь проект у нас одни сутки. Сознаемся, дизайн и верстку мы вынесли за пределы хакатона — делали всё это непосредственно перед ним. Как и тестирование, которое мы перенесли на следующий день. Всё это, с одной стороны, нивелирует наш героический подвиг, но с другой — романтики в нем меньше не становится.

Итак, хроника рабочего процесса со слов участников. В конце — ссылка на сам сервис, для нетерпеливых.
Читать дальше →

Строим свой Gmail с куртизанками и преферансом

Reading time7 min
Views205K

Вместо предисловия


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

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

Читать дальше →

Локализация приложений Node.js. Часть 1

Reading time4 min
Views14K
От переводчика: Это девятая статья из цикла о Node.js от команды Mozilla Identity, которая занимается проектом Persona.





image

Знаете ли вы, что продукты и сервисы Mozilla локализованы для 90 языков? Локализация включает в себя:

  • текст, переведённый на региональные вариации и диалекты языков;
  • рендеринг страниц с учётом написания справа налево;
  • пуленепробиваемый дизайн, способный вместить тексты любой длины;
  • заголовки, метки и текст на кнопках, подобранные для локальных аудиторий.

В этой серии из трёх статей, посвящённых локализации, я расскажу о технических аспектах создания многоязычного приложения Node.js.

Мы будем использовать общепринятые термины «интернационализация» (i18n) и «локализация» (l10n). Интернационализация — это набор технических приёмов, делающих возможной последующую локализацию, то есть собственно перевод и адаптацию для конкретного языка.

Mozilla Persona — веб-сервис на Node.js, локализованный для множества локалей. У нашей команды были весьма специфические запросы, и поэтому мы не стали использовать существующие библиотеки для локализации.
Читать дальше →

Как дешево напечатать книгу в Linux

Reading time3 min
Views26K
Думаю, почти каждый сталкивался с проблемой печати больших pdf файлов. Недавно и мне пришлось напечатать мануал в 600 страниц. Так как документ целиком состоит из текста не очень то хотелось печатать все 300 листов а4. В поисках решения наткнулся на статью от rapkasta.

Вот так я и набрел на замечательный пакет psutils, вот только способ брошюрирования меня не обрадовал. Слишком много работы. А мне ленивому хочется автоматики, вдруг в дальнейшем пригодится.
Читать дальше →

Процесс тестирования мобильных приложений

Reading time4 min
Views139K
Тестирование – очень важный этап разработки мобильных приложений.

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

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

Поэтому в отделе тестирования у нас работает 8 человек (0,5 тестировщика на программиста), за его развитием и процессами следит выделенный тест-лид.

Под катом я расскажу как мы тестируем мобильные приложения.


Читать дальше →

Алгоритм seam carving для изменения размера изображения

Reading time7 min
Views30K
Seam carving это алгоритм для изменения размера картинки, сохраняющий важный контент и удаляющий менее значимый. Он был описан в статье S. Avidan & A. Shamir. Он дает лучший результат, чем обычное растягивание изображения ввиду того, что не меняет пропорций значимых элементов изображения. Две фотографии ниже демонстрируют работу алгоритма – исходное изображение имеет размер 332x480, в то время как модифицированное seam carving'ом 272x400.


В данной статье я опишу работу алгоритма используя псевдокод и код Matlab. Оригинал статьи, написанный мной на английском доступен тут, исходный код на гитхабе.
Читать дальше →

Скачиваем Youtube плейлист в формате mp3 одним bash-скриптом

Reading time2 min
Views35K
Так сложилось, что в данный момент мой рабочий ноутбук оснащен лишь 2GB оперативной памяти. В связи с этим возникла необходимость оптимизации браузера, т.к. при большом количестве открытых вкладок памяти становится недостаточно и используется swap-раздел, что ведет к тормозам.

В работе мне помогает музыка, обычно это открытый таб с плейлистом Youtube. Так вот этот таб в просессе работы съедает до 500MB (!) и даже больше (Google Chrome).

Такое положение дел вынудило написать bash-скрипт, который на входе получает ID плейлиста, на выходе – mp3 файлы, которые можно слушать в любимом плеере, например, в MOC:
MOC
Читать дальше →

Spatial hashing для самых маленьких

Reading time5 min
Views42K


Spatial hashing это простая техника, которая используется в базах данных, физических и графических движках, симуляциях частиц и вообще везде, где нужно быстро что-то найти. Если в кратце, то суть в том, что мы разбиваем пространство с объектами на ячейки и складываем в них объекты. Затем вместо поиска по значению очень быстро ищем по хэшу.

Предположим, что у вас есть несколько объектов и вам нужно узнать нет ли между ними столкновений. Простейшим решением будет посчитать расстояние от каждого объекта до всех остальных объектов. Однако, при таком подходе количество необходимых вычислений растёт слишком быстро. Если на десятке объектов приходится делать сотню проверок, то на сотне объектов выходит уже десяток тысяч проверок. Это и есть печально известная квадратичная сложность алгоритма.
Можно улучшить ситуацию, если...

Vesta Control Panel

Reading time3 min
Views74K

Полгода непрерывной работы. Более тысячи установок. Добавлено 95 тысяч новых строк. Удалено 84 тысячи. Было сделано 360 комитов. Вышла новая версия.
Я хочу рассказать о наиболее важных изменениях.
Читать дальше →

Нестандартный способ получить недоступную информацию на iOS

Reading time5 min
Views17K


По следам своего выступления на Positive Hack Days я хотел бы поделиться с вами результатами исследования демона configd на MACH-уровне в iOS 6. Как вы знаете, в iOS доступно не так много информации о состоянии подключения Wi-Fi. В общем-то, Public API не дает возможности узнать ничего, кроме SSID, BSSID и сетевых настроек адаптера. А режим шифрования? мощность сигнала? Под катом я расскажу, как узнать все это без применения Private API и Jailbreak.
Читать дальше →

Алгоритм Эллера для генерации лабиринтов

Reading time5 min
Views155K
Это топик-перевод статьи Eller's Algorithm. В ней рассказывается о способе программной генерации лабиринтов. Дальнейшее повествование идет от лица автора.

 __ __ __ __ __ __ __ __ __ __ __ __ __ __ __  
|__   |__       __ __|__   |   __|  |  |  |  |
|__   |__   |__|   __ __|   __ __      |     |
|        |  |  |     |  |__      |__|  |  |  |
|__|__|  |  |   __|   __|__   |   __|__|  |__|
|   __|  |     |__ __ __|  |  |__|  |     |  |
|  |  |  |  |__|  |__   |  |   __|__ __|  |  |
|  |__    __    __ __    __|  |   __   |  |  |
|  |  |  |  |      __|  |   __|  |  |__|  |  |
|  |     |     |__   |  |  |  |  |  |__    __|
|  |  |__|__|__ __|  |     |  |  |      __|  |
|__ __|  |  |  |__   |__|   __|     |   __ __|
|   __|  |   __|__      |__   |__|  |__    __|
|  |  |     |  |     |__|  |   __    __|   __|
|   __|  |__ __|__|      __|  |  |     |  |  |
|   __ __   |      __|__|  |__   |  |  |__|  |
|__ __ __|__ __|__ __ __ __ __|__|__|__ __ __|


Алгоритм Эллера позволяет создавать лабиринты, имеющие только один путь между двумя точками. Сам по себе алгоритм очень быстр и использует память эффективнее, чем другие популярные алгоритмы (такие как Prim и Kruskal), требуя памяти пропорционально числу строк. Это позволяет создавать лабиринты большого размера при ограниченных размерах памяти.

Читать дальше →

Настройка Travis-CI для iOS проектов с открытым кодом

Reading time4 min
Views5.6K
Непрерывная интеграция (continuous integration) — практика разработки, позволяющая добиться большей уверенности в стабильности и корректности работы любого проекта. Проекты с открытым кодом — не исключение.

Примерно два месяца назад, в апреле 2013 года комапания Sauce labs объявила о поддержке iOS / Mac для CI-сервера Travis. Сам сервис существует уже довольно давно, и пользуется довольно большой популярностью в open-source community благодаря поддержке большого количества языков и удобству использования. Cервис бесплатен для любого пользователя github и открытых репозиториев. На Хабре уже имеется пост о сервисе и его настройки для тестирования Ruby-проектов, поэтому в этой статье я хотел бы рассказать о более специфической стороне сервиса — настройке автоматической сборке билдов iOS проектов на Travis-CI. Основным фокусом этой статьи будет связка CocoaPods + Cedar + Travis CI, однако я постараюсь рассказать немного и о других связанных с темой вещах.

Итак, начнем.
Читать дальше →

Создаем Shazam на Java

Reading time6 min
Views42K


Пару недель назад, я наткнулся на эту статью How Shazam Works
Мне стало интересно, как же работают такие программы как Shazam… Что еще более важно, насколько тяжело написать что-либо похожее в Java?

О Shazam

Если кто-то не знает, Shazam это приложение с помощью которого вы можете анализировать/подбирать музыку. Установив ее на свой телефон, и поднеся микрофон к какому-либо источнику музыки на 20-30 секунд, приложение определит, что это за песня.

При первом использовании у меня возникло волшебное чувство. «Как оно это сделало!?» И даже сегодня, когда я уже пользовался им много раз, это чувство меня не покидает.
Разве не будет классно, если бы мы смогли написать что-то сами, что вызывало бы такие же чувства? Это и было моей целью в прошлый уикенд.
Читать дальше →

Вышел Laravel 4

Reading time2 min
Views14K
Состоялся долгожданный релиз четвертой версии замечательного фреймворка.
Также обновился официальный сайт.

Быстрая установка


Для установки Laravel, скачать копию репозитория с Github.
Далее, после установки Composer, запускаем composer install команду в корневой папке. Composer скачает и установит все зависимости.
Читать дальше →

Смешивание текстур ландшафта

Reading time3 min
Views91K


В данной статье я расскажу об алгоритме смешивания текстур, который позволяет привести внешний вид ландшафта ближе к естественному. Этот алгоритм легко может быть использован как в шейдерах 3D игр, так и в 2D играх.

Статья рассчитана на начинающих разработчиков игр.
Читать дальше →

Как бороться с низкокачественными Android приложениями

Reading time5 min
Views58K
Все согласны, что Google Play переполнен некачественными приложениями, но никто не хочет брать вину на себя — принято винить абстрактный Android или просто Google, который выпустил систему без строгих гайдланов, создал маркет без модерации и дал возможность производителям делать свои оболочки с разноцветными иконками и градиентами.

Но каждый день выходят новые приложения с дизайном из iOS, темами из 2.3, не адаптированные для планшетов и с размытыми картинками на HD-экранах. И в этом виноват не Google, а разработчики. Кто-то не пытается спорить, когда заказчик присылает макеты от iOS версии, кто-то пытается, но сдается. Кто-то разрабатывает приложение ради опыта, откладывая «неважное» на потом, и так оно и остается. Стартапы делают приложения «за день», а потом лихорадочно фиксят баги, создавая снежный ком, который уже никто не перепишет с нуля. Крупные социальные сети, имея деньги и время, каким-то образом умудряются выпускать ужасные клиенты…
Читать дальше →

Wiren Board — встраиваемый компьютер с Wi-Fi, GPRS, GPS, NFC и Ethernet из коробки

Reading time9 min
Views90K


update: Мы ещё живы и наконец-то открыли продажи!готовим первую партию к продаже конце сентября.
Новая версия стала куда лучше и выглядит теперь вот так:


Подробности в нашем блоге.
/update

TL;DR (Abstract)


Мы сделали маленький «одноплатный» встраиваемый компьютер с хорошим набором периферии, в основном беспроводной (GSM/GPRS, NFC, Wi-Fi, GPS, Ethernet, etc). Рабочее название — Wiren Board (от Wireless Enabled)

Предполагается, что использоваться он будет для всяческой автоматизации — то есть в качестве «мозга» для оборудования. Если вы хотите сделать умное устройство, не разрабатывая целиком собственное сложное железо, то это для вас. Впрочем, для DIY наш компьютер тоже весьма полезен, и об этом направлении мы не забыли при разработке. Если понадобится дополнить чем-то специфическим — функциональность можно расширять готовыми модулями. Что ещё приятно, стоимость компьютера мы планируем сделать всего около $100.

Первая версия уже готова, открыт предзаказ.

Что привело нас к разработке встраиваемого компьютера, через какие этапы мы прошли, и что в итоге получилось — читайте дальше.
Читать дальше

Сyto: cоздание редактора уровней, адаптация под iPhone и другие полезности

Reading time8 min
Views18K
Привет, Хабр! Мы продолжаем делиться своим практическим опытом разработки игры для iOS с нуля. В этом деле оказалось намного больше подводных камней, чем мы могли представить, когда начинали разработку. Срыв дедлайнов, противоестественные (на первый взгляд) требования издателей и Apple, кривоватые бесплатные движки… Вот только часть того, на что пришлось тратить свои время и силы.



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

Читать дальше →

Information

Rating
Does not participate
Location
Украина
Date of birth
Registered
Activity