С Новым годом!

2007-12-31 at 21:08 | Posted in life | 7 Comments
Tags:

Дорогие разумные формы жизни, заинтересованные в планете Земля! Поздравляю вас с очередным её оборотом вокруг Солнца! Хочу пожелать, чтобы в течение следующего её оборота вам сопутствовал интерес и успех! С Новым земным годом! :)

Beautyfing Gnome in Ubuntu

2007-12-20 at 05:14 | Posted in it, lang:en | 2 Comments
Tags: , , , , , ,

Yesterday I installed Ubuntu 7.10 again. I had a negative experience with Fedora Core 8. The issues were mostly related to my somewhat old hardware. My main argument against Ubuntu is its packaging system named dpkg which stands for Debian package. It’s similar to RPM from a user’s point of view, but it’s completely different for a developer (i. e. packager). I’m going to learn more about it this weekend.

As for now, I’m writing down a list of things I need to find out how they are usualy done in Ubuntu, such as connecting a mobile via Bluetooth/IrDA and creating a dial-up connection to the Internet over GPRS, exploring a Zeroconf neighbourhood, etc. Tasks I’ve already done are setting up my Java, Python and Subversion environments, configuring networking and… customizing the Gnome theme :)

I’ve found a very nice GTK/Metacity theme called T-ish Pack and a desktop wallpaper Blue Grass. Check them out! :) And, of course, they are licensed under the GPL.

Новое в версиях Python

2007-12-10 at 01:42 | Posted in devel, review | Leave a comment
Tags: , , ,

Недавно пробовал делать разные вещи с интерпретаторами Jython 2.2 и CPtyhon 2.5. Поскольку порой не так просто вспомнить, что же добавлялось в различных версиях языка Python, я решил составить список основных изменений на основе документации по Python. Начиная с версии 2.3 список довольно подробный, а для более ранних версий легко находимой информации не так много.

  • 2.5 (2006-09)
    • Условные выражения
    • Частичное вычисление функций, пакет functools
    • Абсолютный и относительный импорт (absolute_import из __future__)
    • Объединённый try/except/finally
    • Передача значений в генераторы (val = yield i)
    • Оператор (statement) with (with_statement из __future__), протокол управления контекстом, модуль contextlib
    • Исключения как классы в новом стиле, изменения в иерархии исключений
    • Пакеты ctypes, ElementTree, hashlib, sqlite3, wsgiref
    • Другие небольшие изменения
  • 2.4 (2004-11)
    • Встроенные объекты set и frozenset
    • Генераторы как выражения
    • Декораторы функций
    • Обратная итерация (reversed())
    • Типы Decimal, Context, пакет decimal
    • Многострочные операторы (statements) import со скобками
    • Параметры key и reverse метода list.sort()
    • Другие небольшие изменения
  • 2.3 (2003-07)
    • Стандартный тип Set, пакет sets
    • Простые генераторы (yield)
    • Кодировки исходников
    • Универсальный перенос строк (режим открытия файлов "U")
    • Функции еnumerate(), sum()
    • Булевский тип (bool)
    • Расширенный слайсинг всех типов
    • Пакеты logging, csv
    • Другие небольшие изменения
  • 2.2 (2001-12)
    • Унификация типов (на C) и классов
    • Метаклассы, протокол описателей
    • Простые генераторы (generators из __future__)
    • Другие изменения
  • 2.0 (2000-10)
    • Юникодовые строки
    • Выделение списка (list comprehension)
    • Дополняющие присваивания
    • Методы у типа str
    • Сборка мусора для циклических ссылок
    • Другие изменения
  • 1.4 (1996-10)
    • Аргументы-ключевые слова
    • Встроенный тип complex
    • Искажение имён для инкапсуляции
    • Другие изменения
  • 1.0 (1994-01)
    • Элементы функционального программирования (lambda, map(), filter(), reduce())
    • Другие изменения
  • 0.9 (1991)
    • Классы с наследованием
    • Обработка исключений
    • Встроенные типы list, dict, str, …

Перспективные идеи CMS

2007-12-04 at 05:04 | Posted in devel, talk, think | Leave a comment
Tags: , , , , , , , ,

Переопубликовываю мой старый пост из ru_cms из LiveJournal, поскольку кое-что здесь по-прежнему кажется интересным. В т. ч. и потому, что наконец-то опубликовано RFC 5023 The Atom Publishing Protocol. Тогда в ru_cms была небольшая дискуссия по поводу этого поста, которую также можно почитать.

За последнее время я пробовал использовать в личных целях четыре довольно разных и нехарактерных CMS. Это следующие системы:

  1. RDF Notes System
  2. DLWiki
  3. Backpack & Writeboard
  4. TiddlyWiki

Первая была создана мною в виде наброска, акцент был на хранении метаинформации. Вторая — это адаптация свободной PmWiki, сделанная моим знакомым и работающая на PHP под Apache HTTP Server, третья — пара простых сервисов компании 37 Signals, четвёртая — локальная wiki в одном файле. Плюс к этому, я пробовал хранить простое содержимое в тектовом формате в файлах, а также думал над CMS на Python под CherryPy, которая походила бы каркасом на Apache Cocoon. Наконец, последние мысли были связаны с применением Atom Publication Protocol (APP) для приведения CMS хоть к какому-то общему знаменателю с точки зрения машинного, а не человеческого (Web GUI) интерфейса.

До сих пор нельзя работать с информацией, используя простые понятия и удобные инструменты, по аналогии с универсальностью интерфейса файловых систем.

Обнаруженные наиболее перспективные идеи:

  • Стандартный протокол доступа и публикации (в стиле REST на основе HTTP, см. APP)
  • Различные форматы содержимого, определяемые своим Content-Type
  • Интеграция форматов за счёт XML и ссылок URI
  • Использование либо интерфейсного сервера, выдающего пользователю веб-интерфейс к веб-сервису, либо расширения к браузеру
  • Поиск возможностей использования технологий Semantic Web везде, где это ничего не усложняет

Как это соотносится с вашими мыслями? Что думаете вы о CMS в целом и об их роли в вебе?

Параллельность в Fortress

2007-12-01 at 05:12 | Posted in devel, review, think | Leave a comment
Tags: , , ,

За последние пару месяцев дважды услышал о языке Fortress: один раз из интервью с Guy Steele на SE Radio и ещё раз из презентации человека из питерского Sun Microsystems. Это подтолкнуло меня почитать интересные моменты беты его спецификации. Об этих интересных моментах я коротко и расскажу.

Прежде всего, Fortress — язык программирования общего назначения, созданный в лабораториях Sun. Он объединяет в себе ряд свойтв функциональных и ОО-языков. По духу он близок к Haskell, Scala и т. п. Что отличает его от этих языков:

  • Синтаксис, который нравится математикам (даже Haskell оставлен позади)
  • Встроенная в язык модель распараллеливания

Параллелизм здесь имеется в виду нефункциональный, т. е. нужный исключительно для оптимизации. Используется общая память, а не передача сообщений (в духе OpenMP, а не MPI). Соответственно, программы предназначены для многоядерных и многопроцессорных систем, а не для кластеров и гридов.

Особенности же Fortress следующие: ко всем объектам привязана метаинформация о характеристиках их локальности по отношению друг к другу. На основе этой информации, а также структур данных из библиотек (типа векторов, различных матриц и т. д.), использующих её для распределения, и конструкций языка типа циклов и кортежей среда исполнения распараллеливает программу. Происходит это прозрачно для прикладного программиста, с учётом в run-time имеющихся ресурсов типа ядер, процессоров, характеристик локальности памяти. Вся нагрузка по распараллеливанию уходит с прикладного программиста (скажем «нет» прагмам OpenMP) на разработчика библиотек, а именно, структур данных, «умеющих» учесть метаинформацию для распределения данных по локальным фрагментам с целью их параллельной обработки.

Это был короткий рассказ о Fortress. Под конец несколько скептических слов. Сам проект не вышел за рамки исследования (причём выбыл из программы DARPA HPCS), язык и инструментарий разработчика являются сильно недобитыми. Хотя это язык общего назначения, особенности его таковы, что он пригодится только для узкого класса задач: математические вычисления на сильно-связанных параллельных системах. Его пытаются позиционировать как язык будущего для эффективного программирования n-ядерных процессоров в связи с тем, что n для большинства компьютеров будет расти. Однако большинству программ характерен параллелизм не данных, а задач, который лучше программировать явно (иногда и неявно для чистых функций). Есть мнение, что для этого лучше подходят модели типа Actors (вид Message Passing) и языки вроде Erlang и Scala.

Getting Out of Hand

2007-10-24 at 22:09 | Posted in fun, lang:en, life, micro | 1 Comment
Tags: , , ,

(via xkcd.com)

Calculating MD5 Checksum of Ubuntu 7.10 ISO Image in Python

2007-10-19 at 02:39 | Posted in devel, fun, lang:en | 4 Comments
Tags: , , , ,

I like the Python programming language and use it on a daily basis. To give you an example of such a usage, I’m going to calculate the MD5 checksum of a fresh Ubuntu 7.10 ISO image I’ve downloaded from a mirror site. It is needed in order to make sure that no accidental or malicious modifications have been made by the mirror maintainers or computer crackers. Another (standard) way of performing such a task is installing and using some kind of an MD5 software tool on your computer. But it’s no fun to do that, so let’s program this task in Python :)

This easiest way of calculating the checksum in Python is:

from md5 import md5
fname = "ubuntu-7.10-desktop-i386.iso"
s = md5(open(fname, "rb").read()).hexdigest()
print "md5 checksum: %s" % s

It’s quite easy, isn’t it? :) But unfortunately it’s way too inefficient, because this code has to allocate all the ISO image in memory (700+ MB) while reading it from the file.

Let’s read the ISO image file by relatively small blocks updating the MD5 checksum after every read:

from md5 import md5
fname = "ubuntu-7.10-desktop-i386.iso"
block_size = 0x10000
def upd(m, data):
  m.update(data)
  return m
fd = open(fname, "rb")
try:
  contents = iter(lambda: fd.read(block_size), "")
  m = reduce(upd, contents, md5())
  print "md5 checksum: %s" % m.hexdigest()
finally:
  fd.close()

By the way, if you’re wondering why we can “update” the checksum, see the MD5 hash algorithm; briefly because MD5 operates on independent 512-bit chunks of data that are reduced using addition modulo 232. One more comment: the code looks a bit functional, but in fact there are lots of destructive updates here.

You can compare your results with an appropriate MD5 checksum at the Ubuntu homepage.

Upd: For those people who are just looking for the MD5 checksum value of ubuntu-7.10-desktop-i386.iso, the value is: d2334dbba7313e9abc8c7c072d2af09c.

Twitter is in Maintenance Mode

2007-10-01 at 06:02 | Posted in it, lang:en, micro | Leave a comment

OMG! Twitter is down! Can’t microblog anything! ;) Actually, it is in maintenance mode. They are upgrading the hardware of a (or the?) database server.

P. S. Well, the server. They have got a MySQL DBMS on one 8 core box. That limits to approx. 2400 connections per second. So they have got 16 GB memcache :) What’s next?

Лекции по введению в психоанализ

2007-09-21 at 05:47 | Posted in media, micro, review | 1 Comment

Закончил перечитывать «Лекции» и «Новый цикл» Зигмунда Фрейда.

  • Ссылка: Фрейд З. Лекции по введению в психоанализ и Новый цикл. — Фирма СТД, 2003. — urn:isbn:5-898-08028-7
  • Оценка: 5/5

См. также:

Twitter: бесплатные SMS и микроблоггинг

2007-09-21 at 02:33 | Posted in it, review, talk | 20 Comments

Что такое Twitter — можно легко узнать в Википедии или на сайте Twitter.com. Здесь я напишу о двух уровнях восприятия Twitter.

Twitter позволяет (в частности) отправлять людям бесплатные SMS в любую страну. Для этого оба должны зарегистрироваться в Twitter и добавиться в контакты (followers). Если один человек зарегистрирует номер своего сотового в Twitter, то второй сможет слать ему бесплатные SMS через сайт Twitter.com или через IM (Jabber, ICQ?). Для этого используются т. н. прямые (direct) сообщения. Напирмер, я хочу отправить пользователю Twitter с именем foo сообщение SMS. Я просто шлю сообщение “d foo привет! как дела?” Jabber-боту twitter@twitter.com. Есть разные варианты получения сообщений: SMS/IM/Web, различные приватности, времена и т. д. Мне это показалось удобным: я попросил нескольких друзей зарегистрироваться и теперь быстро и бесплатно шлю им SMS :)

А теперь несколько слов об архитектуре Twitter. Эта система представляет собой социальную сеть, построенную по принципу «публикация-подписка» (Publish-Subscribe). Пользователи Twitter подписываются на микроблоги — новостные ленты с короткими записями других пользователей о том, что они делают и что интересного происходит вокруг. При этом архитектура развязывает каналы публикации сообщений-твитов и их получения.

Перечислю основные элементы архитектуры (см. диаграмму): компоненты, соединители и данные. Компоненты Twitter — клиенты в виде сотовых телефонов, мессенджеров и браузеров, шлюзы для приёма SMS, IM и веб-запросов и, наконец, сервер публикации-подписки, отправляющий опубликованные твиты всем подписчикам. В качестве соеднителей Twitter с внешним миром выступают, как сказано выше, протоколы доставки SMS (GSM), IM (Jabber/XMPP, AIM/OSCAR) и Web (HTTP). И, наконец, данные — это сообщения: текстовые строки Unicode, часть которых — это команды типа “@username” и “off”.

Оценка: 5/5

См. также:

Next Page »

Get a free blog at WordPress.com | Theme: Pool by Borja Fernandez.
Entries and comments feeds.

Follow

Get every new post delivered to your Inbox.