← All posts tagged jpeg

OCTAGRAM
АлтайскийКрай ЭлектронноеПравительство Вот уже, наверное, третью услугу заказываю через ГосУслуги. Видно, что как могут, пытаются интегрировать все ведомства, и где–то это лучше идёт, где–то хуже.

Вот ко врачу, допустим, не получилось записаться, у нас это отдельно в некоей Интернет–регистратуре рег22.рф. Квартплата по–прежнему через местечковую «Систему Город» и три банка, один из которых принимает пластик онлайн, но берёт комиссию.

УФМС или как она теперь в составе МВД называется, не знаю, интегрированы частично. Я смог подать заявку, и её как могли выполняли, но платил я не через ГосУслуги, а по реквизитам, указанным в ответном сообщении. И фотографии нужно было принести напечатанные, хотя на сайте была обязательная форма для загрузки. Но, впрочем, стоявшее там ограничение на размер файла всё равно портило всю идею, так что напечатанные в данном случае оказались лучше. По–хорошему, ограничение на размер файла надо убрать и печатать самим. Или хотя бы предупреждать, в каких количествах понадобятся физические версии.

С МВД пока что проще всего. Омрачает ситуацию только ограничение на размер файла 300 кб, но это ограничение системы, похоже. Я первый раз просто взял разворот паспорта с фотографией и пересохранил в GIMP в JPEG с таким качеством, чтобы получилось уложиться по размеру. Забраковали, пишут, надо все страницы паспорта с отметками, а это либо архив .rar (а почему не .7z???), либо .pdf. Для полноты напрашивается ещё вариант объединить все осмысленные развороты в .jpg, но не стал проверять, сделал при помощи Images2PDF pdf. Чтоб уложиться в 300 кб, каждый разворот уж и откадрировал, а всё равно сохранять пришлось в качестве 15-17% каждый файл, чтоб в 75 кб каждый разворот укладывался. Images2PDF как–то ещё дальше дожимает, на 87% от исходных файлов, хотя там JPEG без изменений внедряется. Можно было, наверное, и по 80 кб делать файлы.

Не знаю, какой смысл в сканах такого низкого качества, но, видимо, с такими и работают. А у кого–то осмысленных разворотов в паспорте не 4, а, допустим, 8. Я представляю, какое там мыло получается.
OCTAGRAM
PDF Images2PDF Images2PDF некогда была всем доступна, а потом разработчики решили, что хватит, и оставили её только в составе платного PDFCreator Plus. Однако, если скачать из архива старых версий PDFCreator-2_1_2-setup.exe, то там оно всё ещё есть, а в следующей версии уже вырезали. Установщик, к сожалению, сделан так, что установить свежий PDFCreator поверх старого с сохранением Images2PDF не получится, но вроде и не сильно надо. И так хорошо работает.

Мне нравится его возможность делать PDF из кучи JPEG без пережатия. Наверное, и в других утилитах есть, но к этой я уже привык.
OCTAGRAM
GPS глонасс Купил себе USB–приёмник GPS и ГЛОНАСС. Наконец–то вживую увидел, как устройство может определить своё местоположение. Много лет назад увидел в Центре обновлений 2ГИС Дополнительный модуль GPS, но в действии никогда не видел, потому что ни в одном из попадавшихся мне компьютерах не было GPS. Видимо, проще докупить внешний GPS–приёмник, чем найти на барахолке б/у ноут со встроенным.

Как программисту, конечно, было интересно, как это всё дело реализовано программно. Оказывается, 100500 лет назад были какие–то GPS–приёмники, которые подключались к компьютеру через COM–порт, и по сей день, хоть COM–портов уже нет, [да и вообще их встраивают](ru.aliexpress.com/item/7-inch-Original-W8-Tablets-pc-MOMO7W-Intel-Atom-Quad-Core-1GB-16GB-Windows-8-Tablet/32471361065.html), USB–приёмник всё равно виден как виртуальный COM–порт, и программы к нему подключаются и работают по протоколу NMEA (в моём устройстве так) или GARMIN. Я прямо в 2ГИС, когда открываю настройки, вижу выбор COM–порта и скорости. На самой высокой скорости работает без проблем. Однако, так как это COM–порт, то занимать его может только одна программа в каждый момент времени. Я ещё поставил u-center от производителя USB–свистка, и действительно, я не могу одновременно подключиться из 2ГИС и u-center.

Дома ни в какую не получалось ни в одной из программ домучить, чтоб определила координаты. Я уж думал, не работает что–то. Но вот на улице всё было совсем по–другому, и я пока в университет ехал, на всём маршруте хорошо работало, и я с любопытством понаблюдал, как меня по карте везут через весь город, с какой скоростью. Я даже, пока иду, могу узнать свою скорость. Получается, везут меня в среднем со скоростью 23км/ч, а иду я со скоростью 8–10км/ч, и это примерно согласуется с тем, что доехать мне минут 40, а дойти пешком — порядка двух часов. Классная игрушка!

При этом остаются некоторые вопросы. Например, я помню, что браузер иногда спрашивал меня, разрешить ли мне определить местоположение, меня это всегда забавляло: «и как же ты собираешься это сделать, если у меня нет GPS–приёмника»? Интуитивно догадываюсь, что по айпишке и базе данных типа GreyLink CustomLocations с точностью до города, но ведь должен же быть способ заставить эту фичу работать полноценно. Теперь, когда он–таки появился, и когда я увидел, как он работает в двух программах, я обратил внимание на другую вещь: а ведь браузер, когда спрашивает про определение местоположения, не спрашивает у меня COM–порт и скорость, в отличие от 2ГИС и u-center. Тем более интересно, и как же он собирается это сделать. Кроме того, интересно, как должны работать программы, штампующие координаты в метаинформацию JPEG? Типа «отключите в своём 2ГИС навигацию, чтоб я сейчас к приёмнику подключилась, узнала координаты, штампанула их в JPEG, и вот тогда можете обратно включить навигацию в 2ГИС».

Гипотетический ответ, по–видимому, в Sensors Platform. Для моего устройства есть два типа драйверов, тот, который прислал на почту продавец — это просто виртуальный COM–порт, и в Диспетчере устройств появляется именно COM–порт. А другой — датчик. Если установить этот драйвер, то в Диспетчере устройств появляется группа Датчики, и в ней — мой GPS–приёмник. Виртуальный COM–порт, впрочем, тоже есть, только после установки у него стал другой номер и название, так что, похоже, драйвера взаимоисключающие. Если браузер и программа, штампующая координаты в метаинформацию JPEG, работают через LocationAPI, то это кое–что проясняет, но ведь эти API только на Windows 7 появились. А как до этого всё работало?
OCTAGRAM
патенты энтропия jpeg кодирование хаффман Любопытная штука:
en.wikipedia.org Арифметическое кодирование

Не обошлось без патентных троллей.

At least one significant compression software program, bzip2, deliberately discontinued the use of arithmetic coding in favor of Huffman coding due to the perceived patent situation at the time. Also, encoders and decoders of the JPEG file format, which has options for both Huffman encoding and arithmetic coding, typically only support the Huffman encoding option, which was originally because of patent concerns; the result is that nearly all JPEG images in use today use Huffman encoding[1] although JPEG's arithmetic coding patents[2] have expired due to the age of the JPEG standard (the design of which was approximately completed by 1990).[3] There are some archivers like PackJPG, that can losslessly convert Huffman encoded jpegs to jpegs with arithmetic coding (with custom file name .pjg), showing up to 25% size saving.
OCTAGRAM
Delphi yaml borland rvelthuis.de
Пробую libyaml заинтерфейсить из Delphi 7. libyaml заточен под autotools. Накатал прокси для gcc, ld, ar, которые в окружении msys худо–бедно косят под одноимённые утилиты, но вызывают bcc32, ilink32 и tlib из Borland C++ 5.5 free command line tools. До конца не собралось, лень совершенствовать прокси, но дальше объектников мне всё равно не нужно. Код довольно чистый и по размерам объятный, так что кое–что удалось воплотить.
Я раньше таким способом серьёзные библиотеки не линковал. Всякие aspell подключались как dll'ки, JPEG и PNGImage сделаны кем–то другим, и я в код раньше не всматривался. Для себя я только во времена Borland Pascal линковал продукт работы binobj, а также tasm, но это всё не то.
Итак, я создал чистый юнит, и добавил в него $L для всех 8 .obj. Не компилируется, жалуется на unresolved externals, среди которых всякие _malloc, _realloc, _free, _strdup и прочие стандартные, которые, как выясняется, нередко дописываются прямо на Delphi так, чтобы они использовали тот же менеджер памяти, что и Delphi. Некоторые особо хардкорные вещи с varargs импортируются из msvcrt.dll. У меня всё из разных мест.
Есть возможность из Delphi немного изменить реализацию. Например, в libyaml используются fread и fwrite, но ничего кроме этого с файлами не делается, и я предоставил такую реализацию, которая читает и пишет в Classes.TStream вместо FILE*.
Далее, среди unresolved externals числятся также и все внутренние зависимости. То есть, если я объявляю procedure _yaml_траляля(ололо); cdecl; external;, это решает проблему. Сложно сказать, чей косяк. В C с импортами в заголовках всё тяжело. Связывание может быть статическим, динамическим, при динамическом связывании заголовок может подключаться как при компиляции собственно dll, так и при компиляции программ, её использующих, и эти три варианта использования нужно умножить на варианты компиляторов, чтобы получить многообразие ключевых слов для экспорта. autotools предоставляют для этих целей автоматически подобранные defin'ы, но libyaml их не использует, а применяет свой костылик, который не описывает мой случай. Я пытался менять хедер, но то ли я не подобрал ключевое слово, то ли в Delphi 7 так и должно быть, внутренние связи между .obj мне пришлось все объявить в паснике, который эти .obj подключает, и только тогда всё собралось. Тонкую привязку я уже почти сделал, а эти внутренние зависимости как раз неотъемлемая часть тонкой привязки.
Странно, но если сделать TLIB'ом .lib, Delphi его не подключит. Только одиночные .obj.

gunsmoker.ru
GunSmoker, когда подключал статическую библиотеку к Delphi, собирая динамическую, не так уж и прогадал.

interix-wgcc.sourceforge.net — gcc-мимикрирующая оболочка для MSVC, довольно продвинутая. Downloads куда–то делся, но можно скачать исходники.
OCTAGRAM
yahoo pipes БластКаста как–то вдруг резко неожиданно сдохла, Application Error, хотя вчера всё OK было. Ладно, вспомнил про Yahoo! Pipes. Кажется, мне это подходит. Заодно перенесу некоторые задачи, которые раньше решались не айс или не решались никак. Например, пытаюсь сделать так, чтобы у Мембраны новости были с картинками. Для этого пытаюсь в цикле фетчить страницу. У модуля фетча есть возможность задать «от» и «до», тогда он вырезает из страницы только нужное. Нужный мне фрагмент на странице, допустим, membrana.ru выглядит так:

<p><table width=10% cellspacing=0 cellpadding=0 border=0><td><img src=/images/forms/13500.jpeg alt='"Круги на воде" (микроволновом фоне)

Пытаюсь фетчить от «<img src=/images» до « alt». Получаю фрагмент:

<img src="http://www.membrana.ru/images/1.gif" width="4" height="1"><a rel="nofollow" target="_blank" href="http://www.membrana.ru"><font color="white" class="z10">Обложка</font></a>    
<br>
 
<font class="z10" color="white">
<a rel="nofollow" target="_blank" href="http://www.membrana.ru/aboutsite.html"><font color="white" class="z10">О проекте</font></a>
&nbsp;|&nbsp;
<a rel="nofollow" target="_blank" href="http://www.membrana.ru/news.html"><font color="white" class="z10">Новости сайта</font></a>
&nbsp;|&nbsp;
<a rel="nofollow" target="_blank" href="http://www.membrana.ru/advertising.html"><font color="white" class="z10">Размещение&nbsp;рекламы</font></a>&nbsp;<br>

ВОТ КАК Я ДОЛЖЕН ЭТО ВСЕ ПОНИМАТЬ? КАК?!!!! WTFIGO????