Все заметки категории «Программирование»


Спасибо Бобуку:

ниже кусок текста, которым начинаются все мои скрипты.
Дефолтная кодировка там ставится только для текущего скрипта, не systemwide. Разберешься?

#!/usr/bin/env python2.5
# -*- coding: utf-8 -*-
# Конечно в нормальной жизни этих коментариев тут нет
# Загрузить кодеки и библиотеку локалей, установить дефолтную локаль
# согласно переменной окружения LC_ALL.
import locale, codecs; locale.setlocale(locale.LC_ALL, '')
# Теперь в encoding положим текущая кодировку локали.
encoding = locale.getlocale()[1]
# Если кодировка не определилась - это винды. Там полюбому UTF-8 :)
if not encoding:
    encoding = "utf-8"
# Установим дефолтную локаль. Финт с ушами reload() нужен потому что
# разработчики питона дюже умные и логично удаляют функцию setdefaultencoding
# при загрузке.
# Оно в общем то логично, но я же умный.
import sys; reload(sys); sys.setdefaultencoding(encoding)
# Установили кодеки для вывода в потоки согласно распорядку.
sys.stdout = codecs.getwriter(encoding)(sys.stdout, errors = "replace")
sys.stderr = codecs.getwriter(encoding)(sys.stderr, errors = "replace")

Ещё в начале года, когда я запустил новый сайт, у меня была мысль написать небольшой мануальчик по git’у на примере того, как я с его помощью управляю несколькими инсталляциями WordPress’а. Но сразу я этого не сделал, потому как сам ещё только начинал осваивать git; а потом, когда сайт заработал почти как надо, я немного обленился, и практически ничего с ним не делал.

Вообще-то в ближайшие дни я как раз собирался снова всерьёз заняться сайтом, и вспомнить заодно всю git’овскую магию, а тут наткнулся на почти такую статью, как я собирался написать. Ну да, там описана более простая схема чем у меня, поскольку моей основной целью было модификации шаблона в одной инсталляции автоматически переносить в другую (с сохранением некоторых отличий, конечно). Но, в принципе, в моём случае только бранчей больше, и их слияние должно происходить в определённом порядке.

А, ещё он использует git-rebase, а я использовал git-merge. Особой разницы не вижу.

Drupal — это поразительно гибкая и удобная для работы CMS. Да, learning curve присутствует, но трата времени на освоение себя оправдывает. Однако заказчику вдруг захотелось форум phpBB. Темы для phpBB я ещё не верстал, так что меня ожидало множество сюрпризов.

Начнём с того, что темы в Drupal — это обыкновенные php-файлы. Всё примерно так, как и писал когда-то Смирнов: зачем реализовывать язык шаблонов на языке шаблонов? В phpBB темы — это набор конфигов и HTML-файлов (ну и картинок, понятно). Вместо того, чтобы работать с несколькими файлами, нужно прыгать между десятками.

Вы думаете, это самое страшное? Нет, подождите. В phpBB темы кэшируются в базе. Это значит, что если я что-то поменял, то в Drupal’е достаточно перегрузить страницу, чтобы увидеть результат. В phpBB нужно сделать три клика в админке после каждого пука, простите, каждой правки шаблона. А поскольку я делаю шаблон в первый раз методами научного тыка и переделывания стандартного шаблона, то эту операцию приходится проделывать до пяти раз в минуту.

(В Drupal’е кэширование тоже присутствует, но вёрстке оно мешает очень редко)

Как будто существования IE не достаточно, чтобы веб-верстальщикам было не скучно…

Добавка

Смотрю движки основных форумов (потом расскажу, зачем).

Смерть, пиздец, жопа, убивать, убивать, убивать. >>>>

Слова человека, разрабатывающего вот это

Ещё добавка

А ещё по какому-то странному стечению обстоятельств любая заметка со словом phpBB сразу же привлекает тучи спамеров. По этой причине комментарии к этой записи будут закрыты

from optparse import OptionParser
parser = OptionParser()
parser.add_option("-h", "--help", action="help",
                  help="uh, forgot that one")

Unicode

Python — достаточно простой язык, чтобы с основными его элементами ознакомиться за полчаса. Но для этого нужно достаточно сжатое его описание — на пример, такое

Были же времена, когда разработчики не были испорчены квартирным вопросом DirectX’ом…

Первая версия SimCity (у которой тогда было рабочее название… правильно, Micropolis) была написана Will Wright’ом в 1985-м году под Commodore 64 (Wikipedia). 3 года издатели не хотели выпускать игру, в которой нельзя было победить или проиграть, пока наконец в 88-м не была достигнута договорённость с Maxis. В 89-м игра выходит сначала на Amiga и маках, следом — на PC (т. е. под DOS) и Commodore 64.

Код маковской версии был лицензирован DUX Software для того, чтобы разработать порт под Unix. Don Hopkins портировал игру сначала под NeWS window system от Sun, а когда Sun отказалась от NeWS, перенёс на X11 с использованием Tcl/Tk. И X11 (aka X Window), и Tck/Tk были доступны на многих платформах тогда, и дожили до наших дней, так что ещё в 90-е в различных модификациях этот порт был выпущен под SunOS, Solaris, Irix, HP/UX, OSF/1, Quarterdeck Desqview/X, NDC X Terminals, Warp и Linux. В конце 90-х срок контракта DUX Software закончился, и Tcl/Tk-версия больше не продавалась.

В 2007 году Electronic Arts, которая на тот момент владела всей интеллектуальной собственностью, связанной с SimCity и её спиноффами (SimCity и её сиквелы была самой продаваемой игрой на PC, пока не вышли The Sims, которые считаются спиноффом SimCity), подарила оригинальную SimCity проекту One Laptop Per Child. Don Hopkins и John Gilmore допилили X11 Tcl/Tk порт игры так, чтобы он работал под современными версиями X.org и Tcl/Tk, а то, что получилось — выпустили под лицензией GPL.

Поскольку всё, что выходит под названием SimCity, должно проходить QA в Electonic Arts, OLPC-релиз всё-таки сохранил название SimCity, а вот открытый код уже распространяется под оригинальным не защищённым копирайтом названием.

Если заглянуть в SVN-репозиторий проекта в Google Code (или хотя бы на эту страницу), то можно увидеть, что кроме X11 Tcl/Tk версии (Micropolis-Activity) уже ведётся работа над новым портом, Micropolis-Core, в котором игру перенесли на C++/Python/PIL/GTK/Cairo

Собственно, то, что должен знать каждый разработчик

Целей у этого поста две. Рассказать новичкам зачем все это нужно и переубедить сомневающихся. Ибо отказ от этих полезных инструментов ведет к потери времени и денег.

Кстати, есть такая штука, как Trac — интегрированные wiki, багтрэкер и веб-интерфейс к SVN.

В общем, забросил я попытки решить перловые проблемы с кодировками, нашёл питоновские биндинги к MPD, и написал свой собственный mpd-dynamic на своём любимом языке. Ни тебе пробем с кодировками, ни быдлокодерских (шутка) фигурных скобок. Как-нибудь под настроение доведу до ума и выложу.

Планируемый набор фич:

  • экспоненциальный рейтинг: песня с рейтингом 3 проигрывается в 2 раза чаще, чем песня с рейтингом 1, и в 2 раза реже, чем песня с рейтингом 5 (done);
  • новые песни (т. е. песни с неопределённым рейтингом) имеют повышенный рейтинг, после первого проигрывания им даётся рейтинг по умолчанию (3);
  • автоматически занижать рейтинг песен исполнителя, у которого очень много песен;
  • отсутствие повторов в пределах текущего плэйлиста;
  • возможность работы в режиме демона;
  • утилиты для просмотра и установка рейтинга любой песни (я их уже написал на Perl, но портировать дело пятнадцати минут, ещё нужна утилита, удаляющая «мёртвые» записи в базе), а также виджет для Plasma, показывающий рейтинг текущей песни и позволяющий его изменить (это когда я доберусь до Plasma ^_^)

10 января исполнилось70 лет Дональду Кнуту — самому известному учёному-программисту в истории человечества.

Happy Coding!

Следующая страница »