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

Image

Image

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

Image

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

Image

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

Image

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

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

Image
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. Всем хороши были, особенно батарейками, но...

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


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

Image

Image

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

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

Image

Image
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: (Котя)
А отходняк от операции надо пережить без эксцессов:

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

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

Image

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

Image

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

Image

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

Image

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

В общем, прикольно: 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