klopp: (размахиваю кувалдой)
Есть такой шикарный модуль: Data::Printer (он же DDP). Один из инструментов уровня must have, Data::Dumper по сравнению с ним как плотник супротив столяра :) И, тем не менее, как легко его можно уложить:
#!/usr/bin/perl

use Modern::Perl;
use DDP;
use Scalar::Array;

my $data = [ 1, 2, 3 ];
p $data;

round_robin( $data );
p $data;

Вывод:

$ ./testrr.pl
\ [
    [0] 1,
    [1] 2,
    [2] 3
]
Segmentation fault

Почему - очевидно же :-) Во всяком случае на интуитивно-понятно алгоритмическом уровне, на уровне реализации надо разбираться подробней.
klopp: (Saigon)
На портале государственных услуг Российской Федерации (gosuslugi.ru) специалисты компании «Доктор Веб» обнаружили внедрённый неизвестными потенциально вредоносный код. В связи с отсутствием реакции со стороны администрации сайта gosuslugi.ru мы вынуждены прибегнуть к публичному информированию об угрозе.

Подробности тут.
klopp: (Default)
Цитата, в скобках мои комментарии:

Мы находимся в поиске Senior Web Developer’a.
Основные требования:

· Умение читать, понимать и улучшать чужой код (хе-хе...);
· Python 2.7 - Уровень Middle+;
· JavaScript (ES5) - Уровень Middle+;
· Angular 1.4+(<2);
· Навыки верстки: HTML/HTML5/CSS/CSS3 (реально этим заниматься не придётся, но представление иметь - обязательно);
· Знание основ реляционных СУБД и SQL (постгрес, не шарахаться от выноса логики в базу; понимание что такое JSONB и с чем его едят - нужно);
· Навыки работы с git.

Подробней: https://spb.hh.ru/vacancy/21481669
klopp: (размахиваю кувалдой)
Наблюдение: продать нетбук с линуксом - нереально. Даже если там всё летает и работает как швейцарские часы. Сначала нужно извратиться, поставить на него семёрку, огрести кучу геморроя с драйверами, в конечном итоге получить какого-то неповоротливого уродливого монстра, вот тогда им и заинтересуются...
klopp: (Saigon)
На столбе у станции Старый Петергоф :)

klopp: (размахиваю кувалдой)
Что выведет вот этот код?
#!/usr/bin/env perl

use Modern::Perl; 
my ( $var, @data ) = ( qw/Perl Ruby PHP C/ );
for $var ( @data ) {
  $var = 'C++' if $var eq 'C';
}
say join( ',', @data, $var );

Правильный ответ:

Read more... )
klopp: (размахиваю кувалдой)
Долго меня бесила невозможность отключить болд в терминале PAC Manager. Надоело :)
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.

Expand Cut Tags

No cut tags

July 2017

S M T W T F S
      1
2345678
910 11121314 15
161718 19202122
23242526272829
3031     

Syndicate

RSS Atom