Find duplicates

A probléma Szorgosan fotózunk. Idővel rákapunk arra is, hogy a fényképeinket szépen rendszerezett formában tároljuk valamelyik fotós workflow alkalmazás segítségével. A fotóink egy folder struktúrába importálódnak, példás rendben. Minden oké, amikor egyszer csak véletlenül egy nagy kupac régi képet kétszer húzunk be a libraryba – kész a baj, egy zsák fotónk lesz meg két példányban, feleslegesen. Lista kellene a duplikált file-jainkról!

A megoldás

Mielőtt alkalmazást keresnénk a feladat leküzdésére, agyalunk egy kicsit és kitaláljuk, hogy *nix-like környezetben menni fog ez külső segítség nélkül is. Két file egyezésének megállapításához pont elég, ha azok MD5 hash-e megegyezik. Írjunk hát egy scriptet, amely az egyező MD5 hash-ek alapján elkészít egy duplikált file listát:
# A script a duplikált file-okat tartalmazó foldert várja paraméterként
# és a jpg kiterjesztésű állományok egyezését vizsgálja csak.
NAME="*.jpg"
ALLFILES="/tmp/finddups.allfiles.tmp"
DUPHASHES="/tmp/finddups.duphashes.tmp"
find $1 -name "$NAME" -exec md5 {} \; | sort >$ALLFILES
find $1 -name "$NAME" -exec md5 -q {} \; |sort|uniq -d|sort -n >$DUPHASHES
while read hash
do
	cat $ALLFILES | grep $hash | grep -oE '\((.*-[0-9].jpg)\)' | sed "s/(// ; s/)//"
done <$DUPHASHES
Nézzük meg, mit csinálunk. Az első find-del kezdődő sor a célfolderben levő összes jpg file-unkból számol egy MD5 hash-t, majd a filelistát hash-estől leteszi egy file-ba. Ez a file valahogy így fog kinézni:
MD5 (./2000/05/15/20000515-0084.jpg) = 747888000b422d619a1b308346b7d81e
MD5 (./2000/05/15/20000515-0086-2.jpg) = d3a064924fb8306519475b09cb90d66b
MD5 (./2000/05/15/20000515-0086-3.jpg) = d3a064924fb8306519475b09cb90d66b
MD5 (./2000/05/15/20000515-0086.jpg) = d3a064924fb8306519475b09cb90d66b
A következő sorban mégegyszer végigmegyünk a jpg filejainkon, de csak az MD5 hash-üket kérjük, mindenféle sallang nélkül (=ezt adja az md5 -q opciója), majd a uniq binárissal csak a duplikált hash-eket szűrve (=-d opció) letesszük az összes, többször előforduló MD5 hasht egy másik file-ba. Ezután már csak végig kell rohannunk a duplikált hash-eken, kikeresni, hogy mely file-okhoz tartoznak és kilistázni azokat – ezt teszi a script végi ciklus. A ciklus közepén levő regexp arra hivatott, hogy az első körben előállított hash-es filelistából csak a filenevek jelenjenek meg – azok közül is csak azok a file-ok, amelyek neve -[0-9].jpg-re végződik. Tudom, hogy a végén levő sed (amellyel a kibányászott filenevek elől és mögül lecsippentjük a zárójeleket) ágyúval verébre kategória. Nekem sem tetszik, gusztustalan – azonban szűk egy órán át nem találtam más megoldást, ezért maradt ilyen. Commentben lehet szárnyalni, ki hogyan választaná le így shellben az egrep által elkapott első capture group-ot.]]>

Curiosity

Kedvcsináló videó – egy percben a Marsról: Egy videó arról, hogy mennyire kemény meló sikeresen a Mars felszínére juttatni a robotot: Ha a fenti videók felkeltették az érdeklődésed, íme még pár link:

  • Minden a NASA MSL-ről (=Mars Science Laboratory) itt.
  • Erre találsz szépen összerakott, egyszerű és látványos pdf-et a küldetésről és magáról a robotról.
  • A komplett Mars misszióval kapcsolatos sok-sok érdekes video erre (a fenti három is innen jött).
  • A Curiosity landolásával kapcsolatos friss infók RSS-ben erre.
  • Livestream.com landolási video stream erre.
  • Ustream Nasa streamek erre. Én ezt a streamet ajánlom: egyfelől magyar a fejlesztő csapat, másfelől a múltkori, SpaceX – ISS összekapcsolódást közvetítő csatornájuk is messze akadásmentesebb volt, mint a NASA saját live streaming szolgáltatása.
Ha ennyire nem izgulnál erre az egész Marsos témára, de azért csak vagiznál ilyen űrös dologgal és mondjuk lenyűgöznéd a haverokat azzal, hogy egy buliban hanyagul felmutatsz az égre, hogy épp most integetnek neked az International Space Station-ról, akkor itt tudod megnézni, hogy mikor jár feletted a csapat, vagy itt láthatod a pozíciójukat valós időben. ]]>

Media Center Szent Grál: behódolunk a H264-nek

A probléma Mondjuk, hogy van egy zsák DVD-nk (tényleg van), adja Isten találtunk hozzájuk .SRT feliratokat is és mindezt cakkumpúder csinosított formában szeretnénk felajánlani az iTunes librarynknak népgazdasági hasznosításra (egy üveg fröccs már bennem van, elnézést a hablatyért).

A megoldás

A feladatot két részre bontjuk: előbb hagyjuk a computerünket tömegesen konvertálni, aztán majd szerzünk az eredményhez metaadatot is, végül megszólítjuk iTunes komát is. Csapjunk bele!

1. lépés: tömeges konverzió

Szóval nagyjából úgy, ahogy a fenti bagoly rajzolós HOWTO mutatja. Igaziból persze leszedünk egy HandbrakeCLI-t, bemásoljuk a /Applications mappánkba a binárist és megírjuk az alábbi scriptet:
#!/bin/sh
#
# Handbrake gyipaci
# lmdate 2010.07.05
#
# Végigmegy rekurzívan egy könytáron és megkeresi a filmcim-hu{n}.srt, filmcim-en{g}.srt feliratfile-okat,
# aztán ha igazán akarod, csinál neked soft subtitle-os m4v-ket az avi-jaidból.
#
# A script feltételezi, hogy ha csak egy, az avi file-lal megegyező nevű srt file-t talál, akkor abban magyar
# subtitle lakik.
#
convert() {
	film="$1"
	base="${film%.*}"
	srt="$base".srt
	hu="$base"-hu.srt
	hun="$base"-hun.srt
	en="$base"-en.srt
	eng="$base"-eng.srt
	srthuc=0
	srthu=""
	if [ -e "$srt" ];	then
		srthuc=1
		srthu="$srt"
	elif [ -e "$hu" ]; then
		srthuc=1
		srthu="$hu"
	elif [ -e "$hun" ]; then
		srthuc=1
		srthu="$hun"
	fi
	srtenc=0
	srten=""
	if [ -e "$en" ]; then
		srtenc=1
		srten="$en"
	elif [ -e "$eng" ]; then
		srtenc=1
		srten="$eng"
	fi
	let srtc=$srthuc+$srtenc
	srtfiles=""
	srtcodes=""
	srtlangs=""
	case $srtc in
		0 ) ;;
		1 )
			if [ -s "$srthu" ]; then
				srtfiles="$srthu"
				srtcodes="WINDOWS-1250"
				srtlangs="hun"
			else
				srtfiles="$srten"
				srtcodes="ISO-8859-1"
				srtlangs="eng"
			fi
			;;
		2 )
			srtfiles="$srthu","$srten"
			srtcodes="WINDOWS-1250,ISO-8859-1"
			srtlangs="hun,eng"
			;;
	esac
	if [ $srtc -ne 0 ]; then
		echo Found $srtc subtitles:
		echo "$srtfiles"
		echo "$srtcodes"
		echo "$srtlangs"
	else
		echo No subtitles found.
	fi
	options="-e x264 -q 20.0 -a 1,1 -E faac,copy:ac3 -B 160,160 -6 dpl2,auto -R Auto,Auto -D 0.0,0.0 -f mp4 -4 -X 960 --loose-anamorphic -m -x cabac=0:ref=2:me=umh:b-pyramid=none:b-adapt=2:weightb=0:trellis=0:weightp=0:vbv-maxrate=9500:vbv-bufsize=9500 -C 8"
	case $srtc in
		0 )
			# ha felirat nélkül is konvertálnál
			echo "" | $hbcli -v -i "$film" -o "$2" $options
			;;
		1 )
			# ha konvertálnád a home videód akkor is, ha csak a default magyar felirat van meg hozzá
			echo "" | $hbcli -v -i "$film" -o "$2" $options --srt-file "$srtfiles" --srt-codeset "$srtcodes" --srt-lang "$srtlangs"
			;;
		2 )
			# ha konvertálnád a home videód mind az angol, mind a magyar felirat birtokában a kétnyelvű családod számára
			echo "" | $hbcli -v -i "$film" -o "$2" $options --srt-file "$srtfiles" --srt-codeset "$srtcodes" --srt-lang "$srtlangs"
		 ;;
	esac
	return
}
hbcli=/Applications/HandBrakeCLI
source_dir="."
input_file_type="avi"
output_file_type="m4v"
echo "# Using HandBrakeCLI at "$hbcli
echo "# Using source directory "$source_dir
echo "# Converting "$input_file_type" to "$output_file_type
# Convert from one file to another
convert() {
   # The beginning part, echo "" | , is really important.  Without that, HandBrake exits the while loop.
   echo "" | $hbcli -i "$1" -o "$2" --preset="AppleTV 2" -C 8;
}
# Find the files and pipe the results into the read command.  The read command properly handles spaces in directories and files names.
find "$source_dir" -iname "*.$input_file_type" | while read in_file
do
        echo "Processing…"
   echo ">Input  "$in_file
   # Replace the file type
   out_file=$(echo $in_file|sed "s/\(.*\.\)$input_file_type/\1$output_file_type/g")
   echo ">Output "$out_file
   # Convert the file
   convert "$in_file" "$out_file"
   if [ $? != 0 ]
        then
            echo "$in_file had problems" >> handbrake-errors.log
        fi
   echo ">Finished "$out_file "\n\n"
done
echo "DONE CONVERTING FILES"
A sctiptünkben az options= kezdetű sorban a -C utáni számot kicseréljük a rendelkezésünkre álló CPU magok számára. Egy folderbe bepakoljuk az eddig bután .avi formában tárolt filmjeinket / sorozatainkat, melléjük tesszük az .srt file-okat (ha ezt nem értjük, elolvassuk a scriptet, nem csak nyakló nélkül mentjük). Ha ez kész, nyitunk egy shellt, bemászunk a filmek könyvtárába és elindítjuk a scriptünket, majd a végén örülünk a sok szép új m4v file-nak.

2. lépés: metázunk

Az előbb lett sok szép mv4 file-unk – ezekbe kell nekünk proper metadata. Ehhez vásároljuk meg a Mac App Storeból az iDentify alkalmazást, esetleg szedjük le a trialt innen. Az iDentifybe bedobáljuk az m4v file-jainkat, ő meg szépen feltaggeli őket. Ha ezt mégsem teszi meg magától, akkor nagy eséllyel nem tudott kitalálni szerencsétlen semmi kézzelfoghatót a filenévből. Ilyenkor forduljunk az IMDB-hez bizalommal: keressük ki a film / sorozat IMDB oldalát és adjuk meg az iDentifynek az IMDB által használt azonosítót.

3. lépés: iTunes etetés

A drága megalomán média alkalmazásunk minden valószínűség szerint a ~/Music/iTunes mappában tárolja a cuccait. Ebben a folderben keressük meg az iTunes Media/Automatically Add to iTunes könyvtárat és dobáljuk bele vadul az előbb legyártott, majd gondosan feltaggelt m4v állományainkat. Az iTunes észreveszi az új jövevényeket, belenéz a metaadatokba és szépen a helyére pakolja a cuccost. Innentől kezdve pedig már csak egy iTunes Home Sharing bekapcsolás és egy Apple TV dobozka kell ahhoz, hogy a nappaliban molesztáljuk a csodaszép videós médiatárunkat.]]>

Krakkói séta

20120720-1643 Torony a piactéren: 20120722-1669 Egy ifjú férj az egyik furulyázó birka alatt: 20120721-1652 5 sörért egy füles promóció az egyik vendéglőben: 20120721-1656 Egy rendes emberre mért sör (1 l) egy másik vendéglőben (Pod Wawelem): 20120722-1659 Szintén rendes emberre mért, kiló körüli csülök ugyanott: 20120722-1661 Egy templom fürdik a golden hourban: 20120722-1670 Wawel: 20120722-1671 20120722-1673]]>

Ügyfélszolgálatok

Tárgy: A Raspberry Pi-re vonatkozó kérdése Szöveg: Tisztelt Ügyfelünk! Köszönjük levelét és a Raspberry Pi iránti érdeklődését. Minden információt, mely a regisztrációra, a megrendelési folyamatra, a fizetési lehetőségekre, aktiválási kódokra, stornóra, avagy a visszaküldésre vonatkozik, a következő weboldalon talál: http://hu.rs-online.com/web/generalDisplay.html?id=raspberrypi&file=questions Ezeket az információkat rendszeresen frissítjük, így mindig naprakészek. Üdvözlettel: RS Components A válaszba linkelt URL-ből kiderül, hogy nagy eséllyel azért nem ért még ide a termék, mert 9-14 hét szállítási idővel számolnak, rendelési időtől függően. Értem én, csak épp azt nem, hogy 9-14 hétig mit csinálnak a pénzemmel. De nézzük meg a Farnell válaszát ugyanerre a kérdésre:

Kedves Gábor, Köszönjük megkeresését. A rendelésében szereplő terméket június 26-án útjára indítottuk. A raspberry pi termékeket légi postával indítjuk, így sajnos nem tudunk hozzá fuvarlevélszámot biztosítani. Az általános tapasztalat szerint 1 hét- 10nap alatt meg is érkeznek rendben a termékek. Miután az Ön esetében ez az időtartam már eltelt, még a hét végéig szeretnénk kérni türelmét. Amennyiben e hét során sem érkezik meg a termék, kérném jelezze ezt felénk, és természetesen gondoskodunk a rendelése díjmentes pótlásáról. Üdvözlettel,
Summárium: kedves RS Online, ezek után ha a Farnellnél és nálatok megtalálható ugyanaz a termék, szerinted kitől rendelem majd a jövőben? ]]>

USA 2012/06 – Miami, Seaquarium

Miami-bad-weather A látszat csal, azért a 30 fok feletti hőmérséklet most is megvolt, csak jött mellé nem kevés pára és megszűnt az égető napfény egy része. Ennek ellenére úgy gondoltuk, jó ötlet az egész napot a Miami Seaquariumban tölteni. A Seaquarium a neve ellenére nem valami gigantikus akvárium (amilyen egyébként jó sok van a világ számos pontján), hanem egy állatkert-szerű show, amit én nem nagyon szívelek. Becsületükre legyen mondva, azért láttunk jópár sérült, gondozásba vett állatot is, de ez még nem billenti teljesen vissza a tegnap rossz irányba billent mérleg nyelvét. Az állatok produkáltatása csak egy dolog. Az sokkal visszatetszőbb, amikor fogságban tartott állatok pl. ilyen akváriumban élik az életüket: Seaquarium-dirty-water Ez a zöld trutymós víz tele van rengeteg gyönyörű, ám így szinte alig látható állattal. Ebben úszkál ez a csodás barrakuda is, akiből egy ötszázas csorda már elég tekintélyt parancsoló lenne: Seaquarium-barracuda Kicsit odébb három óriási tengeri tehén van bezárva egy nagyjából 20 méter átmérőjű, henger alakú akváriumba: Seaquarium-manatee Egy kör alakú “halfuttatóban” ragadozók laknak egy kupacban: nővércápák és tonhalak nyüzsögnek benne – előbbieket eteti épp két néni: Seaquarium-nurse-shark Az állatok produkáltatása címszó alatt fókák és delfinek adják a műsort: Seaquarium-bottlenose-dolphin Életemben először láttam itt kardszárnyú delfint. Ez a lény élőben egyszerűen lenyűgöző: Seaquarium-orca2 Ő az egyik vízi show spriccelős sztárja: a közel 4 tonnás test pár méterről a sós vízbe visszazuttyanva tud meglepetést okozni bőven. Az első három sorban ülő áldozatok még nem nagyon tudják elképzelni, mi következik: Seaquarium-orca1 A műsorra késve érkező szerencsétlen se gondolta 10 másodperccel a kép készítése előtt, hogy mindjárt belemártják a tengerbe: Seaquarium-orca3 Summa summarum, a Seaquarium szerintem akkor kötelező, ha nem láttál még kardszárnyú delfint. Ha most azt mondanák, hogy menjek vissza, fizessem be megint a sok pénzt a belépőre és előtte újra megsarcolnak 8 USD parkolódíjjal, de cserébe csak egy picit közelebb kerülhetek / több időt eltölthetek ennek a fantasztikus állatnak a társaságában, nem haboznék. Ám minden mást inkább a természetes környezetében néznék meg, legyen az sanctuary vagy snorkeling / merülés.]]>

USA 2012/06 – Disney World, Cape Canaveral

DisneyWorld-entrance DisneyWorld-pricing Délután még bementünk másnapra guided tour jegyet váltani a Kennedy Space Centerbe, végignéztük az Astronaut’s Hall of Fame kiállítást, majd a közeli Cocoa Beach-en egy kiadós hullámzás után eltettük magunkat másnapra. Astronauts-Hall-of-Fame-Neil_Armstrong Astronauts-Hall-of-Fame-Neil_Armstrong-Apollo11-badge Másnap a Kennedy Space Centerben felültünk egy cirka 2 órás buszos túrára. Általában nem vagyok oda a guided túrákért, de Paul, a mi túránkat vezető fickó egyszerűen magával ragadó volt. Olyan lelkesedéssel beszélt, annyira élvezte, amit csinál és mindezt úgy adta át, hogy azt tanítani lehetne. Álljon is itt Paul egy kicsikét: KennedySpaceCenter-Paul A Kennedy Space Center színültig van érdekes adattal. Az ürhajók összeszerelésére használt Vehicle Assembly Building (=VAB) pl. 80000 m² alapterületű, az ajtaja akkora, hogy 45 perc alatt nyílik ki, minden egyes nyíló ajtószegmens 3 tonna. Akkora mákunk volt, hogy ez a túra tartalmazta a VAB belsejébe látogatást is, így bele tudsz kukkantani Te is: KennedySpaceCenter-7987 KennedySpaceCenter-7977 Paul a bejáratnál közölte, hogy van a csoportnak egy kis meglepetése. Bementünk, magyarázott az épületben üzemelő 71 darab precíziós daruról meg a többi hihetetlen ott fellelhető dologról, aztán egyszer csak sétál velünk beljebb és azt mondja: now look right! KennedySpaceCenter-7982 És ott áll az Atlantis, aki tavaly júliusban még aktívan repült és hordta a cuccot az ISS-re! Ez volt hát Paul meglepetése. Rengeteg érdekes dolgot mesélt a fickó, szinte alig tudok válogatni belőlük. Itt van pl. a gigantikus crawlereknek épített út, amelyen a lánctalpak részére készült kőzúzalék sáv darabja 15-15 méter széles (a jobb szélén az a fékony szürke csík a buszok számára épített 2 sávos úttest): KennedySpaceCenter-8059 Ezen az úton cipeli ki a két giga nagy jármű a mobil indítóplatformra szerelt űrhajót, cirka 8-9 óra alatt az indítási platformhoz. A crawler mobil platformostól + űrhajóstól 8000 tonna. Vagy pl. a magyarázat az űrhajók indításakor felgomolygó óriási füstfelhőre. Mielőtt elmondom, nézd meg ezt a kilövőállomást: KennedySpaceCenter-8001 Látod azt a víztorony-szerű szürke magas bigyót a jobb szélen? Nos az valóban egy víztorony. Na de minek a víz a kilövéshez? A rakétákban elhelyezett szilárd és folyékony hajtóanyag robbanóereje felér egy kisebb atombombáéval – indításkor a jármű 5 km-es körzetén belül az ember egészségkárosodást szenvedne. Az indításkor belobbanó hajtóanyag ~180 dB körüli hangnyomást indukál, ami már akkora, hogy károsíthatja a rakétákat szigetelő réteget – ennek a nyomásnak nem szabadna 140 dB fölé mennie, különben sérülhet a szigetelés. Erre jött az egyik mérnökből az ötlet, hogy közvetlenül indítás előtt a rakéták alatti teret vízzel árasztják el, amit az ilyenkor felszabaduló iszonyatos hő szinte azonnal gőzzé alakít – a gőz pedig hangelnyelő közegként viselkedve már le tudja csökkenteni az indításkor keletkező hangnyomást 140 dB körülire. Itt tesztelik az ötletet: KennedySpaceCenter-8014 Most már Te is tudod, hogy mi a francnak cipeli fel a crawler az amúgy is dög nehéz rakétát mobil indítóállványostól arra a dombra: a domb közepébe fúrt lyukat árasztják el vízzel indításkor. A túra végén a busz letesz egy, többek között a Saturn hordozórakétákat és a korábbi űrprogramokat bemutató épületben. A szétszerelt, kiállítótér fölé függesztett Saturn rakéta valami leírhatatlan látvány: KennedySpaceCenter-8091 KennedySpaceCenter-8096 KennedySpaceCenter-8152 KennedySpaceCenter-8156 Ha körbecsodáltad és elolvastál mindent, ami téged érdekelt, akkor mehetsz megnézni a régi Apollo űrprogram parancsnoki központját, ahol eljátszanak neked egy indítást: KennedySpaceCenter-8080 A szimulált kilövéskor az erre a célra épített lépcsőzetes előadó padjai ugyanúgy remegnek, mint a mögötted levő ablakok. 2004 őszén egyszer már átéltem ugyanezt, de így is beleborzongtam, hogy tudtam, mi következik. A műsor után kihajtanak holdkőzetet taperolni és további tárlókat nézegetni, végül mehetsz IMAX mozikba Hubble teleszkóp javítást nézni – summa summarum, a Kennedy Space Center jól kitölti a napot. KSC után irány Miami, az elkövetkező pár nap ott telik. Ellátogatunk még a Seaquariumba, úgyhogy továbbra sem maradsz szárazon, just stay tuned!]]>