Arm1.ru

The Ghost Inside в Арктике, 25 февраля 2013, видео

Сегодня (уже вчера) снимал в Арктике группу The Ghost Inside из штатов. Удивительно, но микрофон фотика выдержал. Звук на сцене, конечно, совсем другой, но зато динамично получилось.

comment comments

Phuket Airport Schizophrenia

Вернулся из Тайланда. На обратном пути мне пришлось ждать 6 часов ночью в аэропорту Пхукета до начала регистрации на мой рейс. Я очень рассчитывал на ирландский паб в аэропорту, но, как оказалось, он был до 11 вечера. В результате в аэропорту было закрыто всё кроме регистраций на рейс. За эти 6 часов я изучил все 3 этажа аэропорта, наснимал немного видео и даже нашёл розетку, чтобы подзарядиться.

comment comments

PHP-скрипт для сборки всех видов в 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, аудио

Есть Есть Есть в клубе DA:DA 12 декабря 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

  1. Для xib-файлов для View выставить Size: Freeform. Тогда интерфейс на всю высоту экрана растянется. Если надо всё кастомно - то можно выставить для вида размер для 3.5-дюймового экрана или 4-дюймового и программно нужный подставлять.
    Оптимизация ios-приложения для экрана iPhone 5
  2. Самое главное - добавить стартовую картинку для 4-дюймового экрана. Без неё апп почему-то думает, что экран маленький. И да, если раньше никакой стартовой картинки не использовалось - теперь походу придётся.
    Оптимизация ios-приложения для экрана iPhone 5

Как оно со 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