?

Log in

ещё о [entries|archive|friends|userinfo]
Валентин Сильванский

[ website | аккорды АукцЫона ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

apache 2 limit speed [Dec. 4th, 2014|02:51 pm]
Валентин Сильванский
Надо было ограничить скорость отдачи видео с localhost, погуглил, нашёл mod_ratelimit. Многие рекомендуют более навороченные модули, но мне хватило и этого.

LoadModule ratelimit_module libexec/apache2/mod_ratelimit.so

<IfModule ratelimit_module>
<Location />
    SetOutputFilter RATE_LIMIT
    SetEnv rate-limit 200 
</Location>
</IfModule>
Здесь я для всего ограничил скорость до 200 КБ/с. Првоерил:
~ wget http://local.myhost.com/video.mp4
--2014-12-04 14:07:20--  http://local.myhost.com/video.mp4
Resolving local.myhost.com... 127.0.0.1
Connecting to local.myhost.com|127.0.0.1|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 5479259 (5.2M) [video/mp4]
Saving to: 'video.mp4'

video.mp4                              100%[==============================================================================================>]   5.22M   204KB/s   in 27s

2014-12-04 14:07:47 (200 KB/s) - 'video.mp4' saved [5479259/5479259]
LinkLeave a comment

OS X HDD eject [Jul. 17th, 2014|09:16 pm]
Валентин Сильванский
Макось не даёт извлечь внешний хард и не говорит почему?

sudo lsof /Volumes/MyHDDName

И смотрим, какой процесс мешает. kill в помощь.
LinkLeave a comment

FLT_EPSILON not found [Feb. 25th, 2014|04:24 pm]
Валентин Сильванский
[Current Music |Electric Light Orchestra - From The Sun To The World (Boogie #1) | Powered by Last.fm]

Наткнулись на интересный баг при сборке под iPhone 5S (arm64): в некоторых местах макрос FLT_EPSILON упорно не находился clang-ом. Начал рисёрчить...

Сначала долго не мог воспроизвести в демо-проекте. Потом один раз удалось - но не надолго: второй билд прошёл успешно. Клин+билд - тоже успешно. Что за ерунда?

Копнул глубже. Начал изучать опции clang при сборке и увидел не знакомые мне флаги:
-fmodules
и
-fmodules-cache-path=~/Library/Developer/Xcode/DerivedData/ModuleCache

Хм! Так ведь это новые экспериментальные опции clang-а! При препроцессинге исходника теперь не подставляется полностью хедер, а генерируется инклюд. К примеру, имеем код:

#include <float.h>
#import <ImageIO/ImageIO.h>

После препроцессинга получаем:

@import Darwin.C.float;
@import ImageIO;


Обратим внимание: если не импортить ImageIO.h, то всё будет работать. Но если импортить сразу сишный и обж-сишные хедеры, то получаем странные сайд-эффекты...

Вывод: если сталкиваетесь с "отсутствием" FLT_EPSILON или чем-то подобным, проверьте, использует ли Ваш проект модули? Если да, то отключите их. Хотя бы до выхода из статуса экспериментальной фичи. К сожалению, для новых проектов Xcode 5 их включает по умолчанию. Но в Build Settings можно без проблем выключить.

Накдиал демо-проект: два таргета, один с модулями, другой - без. Проблему невоспроизведения при повторной сборке решил pre-build скриптом, чистящим кеш модулей.
LinkLeave a comment

10 малоизвестных возможностей Objective-C [Jan. 29th, 2014|11:37 am]
Валентин Сильванский
Дописал статейку

http://habrahabr.ru/company/mailru/blog/210672/
LinkLeave a comment

NSManagedObject + ivars [Dec. 24th, 2013|08:39 pm]
Валентин Сильванский
Не добавляйте новые ivar-ы к наследникам NSManagedObject. Иначе можете потратить полдня жизни на отладку мистического.
LinkLeave a comment

OS X + external HDD + torrents [Nov. 19th, 2013|01:24 pm]
Валентин Сильванский
[Current Music |Alexander Markov - Capriccio VI in Sol minor | Powered by Last.fm]

При скачивании торрентов на внешний HDD в OS X обнаружилось, что uTorrent не может качать на скорости выше 10 Кб/с. Выяснилось, что проблема в настройках кеширования записи. Но! Как я ни крутил настройки кеша (которые, кстати говоря, доступны только через веб-интерфейс), улучшений не было.

Вопрос: что такого умеет Transmission, если он качает реально быстро? Умные настройки кеширования? Ещё что-то?
LinkLeave a comment

0xFF day [Sep. 13th, 2013|11:38 am]
Валентин Сильванский
Пост на хабре про день программиста.
http://habrahabr.ru/company/mailru/blog/193608/

LinkLeave a comment

NSTableView reloadData [Sep. 3rd, 2013|04:20 pm]
Валентин Сильванский
Всем известно, что метод reloadData у NSTableView асинхронный. То есть, после его вызова в бэкграунде начинается перезагрузка данных, а сам метод возвращает управление немедленно.

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


- (void)reloadTable
{
    [self.tableView reloadData];
    dispatch_async(dispatch_get_current_queue(), ^{
        [self tableReloaded];
    });
}


Почему так? Метод reloadData начинает свою асинхронную работу в текущей очереди, как показывает дебаггер. А мы ставим в конец очереди наш блок.

Стоит ли полагаться на такое поведение? Пока это работает, но внутренняя реализация reloadData может поменяться уже в следующей версии SDK, к примеру, она может разбивать перезагрузку на части и каждую часть запускать только по окончанию предыдущей. Разумеется, нельзя сказать наверняка. Но пока это работает.

За исследования спасибо Саше Чёрному.

UPD: Провёл более подробные исследования. После вызова reloadData, таблица вызывает _tileAndRedisplayAll, который вызывает setNeedsDisplay: и _setTrackingAreasDirty:, а setNeedsDisplay:, разумеется, ставит редисплей в main queue. Так оно всё и работает. Единственный метод data source, который вызывается сразу, это numberOfRowsInTableView:, остальное вызывается по мере надобности. То есть, tableView:viewForTableColumn:row: будет вызыван из такой цепочки: layoutSubtreeIfNeeded -> layout -> updateVisibleRowViews -> ... -> _addViewToRowView:atColumn:row:.

Собственно, это можно считать доказательством вышеутверждённого.

UPD 2: Немного не связно написал первый UPD. Надо будет расписать всё подробно.
LinkLeave a comment

scrambls [Aug. 15th, 2013|10:39 am]
Валентин Сильванский
[scrambls}dfeJD402AMc јОіеѕЫјЏїЏјФїбїРїн јД ѕУјаѕкїицЏ їпјТ ѕБѕСіЯєдјмїЯ ѕЫѕніЮіФјФіО іЏїЭїкѕоѕХ ѕЦѕФїеѕЄѕЪїгіЗѕОїАјЉ јЪіЯіріЃїЉ{]
LinkLeave a comment

/etc/hosts [Aug. 9th, 2013|05:19 pm]
Валентин Сильванский
Если что-то не коннектится - проверь сперва /etc/hosts, а уж потом уходи на полдня в отладку пакетов.
LinkLeave a comment

navigation
[ viewing | most recent entries ]
[ go | earlier ]