nataraj: (Default)
[personal profile] vitus_wagner, [personal profile] beldmit, ну и кто еще в теме разбирается...

Расскажите, насколько легальна в Си вот такая штука:

Есть некий массив сопоставляющий имя и значение, и есть еще возможность значения по умолчанию, которое имени не имеет.

Чувак предлагает делать так:

#define NAME_DEFAULT ((const char *) -1)        /* pseudo-name for default value */


А потом проверять

if(Chto_to->name == NAME_DEFAULT)


Где name -- это char*

Для меня это какое-то страшное сишное конлдунство, я не могу оценить насколько оно корректно и переносимо между компиляторами.

Потому как я бы право слово скорее #define NAME_DEFAULT "" сделал бы. Ибо пустого имени все равно не бывает. И потом при помощи сравнения строк его проверял бы. Но может это у меня просто нету правильной сишной закалки.
nataraj: (Default)
[syndicated profile] postgres_commitfest_feed уже окупился. Отловил желающего потоптаться по той части кода, которую я сейчас ковыряю. Прямо на ранних подступах отловил.
Польза.
nataraj: (Default)
Заметка скорее для себя, чем...

Если быть более точным, то не ловим, а убеждаемся что они есть, и по возможности локализуем.
Значит есть такой модуль Memory::Usage Read more... )
nataraj: (Default)
Медленно но верно движусь в направлении закрытия своих опесорсных долгов.
А то патчи понимаешь, написаны, но не зкаоммичены. Безобразие.
Мой мега патч полностью переделывающий работу с опциятми таблиц был в результате мучительно медленного взаимодействия с комьюнити порезан на части и отправлен на коммитфест.

https://commitfest.postgresql.org/15/1314/ (уже закомимчен) - тесты на работу опций таблицы. (Таковых раньше не было)
https://commitfest.postgresql.org/17/1489/ - добавляет тип опции Enum (а то раньше его по сути эмулировали строковой опцией, с рукописной функции валидации)
https://commitfest.postgresql.org/17/1536/ - вместо единого бинарного преставления опций для более половины типов relation'ов, вводит индивидуальные представления на каждый тип. Иначе получалось, что задаешь ты индексу fillfactor а память под него резервируется на все опции которые возможны для heap'а. Потому что универсально.

Последнее вот только что доковырял.
Как последние два закоммитят, можно будет финальный патч коммитить. Который старый механизм работы опций разрушает до основания, а затем...

Еще есть странный https://commitfest.postgresql.org/17/1486/ который тоже к теме опций отношения имеет.
Там история в том, что если задать опции работы TOAST'а для таблицы в которой TOAST'а нет, то постгрес это молча съест, а значения опций просто потеряются. Я в этом патче предлагаю непущать, но в рассылке меня убедили что так нельзя. Поэтому наверное вместо этого надо будет пренудительно создавать TOAST-таблицу ставить туда опции и предупреждать, что "чувак, ты что-то странное делаешь". Но пока какой-то финальной отмашки я в рассылке не получил, и непонятно, получу ли...
nataraj: (Default)
Hi!

I'd like to tell everybody that I've created an RSS feed that streams notification about new patches posted to Postgres Commitfest.

http://perl.nataraj.su/commitfest-rss/commitfest-rss.pl

Now it just parses the site and make a feed from that data. If you also use RSS feeds and like to watch for new commits, feel free to use it.

May be once this feature will be implemented in commitfest.postgresql.org. But I am not able to implement it there myself as I do not write python.

Source code of the script can be found at my message to psql-www mailing list.

Feel free to write comments in that mail-list, personal email, or in the blog (you will need OpenID to authorize there)
nataraj: (Default)
Сделал парсилку постргессового коммитфеста, с заворачиванием новых патчей в RSS-поток. Чтобы не отвлекаясь от чтения DW узнавать о новых патчах и ловить те, которые мне по силам и интересам ревьюить.

В DW доступно как [syndicated profile] postgres_commitfest_feed, для остальных -- http://perl.nataraj.su/commitfest-rss/commitfest-rss.pl
Немного потестю, и наверное надо будет написать в соответствующую рассылку, с предложением сделать такое-же, но уже напрямую из базы. Тогда же и исходник опубликую...
nataraj: (Default)
Пытался поймать утечку памяти в своем перловом коде. Все-таки неприятно когда скрипт после суток работы вылетает с Out of memory.
Закончились поиски на уровне IO::Socket::SSL, и я понял что глубже копать мне как-то с наскоку слабо.

Пойду воспроизведу ошибку на sid'е (там более свежий нижележащий Net::SSLeay, который без танцев на squeeze в пакет не собирается) и напишу баг репорт.

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

Update:[personal profile] beldmit в fb посоветовал закрывать за собой сокет. Не помогло. Попробовал в sid'е, тоже течет...

А как вообще должен себя вести незакрытый сокет в перле?

Update2: Нашел на нижележащем уровне незакрытый тикет про Memory Leak. Подписался на апдейты, и пока на этом успокоюсь...

Update3: Не успокоился: https://rt.cpan.org/Ticket/Display.html?id=123520&results=db2511db9c9a60b56ff1d5ddb3b09c95
nataraj: (Default)
Разбирая старые архивы, нашел стикеры примерно девятилетней давности которые использовал в качестве локального трекера.

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

- "Дублировать шаблон" при дублировании теряет язык, что убивает TRANSLATE
- Почему cmwcronrunner так странно ругается когда не может создать pid фай
- Почему эта ругань никуда не пишеться
- Проверить откуда @SYSDATE берет дату, она отличается от даты date на 15 минут :-\
nataraj: (Default)
Хорошо отдохнул... а точнее продолжаю. Народ в середине сентября сниматься собирается. Ну и я окончательно с ними...
Как я узнал: Я сейчас не смог вспомнить название пакета "build-essential". Помню что build-что-то... пришлось грепать и смотреть глазками...
nataraj: (Default)
Между тем, пока я активно болел спиной, я таки сделал это. Я отправил на коммит тот патч, который я слишком медленно программировал перед тем как покинуть последнее место работы. Даже не весь патч, а его первую половину. Вторая так и существует в виде пруф-оф концепта пока.

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

https://commitfest.postgresql.org/13/992/

Рассылка правда нефига не возбудилась. Правда Альваро (который эту систему опций когда-то писал) в привате обещал в рамках мартовского коммитфеста этот патч отревьюить. Так что ждем. Надеюсь будет у меня еще кусочек программистского портфолио...

В дальнейших планах закоммитить гостовское шифрование для xmlsec'а, довести до ума и закоммитить опции индексных колонок для postgres'а. И если дадут, то опубликовать перловый модуль для монтирования хеш-дерева в качестве fuse файловой системы.
А дальше видно будет.

А пока жду отзыва комьюнити и перетряхиваю свой сервак...
nataraj: (Бритый небритый)
My colleague Alex_Ignatov@facebook.com found curious behavior of random():

postgres=# select (select random() as value ) from generate_series(1,10) as k;
       value       
-------------------
 0.715956253930926
 0.715956253930926
 0.715956253930926
 0.715956253930926
 0.715956253930926
 0.715956253930926
 0.715956253930926
 0.715956253930926
 0.715956253930926
 0.715956253930926
(10 rows)


Something like
int rnd=5; // This figure is really random. Got it by rolling a die

;-)

Имена

Jun. 23rd, 2016 03:40 pm
nataraj: (Бритый небритый)
Я предпочитаю называть переменные так, чтобы из имени было понятно, кто на ком стоял. Ну или по крайней мере требовало минимальное знание контекста. Правда получаются вот такие вот монстры: STRING_OPTION_VALUE_NOT_SET_OFFSET
nataraj: (Бритый небритый)
While rewriting reloption.c code, I came to an idea, that all string reloptions that are used in the code are actually enum reloptions: just a fixed list of string constants, nothing more.

Read more... )

PS. If you would like to comment this post, please login from any social network that is possible to login here, or at least write your name, so I would be able to answer you...
nataraj: (Бритый небритый)
When you are creating table in postgres, you are creating up to two relations in a row.
In case when you create table with fixed-length attributes only, only one relation is created. A heap relation.
If you have at least one variable-length attribute in your table, then both heap and toast relations will be created.

Relations also have options: reloptions. You can set them while creating and altering table. To set options for toast relations you should use toast. prefix before reloption name:
CREATE TABLE reloptions_test (s varchar) WITH (toast.autovacuum_vacuum_cost_delay = 23 );

The only problem is that if you have table with no varlen values, postgres will accept toast reloption, but will not write it anywhere.
#CREATE TABLE reloptions_test (i int) WITH (toast.autovacuum_vacuum_cost_delay = 23 );
CREATE TABLE
# select reltoastrelid from pg_class where oid = 'reloptions_test'::regclass;
 reltoastrelid 
---------------
             0
(1 row)

there is no toast relation and reloption is not saved at all, postgres reports, everything is ok

Same for alter table:
# ALTER TABLE reloptions_test SET (toast.autovacuum_vacuum_cost_delay = 24 );
ALTER TABLE
# select reltoastrelid from pg_class where oid = 'reloptions_test'::regclass;
 reltoastrelid 
---------------
             0
(1 row)

This is not nice behavior, isn't it?

PS please when writing a comment, login with any account you have, or just leave a name and/or e-mail so I will be able to answer that comment ;-)
nataraj: (Бритый небритый)
Народ вернувшийся из Канады, рассказал, что после релиза 9.6 следом будет релиз 10. При этом без точек. За ним будет 11 и так далее... Стабильный релиз будет иметь одночисловую версию.
nataraj: (Default)
Други мои, а кто-нибудь разумеет сх%я-ли group by в mysql нечуствителен к регистру, и объединяет мне "Магнитогорск" и "МАГНИТОГОРСК" в одну группу? Это так и должно быть или выпендреж именно мускла?
nataraj: (Default)
есть выпадающий список с разнотипной информацией (в смылсе везде текст, но текст описывает разные объекты). В случае если страница смотрится без js, то это большая простыня. В случае если js есть, то он выкусывает из этого списка элементы определенного типа и показывает нужные из них в отдельном выпадающем меню.

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

Проблема в том, что элементы списка надо пометить, те которые выкидывать и те которые выкидывать не надо.
Я в качестве nasty hack'а запихнул эту метку в label. Но оказалось что ie8 этот lablel начинает честно показывать... Нехорошо...

Куда бы эту метку запихнуть так, чтобы она не отражалась на внешнем виде, и ее можно было бы быстро заполучить из js?
nataraj: (Бритый небритый)
Хочу очень простой вещи: разделить строку на части, при этом разделители многосимвольные, похожи, но отличаются на пару символов друг от друга... Хочется нечто вроде

my $s="111 =aa= 222 =bb= 333 =cc= 444";
print join "\n", split(/=(aa|bb|cc)=/, $s);

Но: split когда в шаблоне встречаются скобки то что попадает в зону группировки добавляет в результирующий список, а нам это не надо. если скобки убрать то тогда знак равенства становиться частью первой и последний альтернативы. Это нам тоже не надо.

Теоретически можно написать split /=aa=|=bb=|=cc=/, $s
и тогда все будет. Но это только в примере выглядит коротко... В жизни так писать не хотелось бы.

Научить сплит не включать зоны группировки в результат кажется невозможно... Можно ли как-то без круглых скобок намекнуть регекспу что знак равенства уже не часть альтернативы, а следующий за альтернативой символ?
nataraj: (Бритый небритый)
Разобрался как XSD-валидировать XML'ки через перл... Read more... )
nataraj: (Бритый небритый)
Сделал обещанный коммит в Sim-IM. Теперь запрос версии клиента работает через новый класс в обе стороны... Вроде бы ничего сложного, но работа давалась с трудом...
Теперь вернусь наконец к fb2-search... а то что-то он меня заждался... Что-то быстренько сделать пару коммитов затянулось недели на три :-( :-/

И все это под продолжающийся недецкий расколбас...

Profile

nataraj: (Default)
Swami Dhyan Nataraj

July 2024

S M T W T F S
 123456
789 10111213
14151617181920
21222324252627
28293031   

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 22nd, 2025 07:56 am
Powered by Dreamwidth Studios