klopp: (Default)
Я не знаю сколько ему лет. Но явно много, от 10 и больше. Во всяком случае появился он у меня в 2010 году, вполне взрослым и придурочным. А в качестве дня рождения была записана дата первой прививки, 23 февраля.





P.S. На аватаре он же.
klopp: (размахиваю кувалдой)
Многие вилки (в USB-зарядниках, в блоках питания для роутеров и т.д.) тонковаты для таких розеток:



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



Шириной в 3-4 миллиметра, длина подбирается по гнезду розетки. Вставляем (само собой, и меряем, и при отключённой розетке!):



И вуаля, ничего не болтается:

klopp: (Saigon)
Поднял на новом месте. Пока 2 набора карт, в 2 вариантах: обычное оружие и оружие с ускорением стрельбы. Вот они, в Doomseeker (фильтровать по типу игры "Cooperative", WAD: "sf"):

klopp: (размахиваю кувалдой)
Тупею. Три дня ломания мозгов над всякими openRTSP, nginx+rtmp, zoneminver и прочими avreg. А в конечном итоге всё свелось к однострочнику:
ffmpeg -loglevel quiet -i "rtsp://откуда.то:10554/udp/av0_0" -x 1080x720 -f mpjpeg -
klopp: (размахиваю кувалдой)
Выступления и лекции Перепелицы - только ради этого одного уже можно ездить на YAPC::Russia. И в этот раз, 4 ноября, он был великолепен. Жду записи с конференции, это стоит увидеть. А пока - недавнее интервью с ним:



P.S. К сожалению, безжизненных и вялых докладов было немало (тут, скорей, вечная проблема зажатости многих программистов и абсолютном их неумении ни выступать публично, ни ясно доносить мысли до окружающих вообще). Как и докладов ни о чём вообще :(
klopp: (размахиваю кувалдой)
Итого, в ближайшем окружении (то есть я +1) за последние 5 лет было разбито 9/12 экранов и утоплено 2 телефона. Через дробь потому что были добивания: например, один из хайскринов сначала коты слегка сбросили со стола, потом я его добил, лёжа в реанимации и уронив на кафельный пол.

Коты - основная причина (сброс со стола - 100% случаев, коты вообще всё мировое зло на себя берут, им простительно), но были и экзотические.

На этот раз обзавёлся Blackview BV6000S. Вроде не такой нежный. А вот предыдущие два, BV5000. Всем хороши были, особенно батарейками, но...

klopp: (размахиваю кувалдой)
my $pid = fork();
if( $pid == -1 ) {
    # обработка ошибки
}
elsif( $pid ) {
    # родитель
}
else {
    # потомок
}


Найдите грубейшую ошибку в этом коде (которая в некоторых случаях ставит сервер в коленно-локтевую позу), и связь с %Subj% :-)
klopp: (Saigon)
Старый Петергоф, Ботаническая улица. Асфальт, сегодня, 23:00 :)





Из студентов (а кому ещё так развлекаться? кроме них пенсионеры одни) - физики, химики, приматы (прикладные математики) и немного молекулярных биологов. Даже не знаю кого выбрать :)
klopp: (Котя)
Начиналось всё так (со слабым желудком не смотреть):

http://xxo.su/resizer/i/0/c/b990569b.jpg
http://xxo.su/resizer/i/0/f/307c2366.jpg
http://xxo.su/resizer/i/e/9/a7a2f294.jpg

Закончилось вроде неплохо:



klopp: (размахиваю кувалдой)
На самом деле не хак, а вовсе документированная возможность.

Имеем: около 500 тысяч (полмиллиона) селектов в час. Внутри каждого из них prepared statements кэшируются внутри DBI. В результате чего часов через 10 работы скрипт разбухает так, что всем вокруг плохеет. Отменить кэширование нельзя, изменить архитектуру тоже (на самом деле нужно, но это не в обозримом будущем, а работать должно сейчас).

Напрашивается простое решение: периодически закрывать соединение с базой (что автоматом очищает память) и соединяться снова. Но возникает вопрос: когда переподключаться? По времени не вариант, нагрузка плавающая, зависит от кучи внешних факторов и не прогнозируется. Значит, надо считать селекты. Но как? Выискивать по 50k cloc все места - убиться проще.

Вот тут и пригождается атрибут DBI::Callbacks. Сразу после соединения с базой вешаем на ключевые функции DBI коллбэки, в которых дёргаем счётчик (его ID передаётся явно, так как в общем случае можем подключаться не к одной базе):

sub set_dbh_callbacks
{
    my ( $self, $dbh, $counter_name ) = @_;
    
    $dbh->{Callbacks} = 
    {
        do                 => sub { ++$self->{$counter_name}; return; },
        prepare            => sub { ++$self->{$counter_name}; return; },
        selectrow_array    => sub { ++$self->{$counter_name}; return; },
        selectrow_arrayref => sub { ++$self->{$counter_name}; return; },
        selectrow_hashref  => sub { ++$self->{$counter_name}; return; },
        selectall_arrayref => sub { ++$self->{$counter_name}; return; },
        selectall_hashref  => sub { ++$self->{$counter_name}; return; },
        selectall_array    => sub { ++$self->{$counter_name}; return; },
        selectcol_arrayref => sub { ++$self->{$counter_name}; return; },
    };
    $self->{$counter_name} = 0;
}


Voilà! В любой (удобный нам) момент мы можем проверить значение счётчика и что-то предпринять. Значение, при котором это нужно делать, подбирается экспериментально :)
klopp: (размахиваю кувалдой)
Они такие прикольные.

Не понимают, что между C и С++ огромная разница.
klopp: (Saigon)
Когда перевёлся в ЛГУ из военмеда (это была отдельная эпопея), попробовал ходить на "язык". Через пару занятий плюнул, пришёл на кафедру и нахально так заявил: а можно сразу сдать госы? Офигели, но спросили где такой наглый учился. Ответ "171" пробил все бюрократические барьеры (известное место, как и "239"). Сдал, получил печать. Ха, мы такое в пятом классе щёлкали.

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

С тех пор читать/писать умею.
Разговаривать на "родном" французском - да запросто. А вот Инглиш вводит в ступор. Слышу, понимать могу. Но сказать ничего не получается.

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

klopp: (размахиваю кувалдой)
Таки не удержался, форкнул. Пара мелочей, но до автора, как это часто бывает, не достучаться.

А штука на самом деле мегакрутая, умеет postgresql, mysql и oracle.
klopp: (Default)
... и обратно часа два, немного вариантов. Основной у меня - поспать :) Но можно и позадротстововать. Цель - развивая только силу:



Пройти дракошу на 124 уровне:



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



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



Наверняка с ними проще, тем более что "финансы" позволяют закупить их столько, что и самому мечом махать не придётся. Но это дело принципа :)

В общем, прикольно: Good Knight Story. Отзывы, как обычно, разнообразные :)
klopp: (Котя)
Фейсбучичек принёс статеечку. Глаз зацепился за это:

мейн-кунов - самых больших одомашенных кошек в мире


Их что, вообще без мозгов выпускают с журфака? Или это сознательная желтизна? А ведь формально и не придерёшься, но как звучит...
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: (размахиваю кувалдой)
Наблюдение: продать нетбук с линуксом - нереально. Даже если там всё летает и работает как швейцарские часы. Сначала нужно извратиться, поставить на него семёрку, огрести кучу геморроя с драйверами, в конечном итоге получить какого-то неповоротливого уродливого монстра, вот тогда им и заинтересуются...

Expand Cut Tags

No cut tags

February 2018

S M T W T F S
    123
45678910
11121314151617
181920212223 24
25262728   

Syndicate

RSS Atom