kouprianov: (Default)
Дано: есть код fetcher'a, который исправно работает под Linux и MS Windows. Смотрит в файл со списком URL, потом печатает html файлы в один большой файл. Под Mac'ом пишет, что не может. Точную формулировку я не помню, но, если память не изменяет, он пишет про "use of uninitialised value".

Правильно ли я понимаю, что ему страницы в ответ на get($_) не отдают? Или там раньше проблема начинается?

И что вообще делать?
kouprianov: (Default)
Век живи, век учись... Или о вреде отсутствия систематических познаний в программировании. Хорошо, опыт, сын ошибок трудных, спасает. Пришлось недавно матчить слова на латинице, в которых попадались отдельные символы unicode (ну, то есть, весь текст, конечно, в UTF-8, но пока остаешься в рамках базовой латиницы, разницы особой нет). И вот, например, есть буква Ü. Ее можно, конечно, заматчить как \xc3\x9c. Но, если лень, то можно попробовать матчить как «любой символ»: . Не матчилось. Долго тупил, пока не понял, что это, конечно же, не один «любой символ», а два «любых символа»: .. (т. е., Über = ..ber, а не .ber).
kouprianov: (Default)

В последние годы в кругах, причастных цифровой гуманиоре, популярны работы Льва Мановича [см. http://manovich.net/ ], придумавшего и пропагандирующего интересные формы работы с большими массивами изображений. Обычно, как я понял, он получает эти массивы по API из Instagram или аналогичных источников, потом создает базы изображений и сопутствующих метаданных и строит умопомрачительной красоты визуализации.

Часто говорят о том, что он работает с изображениями в «нередуцированном» виде. Из чтения его работ я не понял, что имеется в виду под нередуцированным видом, потому что вся умопомрачительная графика строится на том, что из графического файла извлекаются весьма немногие суммарные характеристики (обычно усредненная яркость, контрастность и время создания), после чего вся коллекция располагается в осях этих переменных. Отдельные изображения, в зависимости от размеров графика и количества изображений, могут репрезентировать точки, покрашенные в усредненный по изображению цвет, или уменьшенные / неуменьшенные копии изображений, играющие роль все тех же точек на графике, но краше.

Сам Манович предлагает использовать для работы специально созданный им программный продукт, который состоит из надстройки над Jimage. Немного подумав, я решил, что нет ничего запредельно сложного, в том, чтобы добиться того же иными средствами, не отходя далеко от R (в работе с R я вижу два плюса -- возможность создания скриптов, позволяющих воспроизводить преобразования данных, расчеты и графики, и бесконечный аналитический потенциал). При такой простоте подхода к презентации данных, ключевой вопрос был, как понятно, в том, чтобы как-то получить эти самые данные об изображениях (потому что, получив их, нарисовать типичный график несложно). Я не рассматриваю здесь вопрос о сборе метаданных (авторы, комментарии, геопозиция, количество лайков и т. п.) и получении изображений как таковых. Они лежат в несколько иной плоскости (роботы-фетчеры и API), меня интересуют вопросы об анализу уже наличных коллекций.

Если изображения уже имеются в вашем распоряжении, добыть данные об их параметрах гораздо проще, чем может показаться на первый взгляд. Помимо GUI редакторов для графики, как известно, есть довольно мощные инструменты для работы с графикой из командной строки. Я использую в таких случаях ImageMagick (да нагуглится имя его). В его состав, среди многого прочего, входит утилита identify, которая возвращает от просмотренных ею файлов довольно изрядный список параметров. Если не указано иное, то возвращает она его на стандартное устройство вывода (экран), но можно указать иное и направить весь этот поток текста в файл. Вот несколько сокращенный real-life пример данных по одному из моих файлов (фото, сделанное цифровым фотоаппаратом).

Пример под cut... )

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

Файл imagedata.sh:

#!/bin/bash
shopt -s globstar
for img in **/*.JPG; do identify "$img" -verbose >> imagedata.raw.txt
done

Скрипт жужжал больше часу, собрал 60+ МБ всей этой словесно-цифирной шелухи из 7+ тыс. файлов (скромно, в общем, но я мало снимаю в последние годы). Пришла пора достать оттуда то, что нужно (умные люди могут делать это на лету, думаю, и я, попыхтев немного с sed, смог бы, но пыхтеть не хотелось и я пошел по пути наименьшего сопротивления, написав [опять-таки, по мнению знатоков, наверняка избыточный] скрипт на perl). Доставать я собирался время создания, параметры каналов RGB (mean и standard deviation) и суммарные характеристики изображения, которые могут сойти за меры общей яркости и общей контрастности Overall / mean и Overall / standard deviation.

скрипт тоже под cut... )

После чего у меня образовался небольшой файлик на 1.2 МБ, который уже можно было загружать в R. После загрузки удалось нарисовать несколько картинок примерно настолько же осмысленных, как и картинки автора идеи. Самая большая возня была, как это ни смешно, с осью времени (я редко работаю со временем в таком формате), но все как-то утряслось. Их можно допиливать и дальше (например, теоретически возможен вариант с использованием сильно уменьшенных изображений в качестве точек на графиках), но это уже не принципиально.

Вот -- коллекция, развернутая в осях: яркость / контрастность:

scatter.man

Вот, в порядке нарастания детализации, временные ленты для яркости...:

band.man.20110701_20171231.mean
band.man.20120715_20120731.mean
band.man.20120726.mean

...и контрастности:

band.man.20110701_20171231.sd
band.man.20120715_20120731.sd
band.man.20120726.sd
kouprianov: (Default)

Сегодня мы так и не добрались до сути, но для тех, кто потерял надежду, попытаюсь на маленьком примере объяснить, зачем бывает нужен Perl. Вот у нас есть данные, в которых даты записаны так:

простой скрипт и его истолкование... )

P. S. 2/290/-74/216.

kouprianov: (Default)

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

s/(?<=\d)ЧТОВПИСАТЬСЮДА?(?=\d\d\d)//g;

В качестве кандидатов уже побывали "\x0xA0", "\xA0", "\x0xC2", "\xC2". Я понимаю, что чего-то не понимаю, но это само по себе не помогает. Все эти долбанные cookbookи и учебники написаны, похоже, какими-то людьми, которые уже все знают, поэтому они общаются с простыми смертными, вроде меня, языком полупонятных намеков.

March 2025

S M T W T F S
      1
2345678
910 1112131415
16171819202122
23242526272829
3031     

Syndicate

RSS Atom

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 22nd, 2025 04:50 pm
Powered by Dreamwidth Studios