Monthly Archives: Серпень 2013

Неперервна інтеграція по домашньому

Або якщо вам впадлу регулярно давати команду make test, тоді наступний сценарій можна віддати супервізору або просто ганяти в окремому терміналі:

import os
import time

def main():
    while True:
        status = os.system('make test')
        if status == 2:
            print 'Looks like Ctrl+C. Stopping.'
            return
        if status == 0:
            os.system('notify-send -t 1000 OK "all tests passed"')

            print '\n'*5, 'Now wait a minute...'
            time.sleep(60)
        else:
            os.system('notify-send -t 9999 FAIL "something wrong with the code"')
            time.sleep(10)

if __name__ == '__main__':
    main()

Filed under: Кодерство Tagged: Python

Ітеративно і інкрементно

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

Тому тут просто процитую те що написано в підвалі блогу Едді Османі:

Спочатку зроби це, потім зроби це правильно, а після цього зроби це краще. Це одна з основ яку я завжи тримаю в голові розробляючи що завгодно.

Якщо ви розробник який хочу вивчити щось нове, не залежно від рівня навиків, пам’ятайте, що спробувати зробити хоч щось так само важливо як і прочитати як це робиться.

Створіть новий gist чи fiddle, відкрийте консоль і експериментуйте. Це, бляха, весело!

І справді, я тут подумав, що програмування перестає приносити задоволення, коли ти власне перестаєш втілювати ідеї і фіксиш баги, фіксиш баги, сидиш на нарадах, фіксиш баги.

Наступний “мінус” пов’язаний з тим, що розробка грандіозних ідей – це задоволення, а пошук паршивих маленьких “жучків” – це всього лише робота. В кожній творчій справі бувають жахливі періоди одноманітної й клопіткої праці, і програмування не є винятком.

Хоча пошук багів звісно це теж трішки творчий процес, гідний Шерлока Холмса, але варто придумати щось аби зробити його ще більш творчим. Прописувати в коді контракти по ходу пошуку?


Filed under: Кодерство, Нещоденник Tagged: психологія, робота, розробка

To be the best…

To be the best, we gotta pass the test
We gotta make it all the way
To the top of the mountain!

Tenacious D

Пройшло вже більше 10-ти років відколи я вперше побачив IDE Turbo Pascal 7.1. І впевнений що Microsoft житиме і працюватиме щонайменше поки Андерс Гелйсберг в них працюватиме.

Але програмувати мені чомусь досі важко як і тоді. І то, тоді було легше, тому що я не займався цим по 50 годин на тиждень і енергії було більше. Хоча, 10 років – немалий термін, і Пітер Норвіг пише що за 10 років вже можна було б навчитись. Розмірковувати чому в університеті мене нічого не навчили я тут не буду. Досить того що зараз я рухаюсь. Наприклад здається вже осягнув поняття співпрограми (coroutine). А рік тому мав шок – як так, мене в університеті вчили лише про підпрограми та функції, а тут на тобі – підпрограма є лише частковим випадком співпрограми. :)

Зараз інша проблема. На роботі є кінцевий термін виконання проекту. Якось я задав питання “А зробити дешево чи правильно?” і задача на 2 години стала задачею на 3 дні. Вчора знову задав таке дурне запитання. Сьогодні накодив дешево – на нехай мене на рев’ю виховають. Все одно ще всі баги не пофікшені.

Почитав StackOverflow. Щоб стати кращим Python-програмістом треба прочитати Real World Haskell. Цікава ідея, так і зроблю якщо звісно інші ідеї не прийдуть в голову.

І випадково натрапив на взагалі іскрометну історію:

Він був російським програмістом який працював переважно з ассемблером. Він фанатично ставився до економії байтів тому що раніше працював з системами з дуже обмеженою пам’яттю. “Вона була для супутників. Лишк кілька байтів, тому ми перевикористовували кожен байт з кількома цілями.” (побітові маніпуляції, використання байтів інструкцій для їх числових значень). Коли я спробував з’ясувати які саме супутники, я отримав у відповідь лише “Орбітальні супутники. Для запуску на орбіту.”

Він мав дві інші примхи: випукле дзеркало вмонтоване над монітором “Щоб знати хто підглядає”, та нерегулярне випадкове вставання з крісла для того щоб швидко зробити десять віджимань. Він пояснював останнє як “Компілятор знайшов помилку в коді. Це покарання.”

Опукле дзеркало – цікавий приклад совка, але от покарання – можливо має певний з точки зору фізіології сенс.


Filed under: Кодерство, Психософія Tagged: Лайфхаки, люди, психологія, цілі

Красиво друкуємо xml в термінал

XML то жахіття ще те, але іноді його таки треба читати, нікуди не дінешся. Аби зробити своє життя трішки кращим можна написати таке:

def pprint_xml(text):
    import xml.dom.minidom
    from pygments import highlight
    from pygments.lexers import XmlLexer
    from pygments.formatters import TerminalFormatter
    xml = xml.dom.minidom.parseString(text)
    print highlight(xml.toprettyxml(), XmlLexer(), TerminalFormatter())

Потребує pygments.

Разом з Інтроспектором та іншими утилітами для дебагу це вже тягне на якусь лібу. Напевне наступного тижня заведу собі таку десь на github.


Filed under: Кодерство, Розмітка Tagged: робота, Python