24 июня 2010 г.

Улучшаем NSLog()

Большим плюсом NSLog'а является возможность следить за состоянием программы без использования точек останова. Но не всегда информации предоставляемой этой функцией достаточно. Стандартный вывод NSLog() такой:

<дата> <время> <имя_приложения> [<pid>]  то, что выдаст NSLog

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

Вариант для решения данной задачи и является нижеприведенный класс.

23 июня 2010 г.

Singleton в Objective-c

Для создания синглтона Cocoa Fundamentals Guide предлагает:
  1. Создать статическую переменную типа синглтона и проинициализировать ее nil. 
  2. В методе-фабрике класса создать экземпляр класса и присвоить его статической переменной. 
  3. Переопределить метод allocWithZone: чтобы удостоверится что никто кроме класса - фабрики не сможет создать экземпляр класса. 
  4. Реализовать методы copyWithZone:, release, retain, retainCount и autorelease (последние четыре не нужны при использования сборщика мусора). 

22 июня 2010 г.

Использование UIView в Cocos2D

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

Класс CCUIViewWrapper, состоящий из 100 строк кода позволяет заворачивать в себя стандартные UIKit'овские элементы и работать с ними как с обычными слоями. Например, все что нужно для вызова окна отправки почты:

MFMailComposeViewController *picker = [MFMailComposeViewController alloc];
[picker init];
picker.mailComposeDelegate = self;
// инициализация e-mail тут
CCUIViewWrapper *wrapper = [CCUIViewWrapper wrapperForUIView:picker.view];
[self addChild:wrapper];

1 марта 2010 г.

Сервисы on-line картографи

map api logo

Среди онлайн картографических сервисов наиболее известным и широко распространенным является картографический сервис от Google. Пользователям из рунета так же известен сервис от Яндекс. Оба они имеют программный интерфейс для JavaScript (Google maps API и Yandex maps API), так что когда при построении онлайн приложения или сервиса возникает необходимость в визуализации пространственных данных выбор разработчиков чаще всего падает на них.

Ниже приведены примеры еще нескольких картографических сервисов, которые могут быть полезны как разработчикам так и пользователям.

Так, после выпуска Google maps, ребята из Microsoft нашли в нем фатальный недостаток, и сделали свой картографический сервис Live maps, который после выхода поисковика Bing был быстренько переименован в Bing map, и выпустили API к нему.

Yahoo тоже пыталась оторвать свою часть рынка онлайн картографии, предоставив API к своим картам Yahoo! maps.

26 февраля 2010 г.

Ускоряем Python код.

fun python icon

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

Так как можно увеличить скорость исполнения программы не ухудшая простоту и ясность кода? Есть несколько способов.

Оговорюсь сразу что описанные способы не являются панацеей, и могут не подойти для применения во многих случаях. Если вам кажется что программа интерпретируется недостаточно быстро, то до применения любого из описаных способов необходимо выяснить узкие места с помощью профайлера. Благо в Python (>2.4) уже есть встроенные средства профилирования (cProfile, profile, hotshot).