суббота, 31 марта 2012 г.

Еще раз о работе с памятью в Obj-C


Дело обстоит так:

когда создаешь получаешь объект статическим методом вроде stringWithString, то созданный объект попадает в autorelease pool и его счетчик ссылок обнуляется, когда уничтожается этот пул. Однако система может и сама заретайнить некоторые объекты из пула, когда ей не хватает памяти.

Общее правило таково:

Когда ты создаешь получаешь объект методами, в названии которых есть слова alloc, copy, new и retain, то ТЫ СТАНОВИШЬСЯ ВЛАДЕЛЬЦЕМ ОБЪЕКТА И ТЫ ОТВЕЧАЕШЬ ЗА НЕГО И СВОЕВРЕМЕННЫЙ release. Во всех других случаях, ты не являешься владельцем объекта и не вправе контролировать его retainCount - т.е. делать release.

Хочу заметить, что на один alloc, copy, retain должен приходиться один release! То есть не стоит делать несколько раз release, если retain ты сделал всего один раз. ;)

пятница, 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'