python

Posted by admin

Зараз здоров'я в нас вистачає і ми можемо не задумуватися про наші очі, про нашу спину, про наші руки... та пройде 10-20 років і все зміниться. У всіх є професійні хвороби, нажаль і програмістів не оминула така участь.

Почавши задумуватися над цими питаннями прийшов до висновку, що головна наша проблема в захопленні. Ми так захоплюємося що забуваємо про час. Вже в нас будуть боліти очі, а ми все одно думаємо, що ще годинку попрацюємо і все. А потім ще годинку і так поки за вікном не буде підійматися ранкове сонце.

Я себе не можу змусити відпочивати (, тому написав скриптик на пітоні, який висить в кроні і з частотою в одну годину на 10 хвилин робить екран чорним і блокує всі клавіши, щоб прожка вимикалась лише перезавантаженням. Хочеш не хочеш, а відпочивати змушує.

Якщо ви не програміст на Пітоні, то з цієї папки можна дістати і скрипт і конфіг і екзешник (якщо немає пітону) - http://bitbucket.org/presidentua/web-alarm/src/0b350733d9e1/save_eye/

Якщо ж ви Пітон-програміст і маєте час, то пропоную вам іспит - не дивлячись на мою прогу напишіть аналог за таким ТЗ: - при запуску робити чорний екран - ховати мишку - блокувати всі клавіши - блокувати Таск Манаджер - нормально виконуватися при запуску через Task Scheduler (!!! тут будуть складності в нових версіях Віндовса).

Бережіть себе!

PS: Рішення цієї задачки дивіться нижче в тексті.

Continue reading...

Simple Money Manager

22 Jul 2010
Posted by admin

Пам'ять з кожним роков все гірше і гірше, і це змушує використовувати сторонні тулзи. Але так важко чомусь знайти простенькі утиліти які б виконували лише одну функцію (. Ось мені було потрібно записувати скільки в мене грошей, порившись в інеті було знайдено кучу систем які б підійшли, але там крім потрібного функціоналу ще куча непотребу. Тож згадавши слова "Хоч щось зробити добре - зроби сам" - включив Пітон-редактор і вже за годинку був готовий новий сервіс: http://usd.tutamc.com

Відео про нього:

Ісходники на бітбакеті - http://bitbucket.org/presidentua/web-alarm/src/tip/usd/

Якщо зустрінете баги - то пишіть.

ПС: по безпеці... там не по правилах зроблено видалення з історії. Бо ж треба щоб видалення було лише ПОСТом, але зараз робиться через Гет. Але оскільки там в якості ідентифікатора не порядковий номер, то зловмиснику неможливо цією багою скористатися.

огляд TornadoWeb

22 May 2010
Posted by admin

Невеличкий ознайомчий підкаст про Tornado записаний без підготовки за обідню перерву. Краще як завжди дивитися на самому сайті Вімео в HD-форматі.

About TornadoWeb from presidentua on Vimeo.

Posted by admin

Хоча сьогодні 1 квітня, але цей пост не жартівливий. Чесне слово.

Півроку назад я спробував юзати базу даних Redis і написав на ній простенький блог - http://tutamc.com/node/201. По тих тестах я бачив що Redis швидка база, але так на практиці ніразу й не доводилося її заюзати.

Та тут мене як фрілансера знайшов один замовник і за "їжу" я написав скриптик, що використовував MySQL. Цей скрипт повинен був брати дані з різних сайтів і заносити їх в базу. Скрипт вийшов на декілька десятків рядків і в тестах нормально себе зарекомендував. Але на продакшин сервері я побачив таку сумну статистику:

MYSQL: count SQL query - 125984, time - 14606.3

Хоча запити були й прості, але через те що їх було більше 100 тисяч скрипт працював як бачимо 4 години. Спочатку думав над оптимізацією всієї роботи, та щось мені ліньки стало думати. І я просто заюзав Redis - змінивши в скрипті декілька рядків отримав таку стату:

REDIS: query - 125984, time - 109.3

Redis працював більше ніж в 100 раз швидше! При цьому не грузив проц навіть на 1 відсоток, і займав в оперативі лишень 30 Мб. Я просто в шоці! Гадав прискорення буде хай в 5 чи 10 раз, але не в 100. До того ж Redis запущений під Віндою і він там ще не оптимально працює, гадаю під Лінохом швидкість була б ще швидша.

Тож якщо в вас якийсь високонавантажений проект, то придивіться до Redis'а - http://code.google.com/p/redis/ 

PS: зборки Redis під Windows знаходяться тут - http://code.google.com/p/servicestack/wiki/RedisWindowsDownload

Posted by admin

Ви напевно знаєте такий тип змінних як static, які містяться в функціях і їхнє значення зберігається між викликами функцій. Якщо згадувати пенсіонера С, то приклад буде такий:

function example1(void) {
   static int A = 1;
   A++;
   print('A = '+A);
}
example1();
>> A = 2
example1();
>> A = 3
example1();
>> A = 4

Думаю цей код працювати не буде через моє незнання С, але суть показує. І повертаючись до мого любимого Python'а - в ньому таких статичних методів в функціях немає, і замість того треба юзати класи:

class S(object):
    a = 1
def example2():
    S.a += 1
    print "a = "%(S.a)
example2()
>> a = 2
example2()
>> a = 3
example2()
>> a = 4

Я постійно використовую таку функціональність, але незнав до недавнього часу особливість, що варта була декількох годин відладки коду. Отже, хай ви класи і їхні властивості будете використовувати як "ключ"(флажок) для неповторення функціоналу. Наприклад так:

class S(object):
    was_run_example2 = False
def example2()
    if not S.was_run_example2:
        print "PRINT ONLY ONE"

example2()
>> PRINT ONLY ONE
example2()
example2()
example2()

Тепер ми прийшли до суті, мій модуль для логування в Пітоні використовує приблизно таку систему(хоча код набагато там кращий:) ), щоб налаштовувати логування лише раз. Але нещодавно виявилось, що почали дублюватися логи, тобто якимось чином ця система не працювала і код налаштування логування викликався 2 рази. Довго я не міг зрозуміти навіть приблизну причину, і тестував все методом "наукового тика" - постійно коментуючи різні участки кода і дивлячись чи було дублювання чи ні. Нарешті виявилось, що якщо цю функцію інклудити по різному в Пітоні, то для Пітона це буде два різні файли і різні обьєкти з різними значеннями полів обьєкту:

include example2
from utils include example2
from project.utils include example2

Звичайно в одному файлі так не напишете, але якщо це багатомодульна система, то досить легко завантажити в якийсь момент її по іншому і в результаті з'явиться помилка яку не так і легко знайти.

Надіюсь що ви не будете наступати на ці граблі, як я наступив )

Posted by spirit

Захотілося мені, щоб на сайті відображалався номер ревізії меркуріала, на основі якої зроблений deploy(перенесення скриптів на сервер).

Спочатку думав навісити хук до меркуріала, але вирішив піти легшим шляхом, як завжди. ;))). І переписав мій скрипт для деплою. Отож раніше мій скрипт(deploy.bat) для деплою був наступний:

rmdir /S /Q temp
mkdir temp

cd temp
hg clone d:\avcheck
... тут викликаються ще декілька пітоновський скриптів
... результат закидається на сервер
Тож щоб дістати номер ревізії додав такі рядки:
cd ..
hg log --limit 1 >  ./deploy/temp/rev.txt
cd deploy
які дістають опис останньої ревізії і зберігають його в файл deploy/temp/rev.txt

Далі в deploy.bat додав, щоб в кінці запускався пітоновський скрипт, що парсить файл rev.txt, дістає номер ревізії і зберігає його в Джанговський конфіг:

import re

with open('./temp/rev.txt', 'r') as fr:
    rev = fr.readline().split(':')[1].strip()
    if int(rev) < 0:
        print "error rev"
        exit

with open('./temp/avcheck/avcheck/settings.py', 'r+') as fs:
    file_origin = fs.read()
    fs.seek(0)
    fs.write(file_origin)
    file_new = re.sub("REVISION_NUMBER = \d*", "REVISION_NUMBER = "+rev, file_origin)
    fs.write(file_new)
Тепер в мене завжди на сайті показується внизу номер ревізії ;)
Posted by spirit
Перша моя стаття з циклу про програмування Google, що була опублікована в журналі Хакер. Тут як завжди повна версія з помилками ;)

Наша "Империя зла"

Учимся покорять Google с использованием Python

Многие называют Google "корпорацией зла", хотя я и не вижу в ней ничего плохого, но если народ называет, так тому и быть. И для превращения Google действительно в "зло" научимся использовать его сервисы для своих ооочень благородных хакерских дел.

Continue reading...

Cron для Drupal

29 Oct 2009
Posted by spirit

На Друпалі є така фішка як cron.php. Тобто файлик, що при своєму запускі виконує різні маленькі але обовязкові функцій - чищення логу, індексація сторінок для пошуку, перевірка оновлення і інше.

Тож цей файл бажано періодично запускати. Для автоматизація цього процесу накидав маленький скриптик на Python:

sites = (
    'http://screencast.org.ua/cron.php',
    'http://tutamc.com/cron.php'
)

from twill.commands import *

for site in sites:
    go(site)

Скрипт поставив в Віндовсі на виконання кожної ночі і тепер знаю, що все добре індексується.

Хоча це трішки змешена копія - насправді в мене ще є код який в випадку помилок - текст помилок зберігає до спеціального лог-файлу. Далі вже я періодично переглядаю цей файлик і дивлюся чи добре відпрацювали скрипти. Але про логування є багато інфи, тож це виділимо на окремий пост.

Posted by spirit

Місяць назад десь раз в тиждень я заходив в панель ДіректАдміна цього сайту, далі робив бекап, і закачував його собі на комп... Але монотонні дії мене вбивають, тому виділив декілька хвилин часу і написав маленький скриптик, що заходить на сайт, робить бекап, а потім його скачує на комп. Думаю вам він також буде цікавим.

Тож маємо задачу, яка складається з 2-м частин. По-перше, нам потрібно в ДіректАдміні створити бекап. А по-друге, нам потрібно цей бекап по ФТП забрати на комп. І між ціми двома операціями потрібно зачекати хвилин з 30. Хоча зазвичай досить і 5 хвилин, але хай буде трішки більше.

import time

make_backup()
time.sleep(60*30)# = 30m
get_backup()
Continue reading...
Posted by spirit

За сьогодні це 3-тій пост в блог. Трохи забагато ;). Але річ в тім, що завтра їду в Ялту на наукову конференцію, та й буду там пропадати десь з тиждень. Тому зараз опублікую багатенько, що вам було що читати в мою відсутність. Хоча ВайФай в мене буде, тому на декілька хвилин в день сможу бувати в інтернеті, то може ще й буду щось публікувати з Ялти.

Отже, ще одна стаття з 8-мого випуска журнала Хакер. І як завжди тут повний оригінал зі всіми помилками, що є невідємною частиною мого стилю ;)


Методы не стандартного использования socks-сервера

Хакер от обычного человека отличается способом мышления - у нас мозги "направлены" в иную сторону. Хакеры это не нормальные люди. И я горжусь, когда меня кто-то так называет. Давайте используем эту способность и попробуем посмотреть не нормальным взглядом на socks-сервер.

Для обычного человека socks-сервер - это штука, что позволяет менять IP. Но, эта вещичка хранит в себе еще много секретов, ведь через нее проходит трафик. А это позволяет слушать трафик, легко его изменять, и этим добавлять функционал к любым программам. Рассмотрим парочку примеров, что можно сделать с socks-сервером.

Вариант 1. Прокачаем браузер

После появления браузера Google Chrome я почти полностью перешел на него, и не жалею. Но столкнулся с его ограниченным функционалом и отсутствием плагинов. Исходя из этого, он теоретически для хакинга не подходит. И тут на помощь придет Чип и Дейл локальный socks-сервер, через который можно направлять весь трафик Chrome'a. Это нам дает возможность безгранично увеличить функциональность браузера. Например, изменять заголовки http-запросов и в том числе user-agent на маленький шел, что часто используется при локальных инклудах. Или можно показывать кукисы, параметры, что передавались скрипту, а также их в каком-то автоматическом режиме модифицировать для каких-то действий. Плюс можно б указать сохранять все ресурсы, что загружает браузер, и если немного изменять http-формы, то получиться автоматический создатель фейков. Развивать эту тему можно еще очень много, и конечном итоге реализовать навороченный хак-socks-сервер.

Continue reading...
 
 
 

Contacts

Роман Хоменко aka PresidentUA
mail/jabber: spirt40@gmail.com

Creative Commons License

Хореографический ансамбль Свитанок . greece escorts athens escorts athens guide . Очень качественное телевидение со спутника