Архив рубрики: Программирование

Seagate Backup Plus 8TB — диск или хлам?

Волею судеб нам достался этот диск, который мы используем для BSA-Analytics. На диске хранится полная копия всех коротких данных с телескопа BSA (bsa1-short + bsa2-short). А также все эти данные нарезанные по кускам по звездному времени, в моих терминах «нарезка» (далее без кавычек). Данные, как и нарезка, занимают очень много места, поэтому диск, на котором лежит все и сразу, нам жизненно необходим.

Распределение места для понимания необходимости 8TB диска


Читать далее

Пущинская Новогодняя 2016

В это воскресенье провели очередную олимпиаду, как обычно, без проблем не обошлось. Вечером пятницы выяснилось, что по Пущино объявлен карантин, школы закрыты. Площадки проведения нету. Как основной вариант рассматривался институт + ноутбуки из гимназии. Вот только ноутбуки получить не удалось, а в институте своих машин не было. Неожиданной фигурой выступила наш хорошо знакомый городской депутат — Ира Селезнева. Благодаря разведенной бурной деятельности вышеупомянутой была задействована вся вертикаль власти в Пущино, и мы смогли провести олимпиаду в третьей школе.
Читать далее

МГУ, ВМК, medialab, видеогруппа

Ровно год назад, 26 марта, я сидел в пустом кабинете и решал простую задачу. Надо было компенсировать два кадра, был дан шаблон под visual studio. Не работал поиск блоков 8×8.

Читать далее

Сервис создания панорам

Есть такой грант — УМНИК. Если вам от 18 до 28 лет, и у вас есть проект, который потенциально способен приносить прибыль, то вы можете получить 400 тысяч на 2 года на реализацию этого проекта. Требуется только делать отчеты о проделанной работе. Ну и показать, то что ваш проект лучше, чем у всех остальных. И вот, в один прекрасный понедельник, мне приходит письмо от моего научного руководителя, мол, все на Умник. Все — это вся видеогруппа, кроме тех кто его уже получил. Я тогда, естественно, только посмеялся — куратора нету, окклюжены не коммерционализируемы, о чем речь вообще? Потом приехал куратор, а мне было предложено назвать 3 темы, а уж они то выберут.

У меня тогда нехило испортилось настроение, потому как я не собирался идти с проектом, на который нельзя получить грант. Если идти — то с возможностью выиграть. Но в результате душевных терзаний, мучений и споров, тема все-таки была придумана и одобрена — «Сервис создания панорам».
Читать далее

Пущинская новогодняя олимпиада 2015

Сегодня провели традиционную новогоднюю олимпиаду. На этот раз было куча народу из Дубны, аж с двух площадок. 51 не ноль в таблице. Провели без значительных косяков, к счастью я вырезал задачу I за полчаса до начала. Тесты были сделаны отменно — было всего лишь две посылки получившие 100 баллов и при этом не прошедшие тесты из условия. Мои задачи были недостаточно гробовыми — их решил приехавший из СУНЦа одиннадцатиклассник — Леша Соловьев. Собственно, он ухитрился решить мою задачу на 10% быстрее чем я на том же алгоритме. Посмотрев его код нашел пасхалку.

Правильные дефайны: +10% к скорости работы

Правильные дефайны: +10% к скорости работы

О чужом коде

Пару лет назад я посмотрел код OpenSSL. Он был ужасен. Особенно меня поразила примерно такая конструкция:

if (0) {
    L1:
    // some code
}

if (condition)
    goto L1;

Через некоторое время я решил что конструкция в принципе нормальная. А прочие ужасы кода свалил на то, что он написан математиками.

Но сейчас я решил расковырять другой продукт. Дело в том, что в CoolReader при ресайзе окна в управлении kwin происходит неприятный баг — он перематывает текст на конец. Это невероятно разражает — по сути единственный выход, это не ресайзить окно. Я решил найти в чем же проблема и полез в исходники. Исходники оказались страшноваты, но следующий код — это…

#define XS_IMPLEMENT_SCHEME 1
#include "../include/fb2def.h"

#if 0
void SaveBase64Objects( ldomNode * node )
{
    if ( !node->isElement() || node->getNodeId()!=el_binary )
    return;
    lString16 name = node->getAttributeValue(attr_id);
    if ( name.empty() )
    return;
    fprintf( stderr, "opening base64 stream...\n" );
    LVStreamRef in = node->createBase64Stream();
    if ( in.isNull() )
    return;
    fprintf( stderr, "base64 stream opened: %d bytes\n", (int)in->GetSize() );
    fprintf( stderr, "opening out stream...\n" );
    LVStreamRef outstream = LVOpenFileStream( name.c_str(), LVOM_WRITE );
    if (outstream.isNull())
    return;
    //outstream->Write( "test", 4, NULL );
    fprintf( stderr, "streams opened, copying...\n" );
    /*
     lUInt8 dbuf[128000];
     lvsize_t bytesRead = 0;
     if ( in->Read( dbuf, 128000, &bytesRead )==LVERR_OK )
     {
     fprintf(stderr, "Read %d bytes, writing...\n", (int) bytesRead );
     //outstream->Write( "test2", 5, NULL );
     //outstream->Write( "test3", 5, NULL );
     outstream->Write( dbuf, 100, NULL );
     outstream->Write( dbuf, bytesRead, NULL );
     //outstream->Write( "test4", 5, NULL );
     }
     */
    LVPumpStream( outstream, in );
    fprintf(stderr, "...\n");
}
#endif

А вот так элегантно решается вопрос об индикаторе батареи:

Пора кодить!

Сессия была страшной и мозг включается тяжело. В ноуте новый кулер — тот самый, который мне пришлось поменять пару месяцев назад. К счастью, гарантия была на три месяца. Ноут на коленях. На ноуте механическая клава — явный признак того, что пора кодить. Рядом кофе. Для атмосферы. Сверху выползает консоль. В консоли открыт консольный плеер. Это именно то, что мне не хватало. Я давно забыл про тебя, moc. Где-то в километре от меня находится сервер. На сервере 2 процессора перемалывают один из самых ужасных кодов, которые я когда-либо писал — BSA-Analytics. Но он работает. Пульсары находятся. В двух метрах от меня стоит ноут с замененной по гарантии материнкой. Он стоит без крышки и экраном вниз — так эффективнее работает охлаждение. Занимается тем же самым. На другой вкладке консоли к нему открыта ssh-сессия. SSH-сессия идет не напрямую, а через нидерландский сервер — так удобнее. В ssh-сессии открыт screen. Screen — это вещь. В screen’e rsync перебрасывает посчитанные данные на четвертый сервер — он находится во Франции. Люблю современный уровень абстракций!

Программирование на ВМК

Сначала была задача. Задача была написать очередь с минимумом. Я посмотрел на ограничения и решил, что O(n log n) зайдет. Дерево отрезков без обновления наше все. Это была последняя задача контеста, поэтому я пошел сдавать все Шестимерову.

Шестимеров посмотрел на код и сказал, что код ему не нравится. После этого он пообещал забанить код. После этого он начал придумывать причину. Я сразу сказал, что я знаю что такое очередь с минимумом, но при таких ограничениях проще и быстрее написать дерево отрезков. Он сказал, что очередь это тоже плохо. После этого сообщил мне, что если увеличить ограничения, то моя версия упадет по памяти, так как в худшем случае она выжирает 4N памяти, а правильная версия только 2N памяти. После этого был бан.

Но этим дело не закончилось мне было сообщено, что такие как я, не пользующиеся STL’ем потом еще начинают все говорить, что он плох. Я, не долго думая, подтвердил. Таак, — протянул Шестимеров, — это уже религиозная тема! Чем вам не нравится STL? Мне не особо хочется приводить свои аргументы, но я смог сравнить итераторы по map в Qt и в STL. В Qt они лучше, поэтому тут меня переспорить не удалось. Все остальные аргументы провалились.

В общем-то образец хорошего семинариста, который действительно понимает в программировании и с которым можно обсудить всевозможные темы.

А вот например наша общая программа, которая сейчас называется «Системы программирования» просто ужасна. У нас был какой-то ужасный коллоквиум, на который почти у всех одна реакция.

Вот она - православная реакция

Вот она — православная реакция

Еще более православная реакция

Еще более православная реакция

Сейчас появилась еще одна веселая новость. Теперь у нас идет переразбиение на 2 группы. Одна группа будет учить С++ вместе с Шестимеровым. А другая будет готовиться к экзамену по грамматикам вместе с Курыниным. Выбор очевиден.

Как звучит пульсар

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

Таким образом, можно «послушать» пульсар.

Пульсар слева. Полученная из него звуковая дорожка справа.

Пульсар слева. Полученная из него звуковая дорожка справа.

Скачать можно здесь:
Из коротких данных (меньше помех)
Из длинных данных (больше помех)

Открывать рекомендую в audacity, так как vlc, wmp, и chrome не справились.