Linuksy administracja i ranty…

Nie tak dawno po serwisach newsowych w jakiś sposób związanych z FLOSS przetoczyły się informacje o tym, że administracja w szkoplandii po udanej migracji na wolne oprogramowanie właśnie przytłoczona jakimiś bliżej nie zidentyfikowanymi problemami migruje z powrotem na oprogramowanie własnościowe.

Nie tak dawno po serwisach newsowych w jakiś sposób związanych z FLOSS przetoczyły się informacje o tym, że administracja w szkoplandii po udanej migracji na wolne oprogramowanie właśnie przytłoczona jakimiś bliżej nie zidentyfikowanymi problemami migruje z powrotem na oprogramowanie własnościowe.

Z tej okazji zdenerwowany MacSlow (i zapewne gazylion innych ale tego akurat przyuważyłem) wysmażył na blogu rant German foreign office goes back to Windows – rant. Gdzie między innymi:

From reading summaries on the real reasons, it apparently came down to drivers (for printers and scanners), which they probably bought at Lidl or Aldi (german discount-chains), instead of spending a minute or two on the web researching what devices are properly supported.

A ponieważ akurat mniej więcej w tym czasie zdechł u mnie w firmie wysłużony fax od Panasonica mam garść własnych doświadczeń.

Fax jest konieczny do pracy, ale drukarka też by się przydała. No to może żeby nie marnować miejsca jakiś mały wielofunkcyjny kombajnik? Nie jestem administracja publiczna tylko normalny ZU 2.0 myślę, że sobie poradzę.
Na stronie HP odnajduję urządzenie z zadowalającymi parametrami i rozsądną ceną: HP LaserJet Pro M1212nf. Obsługiwane OS?

Windows® 7; Windows Vista®; Microsoft® Windows® XP, Server 2003, Server 2008; Mac OS X v10.4, v10.5, v10.6; Linux (patrz http://www.hplip.net). W systemach Microsoft® Windows® Server 2003 i Server 2008 można dodać tylko sterowniki druku i skanowania.

jest ok, ale sprawdzamy dalej na stronie hplip: hplip: HP LaserJet Professional m1212nf Multifunction Printer.

Minimum HPLIP version: 3.10.4
Support level: Full (See note11.)
Recommended?: Yes (See note15.)

This printer REQUIRES a downloadable driver plug-in. Use hp-setup to install the printer, and to download and install the plug-in. In general, required driver plugins are required for printing support. Driver plug-ins are released under a proprietary (non-open) license and are not part of the HPLIP tarball release.

11) For a definition of Support Levels, please refer to this KB article.
15) „Recommended” means that the printer is fully supported in HPLIP and is recommended for use on your Linux system. For information of what „fully supported” means, see this KB article.

Nadal ok, ale jakiś plugin, lista wspieranych dystrybucji… Ok nie chcemy się wpierdzielić jak jakiś lamer z niemieckiej administracji trzeba dopytać.

Launchpad HPLIP: Is the HP LJ Pro M1212nf supported?

Gdzie ostatecznie zostaję upewniony, że zadziała i nie powinienem wydziwiać.

No to kupiłem drukarkę. Chwilę to trwało zanim zadziałała bo się ten durny plugin nie chciał zainstalować, pewnie coś robiłem źle. Anyway drukarka zainstalowana, skaner działa (jeden i drugi), drukarka działa, faksowanie z komputera się zainstalowało (nie testowałem więc nie napiszę tu, że działa ale wierzę, że tak). Oczywiście powyższe nie wskazuje na powód dla którego dziś tu spamuję… 😉

Głównym zadaniem urządzenia jest bycie faksem. To jedyna rzecz której od niego oczekuję na co dzień to żeby odebrał fax jeśli ktoś do niego zadzwoni i żebym ja mógł odebrać fax dla siebie. I tu małe wyjaśnienie. Odebrać fax czyli ja dzwonię do kogoś, mówię cześć to ja prześlij mi dokument, ktoś wysyła ja odbieram. To się bodaj polling nazywa i tak jest obsługiwane przez HP M1212nfgoogle: m1212nf polling

I tu zaczęły się schody …

Procedura z mojej strony jest zawsze taka sama, linia telefoniczna jak to linia też się raczej nie zmienia codziennie. Na dodatek po drugiej stronie połączenia jest cały czas to samo jedno urządzenie. Połączenie wygląda następująco:

  1. wybieram numer faksu z podłączonego do linii (via fax) telefonu, po nawiązaniu połączenia proszę o wysłanie faksu
  2. Naciskam przycisk odbioru faksu na drukarce
  3. Odbieram fax … lub nie

Rozmawiamy o prostym urządzeniu dla normalnych ludzi i technologii istniejącej już dobrze 20 lat, a pewnie więcej. Efekt powyżej opisanej procedury jest taki, że w większości przypadków działa, po naciśnięciu przycisku faksu słychać przeskakujący przekaźnik (fax podnosi słuchawkę) i po chwili urządzenia zaczynają negocjować połączenie. Ale czasami ta sama procedura daje taki efekt, że po naciśnięciu przycisku faxu na wyświetlaczu drukarki pojawia się pytanie Wysłać z szyby? i d*.*. Można sobie klikać w kółko wróć i znów zielony przycisk faxu, nic nie daje. Jak się małpa uprze to nic jej nie przekona.

Wygląda to wszystko tak jak gdyby drukarka HP próbowała zgadnąć co chciałby zrobić użyszkodnik ale słabo jej to zgadywanie wychodzi. No to wziąłem się za siebie i napisałem do supportu.
Od jakiegoś czasu sobie z tym supportem korespondujemy. Dostałem masę mało sensownych porad, kilka próśb o wykonanie testów (w tym próby wysłania faksu na numer w HP Polska – tak jak gdybym kiedykolwiek uważał, że mam kłopot z wysyłaniem dokumentów). Generalnie z tej całej korespondencji nic nie wynika, poza ostatnim wnioskiem z przed kilku dni. Być może konieczna jest aktualizacja firmware. Można ją wykonać samemu … z komputera z zainstalowanym Windows. Z urządzenia z linuskiem się nie da.

I tak to jest z linuksem w firmie, nawet jeśli nie ma się drukarek z Lidla kupionych bez zastanowienia.

Akualikurdezacja

A Babcia mówiła, nie aktualizować niczego zaraz po wydaniu, dać innym miesiąc, niech się u nich wypierdziela, co się odwlecze to nie uciecze. Ale wariat nie, tyle czasu pieścili się z tym firefoksem, ostatnio wywalał się gdzieś w okolicy 0.9 co się może stać … ano może np. to:

wariat@mickey ~ $ firefox 
PluralForm.jsm: Index #2 of 'Firebug's log limit has been reached. 0 entry not shown.;Firebug's log limit has been reached. 0 entries not shown.' for value 0 is invalid -- plural rule #9; called by $STRP
PluralForm.jsm: Index #2 of '0 Total Firebug;0 Total Firebugs' for value 0 is invalid -- plural rule #9; called by $STRP
PluralForm.jsm: Index #2 of '0 Total Firebug;0 Total Firebugs' for value 0 is invalid -- plural rule #9; called by $STRP
PluralForm.jsm: Index #2 of '0 Total Firebug;0 Total Firebugs' for value 0 is invalid -- plural rule #9; called by $STRP
PluralForm.jsm: Index #2 of '0 Total Firebug;0 Total Firebugs' for value 0 is invalid -- plural rule #9; called by $STRP
PluralForm.jsm: Index #2 of '0 Total Firebug;0 Total Firebugs' for value 0 is invalid -- plural rule #9; called by $STRP
PluralForm.jsm: Index #2 of '0 Total Firebug;0 Total Firebugs' for value 0 is invalid -- plural rule #9; called by $STRP
PluralForm.jsm: Index #2 of '0 Total Firebug;0 Total Firebugs' for value 0 is invalid -- plural rule #9; called by $STRP
Running global cleanup code from study base classes.
*** glibc detected *** firefox: free(): invalid next size (fast): 0x0000000001e96190 ***
======= Backtrace: =========
/lib/libc.so.6(+0x72b56)[0x7ffc80783b56]
/lib/libc.so.6(cfree+0x6c)[0x7ffc8078890c]
//usr/lib64/opengl/nvidia/lib/libnvidia-tls.so.260.19.36(+0x8bb)[0x7ffc756e18bb]
======= Memory map: ========
00400000-0040b000 r-xp 00000000 08:03 2015513                            /usr/lib64/firefox/firefox
0060a000-0060b000 r--p 0000a000 08:03 2015513                            /usr/lib64/firefox/firefox
0060b000-0060c000 rw-p 0000b000 08:03 2015513                            /usr/lib64/firefox/firefox
00827000-02a8e000 rw-p 00000000 00:00 0                                  [heap]
7ffc44000000-7ffc44306000 rw-p 00000000 00:00 0 
7ffc44306000-7ffc48000000 ---p 00000000 00:00 0 
7ffc49784000-7ffc497a4000 rwxp 00000000 00:00 0 
7ffc497a4000-7ffc497a6000 r--p 00000000 08:04 41682260                   /home/wariat/.mozilla/firefox/jft23qdq.default/TestPilotExperimentFiles/base_classes.jar
7ffc497a6000-7ffc497c6000 rwxp 00000000 00:00 0 
7ffc497c6000-7ffc497c9000 r--p 00000000 08:04 41681756                   /home/wariat/.mozilla/firefox/jft23qdq.default/TestPilotExperimentFiles/week_life.jar
7ffc497c9000-7ffc497e9000 rwxp 00000000 00:00 0 
7ffc497e9000-7ffc497ea000 r--p 00000000 08:04 41686995                   /home/wariat/.mozilla/firefox/jft23qdq.default/TestPilotExperimentFiles/basic-survey.jar
7ffc497ea000-7ffc4980a000 rwxp 00000000 00:00 0 
7ffc4980a000-7ffc49c0a000 rw-p 00000000 00:00 0 
7ffc49c0a000-7ffc49d4b000 rwxp 00000000 00:00 0 
blablabla

No dobra generalnie nic się nie stało, tylko trzeba będzie gazylion haseł wpisać na nowo (i w większości przypadków pewnie ustalić na nowo bo kto by pamiętał którędy po klawiaturze szedł kot generujący hasła).

Wyścig z czasem :D

Po tym jak laptok praktycznie wyzionął ducha, a ja przywróciłem do łask grzyba podjąłem decyzję, że w miarę możliwości trochę gościa zmodernizuję. Pierwszy pomysł to wetknąć mu możliwie najszybszy CPU. Z lektury listy wynikało, że byłby to albo Athlon 64 x2 4800+ albo Athlon FX-60 ze wskazaniem na tego ostatniego.
Na Alledrogo nie występuje, ale okazało się, że bez problemu można gościa kupić na eBayu po drugiej stronie wielkiej kałuży.

A gdzie ten wyścig? No bo komp. przecież fotografuje. O każdej pełnej godzinie, ja zabrałem się za wymianę procka o 21:20 … ale się udało. 😀 Co prawda stary procek przykleił się do radiatora przez co wylazł z socketa bez jego otwierania, radiator był na tyle zabrudzony że go po proostu opłukałem wrzątkiem bo czyszczenie na sucho zajęłoby za dużo czasu ale wszystko wskazuje na to, że nic się nie popsuło no bo w końcu to piszę, co wskazuje, że Obie połówki nowego CPU czują się dobrze.
Chce ktoś Athlon 64 3500+ Socket 939?

Jupitery 2.0

Co prawda układ z przekaźnikiem, czyli jupitery 1.0 działał, ale Caladan któremu pozwoliłem sobie pozawracać głowę uznał, że nawet jeśli działa to tylko przez przypadek. Mnie samemu nie wszystko wydawało się być ok, ale w końcu działało. W głowie był plan (jak się później okazało całkiem słuszny), żeby przekaźnikiem sterować za pomocą tranzystora npn. Tylko wszystkie próby namalowania tego na kartce (tak naprawdę jeszcze przed ostatecznym zmontowaniem poprzedniego układu) rozbijały się o eee tak to chyba nie zadziała.

Co prawda układ z przekaźnikiem, czyli jupitery 1.0 działał, ale Caladan któremu pozwoliłem sobie pozawracać głowę uznał, że nawet jeśli działa to tylko przez przypadek. Mnie samemu nie wszystko wydawało się być ok, ale w końcu działało. W głowie był plan (jak się później okazało całkiem słuszny), żeby przekaźnikiem sterować za pomocą tranzystora npn. Tylko wszystkie próby namalowania tego na kartce (tak naprawdę jeszcze przed ostatecznym zmontowaniem poprzedniego układu) rozbijały się o eee tak to chyba nie zadziała.

Anyway ponieważ jak wiadomo jednostka z wiedzą regularnie naciskana wiedzę uwalnia, doszło po kilku wymianach zdań z Caladanem do powstania projektu jupitery-2.0 gdzie przekaźnik został całkowicie usunięty, właściwie wszystko zostało całkowicie usunięte, został tranzystor n-mosfet.
Niebagatelną rolę odegrał prosty symulator układów: Circuit Simulator Applet. Naprawdę super zabawka, oczywiście pewnie wysoce nieprofesjonalna, ale w tym też jest jej siła, bo zamiast straszyć po prostu działa.
No i tak powstało ten cud XXI wiecznej techniki 😀



Można oczywiście całość odpalić we wspomnianym symulatorze, wystarczy zaimportować opis i powinno zadziałać.

Słowem bym się teraz nie odezwał gdyby nie to, że zmontowałem, działa, i w końcu kwiatek się fotografuje. Co z tego wyniknie trudno stwierdzić, na razie mamy eksperymentalne studio badawcze:

Naszpikowane zaawansowaną elektroniką 😀

W międzyczasie zrobiłem wywiad w kwiaciarni w poszukiwaniu gotowego pacjenta aby nie ryzykować szoku termicznego po przenosinach z trawnika do dom^W laboratorium. Niestety, wszystko co da się kupić jest już poważnie wyrośnięte i się nie nadaje. Wykopałem więc Krokusa zgodnie z pierwotnym planem, odpaliłem małpy i … zdjęcia już się robią.

A co z tego wyniknie … to się okaże za kilka(naście?) dni.

W każdym razie w tej chwili fotografuję z prędkością 1/3600 fps czyli po ludzku mówiąc jedno zdjęcie na godzinę. Wydaje się, że to nawet za gęsto, zobaczymy. Sam kwiatek jest w dość ciemnym kącie, nie wiem czy to dobry pomysł, ale idea jest taka, żeby się za bardzo chłopak nie pospieszył i dał sobie zrobić choć kilka setek zdjęć zanim (jeśli) zakwitnie.

Tak samo jak podczas fotografowania karmnika wszystko odpalane jest z crona, z tą różnicą, że
gdyby komputer był wyłączony, to router go odpali wysyłając pakiet WoL, a sam skrypt fotografujący dodatkowo zajmuje się zapalaniem i gaszeniem oświetlenia.

$ cat get-image-0.4-krokus.sh 
#!/bin/bash


# get-image v 0.4 codename krokus :D

# MANUAL:
# ./get-image "/destination/directory/"

DEST_DIR="/tmp/"
if [ -d "$1" ]; then
    DEST_DIR="$1"
fi
FILENAME="${DEST_DIR}$( date "+%Y%m%d_%H%M%S" ).jpg"

TEMP_DIR=`mktemp -d /tmp/get-image-XXXXX`
cd ${TEMP_DIR}

# światło świeć
stty -F /dev/ttyUSB0 crtscts
sleep 30

wget http://admin:1234@192.168.1.12/snapshot.jpg \
    -O photo.jpg &> /dev/drzewo 

# już nie
sleep 5
stty -F /dev/ttyUSB0 -crtscts

convert photo.jpg                                                   \
        -gravity NorthEast                                          \
        -font "/home/wariat/.fonts/digital/digital_7/digital-7.ttf" \
        -pointsize 100                                              \
        -fill "#19adf4dd"                                           \
        -annotate +10+10 "$( date "+%e.%m.%Y" )"                    \
        "$FILENAME"

cd ~
rm -rf ${TEMP_DIR}

Poza tym, żeby komp nie chodził jak nie jest potrzebny po zrobieniu zdjęcia w sposób dość mało wyszukany sprawdza czy przypadkiem ktoś go nie używa i się wyłącza:

$ cat poweroff.sh 
#!/bin/bash

if [ -z "$(who)" ] && ! [ -f "/tmp/keeprunning" ]
then
    echo "nobody there"
    sudo poweroff
fi

Jupitery

No to skoro już zostałem filmowcem i nawet wykombinowałem, że kolejna superprodukcja to powinno być coś co dzieje się naprawdę wolno trzeba było się zabrać za robotę. Plan z fotografowaniem kwiatka nawet mi się podoba, ale zaraz przychodzi myśl, że to wszystko tak po prostu się nie uda. Żeby robić zdjęcia trzeba mieć światło, światło jest w dzień. Można fotografować kwiatek raz dziennie w południe, ale wtedy co? 30 klatek po miesiącu, nah.
Trzeba światła, sztucznego … przez miesiąc lub dwa i żeby nikt nie wyłączył? Nah. I tak dochodzimy do projektu jupitery 😀 Kompletnie się na tym nie znam, pewnie coś poważnie spierdzieliłem, ale … działa :D.

No to skoro już zostałem filmowcem i nawet wykombinowałem, że kolejna superprodukcja to powinno być coś co dzieje się naprawdę wolno trzeba było się zabrać za robotę. Plan z fotografowaniem kwiatka nawet mi się podoba, ale zaraz przychodzi myśl, że to wszystko tak po prostu się nie uda. Żeby robić zdjęcia trzeba mieć światło, światło jest w dzień. Można fotografować kwiatek raz dziennie w południe, ale wtedy co? 30 klatek po miesiącu, nah.
Trzeba światła, sztucznego … przez miesiąc lub dwa i żeby nikt nie wyłączył? Nah. I tak dochodzimy do projektu jupitery 😀 Kompletnie się na tym nie znam, pewnie coś poważnie spierdzieliłem, ale … działa :D.

Plan jest prosty, kilka okrutnie silnych LEDów oświetla aktora na czas zrobienia zdjęcia, fotki trzaskane są co godzinę lub dwie, czyli z prędkością 12 lub 24 klatki na dzień (360 lub 720 klatek na miesiąc), odtwarzane z prędkością 12fps. Powinno dać radę tak na oko.
Router będzie budził kompa 5 minut przed pełną godziną, cron uruchomi zestaw małp … ma szanse prawda? Jako aktor wstępnie został wybrany Krokus, podobno małe szanse, ale może się udać, że nie zdechnie po przeniesieniu z dworu do mieszkania.
Pozostało wykombinowanie oświetlenia… nie za bardzo wiedziałem jak się za to zabrać, więc zacząłem od odpowiedzi na proste pytanie. Czym mi to by było najwygodniej włączać? I wyszło, że najłatwiej jest zapalać i gasić RTS w serialu. Powstał potwór który działa choć chyba nie powinien. I tu mam kłopot, bo kompletnie się na tym nie znam ale coś jest nie tak. Schemat potwora wygląda tak:



I to działa… choć nie powinno chyba. Już tłumaczę może jakaś dobra dusza mnie oświeci (jak ten jupiter ;-). RTS może być podniesiony albo nie. Podniesiony daje +7V (w mojej wersji adaptera USB RS232), nie podniesiony ma tam -7V. I jedno i drugie powinno zamknąć przekaźnik (taki tam mam: Coto 9007-12-00), powinno prawda?
Żeby było z sensem jak się wydaje po drodze między RTS, a wyjściem diody zamontowanej równolegle do cewki przekaźnika powinna być jeszcze jedna dioda, która +7V przepuści, ale -7V już nie. Tylko jak ona tam jest to nie działa, a jak jej nie ma to tak.
Mam taką teorię (mówiłem, że się nie znam, więc mam własne teorie tam gdzie inni mają wiedzę), że kiedy RTS jest zdjęty i zapodaje -7V to prąd ma wybór, albo poleci przez cewkę gdzie napotka opór 1kohm albo sobie przeleci przez równolegle podpiętą diodę bez żadnych przeszkód. A skoro tak się da to za mało prądu płynie przez cewkę i się nie zamyka. Ma to jakiś sens?
Ale to nie rozwiązuje problemu z niedziałaniem kiedy na miejscu jest ta druga dioda która -7V zamyka po stronie seriala i nie puszcza. Może być tak, że sama dioda pobiera wystarczająco dużo prądu, żeby zabrakło go na zamknięcie cewki? Z RS232 pociągnąć za dużo nie można to jest jasne, nigdy się toto do zasilania niczego nie nadawało, może wydajność ledwo starcza na zamknięcie przekaźnika i cokolwiek po drodze to o jedno cokolwiek za dużo. Takie mam małe przemyślenia. Mam też dużą wątpliwość wyrażoną zdaniem, kiedy i czemu zrobię kuku mostkując tak bezczelnie RTS do masy via dioda kiedy światło jest wyłączone, czyli przez 99% czasu kiedy włączony jest komputer.

No ale najważniejsze, że działa mam więc platformę zdjęciową z reflektorami

Zaawansowaną wariacką elektronikę (no co! :D)

Przygotowane to to jest na więcej niż trzy lampy, ale te trzy wystarczą a i tak potrzebują razem coś koło 1A, więcej chyba nie powinienem puszczać przez ten przekaźnik.

Teraz wystarczy tylko:

stty -F /dev/ttyUSB0 crtscts

i świeci

a później:

stty -F /dev/ttyUSB0 -crtscts

i zgaśnie. Jednym słowem studio praktycznie gotowe, czas zabrać się za dostrojenie nowego zestawu małp do obsługi aparatu i klaps (a później albo klops, albo będę dziękował hackerowi na gali po rozdaniu przyszłorocznych oscarów ;-).

Javowy symulator układu jest rewelacyjny 😀 Zabawka w sam raz dla wariata. układ włącznika z kompletem diod.

Dzień z życia Karmnika

W połowie lutego zamawiałem kolejną porcję słonecznika dla ogrodowych darmozjadów, a przemelek pokazał swój zdjęciofilm. Reakcja organizmu była natychmiastowa. Ja też chcę tylko najpierw muszę dojść do ładu z kilkoma rzeczami. Chwilę to trwało, ale w końcu pierwszą próbę mam za sobą, niestety oscary już były. 😀

W połowie lutego zamawiałem kolejną porcję słonecznika dla ogrodowych darmozjadów, a przemelek pokazał swój zdjęciofilm. Reakcja organizmu była natychmiastowa. Ja też chcę tylko najpierw muszę dojść do ładu z kilkoma rzeczami. Chwilę to trwało, ale w końcu pierwszą próbę mam za sobą, niestety oscary już były. 😀

Do dyspozycji miałem web kamerkę z wifi edimax cośtam cośtam. Producent mówi o niej 1,3Mpix ale ja mu do końca nie wierzę. Anyway jedno co można o niej powiedzieć na pewno to to, że da się ją obsługiwać tak jak normalni ludzie chcą to robić. Wystarczy poprosić wgetem o jpg’a i już.
Kiedy sprzęt się znalazł, trzeba było zatrudnić małpę do naciskania spustu. Powstała małpa w dwóch wersjach, normalnej (to wersja super mega geek beta vanilla stable – kod zajmuje 1337 bajtów, co zauważyłem przypadkiem i czego nie mogłem przecież zignorować :D):

wariat@mickey ~/skrypty/webcam $ cat get-image-0.2.sh 
#!/bin/bash

DEST_DIR="${HOME}/temp/webcam/pictures/"
TEMP_DIR="/tmp/$(basename $0).$$"
FILENAME="${DEST_DIR}"$(date "+%Y%m%d_%H%M%S")".jpg"

mkdir ${TEMP_DIR}
cd    ${TEMP_DIR}

H_HAND_D=$[$(date "+%-I")*30+$(date "+%-M")/2]
M_HAND_D=$[$(date "+%-M")*6]
M_HAND="path 'M 0,0 L 0,-4 M -1,-4 L 0,-55 L 1,-4'"
H_HAND="path 'M 0,0 L 0,-4 M -1,-4 L 0,-30 L 1,-4'"
MARK="path 'M 0,-56 L 0,-48 M 0,48 L 0,56'"

convert -size 128x128 xc:transparent -fill '#0c8cfd80'       \
        -stroke "#101010" -strokewidth "2"                   \
        -draw "translate 64,64 circle 0,0 0,63"              \
        -draw "rotate ${M_HAND_D} translate 64,64 ${M_HAND}" \
        -draw "rotate ${H_HAND_D} translate 64,64 ${H_HAND}" \
        -strokewidth "1"                                     \
        -draw "           translate 64,64 ${MARK}"           \
        -draw "rotate 30  translate 64,64 ${MARK}"           \
        -draw "rotate 60  translate 64,64 ${MARK}"           \
        -draw "rotate 90  translate 64,64 ${MARK}"           \
        -draw "rotate 120 translate 64,64 ${MARK}"           \
        -draw "rotate 150 translate 64,64 ${MARK}"           \
        clock.png

wget http://admin:1234@192.168.1.12/snapshot.jpg \
        -O photo.jpg 
composite -gravity north-east clock.png photo.jpg $FILENAME

cd ~
rm -rf ${TEMP_DIR}

Tak wiem, teraz wszystkie złe klakiery (czy jak im tam) wiedzą, że nie zmieniłem hasła w kamerze. No nie zmieniłem, bo po co? :D.

i przekombinowanej:

wariat@mickey ~/skrypty/webcam $ cat get-image-0.3.sh 
#!/bin/bash

# MANUAL:
# ./get-image "/destination/directory/"

DEST_DIR="/tmp/"
if [ -d "$1" ]; then
    DEST_DIR="$1"
fi
FILENAME="${DEST_DIR}$( date "+%Y%m%d_%H%M%S" ).jpg"

TEMP_DIR=`mktemp -d /tmp/get-image-XXXXX`
cd ${TEMP_DIR}

CLOCK_DIAM=64
H_HAND_D=$[ $( date "+%-I" ) * 30 + $( date "+%-M" ) / 2 ]
M_HAND_D=$[ $( date "+%-M" ) * 6                         ]
M_HAND="path 'M 0,0 L 0,-4 M -1,-4 L 0,$[${CLOCK_DIAM} * -9 / 10] L 1,-4'"
H_HAND="path 'M 0,0 L 0,-4 M -1,-4 L 0,$[${CLOCK_DIAM} / -2     ] L 1,-4'"
H_MARK="path 'M 0,$[${CLOCK_DIAM} * -95 / 100 ] L 0,$[${CLOCK_DIAM} * -75 / 100 ]  
              M 0,$[${CLOCK_DIAM} *  95 / 100 ] L 0,$[${CLOCK_DIAM} *  75 / 100 ]'"

convert                                                                             \
    -size "$[${CLOCK_DIAM} * 2]x$[${CLOCK_DIAM} * 2]" xc:transparent                \
    -fill "#0c8cfd80"                                                               \
    -stroke "#101010"                                                               \
    -strokewidth "2"                                                                \
    -draw "translate ${CLOCK_DIAM},${CLOCK_DIAM} circle 0,0 0,$[${CLOCK_DIAM} - 1]" \
    -draw "rotate ${M_HAND_D} translate ${CLOCK_DIAM},${CLOCK_DIAM} ${M_HAND}"      \
    -draw "rotate ${H_HAND_D} translate ${CLOCK_DIAM},${CLOCK_DIAM} ${H_HAND}"      \
    -strokewidth "1"                                                                \
    -draw "           translate ${CLOCK_DIAM},${CLOCK_DIAM} ${H_MARK}"              \
    -draw "rotate 30  translate ${CLOCK_DIAM},${CLOCK_DIAM} ${H_MARK}"              \
    -draw "rotate 60  translate ${CLOCK_DIAM},${CLOCK_DIAM} ${H_MARK}"              \
    -draw "rotate 90  translate ${CLOCK_DIAM},${CLOCK_DIAM} ${H_MARK}"              \
    -draw "rotate 120 translate ${CLOCK_DIAM},${CLOCK_DIAM} ${H_MARK}"              \
    -draw "rotate 150 translate ${CLOCK_DIAM},${CLOCK_DIAM} ${H_MARK}"              \
    clock.png

wget http://admin:1234@192.168.1.12/snapshot.jpg \
    -O photo.jpg &> /dev/drzewo 
composite -gravity north-east clock.png photo.jpg "$FILENAME"

cd ~
rm -rf ${TEMP_DIR}

BTW gdzie jest ten co mówił, że skrypty w Perlu są nieczytelne? 😀

Pogoniona batem małpa robi zdjęcie, maluje w rogu zegarek (prawda, że śliczny?) i archiwizuje odbitkę. Trzeba ją tylko w równych odstępach czasu poganiać czyli:

wariat@mickey ~/skrypty/webcam $ crontab -l
NICE=15

# 1/60fps
  * 5-19    6    3    0   /home/wariat/skrypty/webcam/get-image "/home/wariat/temp/webcam/karmnik-1min/" &> /dev/drzewo

# 1/15fps
   * 5-19    7    3    1   /home/wariat/skrypty/webcam/get-image "/home/wariat/temp/webcam/karmnik-15s/" &> /dev/drzewo
   * 5-19    7    3    1   sleep 15; /home/wariat/skrypty/webcam/get-image "/home/wariat/temp/webcam/karmnik-15s/" &> /dev/drzewo
   * 5-19    7    3    1   sleep 30; /home/wariat/skrypty/webcam/get-image "/home/wariat/temp/webcam/karmnik-15s/" &> /dev/drzewo
   * 5-19    7    3    1   sleep 45; /home/wariat/skrypty/webcam/get-image "/home/wariat/temp/webcam/karmnik-15s/" &> /dev/drzewo

Efekt?

wariat@mickey ~/skrypty/webcam $ ls -l ~/temp/webcam/karmnik-1min/ | head
razem 203020
-rw-r--r-- 1 wariat wariat  42128 03-06 05:00 20110306_050001.jpg
-rw-r--r-- 1 wariat wariat  42012 03-06 05:01 20110306_050101.jpg
-rw-r--r-- 1 wariat wariat  41850 03-06 05:02 20110306_050201.jpg
-rw-r--r-- 1 wariat wariat  42572 03-06 05:03 20110306_050301.jpg
-rw-r--r-- 1 wariat wariat  42725 03-06 05:04 20110306_050401.jpg
-rw-r--r-- 1 wariat wariat  42516 03-06 05:05 20110306_050501.jpg
-rw-r--r-- 1 wariat wariat  43188 03-06 05:06 20110306_050601.jpg
-rw-r--r-- 1 wariat wariat  42788 03-06 05:07 20110306_050701.jpg
-rw-r--r-- 1 wariat wariat  43104 03-06 05:08 20110306_050801.jpg
wariat@mickey ~/skrypty/webcam $ ls -l ~/temp/webcam/karmnik-1min/ | wc -l
895

Osiem sztuk wywaliłem bo coś gdzieś odbłysnęło, oszukało kamerę i fotka wyszła prześwietlona.

Skomplikowane robi się później bo za każdym razem jak patrzę na opcje przy eksporcie video oczy wyłażą mi na wierzch. Pewnie można więc lepiej, ale ja umiałem tylko przepisać z manuala od mencodera:

wariat@mickey ~/skrypty/webcam $ cat movie.sh 
#!/bin/bash

mencoder "mf:///home/wariat/temp/webcam/karmnik-1min/*.jpg" \
    -mf w=1280:h=1024:fps=8:type=jpg \
    -ovc lavc \
    -lavcopts vcodec=mpeg4 \
    -o output.avi

Na koniec PiTiVi który dał radę raz przelecieć całość i się nie wywrócić (za co jestem mu niezmiernie wdzięczny), oraz gazylion razy nie dał rady i się wywalił (za co go nienawidzę). Sam PiTiVi jako edytor jest świetny bo nic nie umie, czyli nadaje się idealnie, brakuje tylko żeby sam pokazał jak ustawić opcje eksportu najlepiej tak jak OpenShot, bo te zaklęcia chyba na zawsze pozostaną dla mnie tajemnicą. Ten ostatni zresztą potrafi sam wczytać sekwencję fotek, a właściwie potrafiłby gdyby nie to, że wykłada się (u mnie) przy każdej próbie.

A efekt? Prosz…

Dzień z życia karmnika 😉 from Jakub Klawiter on Vimeo.

Kolejny pomysł to jakaś rzeżucha. Tajny plan jest taki, że BIOS włączy grzyba w południe, małpa zrobi jedno zdjęcie, a inna małpa sprawdzi czy przypadkiem wariata nie ma w pobliżu i kompa wyłączy. Tak czy siak w sumie fajna i mało czasochłonna zabawa, gdyby tylko jeszcze zrozumieć o co chodzi z tymi wszystkimi pierdolnikami przy eksportowaniu filmu :D.

Ech biurokracja

W 2005 roku wymyślili, że trzeba zrobić inaczej niż reszta świata i wydać pilotom paralotni państwowe licencje. Posiadającym już uprawnienia (wydane przez aeroklub) po prostu wydano dokument po wypełnieniu wniosku. Wariat wniosek wysłał, ale licencji nigdy nie odebrał bo Warszawa jest na drugim końcu świata, a licencja nie drzwi od stodoły latać się na niej nie da. No ale … ponieważ licencja (tfu przepraszam Świadectwo Kwalifikacji Członka Personelu Lotniczego) to biznes to oczywiście po 5ciu latach wygasła i trzeba wystąpić o wznowienie. No to wariat wystąpił i co się okazało?
Jakiś tydzień temu zadzwonił do mnie miły Pan z ULC informując, że żaden problem ale pierwszą licencję trzeba odebrać, tyle że teraz można już pocztą w związku z czym otrzymałem dziś list z ULC zawierający ŚK którego ważność wygasła miesiąc temu. Niby nic strasznego, ale po co?