← All posts tagged Python

Запилил хитрый установщик обоин: bitbucket.org Суть в том, что обоина окрашивается и блурится в зависимости от времени суток (по ночам тёмно-синяя, утром желтеет, потом держит естественный цвет до вечера), но всё это не просто тупо по часикам, а с учётом географии местности. В wpsun.py надо поставить свои географические координаты (lat == широта, lon == долгота, можно в гугломапсах взять). Т.е. когда солнышко встаёт, обоина начинает тоже рассветать, а как заход — темнеет. Читайте ридмишку, там про крон сказано. Картинка лепится на рутовое окно, у DE оно, скорее всего, перекрыто рабочим столом, но попробуйте mplayer -rootwin movie.avi, если на рабочем столе кино начнёт показывать, значит, должна и менялка обоев работать. Ну, типа, всё.

Решил стать профи, изучаю, как пишутся юнит-тесты. По этому случаю пошерстил вопрос в питоне, а там есть такая интересная штуковина, doctest. Пишешь тест как док-строку (комментарий) прямо в теле функции, причём, оформляется он как будто это интерактивная питонская сессия! Тестирующий модуль извлекает док-строки, обнаруживает в них эти тесты и применяет, в случае расхождения желаемого и реального результата выдаёт соответствующее сообщение с описанием. Например, я сделал функцию нахождения середины между двумя временными точками и написал к ней тесты с учётом вариантов перехода через полночь и просто внутри суток:

def half_time(time1, time2):
"""
>> half_time(datetime.time(10, 30, 0), datetime.time(12, 20, 30))datetime.time(11, 25, 15)
>> half_time(datetime.time(23, 30, 0), datetime.time(0, 30, 0))datetime.time(0, 0)
>> half_time(datetime.time(20, 30, 15), datetime.time(1, 30, 5))datetime.time(23, 0, 10)
"""
datetime1 = datetime.timedelta(hours = time1.hour, minutes = time1.minute, seconds = time1.second)
datetime2 = datetime.timedelta(hours = time2.hour, minutes = time2.minute, seconds = time2.second)
if datetime2 < datetime1:
datetime2 += datetime.timedelta(days = 1)
half = (datetime1 + datetime2) / 2
return (datetime.datetime.min + half).time()

А чтобы провести тест, достаточно добавить в нужном месте в самой программе:
import doctest
doctest.testmod()

Больше по теме: docs.python.org Трейсбэки тоже можно проверять.

Вот так вот пользуешься больше года офигенным утилем для закачки на разные имиджхостинги ( code.google.com ), а потом замечаешь адрес расположения сорсов: git clone git://github.com/Apkawa/uimge.git
github.com/Apkawa/uimge.git
Apkawa
Привет! А я уже эту штучку интегрировал в gscreenshot, и довольно давно.

Осталось немножко времени до конца рабочего дня, зделал генератор Королевского Трифорса (он же треугольник Серпинского): pastebin.com Юзать через python triforce.py 8 (выдаст трифорс со стороной в 8 трифорсов). Если параметр не кратен степени двойки, сделает фигуру со стороной, ближайшей к этой степени сверху. Вместо пробелов применены неразрывные пробелы, которые вакаба не вырезает. Чтобы не разъехалось, оформляйте как моноширинный код (на тирече [code][/code]).

Во время собрания, команда, которая со временем выросла в ядро разработчиков Ubuntu, составила список идей, которые она хотела бы видеть в своей идеальной ОС. Сейчас этот список знаком большинству пользователей Ubuntu:
Предсказуемые и частые циклы релизов;
Упор на локализацию и доступность;
Упор на простоту использования и дружелюбность к пользователю;
*Упор на использование языка Python в роли единственного языка программирования, с помощью которого вся система может быть построена и расширена;*
Сообщество-ориентированный подход, который уже работал с существующими открытыми проектами и метод, с помощью которого группы разработчиков могли бы на ходу возвращать свои наработки;
Новый набор инструментов, построенный вокруг процесса разработки дистрибутива, который позволил бы разработчикам взаимодействовать с экосистемой различных проектов и который позволил бы получать максимальную отдачу от пользователей.

:3 А я и не знал о такой роли питончика в самом популярном дистрибутиве (хоть сам и не пользуюсь убунтой, но всё же). habrahabr.ru

Написал вконтактный музыкальный прокси: pastebin.com
После установки мыла и пароля от вашего вконтакта и запуска на 127.0.0.1:8080 откроется примитивнейший однопоточный веб-сервер, стримящий музыку с вконтакта. Использовать так: 127.0.0.1 (добавить в плеер или просто в браузере слушать).
Можно использовать пробелы, браузер их заменит на %20, что не отразится на работоспособности. Это техническая разработка для радиоанон, поэтому всё на базовом уровне и одном потоке.

Прикрутил к своему веб-приложению на Django поисковый движок Sphinx. Горжусь Роиссей, отличную штуку сделали (пример работы можно узреть на habrahabr.ru), а вот прослойкой django-sphinx не горжусь. Документация скудная, крайне важная фича Excerpts (выдирание фрагментов текста, в котором было найдено слово/фраза) не освещена вообще! По обрывкам вопросов нашёл, наконец, где это делается, исправил баг с косячной работой с нетекстовыми полями, потом долго искал, куда притыкается итоговый текст в запутанной объектной модели, но, в итоге, нашёл. Показал шефу. Гордимся вместе. Ещё купил наконец-то новые линзы и пятисотрублёвую карточку оплаты провайдера. На работе ощущал болезненность, пока дошёл до дома, выздоровел. Буду накачиваться иммуналом и не подпускать простуду (отпуск с субботы, ёпта!).

Наткнулся в интернетах на такое чудо: bitbucket.org Это фреймворк для джанго, который, в свою очередь на питоне (который кто как только не называет саркастически, в т.ч. и пистоном). Piston powered делает меня смеяться.

Приходит программист к проктологу. Тот его спрашивает:
— На что жалуемся?
— Геморрой.
Доктор начинает писать что-то в карточке, попутно спрашивая:
— Анальный секс практикуете?
Пациент смотрит в стол и отвечает:
— Постоянно ебусь с этим пингвином и питоном, потому что там всё дико через жопу. Запускаю демона, и через пару секунд ядерная паника.
Медсестра принимается заполнять направление к психиатру. Доктор задумчиво разглядывает стену напротив. Несколько секунд в кабинете тишина. Потом программист, видимо, набравшись смелости, добавляет:
— Так что я забил на них, и теперь меня уже несколько дней ебут черти!
Медсестра роняет ручку. Доктор, внезапно заинтересовавшись, разглядывает пациента. Потом уточняет:
— Сильно ебут?
— Нещадно! — отвечает тот с твёрдостью.
Проктолог хмыкает и чешет подбородок. Спрашивает:
— А черти какой версии?
Программист хмуро отвечает:
— Восьмые.
— Вы знаете, я только с шестыми работал, но зато плотно. В чём у вас проблема?
— В общем, мне нужно настроить роутинг между тремя подсетями в зависимости от времени суток и нагрузки на канал, плюс шейпировать это дело...
— Так, так... вы всё на ipfw делаете или сторонние решения имеются?
— Ну, пока осваиваю встроенное...
Под неспешный разговор медсестра, нашедшая ручку, вписывает в направление своё имя.

В общем, потихоньку двигаю свой проект по синхронизации данных через Freenet. Рисую алгоритмы и структуры данных во Freemind. Я весь такой фришный, ну просто пиздец. Суть, вкратце, такова: раз в час (или другой промежуток времени) происходит сканирование выбранного для синхронизации каталога, вычленяются изменения, и изменившиеся файлы заливаются во фринет — очень большой, бесплатный и сравнительно надёжный ЦП-кэш, хотя там можно хранить и обычные данные. Фрагменты данных разбрасываются в шифрованном виде по компьютерам участников, причём, без ключа расшифровки, который входит лишь в ключ файла, которым изначально владеет только заливающий. Т.е. люди сами не знают, что хранят у себя. Тут нам не столько важна анонимность, сколько доступность ресурсов и фактически бесплатное место. Данная система будет версионируема, т.е. можно будет извлечь файл более старых ревизий, однако, следует помнить, что неиспользуемые фрагменты файлов постепенно вытесняются из хранилища, так что совсем старые версии вряд ли получится вытащить. Но минимум неделю всё вполне пролежит. Учитывая, что мы всё-таки хотим именно синхронизироваться, а не хранить там большие объёмы файлов, это удовлетворительно. Кроме того, раз в неделю можно проводить ревизию файлов, делая закачку всех без исключения, чтобы даже давно не менявшиеся снова стали доступны.

Плюсы:
— не нужен свой сервер и постоянная его доступность;
— свободное место почти не ограничено;
— версионирование по дизайну;
— шифрование везде, где только можно;
— относительная надёжность системы, данные доступны сравнительно долгое время;
— питон.

Минусы:
— низкая скорость заливки/скачивания (аплоад не мерял, он медленнее даунлоада, но скачивание на 1 мегабите вполне реально);
— следовательно, обновления не по факту изменений, а через фиксированный, довольно большой промежуток (так выйдет быстрее);
— всегда есть шанс потерять данные, т.к. использовать их будет один человек, низкая популярность ведёт к быстрому вытеснению частей файлов;
— требуется держать включенной ноду фринета;
— файлы перезаливаются целиком, а не только изменённая часть;
— питон.

Вычисляем ЧСВ-level по показателям жуйка, псевдокод на питоне:
MR == My readers
IR == I read
if IR == 0:
return 0
elif MR — IR > 0:
return (MR — IR) / MR * 100%
else:
return -(IR — MR) / IR * 100%

Пояснение. Конечно, можно просто поделить MR на IR, т.к. чем больше тебя читают и чем меньше людей читаешь ты, тем выше твоё ЧСВ, это очевидно (явсемнужен, мнениктоненужен), но в этом случае не получится привести к процентам, ведь соотношение бывает в любое число раз, следовательно, показатель будет труднее оценить. А вот отношение разницы к большей величине всегда меньше единицы, что тоже очевидно, при этом, если ты читаешь больше человек, чем читают тебя, то твоё ЧСВ уходит в минус вплоть до -100%. Если же ты никого не читаешь, будет 0, ибо читер и считать неинтересно.

Вот у меня ЧСВ == 50.76%

А ещё можно запилить юзерскрипт для GM и подвешивать уровень прямо в браузере на каждой странице блогов, но я в этом не силён.

utilitymill.com полезное, хоть и не очень понятно пока, зачем. Побаловаться можно, например, алгоритмы тестить. Вкратце: небольшой фреймворк и хостинг для питонских скриптов, выполняющихся в песочнице и имеющих примитивный интерфейс в виде HTML-формы для ввода значений. Есть строгие лимиты на ресурсы — 2 полных секунды рантайма и 28 метров памяти на скрипт.