26 октября 2010 г.

github

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

20 октября 2010 г.

Разворачиваем tomcat web-приложения в Linux

Процедура публикации .war файла (tomcat 6)

1. Остановить tomcat
  1. $ sudo /etc/init.d/tomcat6 stop


2. Если приложение было установленно и вы хотите его обновить, удаляем старую версию
  1. $ sudo rm -r $TOMCAT_HOME/webapps/foo


3. Копируем .war файл в папку приложений TOMCAT_HOME/webapps/

4. Запускаем tomcat
  1. $ sudo /etc/init.d/tomcat6 start


TOMCAT_HOME - по умолчанию /var/lib/tomcat6/

19 октября 2010 г.

Upgrade Ubuntu из консоли

1. Устанавливаем пакет update-manager-core, если он еще не стоит:
  1. $ sudo apt-get install update-manager-core


2. Редактируем файл /etc/update-manager/release-upgrades, устанавливаем Prompt=normal

3. Запускаем утилиту апгрейда системы
  1. $ sudo do-release-upgrade


4. Следуем инструкциям

16 октября 2010 г.

Органайзер Xcode говорит "Could not support development"

Сегодня при подключении своего iPhone и попытки скомпилировать и установить на него свое приложение Xcode начал ругаться на то, что к нему не подключено ни одно устройство. Органайзер Xcode видел устройство, но говорил, что оно не может использоваться для разработки (Could not support development). Хотя iTunes синхронизировался хорошо.

Все сертификаты разработчика внешне были в порядке, но для надежности обновил все сертификаты. Проблеммы не решило.

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

15 октября 2010 г.

Локализация строк в Xcode

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

С помощью Xcode можно локализировать:
- статический текст в коде программы
- ресурсы (иконки, рисунки, звуковые файлы, nib-файлы)
- вывод даты/времени

В этой заметке я расскажу о локализации статического текста в коде программы.

Локализация текста в коде программы необходима если, например, в коде программы задается текст который потом показывается пользователю (это может быть название кнопок, текст отчета и т.п.). Перед локализацией необходимо интернационализировать код программы. Для этого любой текст который показывается пользователю необходимо обвернуть макросом NSLocalizedString. Если раньше вы показывали диалог таким способом:

  1. UIAlertView *tmp = [[UIAlertView alloc] initWithTitle:@"Warning" message:@"Your e-mail application not configured" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
  2. [tmp show];
  3. [tmp release];


то теперь показываем так:

  1. UIAlertView *tmp = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Warning", @"") message:NSLocalizedString(@"Your e-mail application not configured", @"") delegate:nil cancelButtonTitle:NSLocalizedString(@"OK", @"") otherButtonTitles:nil];
  2. [tmp show];
  3. [tmp release];


Макрос NSLocalizedString вызывает метод localizedStringForKey:value:table: обьекта NSBundle приложения, которая возвращает локализированную строку.

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

  1. $ genstrings ./*.m


В результате в той же папке будет находиться файл Localizable.strings который и добавляем в проект (кодировку файла указываем UTF-16).



Теперь осталось локализировать этот файл на нужный нам язык. Для этого открываем свойства добавленного в проект файла Localizable.strings.



На вкладке "General" нажимаем кнопку "Маке File Localizable"



Переходим обратно на вкладку "General" и там добавляем локализацию



При этом в проекте создается папка с локализацией для этого языка и в нее помещаются файл Localizable.strings который нужно перевести на указанный язык. В проекте это выглядит так:



Файл Localizable.strings представляет собой пары "ключ" = "значение", где ключом выступает параметр переданный в макрос NSLocalizedString а значением - локализированная строка

  1. "Done" = "Готово";


См. также:
1. Локализация даты/времени

11 октября 2010 г.

♠ Краплёная колода: Угадай мелодию: как работает Shazam?

♠ Краплёная колода: Угадай мелодию: как работает Shazam?: "Технологии способны удивлять. Помню, как мне показали распознавание музыки на айфоне. Про Shazam тогда ещё ничего не знал, впечатления были на уровне американского wow-эффекта. А на днях набрёл на материал, где доступно и понятно рассказано о таинстве фокуса. Есть подозрение, что сеанс разоблачения будет интересен и вам, уважаемые читатели..."

5 октября 2010 г.

Добавление изображений в iPhone Simulator

Если необходимо добавить в iPhone Simulator несколько изображений, то этот способ вам подойдет.
Открываем iPhone Simulator и перетаскиваем в него изображение из Finder. Это изображение откроется в приложении Mobile Safari на iPhone Simulator. Теперь просто кликаем на нем и удерживаем кнопку мыши нажатой до появления вплывающего меню (имитируем долгий тап на изображении).


Теперь нажимаем на "Save Image" и изображение попадает в Фотоальбом.

Если нужно добавить большое кол-во изображений или создавать в симуляторе фотоальбомы, для iPhone Simulator версий 3.х есть довольно простое решение: в папку ~/Library/Application Support/iPhone Simulator/4.1/Media/DCIM/100APPLE поместить два изображения.
первое IMG_хххх.JPG - изображение которое мы помещаем в Фотоальбом симулятора в формате jpeg
второе - IMG_хххх.THM - привью первого изображения в формате jpeg размером 96x96
Скрипт на Python который добавляет изображения в Фотоальбом iPhone Simulator-а.

Для iPhone Simulator версий 4.х нужно дополнительно править sqlite базы.

Так-же можно написать iPhone приложение которое будет в себе как ресурс содержать изображения и в цикле будет добавлять в фотоальбом изображения.

2 октября 2010 г.

Добавление изображений в Фотоальбом

Этот пост посвящен единственной функции из фраемворка UIKit, а именно UIImageWriteToSavedPhotosAlbum. В параметры функции передается изображение класса UIImage, а так-же функция-селектор которая вызовется после добавления изображения в Фотоальбом, либо при возникновении ощибки добавления.

Скачать пример.