Роман Киселев

Программер среди продавцов, продавец среди программеров

Passed 70-642
[info]romankiseliov
Сдал Exam 70-642: TS: Windows Server 2008 Network Infrastructure, Configuring, 1000/1000. Экзамен показался легче, чем по серверу 2000.

Умер академик Виталий Гинзбург
[info]romankiseliov
Соболезную.

Docu-Track PDF-XChange
[info]romankiseliov
Читалка для PDF и немного редактировалка, доступная за бесплатно, -- http://www.docu-track.com/downloads/
Уже неделю пользуюсь, придраться ни к чему не сумел. К Foxit Reader плагины скачивать нужно, адобовское творение страдает ожирением, Sumatra -- походный вариант для случаев, когда свободен на винчестере последний мегабайт.

Еще в PDF-XChange шрифт выглядит более контрастным. Умеет в Висте и 7-ке показывать превью. Плагин от PDF-XChange не глючит с Firefox, чем меня огорчал Foxit Reader.

PDF-XChange по пятибальной шкале оцениваю на 5, несмотря на то, что сумел уронить, выдернув флешку, с которой он читал файл :)

Strong host model, packet forwarding, Windows Server 2008
[info]romankiseliov
Форвардинг между интерфейсами включать в Windows Server 2008 так


• netsh interface ipv4 set interface [InterfaceNameOrIndex] weakhostsend=enabled|disabled
• netsh interface ipv4 set interface [InterfaceNameOrIndex] weakhostreceive=enabled|disabled
• netsh interface ipv6 set interface [InterfaceNameOrIndex] weakhostsend=enabled|disabled
• netsh interface ipv6 set interface [InterfaceNameOrIndex] weakhostreceive=enabled|disabled


или в RRAS, как обычно, галочку.

VirtualBox, сменить UUID диска
[info]romankiseliov
VBoxManage internalcommands setvdiuuid disk2.vdi

Sysprep, Windows Server 2008
[info]romankiseliov
c:\windows\system32\sysprep\sysprep.exe

Недоработали с фокус-группой
[info]romankiseliov
Рядоv с офисом магазин с обувью. На нем надпись 1+1=10, и я в ней не вижу ничего необычного.

Ubuntu 9.10
[info]romankiseliov
Ubuntu 9.10 настолько дружелюбна, что всегда загружается с поддержкой dm-raid. При установке в параметрах ядра не записывается nodmraid, если на вопрос про raid ответить "нет, не нужно".

Вот я и чесал затылок, пытаясь сообразить, почему "оно не грузится", тщетно пытаясь найти устройство с корнем. А оно делало мне raid-массив из винтов, на которых раньше был софтверный интеловский рейд. Хвосты дискам нулями лень было мне пробить после удаление рейд-тома, вот и напоролся. Добавил в конфиг груб-а ядру nodmraid и почувствовал себя пародией на Гарри Поттера :)

Плата GA-P35DS3R на чипсете P35 с поддержкой Intel Matrix RAID. Контроллер сейчас в режиме AHCI, а не RAID. С более ранними Ubuntu-ми проблем не было.
Tags:

Сапожник с сапогами
[info]romankiseliov
Сегодня курьером прибыла моя личная копия Visual Studio 2008 Pro. Внутри диск с вижуалкой-2008, сиквелом-2005, книжка про то, как приступить к работе :), памятка с хоткеями. Все находилось в пластиковой коробке по образцу офиса-2007 и висты.

Это я успел на сентябрьскую промо-акцию. Рад. Удалил экспресс-версию и водрузил новоприобретенный инструмент.

Недорого, по-моему
[info]romankiseliov
Места в очереди страждущие продавали за 100-200 рублей. Плохие люди, которые вряд ли заслуживают доверия, говорят, что блюстители порядка за пять сотен водили желающих без очереди.

Неделя священной иконы в Курске
[info]romankiseliov
Вначале носили икону. 400-тысячный город испытывал неудобства с движением транспорта ради старушек вокруг центральной улицы и упитанных священнослужителей.

Потом ее на неделю выставили в Знаменском соборе на нашей центральной площади -- Красной площади. Эта неделя запомнилась следующим:

  • огромный плакат с надписью "Курский край приветствует митрополита Кирилла". Странно, лучше бы написали, что некоторые жители нуждаются в чуде, потеряв надежду на все остальное, как плачущая женщина с ребенком-инвалидом, которую верующие не пропустили без очереди. При чем тут Кирилл, не понимаю. Кстати, у него не бу-шная иномарка;

  • вытоптанные стоящими в очереди на полкилометра газоны;

  • собачащиеся в очереди верующие -- любители священной халявы благодати;

  • запах от десятка биотуалетов, что не совсем уместно на центральной площади;

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

  • пожилые люди, которым становилось плохо в этой безумной очереди;

  • женщина с поломанными в давке ребрами;

  • милиционеры, спрятавшиеся от дождя, и побежавшая толпа;

  • дорожка из цветов, по которой попы носили икону;

  • чудовищная тишина и вой бабок перед тем, как несли икону. Ощущение апокалиптическое;



Может ли что-либо из перечисленного стоять рядом с верой, надеждой и любовью? Нет, не может.

Верующих из других городов пропускали без очереди. Без очереди пропустили и оплот светского государства -- президента Медведева, отогнав жителей на почтительное расстояние. Я его понимаю: попы помогают держать под контролем немалую часть граждан.

У служителей культа немалый урожай. Бумажных иконок и восковых свечек продали, уверен, более, чем обычно. На часы и иномарки церковным начальникам хватит. Да на кресты золотые с драгоценными камнями.

Рано радовался
[info]romankiseliov
Один камень почти на выходе. Второй, как сообщил доктор, собирается на выход. Поэтому стало легче.

А кому сейчас легко?
[info]romankiseliov
В субботу в районе полуночи врачи "скорой" сообщили мне новость: оказывается в моей почке есть несколько камней, и они решили выбраться наружу!

Это больно. Больно воскресенье, понедельник, вторник. Случается приступами. Вчера вечером после удара обезболивающим по нервной системе скушал арбуз и в течение получаса прыгал, как на скакалке, только без скакалки. Раз, два, левой, раз, два, правой, раз-два-три-четыре-пять левой, раз-два-три-четыре-пять правой, а потом высоко поднимая голени. Вспомнил молодость :)

Всю ночь не болело. С утра не болело. Сейчас ноет немного. В 16.30 поеду к доктору.

Если кто-то мне пожелал, чтобы я (немного) помучался, то его желание сбылось.

Кстати, у автора ВинРар-а тоже новости. Он больше не компилирует ВинРар с помощью Borland C++. Теперь он пользуется православным на просторах Windows-а компилятором Microsoft Visual C++. Это прямо доказывается строками от рантайма и "печатью Билла" -- "Rich" в екзешнике и немного спрятанная информация о машине сборки. Косвенно -- сборкой под x64.

И, чуть не забыл, от чего могут заболеть нервы/почки у автора упомянутой утилиты. Я прочитал в "этих ваших интернетах", что для ВинРар-а в районе 20 августа 2009 года сделали кейген. Теперь верить рар-архивам с цифровой подписью не стоит, на мой взгляд.

На следующей, пожалуйста
[info]romankiseliov
В нашем городе маршрутки "Газели" вытеснены маршрутками "Форд", в которых можно стоять, не навлекая гнев ГИБДД на водителя.

С приходом сентября пассажиров стало больше, и шанс стоять в "Форде" очень высок. Когда стоишь, из окна видна только дорога, и вероятность пропустить нужную остановку больше. Неделю ориентировался по деревьям и крышам зданий, видимым в прозрачном люке на потолке маршрутки.

А сегодня люк был не прозрачный, а матовый! Сообразил считать "зебры".

Понимать
[info]romankiseliov
"Я слышу, и я забываю. Я вижу, и я запоминаю. Я делаю, и я понимаю."
Конфуций

Спокойнее
[info]romankiseliov
"Мы, сильные, должны сносить немощи бессильных и не себе угождать."
Послание Святого Апостола Павла Римлянам, 15:1

NSIS, UNICODE, !packhdr
[info]romankiseliov
Про NSIS известно всем :)

Есть у него вариант, который используют Mozilla и OpenOffice -- NSIS-UNICODE. Понимает UNICODE в виде UTF-8, UTF-16(LE, BE).

Версия 2.42.5 падает при использовании !packhdr. Сообщил вчера автору, сегодня он уже поправил и прислал мне на тестирование. Работает, as expected. Скоро на сайте будут новости.

Заодно попросил его убрать из архива с исходниками хотя бы Unsis.ncb. Не красит распространие таких файлов архивы с исходниками.

Обновить ресурсы exe
[info]romankiseliov
Потребовалось обновить ресурсы у уже готового exe. Есть BeginUpdateResource, UpdateResource, EndUpdateResource и MSDN. Есть платные и бесплатные ResHacker, Resource Tuner, т.п. А вот как сделать на Python :)

# Author: Roman V. Kiseliov
# Purpose: update version information in EXE

import os
from py2exe.resources.VersionInfo import VS_VERSIONINFO, RT_VERSION, StringFileInfo, VarFileInfo, VersionError
from py2exe.py2exe_util import add_resource


def update_version(exe_path):
    strings = []

    version = "1,1,1,1"

    # standard info
    strings.append(("FileVersion", version))
    strings.append(("ProductVersion", version))
    strings.append(("OriginalFilename", os.path.basename(exe_path)))
    strings.append(("Comments", "comments"))
    strings.append(("CompanyName", "company_name"))
    strings.append(("FileDescription", "file_description"))
    strings.append(("InternalName", "internal_name"))
    strings.append(("LegalCopyright", "legal_copyright"))
    strings.append(("LegalTrademarks", "legal_trademarks"))
    strings.append(("PrivateBuild", "private_build"))
    strings.append(("ProductName", "product_name"))
    strings.append(("SpecialBuild", "special_build"))

    # something on my own
    strings.append(('Some data on my own', 'on my own'))

    try:
        vs = VS_VERSIONINFO(version, 
                    [StringFileInfo("041904B0", strings), 
                    VarFileInfo(0x04B00419)])
        bytes = str(vs)

    except VersionError, detail:
        print "Version Info will not be included:\n  %s" % detail
        return

    add_resource(unicode(exe_path), bytes, RT_VERSION, 1, False)

if __name__ == "__main__":
    update_version("foobar.exe")


Это пример обновления версии об информации. Можно, конечно, и другие. Мне скриптом на Python гораздо удобнее и автоматизированнее остальных вариантов.

add_resource(exe, res_bytes, u"MYRESTYPE", res_id, True) # resource type in upper-case
add_resource(exe, bmp_data[14:], RT_BITMAP, bmp_id, False)
add_resource(exe, manifest, RT_MANIFEST, mfest_id, False)
add_icon(exe, ico_filename, ico_id)

Пример хука
[info]romankiseliov
База для хука на коммит в Mercurial, если хочется in-process:

# Author: Roman V. Kiseliov
# Purpose: illustrate basic work with in-process python Mercurial hooks

from mercurial.node import nullrev, short
from mercurial.util import datestr, Abort

data_fmt_str = "%s changeset:\n\tnode=%s,\n\trev=%i,\n\tshort=%s,\n\tdate=%s\n"
date_fmt_str = '%Y-%m-%d %H:%M:%S %1%2'

# To fire up hook following must be stated in 'hgrc' supposed 
# 'hooks/update-build-info.py' is placed in root of working directory:
#
# [hooks]
# commit.update-build-info = python:./hooks/update-build-info.py:myhook
#

def myhook(ui, repo, hooktype, *args, **kwargs):
    
    if hooktype != 'commit':
        raise Abort('Hooktype "%s" is not supported.' % hooktype)

    try:
        print 'root:', repo.root

        str_nodes = [(kwargs["node"],    'committed'), 
                     (kwargs["parent1"], 'parent #1'), 
                     (kwargs["parent2"], 'parent #2')]

        for str_node, description in str_nodes:
            if str_node:
                # <ugly>
                # node    = repo.lookup(str_node)
                # log     = repo.changelog
                # rev     = log.rev(node)
                # changes = log.read(node)
                # date    = datestr(changes[2], date_fmt_str)
                # </ugly>

                changeset_context = repo[str_node]

                node = changeset_context.node()
                rev  = changeset_context.rev()
                date = changeset_context.date() 

                date = datestr(date, date_fmt_str)

                data_tuple = (description, str_node, rev, short(node), date)
                print data_fmt_str % data_tuple

    except Exception, e:
        raise Abort('Hook has encountered an error "%s".' % e.message)


В документации не нашел примера, в Mercurial: The Definitive Guide есть бесполезный абзац про in-process, содержащий в теле хука только pass.

Засучил рукава
[info]romankiseliov
Не мог побороть загрузку хуков в Windows для Mercurial. Оказалось, что авторы забыли, что полный путь в некоторых ОС :) содержит двоеточие. Родилась истина в виде патча

diff -r ac02b43bc08a -r ae77dcc39dc0 mercurial/hook.py
--- a/mercurial/hook.py Mon Jul 27 18:38:20 2009 -0500
+++ b/mercurial/hook.py Wed Aug 05 03:56:01 2009 +0400
@@ -110,9 +110,9 @@
             if hasattr(cmd, '__call__'):
                 r = _pythonhook(ui, repo, name, hname, cmd, args, throw) or r
             elif cmd.startswith('python:'):
-                if cmd.count(':') == 2:
-                    path, cmd = cmd[7:].split(':')
-                    mod = extensions.loadpath(path, 'hgkook.%s' % hname)
+                if cmd.count(':') >= 2:
+                    path, cmd = cmd[7:].rsplit(':', 1)
+                    mod = extensions.loadpath(path, 'hghook.%s' % hname)
                     hookfn = getattr(mod, cmd)
                 else:
                     hookfn = cmd[7:].strip()


, который вот здесь

http://mercurial.selenic.com/bts/issue1779

Home