klopp: (Default)
Работая на полуудалёнке, некоторые вещи, происходящие в твоей же конторе, узнаёшь только из контактика :)
https://vk.com/wall-201069_985
klopp: (Saigon)
Загадочное нечто. Что оно делало между Швецией и Россией с 12 февраля по 1 марта? Почему после Внуково начали говорить на непонятном языке? Как оно умудрилось так похудеть за сутки? Кликабельно:

klopp: (Saigon)
...эти модные приколы.
Только чистый C,
по заветам старой школы!


klopp: (размахиваю кувалдой)
Конечно, их уже навалом есть. Но что бы свой не написать, раз процентов 80 кода по другим рабочим скриптам болтается? Ну и на баше :)

Основная идея в том, что списки файлов для потоков формируются по-умному. Ну, как по-умному, относительно :) См. Partition problem # The greedy algorithm. Все файлы, которые меньше указанного размера, идут отдельным потоком. А те, что больше - делятся на части как можно более близкого размера.

Полный список ключей:
Usage: prsync.sh [options]
Valid options, * - required:
    -src   DIR   *  source directory
    -dst   DIR   *  destination directory (see '-x' option)
    -s     SIZE     file size to put it in papallel process, default: '10M' 
                    about size's format see 'man find', command line key '-size' 
    -p     N        additional processes, >0, default: '2'
    -v              be verbose
    -c              cleanup '-dst' directory before sync
    -x              print processes info and exit (no '-dst' required)
    -d              show debug info (some as '-x', but launch sync) 
    -k              keep temporary files 
    -b     N        show N biggest files with -x, default: '4'  
    --     OPT      rsync options, default: '-a --delete -q'


Для экспериментов есть ключи -v, -b, -k, -x. При указании -x запуска rsync не происходит, поэтому его удобно использовать для подбора параметров. Например:

$ sudo ./prsync.sh -src /home/postgres/pg95/data/base/16385 -s 1G -x
Additional processes:
 files:        0, bytes:                  0 (/tmp/prs-v6lKZe.include)
 files:        0, bytes:                  0 (/tmp/prs-GVbwQe.include)
Main process:
 files:     1387, bytes:     30 219 743 748 (/tmp/prs-qzGVYd.include)
Biggest files:
Rsync arguments: -a --delete -q


Обломс, падаем до 100M:

$ sudo ./prsync.sh -src /home/postgres/pg95/data/base/16385 -s 100M -x 
Additional processes:
 files:       35, bytes:     13 422 071 808 (/tmp/prs-KO7Zlt.include)
 files:       36, bytes:     13 527 990 272 (/tmp/prs-Z9e4at.include)
Main process:
 files:     1316, bytes:      3 269 681 668 (/tmp/prs-3P4rut.include)
Biggest files:
      1 073 741 824 bytes '/175490'
      1 073 741 824 bytes '/175489'
      1 073 741 824 bytes '/175487.2'
      1 073 741 824 bytes '/175487.1'
Rsync arguments: -a --delete -q


Уже лучше, но...

$ sudo ./prsync.sh -src /home/postgres/pg95/data/base/16385 -s 500M -x 
Additional processes:
 files:       10, bytes:      8 813 338 624 (/tmp/prs-Uy9twY.include)
 files:        9, bytes:      8 315 084 800 (/tmp/prs-79klmY.include)
Main process:
 files:     1368, bytes:     13 091 320 324 (/tmp/prs-jMVkFY.include)
Biggest files:
      1 073 741 824 bytes '/175490'
      1 073 741 824 bytes '/175489'
      1 073 741 824 bytes '/175487.2'
      1 073 741 824 bytes '/175487.1'
Rsync arguments: -a --delete -q


Во! Чего-то более приличного для 2 дополнительных процессов добиться с этим набором файлов уже не выйдет. А больше 2 (фактически трёх) - это уже индивидуально.

Да, живёт тут: Github # prsync.
klopp: (размахиваю кувалдой)
По поводу вот этого патча отписался автор AStyle:
Added to astyle as "attach-closing-while".
It will be in the next commit.
klopp: (размахиваю кувалдой)
Интересно, откуда в последнее время пошла волна узкого дизайна? Казалось бы, нужно по максимуму использовать место, которого и так немного. Но нет, как будто боятся растянуть объекты на всю ширину экрана. Бесит ещё больше, чем плоскота.

Примеры, одно приложение для SMS (дело не в количестве символов, все балуны обрезаются по одной границе, и не в аватарах, без них то же самое):



Другое:



Viber - просто лидер. особенно убого эта узенькая полоска смотрится на 8+ дюймах:



Да тысячи их :( Наверное, опять какой-нибудь гайд корпорация добра написала, и все ломанулись его соблюдать...
klopp: (размахиваю кувалдой)
А также плюсанутым :)
  1. Как запустить PVS-Studio в Linux
  2. Как использовать PVS-Studio бесплатно
  3. И моя сегодняшняя поделка: Встраиваем PVS-Studio в Eclipse CDT (Linux)
P.S. Всё для Linux, само собой. Как оно под Windows - понятия не имею.
klopp: (Saigon)
Тепер-то я точно знаю, как тёмным зимним вечером должен выглядеть дом по адресу Ленинский проспект, 129, корпус 1!

klopp: (размахиваю кувалдой)
Имеется следующая строка (пример на C, но для других языков - аналогично).
for(int i = 0; i < 3; ++i );
Выполняется цикл, понятное дело, 3 раза. Задача: сделать этот цикл бесконечным, никак не модифицируя строку. Доп. условие: переменная цикла должна объявляться внутри него или непосредственно перед, но только объявляться. То есть так можно:
int i;
for( i = 0; i < 3; ++i );
А так - нельзя:
int i = some_magic();
// или int i; some_magic(&i); и т.д.


Пока лидирует решение на Perl (кто б сомневался):
use overload;
BEGIN {
 overload::constant ( integer => sub {
  return 'inf' if($_[1]==3);
  $_[1];
 } );
}

for( my $x = 0; $x < 3; ++$x );
Смысл его в том, что перегружается константа "3", она становится "inf", то есть бесконечностью.

Мой вариант не так эпичен:
use Variable::Magic qw/wizard cast/;

my $foo = \${ *x{SCALAR} };
cast $$foo, wizard( set => sub {
  my ($ref) = @_;
  $$ref = 0;
} );

for( our $x = 0; $x < 3; ++$x );
В принципе аналогичное можно было бы соорудить и с tie, но так веселей :)

Решения на сишностях не так интересны, они в основном с #define играют. А вот C#, Java, JavaScript и даже PHP с PowerShell - оказывается, ещё как могут! Слежу за развитием событий.
klopp: (размахиваю кувалдой)
Век живи - век учись:
wget --user=USER --password=PASSWORD --auth-no-challenge \
    "https://api.github.com/user/repos" --post-data='{"name":"REPO_NAME"}'

Или:
curl -u 'USER:PASSWORD' https://api.github.com/user/repos -d'{"name":"REPO_NAME"}'
klopp: (размахиваю кувалдой)
Лежит тут.

Смысл: добавляет ключ (--attach-do-while-bracket), который не переносит while на новую строку. Без него, всегда:
do {
/* ... */
}
while(0);


После, при указании ключа:

do {
/* ... */
} while(0);


Патчил только линуксовые исходники, OsX и Windows не смотрел.

P.S. A Free, Fast, and Small Automatic Formatter for C, C++, C++/CLI, Objective‑C, C#, and Java Source Code.
klopp: (Default)
Знакомьтесь: Боня, Дик, Ян, Чебурашка. Ему пофиг, потому что он глухой. И старый маразматик:



Надо кому такое? Мне - нахрен не.
klopp: (Default)
Охуела? По заголовкам письма - оно вроде.

Здравствуйте!

Пользователь Прилаво сайта www.liveinternet.ru добавил Вас в список своих друзей.

Для Вас зарегистрирован аккаунт на сайте. Вы можете зайти на сайт по нижеуказанной ссылке, выбрать себе имя и общаться с вашими друзьями.
http://www.liveinternet.ru/journal_register.php?action=step1&id=xyz&h=xyz


Ваши данные:
Email: xyz@yandex.ru
Пароль: xyz


Внимание ! Не удаляйте это письмо, чтобы не потерять свой пароль.
Если вы не хотите пользоваться сайтом www.liveinternet.ru - пропустите это письмо.
klopp: (Default)
Да, все мы знаем про jsvc. Но это же лютый пиздец, товарищи. Я специально не употребляю приличное слово "костыль".

Как это чудо обрабатывает HUP: да просто!

Не, начнём с самого начала. Оно стартует, форкается. Создаёт pid-файл, тут всё хорошо. И даже его отслеживает. Но. Что будет, если послать HUP процессу?

Read more... )
klopp: (Default)
Последний выпуск журнала был в декабре 2015. Пока судьба его непонятна - вот тут сохранил все выпуски: тынц мышой.
klopp: (Default)
Нарывался на это не один раз, и в чужих реализациях, и сам глючил.

Почему может тормозить классический qsort, и вообще, любой алгоритм сортировки?

Подсказка: этого недостатка лишены тернарные деревья, by design. За что их и люблю :)
klopp: (размахиваю кувалдой)
Понадобилось сделать что-то вроде хэш-таблицы (ключ-значение). В принципе и тернарное дерево справлялось, ибо ключи строковые. Но захотелось иметь ключи целочисленные, причём и 32, и 64 бита, и даже 16.

Решил глубоко не копать, AVL-деревья замечательно подошли, благо реализаций навалом, включая свою (речь о голом C в условиях ограниченных ресурсов, никаких плюсов, бустов, STL и прочих радостей, только голая libc).

Всё работало зашибись. До тех пор, пока количество элементов не превышало примерно тыщи-двух. Даже уделывало по скорости std::map. Но когда порядок увеличивается - всё, трындец.

OK, пишем "классику". Работает. По скорости всё так же уделывает std::, от миллионов пар так вообще несравнимо.

Решил проверить практику теорией. И обнаружил, что получилось почти один в один как в исходниках перла :) Вот стоило напрягаться, если можно было слямзить готовое?

Expand Cut Tags

No cut tags

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Syndicate

RSS Atom