суббота, 12 декабря 2009 г.

Как "умный" BIOS мне диск сломал.

Вот уж прикол, так прикол. Кто бы мог подумать, что BIOS может диск "запороть" при попытке с него загрузиться. Оказалось еще как может и благодарить за это надо Gigabyte Xpress Recovery. Возможность без сомнения полезная: резервная копия BIOS пишется на первый жесткий диск и её можно восстановить в случае чего. Вот еще бы она работала без глюков с дисками большого объема...

вторник, 29 сентября 2009 г.

Облом с личным поисковиком

Хотел обустроить себе личный поисковик такой, чтобы:

  • умел индексировать сайты и потом искать по ним.

  • умел спрашивать результаты у других поисковиков, объединять и показывать мне.

  • умел представлять результаты поиска в виде пригодном для скармливания другому поисковику.

пятница, 21 августа 2009 г.

О ценности денег или "деньги - время"

Так уж сложилось, что я привык свысока относиться к деньгам. Выражение “время — деньги” меня никогда особо не трогало. Подумаешь деньги, их ведь можно заработать. То ли дело время, оно проходит и его уже не вернешь.

воскресенье, 16 августа 2009 г.

Python Paste и PyBlosxom

Связка Apache2 + mod_wsgi оказалась мало пригодной для web разработки. Когда приложение отлажено и стабильно работает, претензий нет, а вот отладка и переключение между разными экспериментальными ветками крайне не удобны. Пока конфиги исправишь, уже забыл чего хотел делать. К сожалению, дневник на PyBlosxom как раз этот случай.

суббота, 1 августа 2009 г.

Самовосстановление зрения по методу Шичко-Бейтса

Давно собирался заняться восстановлением зрения, наконец занялся — прошел курсы по самовосстановлению зрения по методу Шичко-Бейтса. Не ожидал, что подобное есть у нас в городе, однако, ошибся. Курсы есть (http://www.gorsvt.ru) и занятия проводятся раз в месяц с декабря прошлого года. Конечно, до тех же лекций В.Г Жданова им далеко, но свою функцию начального пинка выполняют хорошо. К тому же, приятно чувствовать, что ты не одинок и восстановлением зрения интересуются и занимается кто-то еще.

Чуда, конечно, не произошло и совсем отказаться от очков за неделю у меня не получилось, но, по субъективным ощущениям некоторые улучшения заметны. По крайней мере я отказался от очков в быту и сейчас вполне нормально обхожусь без них. Единственное, когда я их одеваю, это при работе за компьютером и то, они на полторы диоптрии слабее, чем нужно, и ,вроде, со временем изображение становитя четче.

понедельник, 13 июля 2009 г.

Осваиваю OpenID

Потихоньку обживаюсь в Интернете. Бесит необходимость регистрироваться, где ни попадя и кем попало. Поди потом упомни, все свои личины... Так и раздвоение личности схлопотать недолго. И не дай бог, пароли решишь поменять, на неделю можно увязнуть. Надоело. Даешь единообразие! Буду осваивать OpenID.

Мудрить сильно не стал. На первое время, сойдет и делегация. Тут главное, что домен мой, а провайдера при необходимости сменить можно. Первым провайдером назначил OpenID сервер Яндекса (из патриотических соображений: говорят по нашему, версию OpenID Authentification 2.0 поддерживают, а еще мне нравится как Иван Сагалаев пишет).

Инструкция по настройке делегации на сайте порадовала. Ума много не надо, только хостинг (за него отдельное спасибо администрации freeos.ru).

Некоторые сложности возникли с проверкой работы. "Официальной" песочницы для этого я не нашел, пришлось импровизировать. Доверять логин кому не попадя желания нет никакого, поэтому выбирал из известных сайтов. Приглянулся http://www.livejournal.com.

Логин прошел на ура, а вот профиль не подтянуло - вместо имени URL пишет. Ну и пусть, может это особенности сайта. Главное вход работает. Можно начинать избавляться от лишних учеток. Посмотрим, что из этого выйдет.

четверг, 9 июля 2009 г.

Pyblosxom: переход на следующую/предыдущую запись

Кажется, начинаю выходить из очередного периода застоя - дошли руки до обустройства дневника. Вести я его взялся в Pyblosxom. Код движка вгоняет в тоску, но это все, что есть. Остальные, либо написаны на языках, разбираться в которых лень, либо требуют базу данных, что мне тоже нисколько не улыбается. Постоянно наткаюсь на ситуацию: помню, делал недавно запись по теме, а в какой статье, не помню. Так и чешутся руки прикрутить навигацию следующая/предыдущая статья. В ядре блога эти вещи отсутствуют, как класс, из плагинов нашел только pyentrynavi. Все бы хорошо, если бы версия 0.4 2008/06/10 работала с PyBlosxom 1.5, который сейчас в trunk сидит. Пришлось немного похачить, чтобы заставить хоть как-то работать. Во-первых, вылез системно зависимый способ работы с путями файлов. Плагин оказался гвоздями прибит к unix путям, а под windows ни найти текущую запись не мог, ни ссылки корректно сформировать. Сравнение путей удалось вылечить с помощью os.path.normpath. Для формирования правильных ссылок переделал translate_file_to_link. Вообще-то, выкинул и заменил на entry_url. Во-вторых, плагин зачем-то был жестко привязан к расширению .txt файлов с постами. Поскольку мне удобнее писать заметки на reStructuredText (модуль rst и расширение файлов .rst), все мои записи пошли лесом. Такой расклад меня не устравает, так что ограничение выкинул. (Зачем автор парился с ограничением для меня осталось загадкой. Функция tools.walk и так учитывает известные движку расширения файлов, в том числе добавленные плагинами. Может раньше этого не было?) В результате имеем патч на версию 0.4 2008/06/10. Остается договориться с автором, чтобы пропихнуть в основную ветку.
--- a/pyentrynavi.py    Mon Jul 06 14:59:19 2009 +0600
+++ b/pyentrynavi.py    Thu Jul 09 14:54:35 2009 +0600
@@ -44,7 +44,7 @@

from Pyblosxom import tools, entries
import time
-import re
+import os.path

def verify_installation(request):
    config = request.getConfiguration()
@@ -53,11 +53,6 @@
        return 0
    return 1

-def translate_file_to_link(filename, datadir, base_url, flavour):
-    datadir = datadir.rstrip('/')
-    basename = filename[len(datadir):]
-    return base_url+basename[:(basename.rfind('.')+1)]+flavour
-
def cb_prepare(args):
    request = args['request']
    data = request.getData()
@@ -66,14 +61,13 @@

    entry = data['entry_list']
    flavour = data['flavour']
-    filename = entry[0]['filename']
+    filename = os.path.normpath(entry[0]['filename'])

    config = request.getConfiguration()
    datadir = config['datadir']
    base_url = config['base_url']

-    r = re.compile('(.*\.txt$)')
-    allentries = tools.Walk(request, datadir, pattern=r)
+    allentries = tools.walk(request, datadir)

#    cur_time = time.localtime()

@@ -94,19 +88,22 @@
    except ValueError:
        return

+    def entry_url(e):
+        # FIXME: flavour is not the same as entry extension
+        return "%s/%s.%s" % (base_url, e["file_path"], flavour)
+
    navi_str = ''
    if num != (len(entrylist)-1):
        fname = entrylist[num+1]
        e = entries.fileentry.FileEntry(request, fname, datadir)
-        prev_link = translate_file_to_link(fname, datadir,base_url, flavour)
+        prev_link = entry_url(e)
        navi_str += '&lt; <a href="http://www.blogger.com/%s">%s</a> '%(prev_link,e['title'])

    navi_str += '| <a href="http://www.blogger.com/%s">MAIN</a> |'%base_url
-
    if num:
        fname = entrylist[num-1]
        e = entries.fileentry.FileEntry(request, fname, datadir)
-        next_link = translate_file_to_link(fname, datadir, base_url, flavour)
+        next_link = entry_url(e)
        navi_str += ' <a href="http://www.blogger.com/%s">%s</a> &gt;'%(next_link,e['title'])

    data['entry_navi'] = navi_str

понедельник, 15 июня 2009 г.

Переключения раскладки в Windows

На работе стоит Windows, дома - Linux, а на сладкое везде Emacs. Необходимость помнить, где я, и в зависимости от этого жать разные кнопки для переключения раскладки клавиатуры попортила мне немало нервов. Руки упорно срабатывали быстрее головы и успевали наколотить половину предложения прежде, чем я замечал ошибку. В конце-концов мне это надоело. Раз я один, значит и прывычка должна быть одна. Надо было сделать так, чтобы вне зависимоси от среды: Windows, Linux консоль, Linux X сессия, Emacs; переключение раскладок работало одинаково.
Мне повезло. Для Windows тема оказалась популярной. Почти сразу попалась программа lswitch.exe. Размером около 3KiB, все что она умела - это переходить на следующую раскладку при нажати клавиши, код которой задавался в единственным параметром командной строки. Казалось бы, то что нужно. Запуск lswitch прочно засел в автозагрузке:
c:\opt\bin\lswitch.exe 20
Стандартная переключалка была выключена, чтобы не смущала.
Казалось-бы то, что нужно, но оказалось, что казалось... Переключалка в целом работала, но некоторые окна её упорно игнорировали. Так себя вела Miranda. Какая уж тут радость общения, когда кроме как на английском писать ничего невозможно?! В попытках избавитсья от этого досадного глюка, пожалуй, единственное чего я не успел сделать, так это запустить драйвер клавиатуры под отладчиком (не знал как). Когда наконец выяснил, что команда на переключение раскладки всеже поступает, но игнорируется, друг гугль наконец подсказал решение. Виновником оказалась поддержка каких-то экзотических языков, которую за собой притащил IE7. После установки в реестре параметра в реестре и традиционной перезагрузки машины, переключение раскладки заработало во всех окнах.
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\IMM] "LoadIMM"=dword:00000000
Оставался последний рубеж - Emacs. Редактор имеет собственный механизм переключения языков ввода и этот механизм не очень дружит с системным переключателем. После включения русского языка, я конечно мог набирать тексты, но терял все горячие клавиши. Например, при попытке записать текущий буфер, вместо C-x C-s у меня получалось C-ч C-ы, на что Emacs откликался недоуменным взглядом из минибуфера.
Помог пост Дмитрия Галинского. Поскольку раскладка теперь переключалась по capslock, нажатие которой доходило до Emacs, все что надо было сделать вернуть системную раскладку и переключить язык средствами редактора. В файл ~/.emacs был добавлен код:
;; Unified language switching hack for Windows and Emacs
;;   http://dima-exe.ru/2007/4/win32-emacs-and-change-language
;;
;; Run lswitch.exe 20 on windows startup.
;; Define default-input-method variable in your .emacs.
;; Use CAPSLOCK to switch input language.

(setq default-input-method "russian-computer")
(defvar safe-language-change-flag nil)

(defun safe-language-change ()
(interactive)
(setq safe-language-change-flag (not safe-language-change-flag))
(when safe-language-change-flag
 (toggle-input-method)
 (w32-toggle-lock-key 'capslock)))

(global-unset-key (kbd "C-\\"))
(global-set-key (kbd "<language-change>") 'safe-language-change)

С настройкой Windows покончено, остается Linux допилить. К хорошему привыкаешь быстро. О стандартном способе переключения раскладок тепрь даже вспоминать не хочется.