How to extend existing method

With blocks it’s more easy if you need extend your method. But if you will need extend some method of another class, not yours, and you will not be able to get the sources then this solution for you. (And if you will not be able or does not have any reason for creating a subclass)

1. You need create a category of class

2. import runtime in implementation file (.m)

1
#import

3. implement your method inside category, for example :

1
2
3
4
5
6
7
8
9
- (void) extend_method {

// your code

//  here will be performed the original method
    [self extend_method];
   
// your code
}

It looks like this method has recursive calls itself, but it’s not true. Look next step

4. add method for replace (you can use +initialize or +load)

1
2
3
4
5
+ (void) initialize {
    Method original = class_getInstanceMethod(self, @selector(method));
    Method replacement = class_getInstanceMethod(self, @selector(extend_method));
    method_exchangeImplementations(original, replacement);
}

Done!

Setup Python, MySQL, MySQL-python and SVN on MAC OS X 10.6

Mac Os X + Python 2.6.1+ PIL + apache2.2 +mod_python + MySQL + MySQLdb +php5+ phpMyAdmin + SVN server +WebSVN

OS: Mac OS X 10.6.1 Snow Leopard
XCode:The latest Xcode Tools
Python: Python 2.6.1 64-bit (Snow Leopard default)

Projects will be located in ~/Sites, so change permissions:
add read permission for everyone on ~/Sites

Setup django

1. mkdir ~/sources
2. cd ~/sources
3. svn co http://code.djangoproject.com/svn/django/trunk/ django
4. cd django
5. sudo python setup.py install

Apache:
We will use default 10.6 apache2.2

Setup mod_python:
1. mkdir ~/sources/mod_python
2. cd ~/sources/mod_python
3. svn co http://svn.apache.org/repos/asf/quetzalcoatl/mod_python/trunk mod_python-trunk
4. cd mod_python-trunk
5. ./configure –with-apxs=/usr/sbin/apxs
6. make
7. sudo make install

Continue reading

Python and PyQt4 part 1

Меня уже довольно долгое время интересует программирование на python. В том числе и кроссплатформенное программирование под GUI. Для этих целей использовал PyQt4, который очень легко было использовать т.к. под рукой был qt4 и все его возможности. Первые помощьники это Qt Designer в котором можно быстро набросать интерфейс и Qt Assistant в котором можно прочитать много полезного для работы с объектами GUI.

Про IDE можно спорить долго, но я выбрал Eric IDE, он написан на Python+PyQt4 , что мне очень понравилось, но в нем есть свои нюансы и баги :)

Continue reading

Тикеты по всем проектам в Trac`e

Выкладываю свой Macros для трака. Это переписанный макрос, который отображал тикеты по выбранному проекту в виде календаря.

На данный момент этот макрос выводит в список все активные тикеты по всем проектам, зашедшего в систему человека, и сортирует их по важности. В этом макросе есть возможность отследить время закрытия/создание/изменение тикетов по дате и по определенному человеку.

Код макроса:
Continue reading

Делаем RSS ленту всех проектов Trac`a

Написал небольшой скрипт на python. Для получения RSS ленты по всем проектам trac системы, что иногда очень полезно. Это оценил мой менеджер проектов как удобное средство. Вот привожу на вольный суд.

Чтоб получить ленту пишем http://192.168.0.129/index.py?user= md5( хеш пароля)
Тоесть уже захешированый пароль еще в md5
Код:
Continue reading

Пишем свою статистику посещения на Python

И так, продолжаем играться с питоном и попробуем написать статистику посещений для сайта. Для реализации воспользуемся связкой python и sqlite.
Я постараюсь рассказать про мой подход к написанию статистики для одного своего сайта написанного на питоне.

Создаем базу для статистики с одной единственной таблицей.
setup.py

1
2
3
4
5
6
7
8
9
10
11
# -*- coding: utf-8 -*-

import sqlite3

connection = sqlite3.connect('statistics.db')
cursor = connection.cursor()

cursor.execute('CREATE TABLE daily (id INTEGER PRIMARY KEY, time, uri, referer, user_agent, ip)')

cursor.close()
connection.close()

Continue reading

Web Admin Permissions for Trac 0.10

Плагин для управления правами доступа пользователей (Web Admin Permissions)  WebAdminPerm совмести с Trac 0.10. Легок в установке и настройке.

В версии трака Trac 0.11dev это реализовано, но так-как это dev версия она не стабильна, а этот плагин полноценно заменяет возможности управления правами.

Установив плагин нужно указать в trac.ini в секци [components] следующую строку:
webadminperm.perm.permissionadminpage = enabled
Continue reading