будулай атонасиу Среда, Июн 24 2009 

Дядька жалуется на спину, показывает, вот тут чего то там ему наповыдергивали. И рука тоже болит, поэтому ходит сюда на гимнастику. Дядька с усами, в роговых очках. Мы с ним бегло болтаем по английски, что нечасто услышишь в этом деревенском спортклубе. Сейчас лето, и занятия в бассейне не проводятся до осени, а так бы он туда ходил, это полезно для спины, так доктор говорит. Вот на прошлой неделе какой-то немец тут же в спортзале сказал дядьке, что он де запесплатно его вылечит в Дюссельдорфе, только пусть то 30 тыс. евро на платину наскребет, чтобы ему новый позвоночник отлили.

Он еще рассказывал, как надо готовить осьминога,  где он работал после учебы в Intercollege, и как научился готовить в горном отеле Тродос, когда мыл там когда-то посуду – теперь эти навыки оказались кстати, жена ослепла. Вообще я слегка озаботился нашей беседой, поскольку времени на занятия оставалось все меньше. Впрочем, предрасположенность к поболтать весьма характерна в его возрасте. Дядьке недавно стукнуло восемьдесят.

1C tables / 1С таблицы (DBF) Четверг, Июн 11 2009 

Сегодня разбирал структуру данных 1С. Меня интересовало следующее:

  • foreign keys в таблицах (в особенности, как реализованы реквизиты типа “неопределенный” или “документ”)
  • “периодические реквизиты” в справочниках
  • группы в справочниках (создается ли отдельная таблица для элементов групп?)

Я использовал dbview для просмотра DBF. В чистой новой базе я создаю справочник без реквизитов. Появляется файл SC12.DBF. Второй справочник – файл SC14.DBF. При этом в файл 1SUIDCTL.DBF добавляются записи для каждого справочника (поля Typeid / Maxid)

Добавляем ссылку (реквизит типа “справочник 2″) из первого справочника во второй. Это добавляет поле Sp16 в таблицу справочника (SC12.DBF). В таблице справочника два поля, id и code, тип строка. Второе поле выводится на экран как код элемента, который может быть изменен. Ключ записи – это immutable column ‘id’.

Реквизит “неопределенный”
Добавляем реквизит “Справочник” (неопределенный) в справочник 1. В файле SC12.DBF появляется поле SP17. После внесения записей, кое что проясняется: поле SP17 длинной в 13 байтов содержит в 1 байте ссылку на таблицу, а в 7-м – id (ключ) записи в этой таблице. Таблицы кодируются буквенными символами. Такие же символы в записях таблицы 1SUIDCTL.DBF

Группа в справочнике.
Увеличиваем кол-во уровней с 1 до 2. Появляется реквизиты Paretnid и Isfolder в SC12.DBF. Как и следовало ожидать, Parentid это ссылка на Id. Isfolder для группы имеет код 1, для элемента – 2.

Периодические реквизиты
Добавляем в справочник 2 периодический реквизит. Следующие изменения:
- 1SCONST.DBF: после добавления значений в переменный реквизит второго справочника, мы получаем эти значения в файле 1SCONST.DBF. Кроме даты мы видим реквизит Id, Objid (по всей видимости составной ключ, первое – ссылка на колонку таблицы [changed 17 jul 09], NOTE A, второе – ключ в этой таблице. По отдельности каждое поле не уникально ) и Value, собственно со значением. В самом же файле SC14.DBF (с таблицей второго справочника) никаких изменений. Т.е. периодические реквизиты – это виртуальные колонки в таблице. На самом деле их там нет. Нет соответственно и foreign keys. Значит значения таких реквизитов система находит исключительно по индексам 1SCONST.DBF где есть ссылки на “основной” справочник.
Все периодические значения хранятся в этой таблице (1SCONST.DBF). Я создал в первом справочнике реквизит “периодический”, и после добавления значения оно появилось в том же 1SCONST.DBF (см выше о составном ключе). По всей видимости где-то хранятся таблицы соответствия таблицы/поля с кодом, который помещается при записи в таблицу периодических значений в поле Id. Тип данных для периодических реквизитов – строка.

Подчиненный справочник

Создаем третий справочник и “подчиняем” его первому. В итоге получаем:
Новый файл  SC29.DBF c одной из колонок Parentext (для внутреннего подчинения используется поле Parentid). Parentext содержит ссылку на id записи в таблице – “владельце”. Кода самой таблицы-владельца в записях таблицы подчиненного справочника нет.
Новая запись в 1SUIDCTL.DBF

Иные наблюдения.
Добавление общего реквизита в документы не изменяет timestamp ни одного DBF файла в базе.
Вероятно все параметры (=user defined columns) имеют уникальное кодовое имя типа Sp[No], где No – уникальный ключ

Добавление документа (конфигуратор) новые файлы:
1SJOURN.DBF
DH21.DBF
DT21.DBF
После добавления документа обновился кроме прочих файл 1SUIDCTL.DBF
Таблица DH21.DBF содержит  Iddoc (ключ),  и user defined атрибуты (Sp22 и Sp20 в моем случае). Таблица DT21.DBF – Iddoc (foreign key), Lineno (индекс) и опять же атрибут мною определенный в конфигураторе (Sp23)

Создаем еще один тип документа и новый журнал документов. Выясняем следующее: записи всех журналов хранятся в одной таблице 1SJOURN.DBF. Идентификатор журнала – поле Idjournal (0 для общего, O – для вновь созданного). В таблице есть поле Dnprefix,  значение которого совпадает с числовой составляющей в названии файла таблиц, хранящих соответствующий документ. Так, для первого моего документа запись в журнале в этом поле имела значение 21. Осталось непонятным, где хранятся значения общих реквизитов.

БУХГАЛТЕРИЯ

Добавляем план счетов, определяем справочник валют. Новые файлы:
1SACCSEL.DBF
1SENTRY.DBF
1SOPER.DBF
1SSBSEL.DBF
1STOPER.DBF
1SACCS.DBF
1SBKTTLC.DBF
1SBKTTL.DBF
1SCORENT.DBF
DH33.DBF
Далее анализировать содержимое шибко не стал по разным причинам. На беглый взгляд, нормализация данных в этих таблицах довольно слабенькая.

Регистры учета (оперативный учет)

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

NOTE A: Очевидно каждая колонка (или атрибут того или иного объекта, в терминологии 1С), получает свой внутренний id. Далее этот id используется для foreign keys.

playing with the screens Четверг, Май 21 2009 

I have 2 laptops. One, x41 IBM is old enough to have its screen suffer from the lamp degradation. Another one is IBM x61 wich screen recently has been cracked a bit. Across, to be specific. Both have the screen dimention in common, so our schedule today are:

  1. replace screen on x61
  2. extract the lamp, which is still pretty bright from the broken screen
  3. replace the old lamp from the screen of x41 with that one from x61.

I didn’t want to replace the whole screen of x41 because a) I am quite a stingy person,  b) I like to pretend that I am here to save the world (in this particular case by limiting wastage) and c) why on earth I have to buy a new screen anyway if the only thing I need is a lamp? (And, logically, why the hell I have to buy a new lamp, which is sure quite inexpensive, when I have a decent lamp in the broken screen?) I can’t figure out which of the arguments was most important to me.

So, first the screen has been ordered on ebay: it is easy to find one for almost any contemporary laptop. It took 1 week to get it to Cyprus. Now we have excellent instructions here and here. So, if you have decent hammer and saw, you are done. Almost.

I decided to make further notes on the photos I took during the work (here).

After replacement of the lamp two noticable bright spots appeared at the bottom of the screen, where the lamp resides. I’ll try to fix it a bit later, since it annoys me very little.

compiling gThumb on Ubuntu Вторник, Апр 14 2009 

IN order to get rid of “error while loading shared libraries: libgthumb.so: cannot open shared object file: No such file or directory” error do this:

> ln  -s  /usr/local/lib/libgthumb.so  /usr/lib/libgthumb.so

Though some folks say it is a bad practice …

openERP / initial setup Понедельник, Мар 16 2009 

1.  On error

ERROR:dbpool:Unable to connect to template1: FATAL: password authentication failed for user …
first check that all local connections are authenticated with md5, not with ‘ident sameuser’ in postgre conf file pg_hba.conf, something like this:

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
local       all                       all                                                      md5

2. Never try to login to any database from openerp client before you create one (or previously created under openerp database is available)

1C + Wine (continued) under Ubuntu 8.10 Суббота, Мар 7 2009 

Известная истина гласит: если что-то заработало сразу, значит ты упустил возможность научиться чему-то новому.

Надысь у меня все заработало с wine+1C и я счастливый остался в неведении о многих распрекрасных моментах жизни. На новой инсталляции Ubuntu все было не так радужно. А именно, то, что в п.7 в вышеуказанном моем посте работало прекрасно, на сей раз работать не захотело. И еще кодировка KOI8 упорно не хотела работать. Пришлось ознакомится с проблемой поближе.

Я кстати поставил 1С на имеющийся у меня последний дистрибутив от codeweavers – crossover (или crossoffice как его часто называют), вылизанный коммерческий вариант wine. С ним не было проблем с майкрософтовскими библиотеками, но с кодовой страницой я так и не сладил. И, как выяснилось позднее, неудивительно. Так что если с locale у вас на машине все ОК и вы не хотите ковыряться с dll ками, то не пожалейте немного баксов, да и добро сделаете для разработчиков того же wine. Впрочем, коль вы такой жмот, что деньги свои дороже матери, то по правде говоря, ковыряться с библиотеками долго не придется. Итак, ниже – модифицированная инструкция по инсталляции:

1. Подразумевается что имеем Linux с инсталлированным wine.

2. Проверяем локальные установки, что нам доступны:
> locale -a
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8

Если находим там ru_RU.koi8r или что-нить подобное (может быть ru_RU.KOI8-R), то, как пысал выше, продолжаем оставаться в сладком неведении и прыгаем к п. 5. Иначе же пытаемся добавить недостающую локаль.

3. Для этого интересуемся файлом

>less  /usr/share/i18n/SUPPORTED

и ищем там все, что похоже на ‘ru’. Лучше конечто так:
> cat /usr/shqre/i18n/SUPPORTED | grep -i ‘ru’

и смотрим внимательно. Как что-то видим похожее на ru_RU.koi8r (см выше), запинаем насмерть.

4. Потому как далее печатаем вот это:
> sudo locale-gen ru_RU.koi8r (ну или что там нашли подходящее)

Далее, просмотр доступных локалок (см выше) должен нам показать, что отныне ru_RU.koi8r прочно занимает славный список. Вот и прекрасно. Идем далее

5. Ставим родные dll.
- удаляем библиотеки что пришли с wine:

   >rm ~/.wine/drive_c/windows/system32/ole32.dll
   >rm ~/.wine/drive_c/windows/system32/oleaut32.dll

- ставим родные (перед DCOM98.EXE, натурально, надо указать полный путь к файлу, если находимося не рядом с ним.

   >WINEDLLOVERRIDES=\"ole32=n\" wine DCOM98.EXE

- далее в winconfig прописываем использование родных библиотек, как это было указано в ранее цитировавшейся инструкции.    Альтернативный вариант – это запуск windows программы из консоли с указанием параемтров:

>WINEDLLOVERRIDES=ole32,oleaut32,rpcrt4=n wine my_program.exe

6. Собственно все. Запуск 1C  я выполняю из консоли, подставляя переменную среды:

>LANG=ru_RU.koi8r wine ~/.wine/drive_c/Program\\ Files/1Cv77/BIN/1cv7s.exe

Можно добавить сюда WINEDLLOEVERRIDES, как указано выше, и тогда в настройки wine можно вообще не лезть. Осталось сделать Launcher в Gnome и щелкай себе на здоровье. Не забываем отключить Окна-Панель окон-Показать в 1С и в конфигураторе wine отключить Allow the window manager to control the windows, что впрочем не обязательно.

В crossoffice все должно работать тоже, надо лишь настроить локалку, как описано вот тут:

http://www.codeweavers.com/support/wiki/CXOffice62_ChooseDifferentLanguage

У меня это не работало, ясен пень, поскольку локалки такой вообще не было сконфигурировано в системе.

vim: quickfix & grep Понедельник, Мар 2 2009 

Today quickfix and grep facilities of VIM are in my favorite list. TagList extention occupies the whole window and does not show all procedures you might want to have a list of. So I came to grep utility incorporated in VIM and quickfix ‘buffer’ which in extend to normal buffer can be quickly hidden, stores history of latest 10 searches and allows to jump to any item in the list.

GREP

:grep what_am_i_looking_for *

Nothing special. Just as printed in command line.

QUICKFIX

after populating quickfix ‘buffer’ the way of navigating through it is with this (general) commands:

  • :cn (next) / cp (previous) item in the list
  • :cope[n] / ccl[ose]  – opens and closes the quickfix window
  • :cl[ist] – show the list of all occurences
  • :col[der] / cnew[er] – navigate to older / newer list in the list stack

All commands can be appended with the number(s), which further stipulates what item(s) / list(s) are affected or included in the output, see documentaion.

The quickfix facility is described in full in built-in help in VIM as well as online. It’s primary design was targeted to facilitate edit-compile-edit style programming and hence it’s functionallity goes well beyond what has been pointed to above. The tool is made with excellent level of abstraction and can be employed in various scenarios. On this mechanism many plugins have been built, such as grep.vim

Macbook Четверг, Фев 19 2009 

Купил себе на голову сей аппарат и пришел нынче к невеселому заключению, что польза от него оказалась весьма сомнительной. Итак, что же там хорошего?

  1. Машинка сама весьма красивая и современная. Акумуляторы, процессор, экран, интерфейсы – все замечательно.
  2. Мультимедиа софт, что поставляется разом с изначальной инсталляцией. Неплохие програмки, ничего не скажу. iDvd, iMovie, GarageBand – отличные штуковины. Ну там чатные всякие клиентики, Audium, Skype – покрасивее чем соответственно Pidgin и Skype-Linux.
  3. Графический интерфейс – красивые цвета, фонты, рюшечки и бирюльки.

Ну и значит о главном. Большую надежду я возлагал на MacPort. Зря. Сутки я бился с инсталляцией encfs. В бинарнике pkg почему-то отсутствует blowfish, а тот модуль, что в компилится под MacPort и компилится то только с патчами, которые я не сразу нашел. Да и потом работать не стал. Компилятор я видно не знатный, посему оставляю это удовольствие для любителей попрофессиональнее. Вообще, поотвык я от ситуации, когда програмки можно поставить разными способами с, соответственно, перспективой искать потом конфликтные ситуации. Я избалован Linux, где не отходя от кассы получаешь полную информацию о всех зависимостях, файлах, причем в любую сторону – как поиск всех файлов для данного пакета, так и наоборот, принадлежность конкретного файла в системе к какому-либо пакету. Ну про компиляцию я уже молчу – под Ubuntu к слову я этим делом занимался в прошлом году раза два-три, более по любопытству. Итак минусы:

  1. Отсутствие какого-либо приличного package managemnt.
  2. MacPort конечно вещь перспективная наверное, но работать с ней надо с хорошим запасом времени.
  3. Соответственно, набор программок – что дали, то и пользуй.
  4. Может не актуально шибко, но все же: размеры всего софта – это отдельная история. Ubuntu и Fedora к примеру занимают при инсталляции 3.4 Гб (со всей фигней типа OpenOffice etc и даже swap file :) ).
  5. Кроме как своей собственной файловой системы мы ничего другого не бачим-с. С внешнего стандартного USB / flash диска мы загружаться не будем-с. И вообще там свой путь с BIOS, точнее с полным егойным отсутствием, что жизнь ИМХО проще не делает.

В общем ныне как будет время попытаюсь залить на него линукс, вроде как пипл говорит что может получиться. Я бы конечно оставил возможность запустить MacOS для мультимедийный программ, но отдельно для этого iDisk покупать меня жаба задушит, а пилить хард на две части не хочется, ей богу. В общем пока оставил это дело на потом.

Вывод: все слухи о том, что Mac OS прекрасно подходит для линуксоидов, являясь воплощением известного принципа  ‘best of both worlds’  оказались несостоятельными. Любой дистрибутив из верхней десятки Linux, равно как наверное и из средней десятки, гораздо интереснее и удобнее, если конечно же пользователь не умирает через минуту, если не увидит в нужном месте привычную кнопку. Подстроить под себя Leopard – так себе задачка тоже. Решения скудные, да и большинством платные. Тырить программы я уже разучился.

handling huge pdf Вторник, Фев 10 2009 

Usually these files are produced by skillful officers who scan some documents at the highest resolution and the lowest (if any) compression rate.There are two steps to get sensible images out of them:

  1. extract images from pdf:
    > pdfimages input.pdf output

    This will give us 1 or more files, each for a raster image within the original pdf.

  2. > convert output-001.ppm something.jpg
    We didn’t change the resolution. let’s pay attention:
    > convert output-001.ppm -resize ‘%50′ something.small.jpg
    Let’s remove colors:
  3. > convert output-001.ppm -resize ‘%50′ -type grayscale something.small.jpg

Notes:

  1. First, I found that -type grayscale option gives smaller and better-looking image than -monochrome option.
  2. Second, the difference in size of grayscale and color image is not a big deal.
  3. The overall drop in size might be significant: original pdf file with 2 images on 2 pages weights 3.9 Mb. Extracting and converting them to jpg with  -type grascale option gave me 2 files of 0.38 Mb each. Downscaling them to 70% produced excellent images of 1156 x 1635 resolution each of 0.23 Mb.
  4. It might be desirable to put all the staff back into pdf format. I did it again in two steps :)
    STEP ONE
    > convert something.small.jpg part_one.pdf
    > convert something.small.jpg part_two.pdf
    STEP TWO

    > pdftk part_one.pdf part_two.pdf cat output final.pdf

Of course one should probably write a script to combine all steps in one command, but I am a) lazy, b) do not need to make such a conversions often, c) a relatively speedy typist

disable menu shortcut in GNOME application Воскресенье, Фев 8 2009 

For example, to disable <F1> shortcut in Gnome Terminal (in order to pass it to, say Vim), do the following:

  1. Go to System > Preferences > Apperance, Interface tab, make sure that ‘Editable meny shortcut keys’ enabled.
  2. In application window, Gnome Terminal in our example, click Help > highlight ‘Content’ and press ‘backspace’. The key designation after the ‘Content’ will disappear. You can re-assign a key later by doing the same, except for pressing a key other than ‘backspace’.

Taken from here:

http://linux.derkeiler.com/Mailing-Lists/GNOME/2007-03/msg00010.html

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