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. :D
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? :D
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.
Generalnie z komputerami to jest tak, że jak coś jest popsute to zostaje takim tylko tak długo aż ktoś się wystarczająco nie wkurzy i nie naprawi. I obojętnie czy chodzi o płytę DVD/Blueray/czy inną książkę popsutą DRMem czy po prostu zwykły dziwny błąd, prędzej czy później ktoś taki się znajdzie.
Od jakiegoś czasu ginęły komentarze w Google Buzz. Najpierw sporadycznie, później częściej w końcu dość masowo. Potrafiło wyciąć cały wątek, nikt nie wiedział gdzie. Aż w końcu trafiło na jednego co miał słabsze nerwy i sprawdził.
Wczoraj Przemysław Rumik opublikował analizę i Sposób na znikające komentarze w Buzzie.
Jest działa, w pierwszym odruchu próbowałem po prostu bookmarklet przenieść do skryptu Greasemonkey. Kombinowałem z 45 minut i w końcu wkurzyłem się i poszedłem spać.
Przed południem olałem sprawę. W końcu zamiast udawać, że jest się góglem i robi wszystko tak jak oni tam wymyślili wystarczy popsuć góglowe CSSy i po robocie.
Buzz not spam userjs
// ==UserScript==
// @name Buzz Spam links
// @namespace FooBar
// @include https://mail.google.com/mail/*
// ==/UserScript==
( function(){
var CSS = <str><![CDATA[
@namespace url( http://www.w3.org/1999/xhtml );
.zl { display: block !important; } /* wyświetl zbanowany komentarz */
.I0 { display: inline !important; } /* wyświetl guziki techniczne */
]]></str>.toString();
GM_addStyle( CSS );
})();
Efekt:
Ok, nie ma problemu z zalogowaniem się do Oyo i być może połączenie po tty jest ok, ale w końcu po co Oyo ma WiFi? No i po co ktoś kiedyś wymyślił protokół telnet którego od lat nie używamy bo wysyłanie haseł otwartym tekstem po sieci jest passe? ;-)
Można i tak i nie ma tu wielkich czarów. Połączenie po serialu odpalamy plikiem o nazwie usbdebug w głównym katalogu na karcie SD. Jeśli on (plik) tam jest to podczas wykonywania /linuxrc zadziała magia zapisana słowami:
# KEY_HOME, KEY_BOOK # /usr/local/sbin/hotkey_cmd /usr/local/sbin/usbdebug.sh 102 247 mount /dev/mmcblk1p1 /mnt/mmc1p1 if [ -f /mnt/mmc1p1/usbdebug ]; then echo "usbdebug" /usr/local/sbin/usbdebug.sh fi umount /mnt/mmc1p1No to wpiszmy sobie pomiędzy koniec warunku, a umount jeszcze jeden ficzer czyli tak:
mount /dev/mmcblk1p1 /mnt/mmc1p1 if [ -f /mnt/mmc1p1/usbdebug ]; then echo "usbdebug" /usr/local/sbin/usbdebug.sh fi if [ -f /mnt/mmc1p1/telnet ]; then # echo "telnet" # inetd # fi # umount /mnt/mmc1p1i już. Teraz wystarczy aby na karcie sd znajdował się plik telnet, a po uruchomieniu WiFi w Oyo ...
wariat@coyote ~ $ nmap 192.168.1.103
Starting Nmap 5.21 ( http://nmap.org ) at 2010-12-20 01:33 CET
Nmap scan report for 192.168.1.103
Host is up (0.0018s latency).
Not shown: 994 closed ports
PORT STATE SERVICE
7/tcp open echo
13/tcp open daytime
21/tcp open ftp
23/tcp open telnet
37/tcp open time
111/tcp open rpcbind
Nmap done: 1 IP address (1 host up) scanned in 8.77 seconds
wariat@coyote ~ $ telnet 192.168.1.103
Trying 192.168.1.103...
Connected to 192.168.1.103.
Escape character is '^]'.
Samsung login: root
Password: SReader
[root@Samsung ~]# uname -a
Linux Samsung 2.6.21.5-cfs-v19 #183 Tue Oct 19 14:27:21 CST 2010 armv5tejl unknown
[root@Samsung ~]# exit
logout
Connection closed by foreign host.
Minusem jest to, że Oyo nie pilnowane zrzuci połączenie z WiFi, ale zmiana w porównaniu z połączeniem po serialu jest niewielka, bo przejście w tryb uśpieni^W zawieszenia :D zamyka też połączenie tty. Ale połączenia po tty wznowić (w punkcie gdzie się zerwało) się nie da, a tu ... trzeba tylko wykombinować screena. Skąd? A dokładnie tak jak na na Frank's Wiki instalują nano.
wget http://ftp.us.debian.org/debian/pool/main/s/screen/screen_4.0.3-14%2bb1_armel.deb
wget http://ftp.us.debian.org/debian/pool/main/n/ncurses/libncursesw5_5.7+20100313-4_armel.deb
wget http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g_1.1.1-6.1_armel.deb
FILES=$(ls /root/*deb)
cd /
for NAME in $FILES ; do
ar -x "${NAME}"
tar zxf data.tar.gz
rm debian-binary data.tar.gz control.tar.gz
rm "${NAME}"
done
cd -
do kompletu jakiś znośny .screenrc
[root@Samsung ~]# cat .screenrc
vbell on
hardstatus on
hardstatus alwayslastline
hardstatus string "%{= kw}%-w%{= BW}%n %t%{-}%+w %-= @%H - %LD %d %LM - %c"
bindkey "^[[1;5D" prev # change window with ctrl-left
bindkey "^[[1;5C" next # change window with ctrl-right
i już znikające połączenie nie straszne. :)
Jednak co specjalista to specjalista. ;-) Empik aktualizacji do Oyo opublikować nie chce (choć podobno Medion już jakiś czas temu przesłał plik z nowym firmware). Trzeba było pogadać z zawodowcami ;-).
# john -show passwd
root:SReader:0:0:root:/root:/bin/bash
1 password hash cracked, 0 left
Dalej jest też łatwo i zgodnie z instrukcją na Frank's Wiki / OYO.
Samsung login: root
Password:
[root@Samsung ~]# ls -la /rwdata/settings/
drwxr-xr-x 2 root root 1024 Jan 1 2010 ./
drwxr-xr-x 7 root root 1024 Dec 18 12:08 ../
-rw-r--r-- 1 root root 6094 Dec 18 12:17 QBookApp.ini
-rw-r--r-- 1 root root 5032 Jan 1 2010 QBookApp.ini.bak
(...)
[root@Samsung ~]# logout
Samsung SMDK Board on a armv5tejl
Samsung login:
Na początek tylko test, czy na pewno jesteśmy skazani na stronę Empiku? Edytujemy oczywiście /rwdata/settings/QBookApp.ini na miejscu jest vi (tym co nie potrafią proponuję potrenować najpierw wychodzenie z vi gdzieś na boku ;-). Zamieniamy domyślną stronę startową digital.empik.com na własną, na początek niech to będzie strona eksiążki.org. Zapisujemy, restartujemy Oyo i ...
DZIAŁA! :)
Jeśli nie uda się włączyć paska adresu (przyznaję nie przyglądałem się dokładniej co tam można jeszcze przestawić. (Dla ciekawych wersja offline dostępna jest po odpakowaniu pliku z niemiecką aktualizacją firmware rootfs.tar:usr/local/qisda/etc/QBookApp.default.ini można się porozglądać, co się da a czego nie na spokojnie) to myślę, że i tak nie ma nieszczęścia wystarczy przecież jakaś strona startowa z kilkoma odnośnikami. Do virtualo, własnej półki na książki i dodatkowo oczywiście z powrotem do Empiku, nóż widelec się przyda, choć są wątpliwości.
Wygnali mnie do pieczenia pierników, ale jest chwila wolnego więc się rozglądam i z ciekawostek ... W pliku /usr/local/qisda/etc/index.html znajdziemy na przykład:
<body>
<script type="text/javascript">
if (navigator.language.indexOf("de") >= 0) {
document.write('<p>Bitte tragen Sie oben die gewünschte...
} else if (navigator.language.indexOf("pl") >= 0) {
document.write('<p>Wprowadź adres www do paska adresowe...
Czyli co? Czyli trzeba tylko włączyć... w tym samym pliku co wcześniej czyli: /rwdata/settings/QBookApp.ini oczywiście w sekcji [empik]
has_open_web_browser=falsezmieniamy na true Odpalamy Oyo i co widzimy w sekcji dodatki (tam gdzie do niedawna była przeglądarka zdjęć i odtwarzacz mp3)? Otóż mamy tam teraz trzeci przycisk z napisem
Przeglądarka internetowa. Można wpisać adres jaki się chce, można zmieniać rozmiar fontu, można przeglądać sieć w trybie poziomym. Generalnie wydaje się, że działa!
Ok, no to skoro okazuje się, że mamy już w Oyo przeglądarkę, a ta przeglądarka startuje z lokalną stroną startową to wypadałoby tu dodać kilka linków. Nic trudnego, wystarczy zmodyfikować plik:
/usr/local/qisda/etc/index.html o którym było wyżej.
Znajdziemy tam wiersz definiujący odnośniki:
} else if (navigator.language.indexOf("pl") >= 0) {
document.write('<a href="http://www.google.pl">Google</a><a href="http://pl.wikipedia.org">Wikipedia</a>');
Trzeba tylko dopisać co by się chciało. Docelowo niech to wygląda tak:
} else if (navigator.language.indexOf("pl") >= 0) {
document.write('<a href="http://www.google.pl">Google</a>');
document.write('<a href="http://pl.wikipedia.org">Wikipedia</a>');
document.write('<a href="http://wariat.org.pl/smietnik/ebook-sync/">Półka wariata</a>');
document.write('<a href="http://virtualo.pl/">virtualo</a>');
document.write('<a href="http://www.eksiazki.org/">eKsiążki.org</a>');
document.write('<a href="http://www.google.com/mobile/">Google mobile</a>');
Właściwie działa, Przeglądarka w Oyo nie potrafi przejść przez Basic Auth więc na moją półkę się nie zaloguję ... trzeba będzie hasło wywalić tymczasowo, pozostałe problemy już z tych nie rozwiązywalnych, czyli np. brak mobilnej wersji virtualo.pl, niemniej jednak tu do biblioteki zakupionych książek dostać się udało, pobrać książkę na czytnik także. Czy dałoby się książkę kupić? Obiecuję spróbować przy najbliższej okazji.
Przygoda z e-czytaniem wskoczyła wczoraj na kolejny poziom. Kupiłem Oyo, mając pełną świadomość niedoskonałości tej zabawki. Wybierałem pomiędzy Oyo i Onyx Boox 60/60s, resztę czytników wykluczyłem bo tajny plan był taki, żeby kupić czytnik jeszcze w tej dekadzie ;-).
Onyx w tym zestawieniu robił za czytnik z górnej półki z wieloma dodatkowymi możliwościami i raczej wysoką oceną zarówno wśród użytkowników jak i po prostu zainteresowanych tematem. Pierwsza odpadła wersja bez WiFi i rysika (Boox 60s). Boox ma bardzo dużo bardzo fajnych funkcji, rozbudowane (i moim zdaniem nieco zakręcone) menu, którego po prostu nie da się moim zdaniem wygodnie obsługiwać przyciskami.
Dlaczego ostatecznie wybrałem Oyo mimo, że jak się na spokojnie przyjrzeć to na niego marudziłem jeszcze bardziej (m.in. byłem całkowicie świadom różnic w jakości ekranu jeśli chodzi o kontrast i odbicia /światł?a/ - czyli można powiedzieć parametr kluczowy w e-czytniku)? Krótko. Po pierwsze dlatego, że Boox 60 wcale nie wydał się idealnym rozwiązaniem dla mnie, przynajmniej na etapie kiedy wyobrażam sobie siebie jako użytkownika czytnika, bo doświadczeń przecież nie mam. Po drugie wszystkie różnice między obydwoma czytnikami z mojego punktu widzenia nijak nie pokrywały nawet połowy różnicy w cenie. Jeśli okaże, się, że takie czytanie sprawdza się w moim przypadku pewnie za jakiś rok zacznę rozglądać się za czytnikiem na nowo. Ten drugi nie będzie już miał ze mną tak łatwo.
Na koniec (wstępu ;-) ) chciałbym odpowiedzieć na pytanie które pojawi się w komentarzu poniżej (lub nie skoro jest już odpowiedź). Dlaczego nie Kindle 3?
Otóż ... z przyczyn religijnych. Mając wybór nie kupię urządzenia którego dystrybutor zamyka dostęp do treści z poza własnej oferty. Jeśli Kindle 3+n wprowadzi natywną obsługę formatu ePub i pełne wsparcie dla PDF, oraz (choć już nie koniecznie) obsługę ADEPT na pewno będę rozważał go następnym razem. I nie ma tu żadnego znaczenia, że jestem w stanie odblokować plik zabezpieczony ADEPTem i przekonwertować go do formatu mobi o 5tej nad ranem po 36 godzinach pijaństwa. Bo nie jest istotne czy ja potrafię zamek otworzyć, a to, że Amazon drzwi zamyka.
Oczywiście zauważam, że jeśli brać pod uwagę cenę i jakość wyświetlacza (kluczowy parametr) to nawet z mojej pozycji (kogoś kto w życiu Kindle na żywo nie widział) jest to w tej chwili najlepszy wybór.
No to teraz trochę o wrażeniach po pierwszym wieczorze spędzonym z nową zabawką. Z początku raczej pozytywnie, a za chwilę o tym co w obecnej wersji firmware jest spierdzielone.
Ekran faktycznie odbija światło i jeśli chcieć zobaczyć w nim żarówkę nad głową, albo nawet kontur własnego odbicia to da się to zrobić. Tak samo można zobaczyć lekko pomaziany
tłuszczem z palców ekran. Da się, ale nie przeszkadza to w czytaniu, bo w pozycji w jakiej trzyma się czytnik podczas czytania tak, żeby było wygodnie i wystarczająco do czytania jasno problem się nie ujawnia.
Nie zauważam też opisywanego wcześniej problemu wolnej zmiany stron. Widocznie faktycznie Empik próbował strzelić sobie samobója i na targach w Krakowie zaprezentował nie działający firmware. Podczas testów strony zmieniają się dość szybko, podczas czytania jeszcze szybciej (być może czytnik w trakcie czytania gdzieś w tle buforuje sobie kolejną stronę do wyświetlenia, a nie czytamy jednej strony sekundę tylko chwilę dłużej przecież). Nie zauważyłem też problemu, ze zmianą strony za pomocą gestu na ekranie. Trzymając czytnik w lewej ręce można bez zmiany chwytu maznąć kciukiem i działa. Trzymając w ręce prawej ma się pod kciukiem przycisk kolejnej strony więc nawet mazać nie trzeba. Po prostu działa, chyba, że będzie miało zamiar przestać działać za jakiś czas ale na to jak wierzę mamy 24 miesiące gwarancji. Przy okazji gwarancją jest oczywiście paragon, a te lubią znikać po czasie, poprosiłem więc o ostemplowaną kopię świstka. Tak na wszelki wypadek.
Przy okazji. Klawisze zmiany stron są oznaczone strzałkami, strzałka w prawo strona następna, w lewo poprzednia czyli jak najbardziej poprawnie. Gesty wykonuje się odwrotnie, czyli aby przełączyć się na stronę kolejną należy maznąć z prawej do lewej, dokładnie tak jak gdybyśmy przewracali stronę w książce (w tym samym kierunku). Gdyby ktoś pomyślał, że wprowadza to minimalne zamieszanie, zamiast klawisza ze strzałką w prawo pojawiłby się klawisz z napisem Next, w lewo - Prev. i byłoby logicznije. Przy czym czepianie się tutaj nosi znamiona czepiania się na siłę, bo pokapować się o co chodzi można już po pierwszej pomyłce. Samo ułożenie klawiszy na obudowie przy moim braku doświadczenia z czytnikami wydaje się doskonałe.
Jeśli chodzi o obsługę menu urządzenia nie ma się do czego przyczepić. Oyo potrafi pokazywać do czytania książki i ... właściwie nic poza tym. Samo menu Ustawień jak i menu podręczne podczas czytania książki są przejrzyste konkrety za chwilę.
Klawiatura wirtualna działa o tyle, że bez problemu podałem hasło do mojej domowej WiFi, oraz wpisałem AdobeID i hasło do niego w celu uznania
urządzenia przez zUo. Można pisać szybciej niż pokazuje się na ekranie wpisywany tekst, wcale nie patrząc na niego i przynajmniej w przypadku tak krótkich stringów to działa. Czepiałem się powolności reakcji podczas macania Booxa być może (prawdopodobnie nawet) tam też nie trzeba czekać, na reakcję ekranu i można pisać dalej, co znacznie przyspiesza całą operację.
Klawisze klawiatury wirtualnej mogłyby być większe, jeszcze lepiej gdyby obsługiwały słownik i działały jak np. w tym eksperymencie: Marnanel: Dasher-based virtual keyboard. Na dziś wydaje się, że ten ficzer akurat działa w Oyo wystarczająco dobrze do czynności minimalnych (hasła, loginy, etc.) i prawdopodobnie jest wysoce nieużywalny gdyby ktoś chciał na poważnie dodawać do książek własne notatki - w takim wypadku bez fizycznej klawiatury się nie da, nie na ekranie który odpowiada
po sekundzie lub później.
Jeśli chodzi o menu ustawień to zawiera ono:
Wyłącz lub zawieś? Wyłącz / Zawieś / Anuluj. Zawieszony Oyo pokazuje na ekranie sympatyczną tapetkę, jak na początku powyższego video. Tłumaczom gratulujemy dowcipu! :D
Dodatkiw którym znajdziemy przeglądarkę plików graficznych i odtwarzacz plików audio. Do obu tych czynności istnieje gazylion lepiej przystosowanych urządzeń. ;-)
Podczas czytania dostępne jest menu podręczne w pewnym stopniu zależne od formatu pliku. Do wyboru jest
No to czas opowiedzieć o tym co jest spierdzielone, przynajmniej w aktualnej wersji firmware (1.0 R2711).
>W bibliotece i w dziale ostatnio czytane książki Oyo pokazuje miniatury okładek książek. A właściwie powinien pokazywać, bo o ile nie ma tu problemu w przypadku wersji demo książek jakie znajdowały się na czytniku oryginalnie o tyle wszystkie wgrane przeze mnie książki są tej miniatury pozbawione mimo iż same książki okładkę na pierwszej stronie posiadają. Wgrałem do czytnika kilka książek: Wolna Kultura Lawrence Lessiga format PDF. Tu braku okładki nie do końca można się czepiać, bo pliku graficznego tam nie ma. Ale zrzut strony dałoby się zrobić. Ale w kolejnych wypadkach nie ma przebacz: Gorzka Czekolada wersja PDF, plik kupiony w Virtualo dawno temu w celach eksperymentowania z ADEPTem. Widzę, że wersji PDF nie da się już kupić, ciekawe kiedy zniknie z mojej biblioteki ;-) (Niech żyje DRMosis). W pliku okładka jest, jak rozumiem plik zrobili zawodowcy, a Oyo ma to gdzieś. Dokładnie taka sama sytuacja jest w przypadku trzech kolejnych plików w formacie ePub (wszystkie z virtualo) dwa jeszcze zakażone DRMosis Adobensis, jeden już wyleczony.
Czytanie plików PDF jest trudne lub niewykonalne. Teoretycznie mamy do dyspozycji kilka trybów renderowania strony, przyjmijmy, że chcemy uzyskać dość duży rozmiar liter i czytać mamy wtedy do wyboru (testuję na pliku PDF z Virtualo).
kartkipołączona jest z górną krawędzią kartki kolejnej. Problem jest jak wyżej, tyle, że występuje dopiero w momencie kiedy brakuje miejsca po bokach (kierunek góra/dół jest z założenia posklejany). Sytuację ratuje tryb poziomy, bo zyskujemy na szerokości.
- Na pewno nie chcesz, ebym poszed z tob? - zapyta, nie spuszcajc badawczego wzroku z jej twarzy.No optymalnie do czytania to to nie jest :D
Auto orientacja ekranu. Kiedy obrócić Oyo bokiem, do góry nogami czy jakkolwiek, tekst sam dostosowuje się do tego położenia i obraca się w środku (zakładając oczywiście, że uaktywnimy tę opcję w ustawieniach), ale czasem coś się zacina i nie działa. Pomaga powrót do domyślnych ustawień, nie umiem jeszcze zreprodukować celowo tego błędu. Na ten moment wiem tyle, że czasem przestaje działać Wojtek zwraca uwagę, że akcelerometr jest wyłączany w trybie oszczędzania energii. Może dlatego nie do końca wiem kiedy mi się przytrafiało, ale jeśli tak to not bug but feature ;-).
Przywracanie domyślnych ustawień. Tu błąd po prostu lokalizacji, po wybraniu opcji wyskakuje okienko Your OYO is still activated. It is strongly advised that you de-activate your device before you continus. Proceed anyway? Yes / No
. Duperel, ale błąd jest błąd.
Zmiana typu fontu w pliku ePub to fikcja, Czego by nie wybrać w menu i tak na ekranie jest ten sam font. Chyba, że aby coś się zmieniło należy wykonać jakieś dodatkowe czary, ale żadnym sposobem jak na razie mi się nie udało.
Ten sam Wojtek sugeruje, że może być tak, że pliki ePub którymi się bawiłem mają załączony font, i wtedy zmiana jest niemożliwa. Tak czy siak wobec tego błędem jest, że opcja w menu nie jest wyłączana, albo lepiej, że wbudowanego kroju pisma i tak nie można zmienić na własny.
Ostatnia rzecz na jaką trafiłem to odświeżanie stanu naładowania baterii. W trakcie czytania, raz na jakiś czas (średnio mniej więcej raz na stronę tekstu) w trakcie czytania (a nie przewracania strony, bo byłoby za prosto) odświeża ikonkę ze stanem baterii w prawym górnym rogu ekranu. Jeśli czytamy w pozycji pionowej (portret) po prostu gdzieś tam na górze coś mruga, da się przeżyć (mruga cały górny margines, do szerokości ikonki, nie sama ikonka). Gorzej jeśli trzymamy czytnik w pozycji poziomej wtedy to co przed chwilą było górną krawędzią ekranu staje się prawą krawędzią, i mruga sobie ikonka stanu naładowania i cały tekst po prawej stronie. A wystarczy odświeżać informację o baterii tylko podczas przełączania strony i się wariaty nie będą czepiały. ;-)
I to tyle, generalnie moim zdaniem czytnik nie jest zły, a wręcz jest fajny i całkiem przyjemny. Przy czym pamiętamy, że to pierwsze tego typu urządzenie jakie miałem w rękach tak długo. Firmware na pewno wymaga poprawek, ale nikt się chyba nie spodziewał, że będzie inaczej. Na spokojnie spróbuję odszukać jakichś email do Empikowego supportu (jeśli już istnieje) zobaczymy wtedy jak zareagują na zgłoszenia i kiedy pojawi się nowa wersja firmware.
Tak czy siak, na razie wychodzi, że nie jest to może produkt z najwyższej półki ale na pewno jest wart swojej (stosunkowo niskiej przecież) ceny. Choć ... tak wiem Kindle, ale o tym było wyżej ;-)
Byłem w Empiku pobawić się Oyo. Mało ;-), wytargałem pana z Vobisu dwa piętra wyżej z Booxem 60, żeby obejrzeć oba czytniki side by side. Nie kupiłem, jeszcze myślę. Poniżej moje uwagi na szybko.
następna strona) IMO świetne
fakturę ekranu, o tyle w Oyo widać wyraźnie kształt lampy i żarówki na suficie niemal jak w lustrze. Jeśli się postarać, da się w Oyo zobaczyć własne odbicie, w Booxie nie bardzo!
stronę startową.
Pomyślę do wieczora jeszcze. Jedyna poważna wada to ten ekran o dwa kroki zbliżony do TFT glare ;-). No ale cena jak za pół czytnika ... nie jest mi łatwo :D
Powoli zbliżam się do momentu kiedy stary Pentium 60 z FreeDOSem zostanie wysłany na emeryturę, a zastąpi go nowy Asus eeeBox B202 z gentoo linux. Martwiłem się kwestią przetransportowania danych ze staruszka, ale okazuje się, że autorzy FreeDOS stanęli na wysokości zadania i mimo iż system wygląda klasycznie (zabytkowo) to z obsługą nagrywarki CD nie ma większego problemu.
Ku pamięci więc tylko:
Przy okazji, jeśli gdzieś jeszcze taki zabytek stoi, a może sam jeszcze kiedyś postawię to, żeby nie klepać od nowa, codzienne backupy danych w całkiem zgrabnie uporządkowanej formie da się również w DOSie.
backup.bat
echo off
rem BWW Backup Script v3
set exclude=*.exe
cd %temp%
echo | date /d | sed -e "s/.* //" | sed -e "s/\./-/g"> data.txt
set /E date=sed data.txt -e "s/^.....//"
set /E year=sed data.txt -e "s/-..-..$//"
REM jesli nie ma katalogu na backupy to go zrobmy
IF EXIST D:\BACKUP\%year%\keep goto cont
mkdir D:\BACKUP\%year%
touch D:\BACKUP\%year%\keep
mkdir E:\BACKUP\%year%
touch E:\BACKUP\%year%\keep
set exclude=
REM plik nie istnieje, czyli ok
:cont
set filename=%date%.zip
:loop
IF NOT EXIST D:\BACKUP\%year%\%filename% GOTO rest
set exclude=
set /E n=calc387 %n%+1
echo %date%-%n%.zip > data.txt
set /E filename=sed data.txt -e 's/ *//g'
GOTO loop
:rest
rm data.txt
cdd c:\kantor\bww
zip -r -0 D:\BACKUP\%year%\%filename% *.* -x %exclude%
copy D:\BACKUP\%year%\%filename% e:\backup\%year%\*.*
cd \
Skrypt uruchamiany z autoexec.bat zapisuje archiwum na partycji D:\ (i E:\ a co tam :D) w drzewie katalogów:
D:\
BACKUP\
yyyy\
2008\
2009\
mm-dd.zip
01-02.zip
01-03.zip
I kto mówił, że w DOSie się nie da? :-)
Problem: stoi sobie komputer i ma wpięte dwa adaptery USB<>RS232C, do których dalej podpięte są dwa różne urządzenia. Urządzeń rozpoznać się nie da bo do nich się tylko rozmawia z zawrotną prędkością 300 bps. Ale rozmawia się do nich o czymś innym. Trzeba mieć pewność, że rozmawia się do właściwego, bo inaczej nie funguje.
Wodzu zgodnie z zasadami proponował podłączyć, zostawić i założyć, że zawsze porty po odpaleniu kompa pojawią się w tych samych miejscach. To dobre rozwiązanie bo nie trzeba nic robić, a jest duża szansa, że po prostu zadziała. Ale da się lepiej.
Za utworzenie pliku urządzenia odpowiada niejaki UDEV, który robi wiele rzeczy często zahaczających o czary, przez co wariaty się go boją, okazuje się, że chyba nie potrzebnie.
Wtyczki oczywiście zostają wpięte raz na stałe, więc o ile najbardziej chińskie z chińskich adapterów USB<>RS232 Bus 001 Device 034: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port same w sobie są również nie do rozpoznania, o tyle gniazdko
gdzie są wetknięte już owszem. W moim przypadku ona wylądowały w dwóch pierwszych złączach podpiętego do eeeBoxa huba USB.
Cała magia sprowadza się do:
udevadm info -ap /sys/class/tty/ttyUSB0
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.
looking at device '/devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2.1/1-2.1:1.0/ttyUSB0/tty/ttyUSB0':
KERNEL=="ttyUSB0"
SUBSYSTEM=="tty"
DRIVER==""
looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2.1/1-2.1:1.0/ttyUSB0':
KERNELS=="ttyUSB0"
SUBSYSTEMS=="usb-serial"
DRIVERS=="pl2303"
ATTRS{port_number}=="0"
looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2.1/1-2.1:1.0':
KERNELS=="1-2.1:1.0"
SUBSYSTEMS=="usb"
DRIVERS=="pl2303"
ATTRS{bInterfaceNumber}=="00"
ATTRS{bAlternateSetting}==" 0"
ATTRS{bNumEndpoints}=="03"
ATTRS{bInterfaceClass}=="ff"
ATTRS{bInterfaceSubClass}=="00"
ATTRS{bInterfaceProtocol}=="00"
ATTRS{modalias}=="usb:v067Bp2303d0300dc00dsc00dp00icFFisc00ip00"
ATTRS{supports_autosuspend}=="1"
(...)
gdzie w pierwszej sekcji interesuje nas: KERNEL=="ttyUSB0", w drugiej nic, a w trzeciej KERNELS=="1-2.1:1.0"
Powstaje więc regułka (gwiazdka zastępuje numer portu!!!):
/etc/udev/rules.d/00-ttyUSB.rules
KERNEL=="ttyUSB*", KERNELS=="1-2.1:1.0", NAME="ttyTABLICA"
tak samo z drugim adapterem i ... no i po prostu działa:
yogi ~ # cat /etc/udev/rules.d/00-ttyUSB.rules
KERNEL=="ttyUSB*", KERNELS=="1-2.1:1.0", NAME="ttyTABLICA"
KERNEL=="ttyUSB*", KERNELS=="1-2.2:1.0", NAME="ttyWYSWIETLACZ"
yogi ~ # ls -l /dev/tty* | grep 23:
crw-rw---- 1 root uucp 188, 0 07-15 23:49 /dev/ttyTABLICA
crw-rw---- 1 root uucp 188, 1 07-15 23:50 /dev/ttyWYSWIETLACZ
Okazuje się, że nie taki UDEV straszny jak sobie wariat wyobrażał, a przy okazji bonus bo nie trzeba nawet pamiętać co było wpięte jako ttyUSB0 bo widać po nazwie urządzenia.
Kilka dni temu naczelnik Wiadomości24.pl zaserwował internautom smieszno straszny spektakl wylewając żale na agregatory. w24.pl EPIC fail oskarża, że kradną content i użytkowników, że trzepią kasę na cudzej pracy (przypominam redaktor w firmie która zarabia sprzedając treści tworzone za darmo przez własną społeczność), etc.
Poszło między innymi o ramkę (frameset) którą serwis Wykop dodaje do wykopaliska
na wyraźne życzenie własnych użytkowników (każdy może ten ficzer wyłączyć w konfiguracji, czyli jeśli ramka jest znaczy luser sobie życzy right?) który ułatwia kopanie
. Artykuł oczywiście trafił na Wykop, gdzie w krótkim czasie zyskał ponad 400 punktów i wygenerował w kilka dni około 20'000 odsłon jeśli wierzyć licznikowi w serwisie wiadomosci24.pl. Zresztą efekt można zobaczyć na wykresie Alexy .
W necie na chwilę zawrzało i generalnie ocena artykułu była jedna. "Strzał do własnej bramki". Ktoś podpowiedział, naczelnik zadziałał i w serwisie wiadomości24.pl pojawił się kod odpowiedzialny za "uciekanie z frameset". Można było tak od razu, ale wtedy nie byłoby tyle śmiechu, więc z mojego chorego punktu widzenia, jest dobrze jak jest, bo przynajmniej coś się dzieje.
I to byłby praktycznie koniec historii, gdyby nie to, że cała sprawa uświadomiła mi, że tak na prawdę serwis uciekający z wykopowej ramki robi mi koło pióra. I nie chodzi tylko o wiadomosci24.pl ale też np. wikinews.pl. Oraz pewnie wiele innych, ale akurat w przypadku wikinews sprawa była o tyle istotna, że kilka razy zdażyło mi się, że mi uciekło. No to się wariat zaczął był zastanawiać, czy jak chce uciekać to musi mu się udać? Bo w końcu jesteśmy na moim końcu internetu, znaczy w mojej przeglądarce, to dlaczemu ....
$ cat user.js
// Nie będzie nam uciekał z ramki kto chce ;-)
user_pref("capability.policy.policynames", "noframebuster");
user_pref("capability.policy.noframebuster.sites", "http://www.wiadomosci24.pl http://pl.wikinews.org");
user_pref("capability.policy.noframebuster.Window.location", "noAccess");
Z Gentoo to jest tak, że każdy używa go inaczej. Jedni zajmują się tweakowaniem wszystkiego, inni budują system bleeding edge, choć odnoszę wrażenie, że Ci po mału przesiadają się na Fedorę ... pewnie mylne wrażenie. Ja (i wielu innych) z kolei chcę, żeby w miarę możliwości wszystko zawsze działało bez większego zastanawiania się jak to działa i utrzymują system w wersji stable
.
Przy okazji nie lubię kiedy system zaczyna aktualizować paczki które mam zainstalowane w wersji testing
do kolejnych nie koniecznie stabilnych wersji, ciągnąc kolejne zależności również w wersjach nie oznaczonych jako stable. Krótko mówiąc odmaskowuję paczki dodając do /etc/portage/packages.keywords
wpisy odnoszące się do konkretnej wersji danej paczki:
$ grep netscape-flash /etc/portage/package.keywords
=net-www/netscape-flash-9.0.31.0 ~x86
#=net-www/netscape-flash-9.0.60.0_beta100107 ~x86
=net-www/netscape-flash-9.0.124.0 ~x86
=net-www/netscape-flash-10_rc20080915 ~x86
No i to jest problem, wpisy się mnożą i mnożą, i niby nic strasznego bo plik nie jest rozmiarów monstrualnych, co najwyżej jest dużo większy niż mógłby być.
$ ls -lh /etc/portage/package.keywords
-rw-r--r-- 1 root root 11K IX 27 11:54 /etc/portage/package.keywords
A jaki mógłby być? Tu wkracza do akcji ultra hiper turbo nowoczesne narzędzie, w postaci perlowego skryptu:
$ cat skrypty/portage/keywords-cleaner
#!/usr/bin/perl
# keywords-cleaner-0.2
# copyleft 2007-2008 by Jakub Klawiter
# GNU GPL v3 or later blah, blah, blah
# przeglada /etc/portage/package.keywords
# i wypisuje paczki ktore nie sa zainstalowane
# oraz sa zainstalkowane w innych (nowszych?) wersjach
# czyli nie potrzebne w pliku.
# DEPENDENCIES:
# * app-portage/eix
# MANUAL! :D
# USAGE:
# $ ./keywords-cleaner > package.keywords
use strict;
use warnings;
my $keywords_file = '/etc/portage/package.keywords';
open(FH, $keywords_file)
or die "can’t open $keywords_file : $!";
while ( <FH> ) {
chomp;
if ( $_ =~ /^=([0-9a-zA-Z\-\/]*)-([0-9a-zA-Z\-\_\.]*)/ ) {
my ( $package, $version ) =
( $1, $2 );
my $eix_query = ( `/usr/bin/eix -e $1` )
or return 0;
if (! ( $eix_query =~ /Installed versions:\s*([0-9a-z\.\-\_]*)[!\[\(]/ ) ) {
printf STDERR "%-60s NOT installed!\n", $_;
}
elsif (! ( $version eq $1 ) ) {
printf STDERR "%-60s OTHER version installed \n", $_;
}
else {
print "$_\n";
}
}
}
close FH;
Jak można tego cudaka użyć? Najpierw trzeba mieć w systemie zainstalowaną paczkę app-portage/eix
, ale to akurat mają chyba wszyscy ;-). Później:
# emerge -avuDN world
aby upewnić się, że wszystkie paczki są zainstalowane w najnowszych możliwych wersjach (w celach testowych).
$ ./keywords-cleaner > package.keywords co skutkuje zapisaniem pliku package.keywords w katalogu programu.
# cd /etc/portage/
# mv package.keywords package.keywords.bak # backup ;-)
# cp /home/wariat/skrypty/portage/package.keywords ./
# emerge -avuDN world
Jeśli wszystko poszło tak jak powinno, to ostatnie emerge powie, że nie ma nic do roboty, gdyby buczał, że jakaś paczka nie istnieje lub próbował hacków z downgrade oznacza to tylko tyle, że skrypt jest do niczego. Wtedy można przywrócić kopię z pliku /etc/portage/package.keywords.bak
Efekt?
$ ls -lh /etc/portage/package.keywords
-rw-r--r-- 1 root root 2,4K IX 27 13:05 /etc/portage/package.keywords
80% pliku stanowiły śmieci, czy raczej pozostałości po paczkach których już w systemie nie ma, lub są w nowszych wersjach.
Obiecywałeś wariat, że będziesz robił backupy i co? I co @#$%^ się pytam?!
W zeszły czwartek zdarzyły się trzy rzeczy. Pozbyłem się iShit'a, zamówiłem sobie nowe szkło do aparatu: Canon EF 24-70mm f/2.8L USM i padł mi dysk w Coyote.
Zaczęło się nagle, komputer się zawiesił. Niektórzy powiedzą zdarza się
, ale ja nie jestem przekonany. Faktem jest, że wisiało. Nie działała nawet ikonka od killowania
. Wariat przypomniał sobie stare czasy, nacisnął i przytrzymał przycisk power
. Po chwili ekran zgasł, a po ponownym uruchomieniu i załadowaniu kernela ekran zaśmieciło coś co ewidentnie wskazywało na kłopot z dyskiem i wyglądało mniej więcej tak:
ide: failed opcode was: unknown
hda: task_out_intr: status=0x51 {DriveReady SeekComplete Error}
hda: task_out_intr: error=0x10 {SectorIdNotFound} LBAsect=28306658, high=1, low=11529442, sector=28306658
Pierwszą reakcją była oczywiście panika. AAAaaaa moje pliki. Zdjęcia młodego, Nelka mnie zabije! Najnowszy CartoonManager - o ja pierdzielę. Najgorsze było to, że zamknięty w pracy nie mogłem próbować niczego i jedyne co mogłem to właśnie zastanawiać się co straciłem. Pewne było to, że dysk jest dead, trzeba kupić nowy. Po powrocie do domu pobrałem Gentoo Minimal CD, odpaliłem Coyote'a i ... powiedziało, że chce montować /dev/hdaN i wisi. Fajne kurka liveCD :D.
Na drugi ogień poszło SystemRescueCd. Tu odpalanie nie nastręczyło problemów, jako bonus X'y z Window Makerem i desktopem przywołującym wspomnienia systemu ATARI i wczesnych lat dziewięćdziesiątych ubiegłego stulecia. No ale działa, więc nie marudzimy.
Próba zamontowania partycji:
root@sysresccd /root % mount /dev/sda4 /mnt/dysk
mount: wrong fs type, bad option, bad superblock on /dev/sda4,
missing codepage or other error
In some cases useful info is found in syslog - try
dmesg | tail or so
No to sprawdźmy:
root@sysresccd /root % reiserfsck /dev/sda4
(...)
Trans replayed: mountid 930, transid 2069652, desc 6111, len 1, commit 6113, next trans offset 6096
Reiserfs journal '/dev/sda4' in blocks [18..8211]: 471 transactions replayed
Checking internal tree..finished
Comparing bitmaps..finished
Checking Semantic tree:
finished
No corruptions found
There are on the filesystem:
Leaves 127300
Internal nodes 871
Directories 47170
Other files 479462
Data block pointers 11509351 (82 of them are zero)
Safe links 0
###########
reiserfsck finished at Sat Jan 26 15:16:35 2008
###########
Fajnie, wszystko ok, tylko nie działa. Znaczy co? Znaczy badsektory. Wsadziłem nowy dysk w pożyczoną od Nelki obudowę USB o zastraszającym nominalnym transferze danych 480kbps, odpaliłem kopiowanie i poszedłem w długą. Zakończyło się tak:
root@sysresccd /root % ddrescue -r 10 -v -d /dev/sda4 /dev/sdb4 root_backupLog
About to copy 65530 MBytes from /dev/sda4 to /dev/sdb4
Starting positions: infile = 0 B, outfile = 0 B
Copy block size: 128 hard blocks
Hard block size: 512 bytes
Max_retries: 10
Direct: yes Sparse: no Split: yes Truncate: no
Press Ctrl-C to interrupt
Initial status (read from logfile)
rescued: 0 B, errsize: 0 B, errors: 0
Current status
rescued: 65530 MB, errsize: 512 B, current rate: 0 B/s
ipos: 3265 MB, errors: 1, average rate: 3108 kB/s
opos: 3265 MB
Finished
% cat root_backupLog
# Rescue Logfile. Created by GNU ddrescue version 1.6
# current_pos current_status
0xC2A97E00 +
# pos size status
0x00000000 0xC2A97E00 +
0xC2A97E00 0x00000200 -
0xC2A98000 0xE7F473E00 +
Jakie wnioski? Zdechł JEDEN sektor. A właściwie jeden znaczący sektor, trafiło tak, że unieruchomiło cały system plików. I tu pojawia się pytanie czy reiserFS aka killerFS ;-) się na prawdę nadaje do użytku skoro generalnie z badsektorami radzi sobie świetnie (ogółem na patycji badblocks wykrył 62 popsute sektory), ale jedno pechowe trafienie znika partycję
bez żadnego ostrzeżenia.
Ktoś może powiedzieć, że powinienem od razu odpalić reiserfsck --rebuild-tree, --rebuild-sb. Jasne ale ... jaką miałbym gwarancję, że po tej operacji nie znajdę wszystkiego w /lost+found
? No a tego chciałem uniknąć.
Skopiowana partycja montowała się poprawnie, zostało więc tylko podpięcie dysku do Mickeya, gdzie znalazłem 50GB miejsca, przekopiowanie plików do archiwów tar.bz2, i po założeniu docelowych partycji na nowym dysku operacja odwrotna. Napisać łatwo, ale razem z lagami pomiędzy pakowaniem jednego a drugiego katalogu (no przecież nie siedziałem tam 24/24 gapiąc się czy już) trwało to jakieś 2,5 dnia :D.
W tej chwili Coyote śmiga już z nowego hardziela, system działa jak działał (łącznie ze świrującym audio którym nie mam czasu się zająć), pliki (prywatne i systemowe) są tam gdzie je zostawiłem, ale co schudłem i posiwiałem to moje. Partycje nadal reiserFS, choć poważnie zastanawiam się nad przejściem na ext3. Pytanie tylko czy w podobnej sytuacji (ultra pechowe trafienie badblockiem) nie da identycznych efektów?
Winda to jednak pożera miejsce na dysku. Mój windows na Qemu postawiłem na obrazie dysku o rozmiarze 4GB, na razie nie zainstalowałem niczego poza aktualizacjami windowsów (nie wszystkimi jeszcze), a system zgłosił, że mu się miejsce kończy. Kłopot polega na tym, że obraz dysku w formacie qcow2 nie pozwala na zmianę rozmiaru dysku/partycji. Trzeba więc było wymyślić workaround.
Zacznijmy od skopiowania istniejącego obrazu dysku tak na wszelki wypadek i upewnienia się, że mamy do czynienia z obrazem w formacie qcow2, jeśli tak (a tak ;-) ) to przekonwertujmy go do formatru raw:
$ cp winda.img WindowsXP_HE_SP2_updated.img
$ qemu-img info winda.img
image: winda.img
file format: qcow2
virtual size: 4.0G (4294967296 bytes)
disk size: 3.6G
cluster_size: 4096
$ qemu-img convert -f qcow2 winda.img -O raw winda.raw
$ qemu-img info winda.raw
image: winda.raw
file format: raw
virtual size: 4.0G (4294967296 bytes)
disk size: 3.5G
Warto teraz zabootować Windows z nowego obrazu dysku, ot tak, żeby sprawdzić czy wszystko gra. Jeśli tak powiększmy obraz do rozmiaru 10GB dopisując po prostu zera na końcu pliku za pomocą komendy dd. W parametrze bs podajemy ilość dodawanych jednorazowo bajtów, w parametrze seek docelowy rozmiar dysku (10GB = 10*1024*1024*1024 = 10737418240) podzielony przez 512 czyli 20971520.
dd if=/dev/zero of=winda.raw bs=512 count=0 seek=20971520
Uzyskaliśmy w ten sposób 10GB dysk z partycją 4GB (z zainstalowanymi windowsami) co łatwo sprawdzić:
$ qemu-img info winda.raw
image: winda.raw
file format: raw
virtual size: 10G (10737418240 bytes)
disk size: 3.5G
$ su -c "fdisk -l winda.raw"
Password:
You must set cylinders.
You can do this from the extra functions menu.
Disk winda.raw: 0 MB, 0 bytes
255 heads, 63 sectors/track, 0 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
winda.raw1 * 1 521 4184901 7 HPFS/NTFS
Dla chętnych sprawdzania co krok czy wszystko śmiga pozostaje odpalenie windowsa z nowego powiększonego obrazu dysku, cała reszta wierzy, że wszystko śmiga i czas powiększyć partycję. Oczywiście za pomocą qemu i gparted LiveCD.
$ qemu -m 256 -cdrom gparted-livecd-0.3.4-7.iso -hda winda.raw -boot d -localtime
Po kilku kliknięciach uzyskujemy to o co chodziło czyli:
$ su -c "fdisk -l winda.raw"
Password:
You must set cylinders.
You can do this from the extra functions menu.
Disk winda.raw: 0 MB, 0 bytes
255 heads, 63 sectors/track, 0 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
winda.raw1 * 1 1305 10482381 7 HPFS/NTFS
Partition 1 has different physical/logical endings:
phys=(1023, 254, 63) logical=(1304, 254, 63)
Na koniec konwertujemy obraz spowrotem do formatu qcow2 aby oszczędzić miejsce na dysku (plik obrazu w formacie qcow2 rośnie wraz z zapełnianiem się wirtualnego dysku.) i teraz już kategorycznie bootujemy system aby sprawdzić czy wszystko hula jak należy, windows uruchomi teraz sprawdzanie dysku zdziwiony, że miejsca jest jak gdyby więcej ;-).
$ qemu-img convert -f raw winda.raw -O qcow2 WindowsXP.qcow2
$ ls -lh [wW]*
-rw-r--r-- 1 wariat wariat 3,6G cze 21 12:28 winda.img
-rw-r--r-- 1 wariat wariat 10G cze 21 15:19 winda.raw
-rw-r--r-- 1 wariat wariat 1,3G cze 12 23:38 WindowsXP_HE_SP1_Registered.img
-rw-r--r-- 1 wariat wariat 3,6G cze 21 12:34 WindowsXP_HE_SP2_updated.img
-rw-r--r-- 1 wariat wariat 2,4G cze 14 12:43 WindowsXP_HE_updated.img
-rw-r--r-- 1 wariat wariat 3,6G cze 21 15:46 WindowsXP.qcow2
$ qemu -m 256 -hda WindowsXP.qcow2 -boot c -localtime
Na koniec znów kilka obrazków ;-)
Cztery dni (jasne, że nie całe :D) trwała wojenka wariat vs Windows on qemu. Efekty wciąż takie jak na początku, czyli wszystko niby działa, ale nie do końca i to wystarczy, Windows się instaluje, ale nie zakłada konta użytkownika, przez co nie można się zalogować. Próba zalogowania się w trybie awaryjnym na konto Administrator z pustym hasłem daje rezultat w postaci "krytyczny wyjątek, explorer.exe czy wysłać informację o awarii?" - oczywiście nie omieszkałem wysłać, a co :D.
Ale jest przełom! I ostatecznie działa!
Po pierwsze wychodzi na to, że kqemu jest nie do końca opcjonalny, bo bez niego nie daje rady. Dlaczego? Trudno powiedzieć obserwacje ostatnich dni wskazują, że nie wszystkie pliki są kopiowane z płyty instalacyjnej. Użycie modułu kqemu problem zdaje się rozwiązywać, być może bez tego wsparcia virtualny PC ma za mało pary aby podołac instalce windows :D.
Poza tym uświadomiłem sobie, że instaluję Microsoft Windows, a nie jakieś bele co, podjąłem więc specjalne środki ostrożności przypominające mi czasy małego Atari, magnetofonu Kasprzak z adapterem do Atari SIO i sytuację wczytywania gry Gauntlet (cała kaseta C-60, po jednej stronie gra, po drugiej poziomy) - bokiem kompletnie nie pamiętam o czym była ta gra, ale to, że aby zagrać trzeba było poczekać pół godziny chodząc po pokoju na palcach wystarczyło, aby mój porypany mózg zakodował nazwę :D.
Tak więc:
# echo 1024 > /proc/sys/dev/rtc/max-user-freq
# modprobe -v kqemu
insmod /lib/modules/2.6.20-gentoo-r8/misc/kqemu.ko major=0
$ qemu-img create -f qcow2 winda.img 4G
Formating 'winda.img', fmt=qcow2, size=4194304 kB
$ qemu -cdrom /dev/hdc -hda winda.img -boot d -localtime -no-reboot
$ cp winda.img winda-stage1.img
$ qemu -cdrom /dev/hdc -hda winda.img -boot c -localtime -no-reboot
$ cp winda.img winda-stage2.img
Pozostało ostatnie uruchomienie (część która nie działała), gdzie założymy konto użyszkodnika i takie cuda.
$ qemu -cdrom /dev/hdc -hda winda.img -boot c -localtime -no-reboot
Sprawdzamy czy sieć działa (powinna) pingując adres 10.0.2.2 ( można też włączyć eksplozjator internetu, dają go w komplecie ;-) ), jeśli odpowiada, wszystko powinno być ok i można kliknąć w kluczyki od Aktywacji windows.
Po zakończeniu aktualizacji Windows, a przed zainstalowaniem czegokolwiek warto zrobić kolejną kopię obrazu dysku, co znacznie skróci czas w przypadku konieczności wykonania format c:/
.
Co dalej? Myślę, że po aktualizacji systemu warto zabrać się za odpalenie sieci w wposób bardziej normalny, tak aby zasoby wirtualnego PCta było widać po Sambie w systemie właściwym i tyle.
Na koniec tymczasowy skrypt startowy, jeśli okaże się ostatecznie, że Windows na qemu spełnia pokładane w nim nadzieje, zrobi się to porządnie, a do tego czasu niech jest trochę dziwnie.
start-win.sh
#!/bin/bash
lsmod | grep kqemu || su -c "modprobe -v kqemu"
if [ -z $(grep 1024 /proc/sys/dev/rtc/max-user-freq) ]
then
su -c "echo 1024 > /proc/sys/dev/rtc/max-user-freq"
fi
qemu -m 256 -hda winda.img -boot c -localtime -no-reboot
i jeszcze kilka obrazków.
P.S. W komentarzu do poprzedniego wpisu Michał Górny zwraca uwagę na to, że istnieje już od jakiegoś czasu eselect-compiler zastępujący gcc-config w zadaniu zmiany aktualnie używanej wersji gcc. Istnieje i można użyć, ale jest jak na razie wciąż zamaskowany, czyli nie przewidziany do użytku dla ZU. Ale oczywiście można, choć eselect uprości zadanie w sposób raczej nieznaczny, a w przyszłości należy liczyć, że qemu będzie się kompilowało na nowym gcc, lub przynajmniej ebuild sam zajmie się kombinowaniem.
P.S.2 TrackBack jako PingBack? Da się?
Od dłuższego czasu chciałem się przyjrzeć qemu i postawić gdzieś windowsa który może się przydać jak się skrypty w firmie wysypią lub zaczną wymagać poprawek. Co mnie powstrzymywało to konieczność kompilowania qemu za pomocą starego gcc-3.3.6. Plan był taki, że spróbuję, jak będę naprawdę potrzebował windy, lub kiedy w końcu cudactwo zacznie się kompilować nowym gcc.
Stało się jeszcze inaczej (i dobrze, bo na razie winda nie chce współpracować), upgradeowałem Sun java do wersji 1.6, który również kompilować się chce tylko starym gcc (co za świat :D). Java problem załatwia sama (przełącza się na stare gcc i z powrotem na nowe po kompilacji), z qemu trzeba ręcznie.
No bo to tak:
coyote ~ # emerge -avD qemu
* qemu requires gcc-3 in order to build and work correctly
* please compile it switching to gcc-3.
* We are aware that qemu can guess a gcc-3 but this feature
* could be harmful.
Czemu się dziwimy (ebuild od java jakoś umie sam), ale się nie poddajemy i przełączamy gcc.
coyote ~ # gcc-config -l
[1] i686-pc-linux-gnu-3.3.6
[2] i686-pc-linux-gnu-4.1.2 *
coyote ~ # gcc-config i686-pc-linux-gnu-3.3.6
* Switching native-compiler to i686-pc-linux-gnu-3.3.6 ...
>>> Regenerating /etc/ld.so.cache... [ ok ]
* If you intend to use the gcc from the new profile in an already
* running shell, please remember to do:
* # source /etc/profile
coyote ~ # source /etc/profile
i mergujemy raz jeszcze, po czym przywracamy domyślne (nowe) gcc
coyote ~ # -avD qemu
coyote ~ # gcc-config -l
[1] i686-pc-linux-gnu-3.3.6 *
[2] i686-pc-linux-gnu-4.1.2
coyote ~ # gcc-config i686-pc-linux-gnu-4.1.2
* Switching native-compiler to i686-pc-linux-gnu-4.1.2 ...
>>> Regenerating /etc/ld.so.cache... [ ok ]
* If you intend to use the gcc from the new profile in an already
* running shell, please remember to do:
* # source /etc/profile
coyote ~ # source /etc/profile
coyote ~ # gcc-config -l
[1] i686-pc-linux-gnu-3.3.6
[2] i686-pc-linux-gnu-4.1.2 *
Trzeba to przetestować!
najłatwiej jakimś LiveCD, i najlepiej żeby to LiveCD było małe, tak małe jak Damn Small Linux.
$ qemu -cdrom dsl-3.3.iso -boot d -smp 2 -m 512
I co teraz, siedzę w firmie, jak to przetestować? Zciągnąłem z netu Damn Small Linux
$ qemu -cdrom dsl-3.3.iso -boot d -smp 2 -m 512
i już po chwili banan zaczyna się pojawiać na gębie bo zaczęło wykrywać sprzęt i wreszcie na desktopie pojawił się ... drugi desktop, progsy śmigają, net działa ... nie powinno być źle. Trzeba poczytać manual i zmontować hardziela dla windy.



No tak, tylko nie wziąłem poprawki, że windows to windows jest i nawet jeśli google podaje tylko instrukcje jak, które to zresztą instrukcje nie wykraczają zresztą poza "włącz i zadziała" to nie znaczy, że będzie ok.
W skrócie, instalka działa, instaluje się wszystko (koszmarnie wolno), ale z jakiegoś powodu nie jest zakładane (instalator nie pyta nawet)konto użytkownika, przez co po ostatnim restarcie Virtualnego grzyba winda niby jest, ale jej nie ma, bo nie działa.
Tak czy siak, jak widać na przykładzie Damn Small Linux sam emulator sprawdza się, świetnie, pobrałem z netu instalkę Ubuntu 7.05 Frywolny Fulmar i pewnie eksperymentalnie i jego postawię na udawanym kompie. Tyle, że jeśli to cudo ma mi się do czegokolwiek przydać to właśnie do jarnięcia windy... cuż, nikt nie mówił, że będzie łatwo, czyli ciąg dalszy nastąpi :D
Zdarzyło się ostatnio tak, że zadzwoniła do mnie koleżanka Mamy chwaląc się
problemem pod tytułem wirusy jedzą mi komputer
. Cóż było robić, zapakowałem Coyota w plecak i poszliśmy na spacer. Na miejscu już od początku było wiadomo, że będzie wesoło...
- Jaki jest klucz do sieci bezprzewodowej?
- Co jakie jest?!
- ok zobaczymy ... jakie jest hasło do routera?
- hasło?!
Kliku, kliku ... no tak admin/admin jak miło, że nie musimy marnować czasu na włamywanie się do sieci :D
Po wklepaniu klucza Network Manager załapał od razu, jak ja go lubię :D co pociągnęło za sobą z kolei dyskusję ...
- A ty masz jakiegoś antywirusa?I to teoretycznie byłby dobry moment, aby ewangelizować w kierunku zmiany OS, ale byłoby to bezcelowe raczej, i przyniosło więcej szkód niż pożytku. Skupiłem się więc na obarczeniu całą odpowiedzialnością
- Nie
- To nie boisz się, że ci się komputer zawirusuje?
- Nie, bo wirusy są na windowsy, a ja nie mam :)
- Nie rozumiem
niebieskiego ei samego Worda, no bo kto mi zabroni ;-).
ofiarybył zainstalowany (przez jakiegoś znajomego) program antywirusowy. Zainstalowany kilka dni wcześniej już po wykryciu problemu, tylko tych wirusów było ooooo tyle, a program za każdym razem mówił, że usunięcie może spowodować popsucie pliku. No a pliki były ważne ... najważniejsze wręcz.
Jak bezpiecznie pozbyć się wirusów z kilkuset plików z dokumentami Worda?
Moje Dokumenty ale bez wirusów
Ponieważ miałem do otwarcia i zapisania ponad 5000 plików to klikanie było trochę bez sensu ... znaczy jakiś czas klikałem, aż wku^W zmęczenie przyniosło myśl, że komputery są od tego, żeby nudne rzeczy działały automagicznie
:
$ for i in *.doc; do echo "$i"; abiword --to=doc "$i"; done
co ma w założeniu, otworzyć po kolei dokumenty z plików *.doc i zapisać je w formacie doc, czyli w tych samych plikach.
Ale dzieje się coś dziwnego...
$ ls -l
razem 61
-rw-r--r-- 1 wariat wariat 8744 maj 10 15:18 Dokument - bashem go.doc
-rw-r--r-- 1 wariat wariat 9368 maj 10 15:16 Dokument - Save.doc
-rw-r--r-- 1 wariat wariat 21504 maj 10 14:54 Dokument.doc
Dokument.doc
to zaświrusowany oryginał. Dokument - Save.doc
to dokument oryginalny otwarty AbiWordem i zapisany (^S) pod tą samą nazwą. Dokument - bashem go.doc
to wynik odpalenia AbiWorda z parametrem --to=doc.
Być może powinienem użyć innej opcji paramatru --to dla abiworda, tylko ... no włąśnie jakiej? Za helpem:
-t, --to=FORMAT Target format of the file (abw, zabw, rtf, txt, utf8, html, latex)"doc" zadziałało jakoś tam, ale jakie są inne możliwości? Chętnie się dowiem. Tak czy siak MSWord plik otwiera, choć twierdzi (pewnie nie bez racji), że to plik RTF i trzeba kliknąć OK żeby poszło dalej, ale jak wspomniałem docelowo pliki będą otwierane przez OOo, więc pobawię się nimi tylko jeśli i ten będzie się buntował.
Przy okazji po raz kolejny zacząłem się zastanawiać nad ODF jako takim, które oczywiście jest ważne i powinno być stosowane wszędzie. Ale ... co z makrami? Przecież te tak czy siak nie będą przenośne (bo co edytor to inny język skryptów). Ok zgoda, w rozprowadzanych, że tak powiem anonimowo na zewnątrz dokumentach makra to coś wysoce nie pożądanego. Dokument ma być dokumentem. Ale jednak ... jeden ktoś zmontuje sobie arkusz w gnumeric'u, oskryptuje w Pythonie i co dalej? Ani OOo i OOBasic, ani Excel i VisualBasic(?)... coś mi się wydaje, że ten problem jest wysoce nierozwiązywalny... Tylko to już inna bajka.
Od kiedy pamiętam była taka rzecz która komputerom szła raczej powoli ... tak chodzi o pisanie po ekranie/konsoli. Było tak w moim 8 bitowym Atari 800XL, miały to moje wszystkie 16 i 32bitowe Atari, miał to grzyb
pod DOSem i piec
pod windą. Ma tę przypadłość wreszcie komputer z linuksami.
I tak niewiele da się zrobić, poza jednym. Nie trzeba pisać jak nie ma zamiaru się czytać, czyli mergujmy pod screenem...
Mam Gentoo i wszystko sobie komplikuj^W kompiluję. Po konsoli zapierdziela output przy którym Matrix screensaver to pryszcz, ja wpatruję się w monitor i udaję, że rozumiem, laski za moimi plecami ściągają majtki przez głowę... zaraz zaraz, przecież ja tu jestem sam, nikt kurka nie widzi, to po co?!
Mergowanie pod screenem ma wiele zalet: W odpiętym screenie, żaden burak nie wciśnie nam ^C w złym momencie, czy jak kto woli nie straszne nam omyłkowe zamknięcie nie tego okna z terminalem. Ale przede wszystkim pod screenem jest szybciej, bo nie spowalnia procesu kompilowania pisanie po ekranie
.
Mały eksperyment, polegał na wykonaniu tajemniczej operacji:
# time emerge -1 gedit
dwa razy pod rząd (teraz to mam ale dokładnie skompilowanego gedit'a ;-) na dwa sposoby. Sposób pierwszy to kompilowanie na konsoli ot tak po prostu dało w efekcie:
real 3m23.831s
user 2m54.395s
sys 1m55.055s
A sposób drugi to dokładnie to samo, ale na odpiętym (detached) screenie. i w efekcie dał:
real 2m44.168s
user 3m0.619s
sys 1m7.312s
Powyższe oczywiście potwierdza też genlop(no bo to prawda jest to co ma nie potwierdzać ;-) )
# genlop -t gedit
* app-editors/gedit
Mon Apr 30 15:16:10 2007 >>> app-editors/gedit-2.16.2-r1
merge time: 3 minutes and 20 seconds.
Mon Apr 30 15:24:55 2007 >>> app-editors/gedit-2.16.2-r1
merge time: 2 minutes and 41 seconds.
jeśli 3'20" to 100% czasu to skompilowanie takiego bzdetu jak gedit dało zysk w wysokości 20% ... warto? IMO tak. I oczywiście wiem, że ameryki nie odkrywam ... przed tymi którzy są sprawy świadomi, ale jest wielu takich co się nad tym nie zastanawiali, a podobny zysk mamy szanse otrzymać i w innych procesach gdzie spamowanie ekranu nic nam nie daje jeśli wszystko działa jak powinno czyli ... tylko spowalnia całość.
Raz na jakiś czas spotykam się z tym, że ludzkość ma problemy kadrowaniem zdjęcia do założonego wcześniej rozmiaru w pikselach. Jeśli jest się w pełni świadomym z czym się je rozdzielczość obrazu i jego wymiary przedstawione na różne sposoby to się wiele rzeczy po prostu rozumie, jeśli jednak ma się o rozmiarach obrazka pojęcie, że tak powiem popularne to może być różnie.
Kiedy potrzebna jest nam umiejętność wykadrowania rozmiaru fotki do konkretnych wymiarów w pikselach? Na myśl pierwsze przychodzą przypadki kadrowania fotki do zamieszczenia na stronie internetowej i w celu wydrukowania (naświetlenia jej) na papierze w laboratorium foto. Aby spróbować lepiej wyjaśnić kilka zawiłości problemu, zajmijmy się tym drugim przypadkiem.
Rozprawmy się na początek z rozdzielczością. Każden jeden zakład foto będzie wciskał kit, że zdjęcia muszą być przygotowane w rozdzielczości 300dpi i rozmiarze ileś na ileś tam centymetrów, plus zapas zwykle 2mm w każdą stronę (co na swój sposób jest prawdą, ale nie oznacza, że cyferki nie mogą kłamać). No i się zaczyna kombinowanie i intensywne wykorzystywanie historii zmian w GIMP'ie, bo tak wychodzi za mało, tak znów za dużo, kto napisał ten progrem i takie tam. Poza tym zaczynają się jazdy, bo trafiamy w chaos zaokrągleń co jest ostatnim gwoździem do trumny i czasami bezpośrednią przyczyną zgody na obraz jaki jest bo już dość
.
Po pierwsze fakty. Naświetlarka w fotolabie ustawione ma to 300dpi na sztywno (każda z jaką się spotkałem, co oczywiście nie oznacza, że każda we wszechświecie) i nawet nie próbuje przeczytać informacji zapisanej w EXIF jpeg'a. Idąc dalej, nikt nie wymaga, aby jpeg w ogóle EXIF zawierał, a co za tym idzie rozmiar w centymetrach i rozdzielczość pliku podawane są tylko informacyjnie i mają ułatwić, choć w rzeczywistości często utrudniają sprawę. I last but not least, do sprawdzenia pliku fotolaby używają Photoshopa (czemu trudno się dziwić), który czyta nie te informacje z EXIF co trzeba i później marudzą, że plik nie dobry, oraz robią duże oczy jak się powie, proszę nic nie robić i naświetlić zobaczymy co będzie
, i muszą wrócić z dobrą odbitką i uszami spuszczonymi po sobie.
Do dzieła. Mamy zdjęcie o wymiarach 3504 x 2336 pikseli prosto z aparatu lub po jakiejś tam obróbce. Wybieramy format odbitki, niech to będzie 15 x 20. Na stronie fotolabu znajdziemy informację (charakterystyczną dla danego laboratorium, czy może raczej minilabu), że format 15 x 20 ma rzeczywiste wymiary: 15,2 x 20,3 cm. Dodajemy do tego po 2mm na wysokości i szerokości zdjęcia co daje wymiar: 15,4 x 20,5cm.
Przeliczmy te wymiary na cale, czyli podzielmy przez 2,54 co da nam wymiary: 6,06 x 8,07 cala. Wynik chcemy w pikselach, więc otrzymane wymiary mnożymy przez rozdzielczość (300 dpi) i otrzymujemy wymiar: 1819 x 2422 pikseli. A ponieważ można założyć, że skoro mamy zdjęcia cyfrowe i mamy zamiar je obrobić w GIMPie to prawdopodobnie dysponujemy komputerem. No to dlaczego nie zmontować sobie arkusza kalkulacyjnego który tę robotę wykona za nas? ;-) Formaty zdjęć do FotoLabu
Czas odpalić GIMPa i otworzyć w nim fotkę.

Gdybyśmy chcieli po prostu wyciąć z niej prostokąt o wymiarach 1819 x 2422 pikseli oczywiście użylibyśmy narzędzia kadrowanie [Shift-C] i nie czytalibyśmy do tego instrukcji obsługi, prawda?
Docelowy plik ma mieć wymiary jak wyżej, ale fotka w środku
ma być wynikiem interpolacji interesującego nas fragmentu obrazu. Wybieramy więc narzędzie zaznaczenie prostokątne [R], w opcjach narzędzia ustawiamy Stałe proporcje i wymiar 2422 x 1819 pikseli. Teraz zaznaczamy zupełnie dowolny fragment obrazu.
Czas na autentyczne kadrowanie. Wybieramy narzędzie Skalowanie warstwy lub zaznaczenia [Shitf-T] i przełączamy w tryb skalowania zaznaczenia, a ograniczenia ustawiamy na Stałe proporcje. Warto też ustawić sobie ilość linii siatki na 2 co spowoduje podział fotki na 6 równych części i uwidoczni tak zwane mocne punkty.
Powiększamy zaznaczenie ciągnąc w jego wnętrzu w dowolnym kierunku i ustawiamy docelowy rozmiar zdjęcia, jednocześnie możemy zaznaczenie przesuwać za pomocą punktu na środku zaznaczenia. W ten sposób mamy pełną kontrolę nad tym co docelowo znajdzie się na fotce.
Trzeba jednak pamiętać, że jeżeli wycinany obszar będzie znacząco mniejszy niż docelowy (2422 x 1819) zdjęcie będziemy musieli interpolować w górę co wpływ na jakość miewa różną
, szczególnie jeśli obiekt o który chodzi nie jest do końca ostry bo kierowca wdepnął był gaz do dechy po wyjściu na krótką prostą ;-).

Po przeskalowaniu zaznaczenia oceniamy raz jeszcze efekt oglądając już tylko ramkę zaznaczenia i albo poprawiamy, albo kadrujemy fotę [Menu: Obraz/Kadruj]. W efekcie powstał obraz o wymiarach 2691 x 2020 pikseli.
Czas interpolować fotkę. Tu już bez niespodzianek, wybieramy opcję skalowania zdjęcia [Menu: Obraz/Skaluj obraz...] i podajemy wymiary wynikowe: 2422 x 1819. Często jak w tym wypadku zdarza się, że zaokrąglenia i inne cudactwa powodują, że nie do końca pasuje i gdzieś musi być albo piksel za mało, albo piksel za dużo. Wpisujemy więc albo 2422 w szerokość i jeśli wysokość zostanie obliczona jako 1818 to dla świętego spokoju (bo nie z jakiś ważnych powodów przecież to 1/300 cala czyli 0,08 milimetra) podajemy wysokość 1819 piksela co w wyniku daje 2423 piksele szerokości (W przypadku zdjęć na strony internetowe gdzie wymagamy konkretnych wymiarów w pikselach można zdjęcie jeszcze raz przykadorwać tym razem za opmocą narzędzia kadrowanie [Shift-C] i uciąć tę nadmiarową linię pikseli). Ustawiamy też rozdzielczość 300dpi, co nie ma żadnego znaczenia, ale inaczej będą się czepiać w fotolabie.
Zostało nam tylko plik zapisać. Trzeba tylko pamiętać, żeby w opcjach zapisu jpeg'a wyłączyć zapisywanie EXIF bo się ten FotoLabowy Photoshop zbuntuje, o czym za chwilę.
To czy EXIF jest czy go nie ma i jakie zawiera dane nie ma jak wspomniałem, żadnego znaczenia. Dlaczego? Ano dlatego, że stała (na sztywno ustawiona w naświetlarce) jest rozdzielczość zdjęcia 300dpi. Jeśli więc nasz plik ma prawidłowe wymiary w pikselach to nie ma siły aby się powiększył lub pomniejszył, bez względu na to jaka rozdzielczość ustawiona jest w pliku. 1819 pikseli w 300 dpi to zawsze jest 6,06 cala, co dalej jest zawsze równe 15,40 cm i co by nie wymyślić zdjęcie wyjdzie takie jakie ma. Trzeba po prostu zrozumieć (a w przypadku pracownika fotoLabu wiedzieć), że rozdzielczość pliku, jego rozmiar w pikselach i rozmiar w centymetrach to trzy dane z których każde dwie dają w wyniku trzecią.
Niestety jeśli zostawimy oryginalny EXIF w fotce to photoshop zobaczy to:
$ exiftool IMG_5679a.JPG | grep -i resol
X Resolution : 72
Y Resolution : 72
Resolution Unit : inches
pomimo że:
$ jpeginfo -ilc IMG_5679a.JPG
3504 x 2336 24bit Exif Normal Huffman,300dpi 3475887 IMG_5679a.JPG [OK]
Ponieważ problem dotyczy tylko rozdzielczości teoretycznie pracownik fotolabu po prostu zmieni ją, nie wprowadzając do fotki żadnych modyfikacji, bo to tylko zmiana informacji o rozdzielczości a nie resamplowanie fotki, ale ... może on się (ten pracownik) nie zna jeszcze bardziej niż podejrzewamy? Jeśli nie zapiszemy informacji o EXIF z GIMP'a to wszystko jest tak jak spodziewa się tego użytkownik Photoshopa:
$ exiftool IMG_5679a-cropped.JPG | grep -i resolResolution Unit : inches
X Resolution : 300
Y Resolution : 300
$ jpeginfo -ilc IMG_5679a-cropped.JPG
2423 x 1819 24bit Exif Normal Huffman,300dpi 2224411 IMG_5679a-cropped.JPG [OK]
i problemów na polu rozdzielczości i niewiedzy być nie powinno.
Na koniec jeszcze. Co zrobić jeśli ten nieszczęsny exif tam jednak jest, a my przygotowaliśmy już 1337 fotek do naświetlenia? Otwierać wszystkie sztuka po sztuce w GIMPie i zapisywać od nowa? Eeeee nie po to komputery wymyślili :D
$ exiftool -all= --jfif:all *.JPG
3 image files updated
i po robocie ;-)
P.S. Tak, gdyby narzędzie kadrowanie w GIMPie posiadało możliwość przeskalowania zdjęcia byłoby szybciej, wygodniej i dawało większe możliwości (np. wycięcie fotki większej niż oryginał). Ale nie posiada ani wersja 2.2, ani nie jest to AFAIK na razie planowane na wersję 2.4 więc trzeba się bawić tym co się ma i nie marudzić, bo tekstu dużo ale proces łatwy.
Jasnym jest dla każdego chyba, że software powinno się aktualizować możliwie najszybciej po ukazaniu się kolejnej stabilnej (oznaczonej jako stabilna) wersji programu, bo zwykle jest lepszy, pojawiają się nowe możliwości, znika część niedociągnięć i błędów poprzednich wersji, etc. Wg. mnie to powinno się aktualizować
zamienić należy na koniecznie trzeba
jeśli mówimy o oprogramowaniu spełniającym przynajmniej warunek free as in free beer
, a jeśli się celowo olewa taki wypadek, to nie należy się dziwić, że się cierpi.
Ale o co chodzi?! Jak nie wiadomo o co chodzi, to oczywiście chodzi o ... Internet Explorer, i w tym wypadku o to, że mamy do dyspozycji od jakiegoś czasu jego siódmą wersję, która doskonała to może nie, ale na pewno jest lepsza od przedpotopowej i zarazem poprzedniej wersji MSIE-6.0. Ktoś się nie zgadza?
No to do sedna, skoro ustaliliśmy, że darmowe oprogramowanie należy aktualizować, to spokojnie można w pewnym sensie przestać przejmować się problemami wersji poprzednich. Jedną z nich jest znany problem z 24-ro bitowymi plikami PNG z przyciemnionym kanałem alpha, czyli potocznie z przejrzystymi PNG
, których Internet Explorer starszy niż 7.0 nie trawi.
Jest na to hack z filtrami, ale mało wygodny w stosowaniu, jest wreszcie, skrypt dodający tenże hack na żywo ( Normal display of PNG Alpha Transparency with MSIE (en) ) tylko tym co tego wymagają, wygodniejszy niż ręczne hackowanie
kodu, ale nadal bez rewelacji, choć ... jest ważny bo stał się podstawą pomysłu.
No bo skoro IE-7.0 problemów z 24ro bitowym PNG nie ma, co stoi na przeszkodzie, aby wszystkim innym użytkownikom IE podmienić PNG na gify i niech mają? Że brzydsze? No brzydsze, chcesz ładniejsze upgraduj soft... najlepiej od razu do Mozilla Firefox 2.0 ;-).
Poza tym pamiętajmy, że podmieniając PNG na GIF nie ograniczamy dostępu do strony użytkownikom którzy nie aktualizowali IE. Nie zabraniamy im dostępu do treści, nie wyłączamy nawigacji. Po prostu wysyłamy im takie obrazki, aby ich przeglądarka pokazała stronę możliwie przyzwoicie (a nie wypełnioną kremowymi prostokątami) na miarę swoich <sic> możliwości.
Skrypt powstał na bazie wspomnianego wyżej ReplacePngTags.php tyle, że jest znacznie prostszy bo mniej musi robić, aby cel osiągnąć. Aby użyć należy:
<?php
ob_start();
?>
a na końcu:
<?php
include_once 'replacePNGwithGIF.php';
echo replacePNGwithGIF(ob_get_clean());
?>
Na koniec sam (mocno powiedziane) skrypt
replacePNGwithGIF:
<?php
function replacePNGwithGIF( $content ) {
$msie =
'/msie\s(5\.[05]|6\.0).*(win)/i';
if ( !isset ( $_SERVER['HTTP_USER_AGENT'] ) ||
!preg_match ( $msie,$_SERVER['HTTP_USER_AGENT'] ) ||
preg_match ( '/opera/i',$_SERVER['HTTP_USER_AGENT'] )
)
return $content;
$pattern =
'/<img[^>]*src\s*=\s*[\"\']\s*([^>]*-transparent\.png)[^>]*>/i';
preg_match_all($pattern, $content, $images);
for( $num_images = 0; $num_images < count( $images[0] ); $num_images++ ) {
$original = $images[0][$num_images];
$replace_with = str_replace('-transparent.png','-transparent.gif',$original);
$content = str_replace($original,$replace_with,$content);
}
return $content;
}
?>
Że niedoskonały, że w niektórych wypadkach działa nie do końca tak jak ma? Się poprawi, to powyżej to wersja 0.1pre-alpha-test-3 przecież ;-).
Paczki z muzyką z jamendo po pobraniu z torrenta mają tę wadę, że nazwy plików z okładkami albumów tworzone są na zasadzie Nazwa zespołu - Nazwa albumu.x.jpg
gdzie x jest jakąś liczbą. Przypuszczalnie jest im to do czegoś potrzebne, nie wiem planują kiedyś dodać możliwość umieszczenia w paczce kolejnych stron okładki czy coś. Niestety, żeby taki Rhythmbox chciał tę okładkę pokazać to musi się ona nazywać Cover.jpg.
No i było posprzątane... było ;-)
Ja tam co prawda na pisaniu skryptów w bashu się nie znam za bardzo jakoś, ale skrypt to skrypt nei ma tak, że się nie da nawet jak sie nie umie. Tak oto powstał przed chwilą cover-rename.sh:
#!/bin/bash
#find "$1" -name '*.1.jpg'
for file in $1*/*.?.jpg ;
do
dest=`dirname "$file"`/Cover.jpg;
cp "$file" "$dest";
echo "$file";
done
uruchamiany np tak:
$ ./cover-rename.sh ~/Media/Audio/jamendo.com/
/home/wariat/Media/Audio/jamendo.com/Avel Glas - Vent Bleu -- Jamendo - OGG Vorbis q7 - 2006.08.19 [www.jamendo.com]/Avel Glas - Vent Bleu.1.jpg
/home/wariat/Media/Audio/jamendo.com/Kapela na Dobry Dzień - Przez tę naszą wieś -- Jamendo - OGG Vorbis q7 - 2007.03.19 [www.jamendo.com]/Kapela na Dobry Dzień - Przez tę naszą wieś.1.jpg
wariat@coyote ~/skrypty/jamendo $
i już. Wewnątrz siebie wiem, że zamiast tego potworka z gwiazdek w pętli powinno się znaleźć wyjście z tego find, który jest schowany powyżej. Ale tu bash okazał się strasznie narowisty, a ja jak wspomniałem nie za bardzo ten tego ... więc find poczeka na wersje 2.0 ... która pewnie nigdy nie powstanie, bo najpierw z jakichś przyczyn to musiałoby przestać działać.
W każdym razie jeśli jeszcze ktoś miał ten kłopot i nie chciało mu się bardziej niż mnie to cuż powiedzieć ... enjoy!
Ha! Chyba w końcu znalazłem klienta sieci BitTorrent dla siebie. No dobra znalazłem też wcześniej niejakiego gnome-bt ale ten zniknął był z portage w niewyjaśnionych okolicznościach dość dawno temu.
Dotychczas więc oglądałem czasami jak co wygląda, a używałem właściwie tylko ctorrent, co ma swoje zalety, ale generalnie (IMO) wad ma więcej. I oto wczoraj wieczorem całkiem przypadkiem natrafiłem na Deluge klienta sieci BitTorrent napisanego w Pythonie. Bokiem zupełnie - zaczynam się obawiać czy za chwilę większość cudeńka jakie nazywamy GNOME Desktop
nie będzie napisana w skryptach z pod znaku czterech spacji ;-). Ale do rzeczy...
wscreenie ;-) )
wyPythonićjak to Gajim miewał kiedyś w zwyczaju
Bateria w laptopie (i wszystkich innych urządzeniach) ma tę paskudną wadę, że jak się jej używa to ona się rozładowuje. Warto więc wiedzieć jaki jest jej stan i starać się prąd oszczędzać. Gnome-power-manager sobie z problemem radzi, jeśli wie co z baterią. W przypadku Toshiba Satellite P25-S609 (taki desktop udający laptopa) pewne informacje są domyślnie tajne ;-).
Bateria tak na prawdę ma pojemność 6450mAh która w tej chwili (komputer nie jest już od dawna nowy) realnie zmniejszyła się do ok. 5300mAh. Niestety /proc/acpi/battery/* raportuje w tym względzie bzdury.
Czy jest rozwiązanie? Jest, nazywa się omnibook i nie koniecznie dotyczy tylko produktów znanego producenta dobrych drukarek i przeciętnej reszty ;-). To do dzieła.
# echo "app-laptop/omnibook ~x86" >> /etc/portage/package.keywords
# emerge omnibook
I teraz tak, wiele modeli jest rozpoznawanych przez moduł, może i nasz?
# modprobe -v omnibook
insmod /lib/modules/2.6.19-gentoo-r5/char/omnibook.ko
# dmesg
omnibook: Driver version 2.20070211.
omnibook: Unknown model.
omnibook: Enabled features: version dmi.
# ls /proc/omnibook/
dmi version
Co stanowi, że nie śmiga bo laptop nie został przez moduł rozpoznany. Co teraz? Teraz otwieramy listę supportowanych komputerów i szukamy podobnego. W przypadku Toshiba Satellite P25-S609 jak się wydaje najlepiej odpowiadają wersje ectype=11 i ectype=12. W jaki sposób? Metodą prób i błędów, ectype=11 pasuje bo jest tam Satellite P20, bateria na takich ustawieniach działa, ale źle raportowana jest ilość możliwych ustawień podświetlenia ekranu. W tej chwili wydaje się, że ectype=12 w tym wypadku jest lepszym wyborem. Tak czy siak trzeba próbować i porównywać wyniki. Po dobraniiu porawidłowych wartości warto założyć feature request na stronie projektu omnibook, tak aby kolejna wersja modułu rozpoznawała nasz komputer bez większego kombinowania, w końcu takie wspomaganie developperół informacjami to też jakis malutki wkład w Wolne Oprogramowanie right?
# modprobe -vr omnibook
rmmod /lib/modules/2.6.19-gentoo-r5/char/omnibook.ko
# modprobe -v omnibook ectype=12 battery=1
insmod /lib/modules/2.6.19-gentoo-r5/char/omnibook.ko ectype=12 battery=1
omnibook: Driver version 2.20070211.
omnibook: Forced load with EC type 12.
omnibook: check_default_state timeout.
omnibook: EC state check failure, please report.
omnibook: LCD backlight turn off at console blanking is enabled.
omnibook: Enabled features: battery blank bluetooth display version dmi lcd temperature wifi throttling.
# ls /proc/omnibook/
battery bluetooth dmi temperature version
blank display lcd throttling wifi
# cat /proc/omnibook/battery
Battery: 0
Type: Li-Ion
Serial Number: 20152
Present Voltage: 16716 mV
Design Voltage: 14800 mV
Remaining Capacity: 5371 mAh
Last Full Capacity: 5371 mAh
Design Capacity: 6450 mAh
Gauge: 100 %
Status: charged
Youpiii! ;-) No to niech się teraz samo ładuje ;-)
# echo "options omnibook ectype=12 battery=1" > /etc/modules.d/omnibook
# modules-update
* Updating /etc/modules.conf ... [ ok ]
* Updating /etc/modprobe.conf ... [ ok ]
# modprobe -vr omnibook
rmmod /lib/modules/2.6.19-gentoo-r5/char/omnibook.ko
# modprobe -v omnibook
insmod /lib/modules/2.6.19-gentoo-r5/char/omnibook.ko ectype=12 battery=1
# echo omnibook >> /etc/modules.autoload.d/kernel-2.6
# reboot
I śmiga... Bateria jest poprawnie raportowana przez gnome-power-manager. W przypadku odcięcia zasilania ekran jest przygaszany, zanim prądu w baterii zabraknie, komputer się wyłączy. Czas po mału zebrać siły na zwalczenie suspend2-sources ;-)
syndaemon -i 1 -d
to okazuje się, że działa jak trzeba, i kursor już nie powinien polecieć w zupełnie nowym nieznanym kierunku muśnięty przypadkiem podczas pisania, a wariat kompletnie bez sensu kilka razy zaczął kląć szpetnie na jeździdełko, które i tak jest gorsze od pradawnej
łechtaczkiale to już inna bajka ;-)
Sprawa jest prosta, to że wcisnęli <WIN> w prawy górny róg klawiatury można wybaczyć. Nie wiem czy cokolwiek to utrudnia, nawet jeśli to żyć się z tym da.
Za to kategorycznie przegięli z dolnym rzędem, gdzie w kolejności po prawej od spacji są: Insert, Delete i dopiero AltGr. I weź tu człowieku napisz coś po polsku, jak Insert plus a
ni hu hu nie chce dawać ą
. Właściwie trudno się dziwić i trzeba naprawić. ;-)
Trochę byłem zmieszany, po tym jak wodzu, a później Smoku dali znać, że na bank się da, ale konkrety to gdzie indziej. Hinty były, ale wariat jak to wariat. Nie zrozumiał ;-)
Ostatecznie zaczęło się grzebanie w okolicach /usr/share/X11/xkb/ i jest. Działa!
Cała magia to:
Na patchach to ja się nie znam, ale to by było chyba jakoś tak: Insert & AltGr swap patch.
Istnieje co prawda ryzyko, że przy aktualizacji systemu coś się przywróci, ale zmiana jest tak trywialna, a upierdliwość alta poza zasięgiem kciuka tak duża, że warto ;-). Jak się sprawdza? DOSKONALE SIĘ SPRAWDZA! :D