Top.Mail.Ru
? ?
Дано: папка с изображениями jpg.

Необходимо: разместить попарно изображения в "книжной" ориентации на листах формата А4 "альбомной" ориентации и затем "склеить" в один выходной PDF-файл.

Особенности: предварительно изображения необходимо повернуть в "книжный" формат. Если изображений нечетное количество - добавить пустой белый квадрат в качестве недостающего изорбражения Страницы пронумеровать. Все это выполнить используя Bash, ImageMagik.

[Итак...]
#!/usr/bin/env bash
trap cleanup EXIT
usage() {
echo "USAGE: $0 <photos dir> [output.pdf]"
}
cleanup() {
echo "--> Removing temporary files..."
rm -f "${TEMP_DIR}"/*.jpg
}
CONV=$(whereis -b convert | awk -F ': ' '{print $2}')
IDENT=$(whereis -b identify | awk -F ': ' '{print $2}')
COMPS=$(whereis -b composite | awk -F ': ' '{print $2}')
if [ $# -eq 0 ]; then
usage
exit 1
fi
SOURCE_DIR="$1"
OUTPUT_PDF="${2:-combined_album.pdf}"
if [ ! -d "$SOURCE_DIR" ]; then
echo "Error: '$SOURCE_DIR' does not exist. Exiting."
exit 2
fi
TEMP_DIR="$(pwd)/tmp"
$(mkdir -p "$PWD/tmp")
echo "Step 1 of 3: Doing portrait orientation of source images..."
COUNT=1
for img in "$SOURCE_DIR"/*.jpg "$SOURCE_DIR"/*.JPG "$SOURCE_DIR"/*.jpeg "$SOURCE_DIR"/*.JPEG; do
[ -f "$img" ] || continue
FILENAME="$(basename "$img")"
TEMP_IMG="$TEMP_DIR/${FILENAME}_prepared.jpg"
$CONV "$img" -auto-orient -strip "$TEMP_IMG"
DIMENSIONS=$($IDENT -format "%wx%h" "$TEMP_IMG")
WIDTH=${DIMENSIONS%x*}
HEIGHT=${DIMENSIONS#*x}
if [ "$WIDTH" -gt "$HEIGHT" ]; then
echo "--> Rotating $FILENAME"
$CONV "$TEMP_IMG" -rotate 90 "$TEMP_IMG"
fi
COUNT=$((COUNT + 1))
done
# Even or odd source files? If odd - create blank white
fnum=$(ls "$SOURCE_DIR"/*.jpg | wc -l)
if [ $(expr $fnum % 2) -ne 0 ]; then
echo "--> Odd number of source files. Adding blank white jpg file."
$CONV -size 300x200 xc:white "$TEMP_DIR/zyx_blank_prepared.jpg"
fnum=$(($fnum + 1))
fi
if [ "$COUNT" -eq 0 ]; then
echo "Error: No JPG files in '$SOURCE_DIR'. Exiting."
exit 3
fi
echo "Step 2 of 3: Creating A4 landscape pages with two portrait images on it..."
PAGE_COUNT=0
shopt -s nullglob
declare IMG_FILES
IMG_FILES=("$TEMP_DIR"/*_prepared.jpg)
#num_pages=$((${#IMG_FILES[@]}/2))
num_pages=$(($fnum/2))
for (( i=0; i<${#IMG_FILES[@]}; i+=2 )); do
PAGE_FILE="${IMG_FILES[i]}_pdfpage.jpg"
img1=$(basename ${IMG_FILES[i]})
img2=$(basename ${IMG_FILES[$((i+1))]})
tput sc
echo -ne "--> Page #$((PAGE_COUNT + 1)) from $num_pages..."
tput rc
# Blank white A4 page
$CONV -size 3508x2480 xc:white "$PAGE_FILE"
# Left img
LEFT_IMG="$TEMP_DIR/${img1}_page_l.jpg"
$CONV "${TEMP_DIR}/${img1}" -resize 1600x2200 -background white -gravity center -extent 1650x2250 "$LEFT_IMG"
# Right img
RIGHT_IMG="$TEMP_DIR/${img2}_page_r.jpg"
$CONV "${TEMP_DIR}/${img2}" -resize 1600x2200 -background white -gravity center -extent 1650x2250 "$RIGHT_IMG"
# Left image
$COMPS -geometry +100+150 "${LEFT_IMG}" "${PAGE_FILE}" "${PAGE_FILE}"
# Right image
$COMPS -geometry +1750+150 "${RIGHT_IMG}" "${PAGE_FILE}" "${PAGE_FILE}"
# Add page number
$CONV "${PAGE_FILE}" -pointsize 48 -fill white -gravity southeast -annotate +180+100 "P. $(($PAGE_COUNT + 1)) of $num_pages" "$PAGE_FILE"
$CONV "${PAGE_FILE}" -pointsize 48 -fill black -gravity southeast -annotate +175+96 "P. $(($PAGE_COUNT + 1)) of $num_pages" "$PAGE_FILE"
PAGE_COUNT=$((PAGE_COUNT + 1))
done
echo "Step 3 of 3: Creating PDF-file: $OUTPUT_PDF..."
if [ "$PAGE_COUNT" -gt 0 ]; then
ls ${TEMP_DIR}/*_pdfpage.jpg > "${TEMP_DIR}"/pages.txt
$CONV @${TEMP_DIR}/pages.txt -size 3508x2480 -density 300 "${OUTPUT_PDF}"
# Result report
if [ -f "${OUTPUT_PDF}" ]; then
PDF_SIZE=$(du -h "${OUTPUT_PDF}" | cut -f1)
REP="========================================\n
Filename:      ${OUTPUT_PDF}\n
Size:          $PDF_SIZE\n
Pages:         $PAGE_COUNT\n
Source images: $((COUNT -1))\n
========================================"
echo -e $REP
else
echo "Error creating PDF-file. Exiting, code $?."
exit 4
fi
else
echo "Error creating any page in PDF-file. Exiting, code $?."
exit 5
fi
exit 0



Совершенно фантастический человек родился сегодня, 12 сентября, в 1921 году — Станислав Лем. В его честь дарим вам беспощадно точные цитаты из его великих книг о предмете, который он знал лучше всего, — о человечестве, о нас с вами. Не устарели ни на грамм!

Read more...Collapse )

Найдено мной в дайрях, вот тут:
http://www.diary.ru/~BigLynx/p173568057.htm
Это перевод, так что я ставлю ссылку на то, с чего оно:
http://wrttn.in/04af1a

Корпоративная память бывает двух видов: люди и документация. Люди помнят, как вещи работают, и знают, почему. Иногда они записывают эту информацию куда-нибудь и хранят свои записи где-нибудь. Это называется «документация». Корпоративная амнезия действует точно так же: люди уходят, и документация исчезает, гниёт или просто забывается.

Я провёл несколько десятилетий, работая в большой нефтехимической компании. В начале 1980-х мы спроектировали и построили завод, который переделывает одни углеводороды в другие углеводороды. За следующие 30 лет корпоративная память об этом заводе ослабла. Да, завод всё ещё работает и приносит фирме деньги; техобслуживание производится, и высокомудрые специалисты знают, что им надо подёргать и куда пнуть, чтобы завод продолжил работать.

Но компания абсолютно забыла, как этот завод работает.

Это произошло по вине нескольких факторов:

Спад в нефтехимической промышленности в 1980-х и 1990-х заставил нас прекратить принимать на работу новых людей. В конце 1990-х, в нашей группе работали ребята в возрасте младше 35 или старше 55 — с очень редкими исключениями.
Мы потихоньку перешли на проектирование с помощью компьютерных систем.
Из-за корпоративных реорганизаций нам пришлось физически переезжать всем офисом с места на место.
Корпоративное слияние несколькими годами позже полностью растворило нашу фирму в более крупной, вызвав глобальную перестройку отделов и перетасовку кадров.

В начале 2000-х я и несколько моих коллег вышли на пенсию.

В конце 2000-х компания вспомнила о заводе и подумала, что было бы неплохо сделать с ним что-нибудь. Скажем, увеличить производство. К примеру, можно найти узкое место в производственном процессе и улучшить его, — технология-то эти 30 лет не стояла на месте, — и, может быть, пристроить ещё один цех.

И тут компания со всего маху впечатывается в кирпичную стену. Как этот завод был построен? Почему он был построен именно так, а не иначе? Как именно он работает? Для чего нужен чан А, зачем цеха Б и В соединены трубопроводом, почему трубопровод имеет диаметр именно Г, а не Д?

Корпоративная амнезия в действии. Гигантские машины, построенные инопланетянами с помощью их инопланетной технологии, чавкают, как заведённые, выдавая на-гора груды полимеров. Компания примерно представляет себе, как обслуживать эти машины, но понятия не имеет, что за удивительное волшебство творится внутри, и ни у кого нет ни малейшего представления о том, как они создавались. В общем, народ даже не уверен, что именно надо искать, и не знает, с какой стороны следует распутывать этот клубок.
Read more...Collapse )
Debian-9, разные файрфоксы, последний из них 73.0.1 x64, плагин uBlock. Проблема: просмотре ЖЖ-страниц грузит CPU: 1 страница - одно ядро проца, две - два ядра и т.д. Дело не в ОС, профиле FF, самом FF, его плагинах и т.п. Дело в каких-то "кишках" ЖЖного движка, какой-то скрипт, видимо, где-то косячит, что-то там "не то" делает, что потребляет ресурсы.

Увидеть сие просто: открываем любую ЖЖ- страницу, в другой вкладке вводим about:performance и видим колонки "Память", "Расход энергии". Раскрыв подробнее статистику по открытой вкладке с ЖЖ видим, что высокое потребление вызывает адресок https://l-stat.livejournal.com

Соответственно, The Root of All Evil - это оно. Идем в uBlock "Открыть панель управления" -> "Мои списки" и добавляем вот так сразу, правила:

l-stat.livejournal.net/*.js
l-stat.livejournal.com/*.js


Просто и незатейливо рубим эту сбойную JS-ересь. Наотмашь. С плеча и до пояса пополам.

Сохраняемся, перегружаем ЖЖ- вкладку - вуаля, вроде бы и все, нагрузка на CPU уходит, смотреть ЖЖ-странички можно. Правда, "Читать дальше" не работает - не разворачивает кат, а открывает страницу, ну и ладно. Может, еще какие есть проблемы, - пока не заметил. НО.

Попробуем посмотреть свою ленту друзей - о-па, ничего. И пост добавить тоже не можем, как в свой ЖЖ, так и другим. Неаккуратненько как-то...

Идем опять в настройки uBlock -> "Белый список" и туда добавляем исключения для выполнения скриптов на:
https://l8sae-rexhn1.livejournal.com/feed/ <-- сюда, вместо моего ЖЖ, внести свой
https://www.livejournal.com/post

Вот теперь все. Пока все...

Если запустить отладку ЖЖ- страницы, то можно увидеть, что вся "петрушка" в скриптах, которые доступны по ссылке типа: https://l-stat.livejournal.net/js/??jquery/jquery.lj.calendar.js,jquery/jquery.mask.js,controlstrip.js,scheme/schemius.js,jquery/jquery.lj.repostbutton.js,threeposts.js,recommended-entries.js,s2.js,esn.js,jquery/jquery.lj.confirmbubble.js,jquery/jquery.lj.ljcut.js,fb-select-image.js,lj.postmessage.js,quickreply.js,md5.js,thread_expander.js,thread_expander.ex.js,commentmanage.js,jquery/jquery.lj.inlineCalendar.js,jquery/jquery.calendarEvents.js,apps.js,apps/appcontainer.js,jquery/jquery.lj.journalPromoStrip.js,widgets/discoverytimes.js?v=1583399315

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

Предположим, есть debian-хост с установленным knockd. Его IP = 192.168.4.1. Также имеется такой конфиг knockd:

[options]
       UseSyslog

[openSSH]
        sequence    = 7000,8000,9000
        seq_timeout = 5
        command     = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
        tcpflags    = syn

[closeSSH]
        sequence    = 9000,8000,7000     
        seq_timeout = 5     
        command     = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
        tcpflags    = syn


Если мы удаленно постучимся вот так: knock 192.168.4.1 7000 8000 9000 - то откроем порт SSH. Если же: knock 192.168.4.1  9000 8000 7000 -
то получим «Закрой за мной дверь, я ухожу...» Все просто.

А что, если мы раза три постучимся на «открытие» порта? Внезапно, добавится ТРИ одинаковых iptables- правила. И, соответственно, уходя и закрывая порт мы удалим лишь одно из них. И порт таки останется открытым.

Почему iptables не проверяет на «дубли» одинаковых правил при их добавлении — неизвестно. Неприятный момент. Но вопрос таки решаем.

Есть разные варианты: iptables-save + uniq + iptables-restore, iptables-save + grep, наваять скрипт перебора правил и удаления дублей, ... Но есть, КМК, более простой и элегантный путь.

iptables начиная с давних версий (по крайней мере ядро 2.6.32-5 и iptables-1.4.14 уже знают такой ключ) имеет ключ -C --check . Просто вводим вышеуказанное правило с -C INPUT и ловим код ошибки. Если 0 — все норм, правила нет, добавляем. Не 0 — правило уже есть в цепочке.

Соответственно, перепишем конфиг вот так:

[options]
        UseSyslog

[openSSH]
       sequence    = 7000,8000,9000
       seq_timeout = 5
       command     = /sbin/iptables -C INPUT -s %IP% -p tcp --dport 22 -j ACCEPT  || /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
       tcpflags    = syn

[closeSSH]
        sequence    = 9000,8000,7000
        seq_timeout = 5
        command     = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
        tcpflags    = syn


И все. Правило всегда будет одно, хоть обстучись на открытие порта. На каждое следующее "открытие" порта в логах будет ошибка типа:
...
knockd[1968]: iptables: Bad rule (does a matching rule exist in that chain?).

...

LSI MegaRaid M1068E, 4 HDD Seagate SAS 146Gb, на них пробую ставить Debian-9.8. RAID-контроллер диски видит, можно рэйды конфигурить-собирать, но при установке Debian'a евойный partman диски не видит. Несмотря на использование опций загрузки 'expert dmraid=true'. Хотя, в дополнительной консоли, диски есть, mdadm, fdisk и прочие их видят. Такая вот странная странность...

Так как изначально планировал использовать mdadm для организации RAID'а, то необходимость в «аппаратном» рэйде от Supermicro отпала. Тем более, что он не видится установщиком и не видится BIOS'ом материнской платы и вообще, не очень-то и "аппаратный"...

Выход из ситуации прост: перешить RAID контроллер. Данный контроллер может работать в двух режимах SW-RAID в реализации от SuperMicro и IT-mode. Первый, как понятно, реализует псевдо-аппаратный рэйд, второй же — просто позволяет «видеть» SAS диски как отдельные устройства и «отображать» их в BIOS материнской платы как независимые устройства.

Что необходимо сделать:

  1. Перешить RAID-контроллер для поддержки режима IT-mode. Для этого идем сюда: ftp://ftp.supermicro.com/driver/SAS/LSI/1064_1068/IT/Firmware/B3/L8i/1.30.00/ и качаем архив L8i_IT.zip. Внутри - прошивка и прошиватели для DOS/Windows/Linux x64. В моем случае SystemRescueCD, загруженный с флешки, спокойно перешил контроллер.

  2. На материнке джампер JPS2 нужно установить в положение "Выкл" - активировать IT-mode RAID'a

После перезагрузки приглашение RAID-контроллера меняется c Ctrl-M на Ctrl-C, BIOS материнской платы видит SAS-диски в списке загрузочных устройств и сам Debian видит диски и успешно на него устанавливается.

Анамнез:
Debian 9.6 amd64, карта NVIDIA GeForce GTX 260, boinc-7.6.33 (установлен apt-ом) nvidia-driver 340.107 (стянут с сайта нвидии и установлен "ручками").
boinc-manager при старте пишет "GPU detection failed. Error code 512" и/или  "No usable GPUs found" и, соответственно, не использует видеокарту при вычислениях.

Диагноз:
по какой-то причине BOINC не подгружает библиотеки CUDA и/или OpenCL.

Лечение:
sudo /etc/init.d/boinc-client stop
sudo usermod -a -G boinc $(whoami)
sudo gpasswd -a boinc video
sudo /etc/init.d/boinc-client start


и проверяем в "Просмотре событий boinc manager'a строки типа:

CUDA: NVIDIA GPU 0: GeForce GTX 260 (driver version 340.10, CUDA version 6.5, compute capability 1.3, 895MB, 802MB available, 874 GFLOPS peak)
OpenCL: NVIDIA GPU 0: GeForce GTX 260 (driver version 340.107, device version OpenCL 1.0 CUDA, 895MB, 802MB available, 874 GFLOPS peak)

Tags:

Pale_Blue_Dot.png
"Взгляните ещё раз на эту точку. Это здесь. Это наш дом. Это мы. Все, кого вы любите, все, кого вы знаете, все, о ком вы когда-либо слышали, все когда-либо существовавшие люди прожили свои жизни на ней. Множество наших наслаждений и страданий, тысячи самоуверенных религий, идеологий и экономических доктрин, каждый охотник и собиратель, каждый герой и трус, каждый созидатель и разрушитель цивилизаций, каждый король и крестьянин, каждая влюблённая пара, каждая мать и каждый отец, каждый способный ребёнок, изобретатель и путешественник, каждый преподаватель этики, каждый лживый политик, каждая «суперзвезда», каждый «величайший лидер», каждый святой и грешник в истории нашего вида жили здесь — на соринке, подвешенной в солнечном луче.

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

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

Земля — пока единственный известный мир, способный поддерживать жизнь. Нам больше некуда уйти — по крайней мере, в ближайшем будущем. Побывать — да. Поселиться — ещё нет. Нравится вам это или нет — Земля сейчас наш дом.

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

Carl Edward Sagan.

Пишем бэкапы на ленту

Появился тут музейный, но вполне себе рабочий экспонатЪ ленточного накопителя HP StorageWorks Ultrium 460.

(без названия) (без названия)


Все как положено: Ulta3 SCSI-интерфейс, LTO-2 кассеты для записи по 400 GB каждая. В целом - даже сейчас не самый плохой вариант для хранения вторичных резервных копий. Да, подобных "дэвайсов" уже практически не найти и если оный красавец прикажет долго жить - будет проблема. Но в целом - не так, чтобы очень это проблема. Ведь по стандарту LTO устройства с записью LTO-4 могут читать LTO-2 кассеты. А LTO-4 накопитель найти уже будет чуточку попроще. Да и вообще: не пропадать же такому чудо-устройству и двум десяткам кассет на которых даже муха не.... ну, не познала любовь муха...

Для подключения нашлась и PCI SCSI-плата, и шлейф подключения. Современный Debian с данным устройством все так же, как и Unix'ы N-дцати летней давности работают с использованием утилит tar и mt. Так как про LTFS накопитель еще не слышал, то все достаточно просто.

Кратко вспомним, как же оно там все крутится.
Вспоминаем...Collapse )
Originally posted by arctus at Антисоветизм - единственная причина установки доски Колчаку. Иных просто нет

Доску Колчаку уже повесили. 16 ноября будет её торжественное открытие. Общественное мнение так и не заинтересовало петербуржские власти*. Не получится ли так, как с пресловутой «доской Маннергейма», которую недавно всё же сняли?

Read more...Collapse )

Profile

l8sae_rexhn1
cat /dev/urandom >~/.nickname

Latest Month

January 2026
S M T W T F S
    123
45678910
11121314151617
18192021222324
25262728293031

Syndicate

RSS Atom

Comments

  • l8sae_rexhn1
    11 Aug 2020, 18:32
    К сожалению ничего не могу сказать по сути заданных вами вопросов. Не имею, так сказать, практического опыта работы.

    Судя по описанию формата DDS файловой системы там нет. Это ж, по сути, тот же…
  • l8sae_rexhn1
    10 Aug 2020, 12:24
    Приветствую! То, что у лент нет файловой системы, это на все типы распространяется? Например DDS? Так же всё? Дело в том, что на DDS лентах хранится архив, 23 кассеты. Однако последняя была…
  • l8sae_rexhn1
    11 Jul 2020, 20:16
    > Не надо вестись на маркетинговые 400ГБ для LTO-2. Несжатых на ней 200ГБ. Вот они реально и пишутся.

    Обма^W Маркетинг- штука понятная. Но, тем не менее, заявлено 400 при сжатии - вынь, да положь…
  • 8 Jul 2020, 17:34
    Не надо вестись на маркетинговые 400ГБ для LTO-2. Несжатых на ней 200ГБ. Вот они реально и пишутся.
    У меня ленты 3 и 4 поколения 400 и 800ГБ без сжатия соответственно. Вот на эти объемы я и…
  • l8sae_rexhn1
    6 Jul 2020, 17:07
    Лента - это вещь, да. HDD крякнул и - все, ВСЯ инфа ушла в страну вечной охоты. Долгое хранение для хрупких вещей, коими являются жесткие диски, тоже, порой, еще та задача. Лента в этом плане лучше.…
Powered by LiveJournal.com
Designed by yoksel