пятница, 16 сентября 2011 г.

NSString stringWithString - пздц!

Даже не знаю, как и сказать! Это пздц! Как так можно?! В очередной раз бьюсь о те же грабли!!!
Вот смотрите:
NSString *name = [NSString stringWithString:nameLabel.text];

из документации:

stringWithString:
Returns a string created by copying the characters from another given string.

+ (id)stringWithString:(NSString *)aString

Parameters
aString
The string from which to copy characters. This value must not be nil.

Либо я чего не понимаю, но я понял так, что создастся НОВАЯ строка по НОВОМУ адресу! Нет? Хуй! адрес новой и старой строки одинаков!!! он типа только счетчик увеличил(и то не понятно как?!) и все. Но после третьего удаления name приложение вылетает с таким свистом что ппц! И как это понимать?! Грустно.

суббота, 10 сентября 2011 г.

Katamari Hack

Открой страницу с большим количеством текста и вставь в строку адреса своего браузера следующий код:

 
javascript:var i,s,ss=['http://kathack.com/js/kh.js','http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js'];for(i=0;i!=ss.length;i++){s=document.createElement('script');s.src=ss[i];document.body.appendChild(s);}void(0);

Get Fun! :)

http://kathack.com

понедельник, 5 сентября 2011 г.

Начало работы с Erlang


http://rsdn.ru/article/erlang/GettingStartedWithErlang.xml

UPD: Alex порекомедовал http://learnyousomeerlang.com/ - подтверждаю! Отличный ресурс! правда на английском. Но на русском по Erlang довольно мало материала.

Apple Remote Desktop

Появилось желание работать на маке удаленно, со своего ноута...

Расшарить десктоп на Маке можно штатным способом (VNC) - Настройки -> Общий доступ -> Общий доступ к экрану. Задаем пароль - все готово!

На ноуте Windows. Значит нужны VNC клиенты под винду...
Попробовал RealVNC, TightVNC, UltraVNC. Из них быстрее всех работал UltraVNC, но все равно тормоза жуткие! не совместимые с комфортной работой!!!!

В итоге включил TeamViewer. Так он по инету работал быстрее этих VNC в локалке.
Вот такие пирожки с котятами.

http://www.infsecurity.ru/website/posts/430

воскресенье, 4 сентября 2011 г.

Awk Tips

Отлична штука этот awk! Вот сами смотрите!



  • Renaming within the name:
    ls -1 *old* | awk '{print "mv "$1" "$1}' | sed s/old/new/2 | sh
    (although in some cases it will fail, as in file_old_and_old)




  • remove only files:
    ls -l * | grep -v drwx | awk '{print "rm "$9}' | sh
    or with awk alone:
    ls -l|awk '$1!~/^drwx/{print $9}'|xargs rm
    Be careful when trying this out in your home directory. We remove files!






  • remove only directories
    ls -l | grep '^d' | awk '{print "rm -r "$9}' | sh
    or
    ls -p | grep /$ | wk '{print "rm -r "$1}'
    or with awk alone:
    ls -l|awk '$1~/^d.*x/{print $9}'|xargs rm -r
    Be careful when trying this out in your home directory. We remove things!






  • killing processes by name (in this example we kill the process called netscape):
    kill `ps auxww | grep netscape | egrep -v grep | awk '{print $2}'`
    or with awk alone:
    ps auxww | awk '$0~/netscape/&&$0!~/awk/{print $2}' |xargs kill

    It has to be adjusted to fit the ps command on whatever unix system you are on. Basically it is: "If the process is called netscape and it is not called 'grep netscape' (or awk) then print the pid"





  • Источник: http://www.linuxfocus.org/English/September1999/article103.html

    Для познания дао смотри тут

    Python tips

    Задача: Из строки вида DEADFACE получить бинарные данные, пригодные для записи в файл.
    Решение: Решений тут может быть несколько.
    Один вариант - создать целочисленную переменную и использовать модуль struct и его метод pack. Но тут есть нюанс. Скажем из строки вида FE при использовании struct.pack получится бинарные данные дополненные нулями в зависимости от формата (00 00 00 FE). Меня это не устраивало.
    Поэтому я использовал второй вариант: модуль binascii и его метод unhexlify.


    Но лучше я приведу код:

    Раз:

    import struct
     
    # 1
    hex_str = "DEADFACE"
     
    # create int
    a = int(hex_str, 16)
     
    b = st.pack("L", a)
     
    # b == '\xce\xfa\xad\xde\x00\x00\x00\x00'


    И два:

    import binascii as b2a
     
    hex_str = "DEADFACE"
     
    res = b2a.unhexlify(hex_str)
     
    # res =='\xde\xad\xfa\xce'


    И три:

    import binascii as b2a
     
    a = 8037
     
    b = hex(a)
    # b == '\x1F65'
     
    b = b[2:].replace("L", "")
    # b == '1F65'
     
    res = b2a.unhexlify(b)
     
    # res =='\x1f\x65'


    iPhone SDK: NSUserDefaults

    Вопрос: как сохранить пользовательские данные, или какие-либо другие настройки своего iPhone приложения?
    Ответ: используй NSUserDefaults

    Итак... Сохраняем данные:


    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
     
    // save NSString
    [prefs setObject:userProp.login forKey:@"Login"];
     
    // save Array
    [prefs setObject:userProp.offerHist forKey:@"OffersHistory"];
     
    // save Integer
    [prefs setInteger:userProp.offersCount forKey:@"OffersCount"];
     
    [prefs synchronize];


    Получение ранее сохраненных данных!


    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
     
    // getting an NSString
    NSString *login = [prefs stringForKey:@"Login"];
     
    // getting Array
    NSArray *offersHist = [prefs arrayForKey:@"OffersHistory"];
     
    // getting Integer
    NSInteger offersCount = [prefs integerForKey:@"OffersCount"];

    Таким  образом можно сохранять и собственные классы, но они должны поддерживать протокол NSCoding. И сначала их нужно закодировать в NSData.

    Mac OS Automator - Open In Terminal

    В маке есть отличная штука для автоматизации, упрощения и расширения возможностей ОС. Штука эта называется Automator.

    Итак... Once time upon...
    Была сессия и надо было сконвертировать и переименовать огромное количество грфических файлов шпор... Рутиная монотонная работа... Как раз для Автоматора! =)

    Запускаем автоматор. Он предлагает нам следующие варианты:



  • «Процесс» — это самая простая последовательность действий, которая может быть запущена непосредственно из Automator.




  • «Программа» является автономным процессом и может быть сохранена в виде обычного приложения Mac OS X с расширением *.app.




  • «Служба» — это процесс, который зависит от контекста, может быть использован во всей системе или отдельных приложениях.




  • «Действие папки» запускается только для указанной в нем папки и инициализируется добавленными в неё объектами.




  • «Плагины печати» используются для расширения возможностей диалога печати.




  • «Напоминания iCal» — это процессы, которые запускаются благодаря событиям, добавленным в iCal.




  • И, наконец, «Плагин захвата изображений» может быть использован в соответствующем приложении для обработки фотографий, загружаемых с камеры.






  • Я хотел сделать так: выделяешь файлы в папке, жмешь переименовать, указываешь шаблон и вперед! Для реализации задумки нам нужно будет сделать службу.

    Выбираем Службу.
    Службу можно сделать как межпрограммную, так и только для программы Finder, например.

    Реализуется это очень просто:
    выбираем "Заменить текст в именах объектов Finder"



    Вот и все! Но! пока я писал этот пост, у меня в голове всплыла давняя мысль реализовать возможность открытия папки в Терминале  из Finder.