Чтобы добавлять сообщения и комментарии, .

@OCTAGRAM:
OCTAGRAM

В GNAT Ada.Calendar.Time реализован как Long_Long_Integer в наносекундах, а 0 — это 2150й год. Правда, The Ada Epoch отсчитывается всё же от 1901го года, где ещё хватает разрядов для представления настолько малых чисел. И високосные секунды там учитываются (в отличие от времени UNIX и JavaScript), но мы, конечно, не можем знать, сколько их накопится к 2150му году, поэтому с их учётом адский «0» будет на несколько секунд позже Нового 2150го Года.

@OCTAGRAM:
OCTAGRAM

Выписал реальные значения временных меток в атрибуте Shared (GreyLink DC++) и TS (FlyLink DC++). Для сравнения ещё вычислил Date.now(), он получился по длине между ними. Для наглядности добавил подчёркивание там, где кончаются секунды.
GreyLink DC++: 1307966464_52889830
Date.now(): 1480931727_080
FlyLink DC++: 1295288944
Таким образом, это в общем везде время от начала Эпохи (1970), но во FlyLink DC++ — с точностью до секунды, а в GreyLink DC++ — с точностью до 10 наносекунд. Я опасался, что там время OLE Automation (от 1900) может затесаться.

Правда, тут есть один нюанс. Согласно POSIX, время отсчитывается без учёта високосных секунд, а вот справедливо ли это по отношению к каждой из трёх приведённых дат, не очевидно. Надо полагать, что всё-таки без.

@OCTAGRAM:
OCTAGRAM

Биты пакуются, начиная со старших, как на EGA, а не с младших, как в любой обычной упакованной структуре данных

@OCTAGRAM:
OCTAGRAM

Расширения тега File во FlyLink DC++
Почитал тут.
HIT — количество скачиванийВ GreyLink DC++ есть в базе, но нет в XML списке файлов.
TS — дата добавленияВ GreyLink DC++ есть аналогичный атрибут Shared, но формат другой. И там, и там числа, но у GreyLink явно подлиннее. И есть подозрение, что этот атрибут есть только в обычном корневом файле шары, а в сгенеренных вручную — нет. Но мой генератор получает на вход именно корневые файлы и имеет возможность пробросить этот атрибут в выходной файл.
BR — Битрейт файла
WH — разрешение картинки
MA — аудио информация (кодек, количество каналов, количество дорожек, язык дорожек)
MV — видеоинформация (кодек, Битрейт видеопотока, соотношение сторон экрана)
В GreyLink DC++ не хранится ни в базе, ни в XML, вместо этого можно делать асинхронные запросы к файлам. Пожалуй, решение FlyLink DC++ лучше. При этом информация в GreyLink DC++ более полна, видно авторa и альбом, как они написаны в ID3 тегах. Самое лучшее решение я видел в Shareaza.
Ещё в GreyLink DC++ есть возможность назначать папкам свои картинки. И опять в dcls фича, скорее всего, обычно не пробрасывается, но мой генератор может научиться это делать. Насчёт поддержки в FlyLink DC++ не знаю.
Ещё Shareaza при хешировании шары проставляет в дополнительные потоки папок UUID, и по ним отслеживает переименования и переносы. Не помешало бы аналогичное для DC++. Вот как раз онлайн-ссылки в новое расположение можно было бы автоматом перенаправлять. Но увы, такого нет. Во всяком случае, в чужих шарах такого ожидать не приходится.

Заодно посмотрел расширения торрента. Даже близко такого нет (кроме даты создания), хотя я мог бы сделать, чтоб мой генератор с барского плеча пожаловал метаинформацию от FlyLink DC++ в info.files.*.

@OCTAGRAM:
OCTAGRAM

Сконвертил свою p2p шару в формат торрента по спецификации BEP 47.

В оригинале (.xml.bz2) 3,1Мб, распакованный XML 12 Мб, а в формате торрента получилось 16 Мб. Он, конечно, двоичный, в отличие от распакованного XML, и каждый TTH там 24мя байтами кодируется, а не 39ю в Base32, но это с лихвой компенсировалось тем, что в описании каждого файла участвует info.files.path, повторяющий названия верхних директорий несколько тысяч раз, в то время как в XML тег Directory указывает имя директории только один раз. Я поискал и сходу не вижу такой BEP, чтобы можно было как-то вложить info в info. Это бы решило проблему, но увы.

Так же, как и для dcls, для торрентов можно генерить один большой файл, а в нём запоминать смещения (в списке info.files), чтобы потом склеивать на лету. Правда, это дурацкое устройство info.files.path и здесь не даёт возможности сделать всё нормально. Название директории, которую описывает торрент, задаётся в info.name. А элементы списка info.files.path идут уже внутри info.name. Так что если нам захотелось в торренте для вложенной папки установить info.name в имя этой папки, у нас получится такая картина, что в нём сначала папка с именем желаемой папки, потом внутри неё несколько взаимовложенных папок с именами папок от корня шары, потом снова эта папка, и там уже собственно файлы. Если генерить отдельные торренты для каждой директории, 16Мб распухнут пусть не в семь (как для dcls), но едва ли меньше, чем в два раза. Общий info.name в каждом торренте в принципе, был бы наиболее логичен, если рассматривать их по отдельности, но если их у одного человека становится несколько и все одинаково названы, тоже как-то не здорово. Решил сделать компромиссный вариант: в info.name не само имя папки, а конкатенация имени папки с именем корня (в качестве которого у меня выступает CID). Всё же хочется иметь возможность забить хостинг как можно большим количеством скачанных шар.

Конечно, не удержался от того, чтобы ковырнуть торрент µTorrent'ом. Пишет «Невозможно загрузить 'root.torrent'. Недостаточно памяти для обработки команды. !». Мда, печально это. p2p-клиенты и не такими объёмами ворочают.

@OCTAGRAM:
OCTAGRAM

Автор HttpFileServer, похоже, родился в трамвае

@OCTAGRAM:
OCTAGRAM

Как установить node.js в Debian?
curl -sL deb.nodesource.com | sudo -E bash —
sudo apt-get install -y nodejs

В самом деле, надо изживать традицию «скачал-поставил». Надо, чтоб оно качалось сразу в Терминале и там же запускалось от имени суперпользователя.

@OCTAGRAM:
OCTAGRAM

Знаете, почему я потерял 500 исходников?
switch ($expiry_flag)
{
case 'd';
$expires="DATE_ADD(NOW(), INTERVAL 1 DAY)";
break;
case 'f';
$expires="NULL";
default:
case 'm';
$expires="DATE_ADD(NOW(), INTERVAL 1 MONTH)";
break;


}

@OCTAGRAM:
OCTAGRAM

Обнаружил, что все закреплённые посты из моего PasteBin удалились, хотя они были в режиме вечного хранения. Ну офигеть теперь. $CONF['max_posts']=0, как оно ещё могло удалиться, не понятно.

@OCTAGRAM:
OCTAGRAM

Когда Япония заплатит по счетам?
Напоминать каждый раз, как только заикнутся про наши Курилы. И вообще, они нам минимум Мацмай должны за всё былое.

@OCTAGRAM:
OCTAGRAM

А не пора ли браузерам уже считать UTF-8 кодировкой по умолчанию? Как забудешь указать, так эти кракозяблы вылезают.

@OCTAGRAM:
OCTAGRAM

Третий раз направляю доклад на конференцию, на этот раз в «Объектные системы». Начинается неделя рецензирования.

@OCTAGRAM:
OCTAGRAM

«Прогресс» потерян: направлявшийся к МКС корабль распался в атмосфере
Да какой там космос, надо сначала всех экстремистов найти, и в авиации в том числе:
62-летний инженер бюро «Сухого» Найданов В.Н.
54-летний старший преподаватель филиала «Взлёт» Московского авиационного института Сальников В.Д.
57-летний служащий авиационной части Поспелов С.Ю.
62-летний врач ЦРБ и депутат горсовета Рогожин В.А.
Иметь высокую квалификацию, пережить 90е и продолжать использовать её на благо Родине? Ну вылитые экстремисты! Надо добить коммуняку. Нехай молодые с промытыми мозгами придут, икону Казанской Божьей Матери поставят, и всё полетит.

@OCTAGRAM:
OCTAGRAM

Досмотрел допрос. Смотрел, как ему приходилось отбивать нападки по поводу ассоциации с ЕС. Его спрашивали и спрашивали, а он отвечал и отвечал. За что б хорошее так спрашивали, за кораблестроение в Николаеве, например, так нет, за Европу эту несчастную. Стыдно за этих людей. Стыдно, что они есть.

@OCTAGRAM:
OCTAGRAM

Интервью В.В. Пякина газете «Национальный курс» 23.11.16
Здорово, что такое делается. Я в обычном НОД не смог продолжать работу с тех пор, как они угорели по чрезвычайным полномочиям. Хотя просветительскую работу в меру сил поддерживаю. Может, и вырулит в здравое русло.

@OCTAGRAM:
OCTAGRAM

Почему-то при поиске «допрос Януковича» вылезают сплошь спамные сайты, вот эти всякие 112.ua, segodnya.ua, gordonua.com, unian.net, или открываешь видео ещё не примелькавшегося «Настоящего Времени», а там кулачок сверху (Радио Свобода).
выступление стоя и чтение с бумажки
Сам допрос Януковича я считаю фарсом, его должны допрашивать где-то в Лукьяновском СИЗО
Диссоциативное расстройство идентичности – очень редкое психическое заболевание
Да какое мне дело до мнения этих журнашлюшек и тех, кого они цитируют? Пусть разберутся со своими заболеваниями, которые помешали за столько времени освоить КОБ, а интересное мне мнение я уже услышал у Тарана, Пякина, и скоро услышу у Каменева.
И это не первый раз, когда по новостям вылазит такая ерунда. Приходится добавлять «Russia Today», но Яндекс ничтоже сумняшеся опять выдаёт спамные сайты, игнорируя новые ключевые слова. Вот только после добавления site:russian.rt.com начинается прогресс во взаимопонимании. Допрос Януковича, как я понял, RT не транслировал, а только пресс-конференцию, так что в этот раз не получилось, на худой конец нашёл Россию 24.

@OCTAGRAM:
OCTAGRAM

За употребление какого слова из трёх букв Сталин сурово отчитывал Молотова

@OCTAGRAM:
OCTAGRAM

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

Это может пригодиться для генерации на веб-сервере списков файлов p2p для любой поддиректории:
Открываем новый файл на запись, начинаем туда в сжатом виде писать XML списка файлов, перед каждым открывающим тегом Directory и после каждого закрывающего делаем BZ_FINISH, а смещения запоминаем на будущее. Пролог и эпилог с директивой XML и тегом FileListing тоже нужно сделать возможным отрезать.
Потом, когда веб-серверу нужно отдать список файлов для поддиректории, он, не особенно напрягаясь, склеивает пролог, XML-описание поддиректории и эпилог. А ещё потом можно редактировать этот файл. Придётся байтики подвигать, но хотя бы пережимать не нужно.
Я нагенерил обычных отдельных списков файлов для каждой поддиректории своей шары, и у меня в общем получилось 23 мегабайта. Обычный сжатый (с аргументами blockSize100k => 9, workFactor => 30) полный список файлов весит 3,1 мегабайта. Несжатый — 12,5.
Реализовал эту идею. Сжатый список файлов с разрывами получился на 4,8 мегабайт. Выкручивание workFactor на 250 практически ничего не изменило, но всё равно неплохо.

Гипотетически можно с zlib устроить аналогичное, чтоб посетители с плохим Интернетом могли экономить трафик, но и веб-сервер не напрягался. Разрезать шаблон на куски, сжать каждый, на лету дожать остальное содержимое и отдавать всё в склеенном виде.

@OCTAGRAM:
OCTAGRAM

К слову о мобильных клиентах, а не сделать ли поддержку API, как в Twitter и identi.ca? Там не то StatusNet, не то ActivityStreams, что-то такое даёт взаимозаменяемость, и клиенты, поддерживающие одно, могут подключаться к другому, если нет жёсткой привязки.

@OCTAGRAM:
OCTAGRAM

Приглашаю @akastargazer высказать свои предложения по поводу того, что не устраивает в Juick. С некоторой вероятностью я свой движок допилю на предмет автоматического вытягивания постов из Juick для себя и дальнейшего их зеркалирования на сайте. Но если будет востребовано, то могу вычленить в общедоступный проект. Я так понимаю, не хватает автоматической резервной копии, — ну вот она и будет попутно выполняться.