6 августа 2012 г.

Создание пользователя Samba в Ubuntu

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

В данный момент заканчиваю приложение для конвертирования видео для iOS устройств под OS X и тут будет о чем написать.

Но данная статья не о том, сегодня так случилось, что пришлось переустанавливать систему на "серверной" машине, а значит и поднимать с нуля множество сервисов. В том числе и демона самбы. И на просторах интернета нашел замечательную своей простотой статью о том как добавлять пользователей. Я с настройкой самбы сталкиваюсь очень редко, раз в года 3-4, поэтому держать такую информацию в голове я считаю бессмысленно. Но припоминается, что в предыдущий раз я создавал реальных пользователей, а потом к ним привязывал пользователей самбы. Тут все проще, на одного реального пользователя можно "навесить" несколько пользователей самбы. И все делается очень просто.

Создаем пользователя самбы и задаем ему пароль:
$ sudo smbpasswd -a <sambausername>

Редактируем (или если нет - создаем) файл /etc/samba/smbusers, который имеет вид <ubuntuusername> = “<sambausername>”, т.е. задает соответствие пользователя самбы и пользователя системы.

После всех манипуляций перегружаем демона самбы:
$ sudo /etc/init.d/smbd restart

6 марта 2012 г.

Перехват двойного тапа у UIWebView

В классе, который будет обрабатывать двойной тап по UIWebView регистрируем обработчик двойного тапа, если это UIViewController то, например, в методе viewDidLoad:
- (void)viewDidLoad
{
    UITapGestureRecognizer *doubleFingerTap = [[UITapGestureRecognizer alloc]
                                                initWithTarget:self action:@selector(handleDoubleTapGesture:)];
    doubleFingerTap.numberOfTapsRequired = 2;
    doubleFingerTap.delegate = self;
    [self.webView addGestureRecognizer:doubleFingerTap];
    [doubleFingerTap release];
}

и
#pragma mark Gesture recognizer delegate

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
{
    return YES;
}

так-же и сам метод, который будет вызываться при двойном тапе:
- (void) handleDoubleTapGesture:(UITapGestureRecognizer *) gestureRecognizer
{
    if (gestureRecognizer.state == UIGestureRecognizerStateEnded)
 {
...
 }
}

Ну и на последок, в *.h-файл нашего класса, добавляем описание поддержки протокола
<UIGestureRecognizerDelegate>

1 ноября 2011 г.

Перенос базы MySQL c одного сервера на другой

Пост немного оффтоп, да и в поисковике довольно быстро решение ищется, но сегодня решил опубликовать, что было "под рукой". Допустим к каждому серверу есть доступ к консоли.

На первом сервере делаем дамп базы
$ mysqldump -u[логин] -p[пароль] [базаданных] > mybase.sql

переписываем этот дамп на второй сервер, и делаем экспорт:
$ mysql -u[логин] -p[пароль] [базаданных] < mybase.sql

1 октября 2011 г.

UIGestureRecognizer перехват одиночного касания и двойного на одном UIView

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

В этом случае нужно запретить в UIGestureRecognizer одиночного тапа посылку события при двойном тапе. Делается просто методом - (void)requireGestureRecognizerToFail:(UIGestureRecognizer *)otherGestureRecognizer.

Пример:
        UIGestureRecognizer *doubleTapGestureRecognizer = [[UIGestureRecognizer alloc]
                                initWithTarget:self action:@selector(handleDoubleTap:)];
        doubleTapGestureRecognizer.numberOfTapsRequired = 2;
        [self addGestureRecognizer:doubleTapGestureRecognizer];

        UIGestureRecognizer *singleTapGestureRecognizer = [[UIGestureRecognizer alloc]
                                                              initWithTarget:self action:@selector(handleSingleTap:)];
        singleTapGestureRecognizer.numberOfTapsRequired = 1;
        [singleTapGestureRecognizer requireGestureRecognizerToFail:doubleTapGestureRecognizer];
        [self addGestureRecognizer:singleTapGestureRecognizer];

8 сентября 2011 г.

Отключение ARC в xCode 4.2

Нужно всего лишь в качестве компилятора в свойствах проекта выбрать "LLVM GCC 4.2" вместо установленного по умолчанию "Apple LLVM compiler 3.0".



PS: По совету твиттер пользователя @iLeNsTR можно обойтись флагами компилятора:

17 августа 2011 г.

Обработка файлов: групповая замена

Довольно часто поражаюсь, как все в консоли бывает просто реализовать. Вот сегодня мне понадобилось обработать довольно много html, и заменить в них символ "®" на его html-код "&amp#174;", внезапно консоль пришла на помощь):
$ (find . -name *html) | xargs sed -i "s/®/\&#174;/g"

14 июля 2011 г.

Конвертирование plist в бинарный формат (bplist) и обратно в текстовый

Да, мне кажется, что задача бессмысленна, так как методы чтения plist-ов ([NSDictionary dictionaryWithContentsOfFile:(NSString *)path]) одинаково хорошо понимают, что plist в бинарном формате, что в текстовом. Но все ж возникла задача отдать на редактирование plist третьей стороне для редактирования в текстовом редакторе, а для этого пришлось сконвертировать plist в текстовый формат. Итак, в терминале выполняем команду:
$ plutil -convert xml1 ./myBinaryPlist.plist 
и назад из текстового в бинарный:
$ plutil -convert binary1 ./myTextPlist.plist