The Ghost Inside в Арктике, 25 февраля 2013, видео
Сегодня (уже вчера) снимал в Арктике группу The Ghost Inside из штатов. Удивительно, но микрофон фотика выдержал. Звук на сцене, конечно, совсем другой, но зато динамично получилось.
comment commentsPhuket Airport Schizophrenia
Вернулся из Тайланда. На обратном пути мне пришлось ждать 6 часов ночью в аэропорту Пхукета до начала регистрации на мой рейс. Я очень рассчитывал на ирландский паб в аэропорту, но, как оказалось, он был до 11 вечера. В результате в аэропорту было закрыто всё кроме регистраций на рейс. За эти 6 часов я изучил все 3 этажа аэропорта, наснимал немного видео и даже нашёл розетку, чтобы подзарядиться.
comment commentsPHP-скрипт для сборки всех видов в CouchDB
Написал перед новым годом маленький скриптик, проходится по всем базам в CouchDB и собирает все виды по очереди. Оставлю это здесь.
<?php
set_time_limit( 0 );
// all dbs
$ch = prepareCurlResource();
curl_setopt( $ch, CURLOPT_URL, 'http://localhost:5984/_all_dbs' );
$data = curl_exec( $ch );
$dbs = json_decode( $data );
foreach ( $dbs as $db ) {
// skip _users and _replicator
if ( substr( $db, 0, 1 ) == '_' )
continue;
// getting all databases
$chCC = prepareCurlResource();
curl_setopt( $chCC, CURLOPT_URL, 'http://localhost:5984/' . $db . '/_all_docs?startkey="_design/"&endkey="_design0"&include_docs=true' );
$data = json_decode( curl_exec( $chCC ) );
if ( false === empty( $data->rows ) ) {
foreach( $data->rows as $design ) {
// creating views of design
if ( false === empty( $design->doc->views ) ) {
foreach( $design->doc->views as $viewName => $tmp ) {
echo 'Creating view: ' . $db . '/' . $design->id . '/_view/' . $viewName . "\n";
$chCC = prepareCurlResource();
curl_setopt( $chCC, CURLOPT_URL, 'http://localhost:5984/' . $db . '/' . $design->id . '/_view/' . $viewName . '?limit=0' );
curl_exec( $chCC );
}
}
}
}
}
function prepareCurlResource() {
$ch = curl_init();
curl_setopt( $ch, CURLOPT_PORT, 5984 );
curl_setopt( $ch, CURLOPT_HEADER, false );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $ch, CURLOPT_HTTPHEADER, array( 'Content-type: application/json' ) );
return $ch;
}
comment
comments
Итоги года 2012
Год был безумный. Насыщенный. Со всеми вытекающими.
comment commentsПро экранирование URL'ов изображений с русскими именами в Objective-C
Начало начальство у нас вставлять в новости у нас на портале изображения, названные русскими именами, вроде Фото-Ресторана.jpg.
Картинки из новостей у нас показываются в приложении, соответственно по этим URL'ам они в приложение и тянутся.
Соответственно приходит в приложение URL уже закодированный, например:
http://allcafe.ru/s/pic/news/!_2012/2012_12/%D0%A0%D0%B5%D1%81%D1%82%D0%BE%D1%80%D0%B0%D0%BD-Graf-in-%D0%A1%D0%B0%D0%BD%D0%BA%D1%82-%D0%9F%D0%B5%D1%82%D0%B5%D1%80%D0%B1%D1%83%D1%80%D0%B3-%D0%B7%D0%B8%D0%BC%D0%BD%D1%8F%D1%8F-%D1%82%D0%B5%D1%80%D1%80%D0%B0%D1%81%D0%B0.jpg
В приложении используется класс AsynchronousUIImage, найденный мною около года назад в интернетах. Класс просто асинхронно загружает картинку с помощью NSURLConnection.
- (void)loadImageFromURL:(NSString *)anUrl {
anUrl = [anUrl stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:anUrl]
cachePolicy:NSURLRequestReturnCacheDataElseLoad
timeoutInterval:30.0
];
connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
}
Собственно, в stringByAddingPercentEscapesUsingEncoding оказался затык. Т.к. URL'ы приходят уже экранированными, то, похоже, происходило повторное экранирование и картинка просто не загружалась. Ну а если не прописан из протокола NSURLConnectionDelegate метод connection:didFailWithError: - то это чревато падением приложения, с чем я и столкнулся.
Итог ковыряний забавен, если есть URL'ы с кириллицей - то экранировать их надо или на сервере перед отправкой в клиент, или в клиенте. Если экранировать и там, и там - то не работает. Если нигде не экранировать - то тоже не работает :)
Благо я справился на серверной стороне ничего не сломав и избежав срочного обновления клиента. На Android, кстати, такой проблемы нет.
comment commentsЕсть Есть Есть в клубе DA:DA 14 декабря 2012, аудио
Записал в 3-й раз концерт Есть Есть Есть.
Презентовали альбом Сатана в отпуске.
Фото для обложки щёлкнула Даша.
Трэк-лист:
01. Интро
02. Гомер
03. День Победы
04. Бродский night, Святки skit
05. Святки
06. Плёнка
07. Капитошки
08. Журналистовцы
09. Уже
10. Поэма героика
11. Сатана в отпуске
12. Весна
13. Резюме
14. Лиссабон
15. Палитра
16. Утка-маляр
17. Осень
Скачать (mp3, 320 kbps, 230 mb): Narod | Rutracker
comment commentsОптимизация iOS-приложения для экрана iPhone 5
-
Для xib-файлов для View выставить Size: Freeform. Тогда интерфейс на всю высоту экрана растянется. Если надо всё кастомно - то можно выставить для вида размер для 3.5-дюймового экрана или 4-дюймового и программно нужный подставлять.
-
Самое главное - добавить стартовую картинку для 4-дюймового экрана. Без неё апп почему-то думает, что экран маленький. И да, если раньше никакой стартовой картинки не использовалось - теперь походу придётся.
Как оно со Storyboard пока не знаю. И ещё мелкая полезность - если в коде надо определить - широкий ли экран или обычный, то можно а prefix.pch задефайнить:
#define IS_WIDESCREEN ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )
и проверять в коде:
if ( IS_WIDESCREEN == YES ) {
// юзать интерфейс для 4 дюймов
} else {
// юзать интерфейс для 3.5 дюймов
}
comment
comments