Category Archives: Mac

MacFag-nek lenni jó

A feladat Nemrég vettem egy Mac minit media centernek, amibe a hétvégén Dr. iPod beszerelt egy SSD-t. A már benne levő hard disken szépen felkonfigurálva ott figyelt az operációs rendszer és az egész media center librarystől, így most az lenne az optimális, ha ez mind gyorsan átköltözne az SSD-re.

A megoldás

A hard disken alig 10 GB adat volt, így az simán felfér az SSD-re, csak abban nem voltam biztos, hogy ezt hogy lehet a legegyszerűbben megcsinálni. A megoldás az lett, hogy összedugtam a Mac minit egy másik Mac-kel, felbootoltam őt target disk módban, elindítottam a host gépen a Disk Utilityt és kértem úgy egy Restore-t, hogy a forrás volt az eredeti hard disk, a cél meg az SSD. Nem voltam biztos benne, hogy ez így flottul menni fog, tekintve, hogy két különböző méretű adathordozóról van szó – de simán ment minden. Az egész művelet a Thunderbolt drótnak köszönhetően pár percig tartott. Újraindítottam a Mac minit, meggyőződtem róla, hogy az SSD-ről korrektül ment a boot, aztán legyalultam a nagy hard disket és kész is volt a meló. Természetesen mindez egy dd onelinerrel ugyanígy ment volna, én mégis roppant mód megörültem annak, hogy ilyen simán lezajlott a dolog a Disk Utility használatával. Utólag persze nekiállt tekerni az agyam azon, hogy mindez működött volna úgy is, hogy recovery módban bootolok és onnan indítok egy Disk Utilityt. Mindazonáltal én úgy tartom, hogy a bölcs ember ilyenkor ahelyett, hogy a másik, ugyanazt megmutató utat is bejárná, inkább valami újat keressen. Ezért aztán kiültünk a teraszra és nekiestünk egy üveg Malbec-nek és némi zsíros sajtnak.
]]>

Media Center Szent Grál: feliratozzunk!

A probléma Filmünk van, ráadásul mondjuk sok, feliratunk meg nem van, főleg nem több nyelven.

A megoldás

Subliminalt installálunk:
  • leszedjük az aktuális master branchet innen
  • hagyjuk, hogy installálja magát: sudo ./setup.py install
Ha ez kész, megírjuk az alábbi getsub scriptet:
#!/bin/sh
for F in `ls -1 *.mp4 *.avi *.mkv *.m4v *.mov`
do
	echo Processing "$F"...
	BASE=${F%.*}
	if [ -f "$BASE.hu.srt" -a -f "$BASE.en.srt" ]
		then echo "Subtitles exists - skipping download."
		else
			echo "Trying to download subtitles..."
			/usr/local/bin/subliminal -m -l hu -l en "$F"
	fi
done
Mindezek után csak annyi a dolgunk, hogy bemászunk egy folderbe, ahol a sok film lakik és ráeresztjük a getsub scriptünket. Az eredmény jó esetben a filmfile-ok mellett keletkező .hu.srt és .en.srt állományok kellemes tömege. Advancedebb olvasóink rekurzívvá tehetik a scriptet. Update: az összes advanced olvasót megelőzve íme az ajándék minimalistább, ám annál rekurzívabb script (a tegnapi verzióban lemaradtak a space tartalmú fileneveket védő idézőjelek, amire ma hajnalra fds mester hívta fel a figyelmemet):
#!/bin/sh
find . \( -name "*.mp4" -or -name "*.avi" -or -name "*.mkv" -or -name "*.m4v" -or -name "*.mov" \) -and \( ! -iname ".*" \) -print0 | while read -rd $'\0' F; do
	BASE=${F%.*}
	echo Processing "$F"...
	if [ ! -f "$BASE.hu.srt" -o ! -f "$BASE.en.srt" ]
		then /usr/local/bin/subliminal -m -l hu -l en "$F"
	fi
done
]]>

CIB e-bank

hiszti és az egyik ezzel kapcsolatos threadben @vszakats tett ki egy non-applet futtató scriptet a Pastebinre. A script a saját könyvtárába létrehoz egy AppletLocal.html file-t, egy jogosultságot definiáló cibib.policy file-t, aztán letölti curl segítségével a CIB-től a cibib.jar appletet, végül elindítja. Az applet letöltése közben a curl néma, így azt érezheted, hogy nem történik semmi, pedig megy az, csak nem látod, szóval egy kis türelem, mire lejön a 2 megás applet. Ha egyszer lent van az applet és kész a HTML és a policy file, akkor elég ez a miniscript az indításhoz:

#!/bin/sh
dir="`dirname $0`"
appletviewer $dir/AppletLocal.html -J-Djava.security.policy=$dir/cibib.policy > /dev/null &
Az egész hóbelevanchoz természetesen nem kell Java browser plugin, azokat nyugodtan kikapcsolhatod, ahogy Józsi írta. Viktornak jövök egy sörrel, ha erre jár 🙂 Update #1: eti tuningolt a scripten kicsit. Az ő változata már megnézi, hogy módosult-e a CIB serverén az applet és csak akkor szedi le, ha igen (curl -z paramétere), továbbá kicsit kevesebb jogot adott neki, így természetesen etinek is jár a serital 🙂 Update #2: közben kiderült, hogy eti scriptjébe mégiscsak kell a több jog ahhoz, hogy az applet a Clipboardot használhassa. Én nem pöcsöltem vele, visszaadtam neki mindent, így most a script így néz ki. Update #3: eti elolvasta az stderr kimenetet és mégiscsak a minimálisan szükséges jogot kapta az applet. Update #4: eti közben kiókumulált még két jogosultsági beállítást, hogy legalább a plain text output működjön – sajna a PDF output továbbra sem jó, de már ez is valami! Az outputot az $output_dir-ben beállított folderbe pakolja majd az applet. Update #5: újabb eti tweak, hogy defaultban az output foldert nyissa meg az applet export target könyvtárnak.
#!/bin/bash
# //fns.pappito.com/2013/02/20/cib-e-bank/
#dir=~/tmp/cibib
dir="`dirname $0`"
output_dir=~/Desktop
[ -f $dir/AppletLocal.html ] || cat > $dir/AppletLocal.html <<eof
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en" style="overflow: hidden">
<head>
<title> CIB Internet Bank </title>
</head>
<body style="overflow: hidden;margin: 0px">
<applet name="mainApplet" code="ebank.applet.MainApplet" width="800" height="600" mayscript archive="cibib.jar">
<param name="CABBASE" value="https://cibib.cab">
<param name="default_fontsize" value="11">
<param name="PACKED" value="TRUE">
<param name="java_arguments" value="-Dsun.java2d.noddraw=true -Dsun.java2d.d3d=false">
<param name="separate_jvm" value="true">
<param name="centerimage" value="true">
<param name="boxborder" value="false">
<param name="image" value="loader_hu.gif">
<param name="MAYSCRIPT" value="true">
<param name="BASEVIEW" value="1">
<param name="LOGLEVEL" value="50">
<param name="PROTOCOL" value="https">
<param name="SERVERURL" value="https://ibank.cib.hu/IBWBGateway/IBGatewayServlet">
<param name="PRINTERURL" value="https://ibank.cib.hu/IBWBGateway/IBPrintingServlet">
<param name="LANGUAGE" value="hu">
<param name="INITWIDTH" value="800">
<param name="INITHEIGHT" value="600">
</applet>
<!-- <param name="DEMOMODE" value="TRUE"> -->
	<script>
window.onerror = myErrorHandler;
function help(pageName)
{
	help_window = window.open(pageName, "help", "toolbar=0,location=0,resizable=0,status=0,menubar=0,scrollbars=0,hotkeys=1,fullscreen=0,width=500,height=380,marginheight=0,marginwidth=0,dependent=1");
	help_window.focus();
}
function printWindow(text)
{
	msgWindow=window.open("","_blank", "toolbar=1,location=0,resizable=1,status=1,menubar=1,scrollbars=1,fullscreen=0");
	msgWindow.document.open("text/html", "replace");
	msgWindow.document.write(text);
	msgWindow.document.close();
}
function saveWindow(text)
{
	msgWindow=window.open("","_blank", "toolbar=1,location=0,resizable=1,status=1,menubar=1,scrollbars=1,fullscreen=0");
	msgWindow.document.open("text/plain", "replace");
	msgWindow.document.write(text);
	msgWindow.document.close();
}
function myErrorHandler(msg, url, linenumber)
{
	alert(msg + ' at line: ' + linenumber);
	return true;
}
	</script>
</body>
</html>
EOF
cat > $dir/cibib.policy <<eof
grant {
	permission java.net.SocketPermission "ibank.cib.hu:443", "connect,resolve";
	permission java.awt.AWTPermission "accessClipboard";
	permission java.io.FilePermission "$output_dir", "read,write";
    permission java.io.FilePermission "$output_dir/-", "read,write";
};
EOF
if [ -f $dir/cibib.jar ]; then
	modified_since="$(/bin/ls -lT $dir/cibib.jar | grep -o '[A-Z][a-z][a-z] [123 ][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9] [0-9][0-9][0-9][0-9]')" && \
	curl -z "$modified_since" -o $dir/cibib.jar.new https://ibank.cib.hu/cibib.jar || exit 1
	if [ -f $dir/cibib.jar.new ]; then
		mv -v $dir/cibib.jar{,.old} || exit 1
		mv -v $dir/cibib.jar{.new,} || exit 1
	fi
else
	echo "Downloading latest CIB applet..."
	curl -o $dir/cibib.jar https://ibank.cib.hu/cibib.jar || exit 1
fi
appletviewer $dir/AppletLocal.html -J-Djava.security.policy=$dir/cibib.policy -J-Duser.dir=$output_dir > /dev/null &
]]>

Mac workflow: Open source URL, v2

A probléma Leszedtél egy file-t valahonnan, a browser beletette a file metaadatai közé, hogy honnan kotortad azt elő a neten és most vissza kellene találnod a forráshoz.

A megoldás

Korábban ezt megcsináltuk Thingiverse-specifikusra, de nem tetszett, hogy a script önkényesen dönt, hogy nekem épp melyik URL kell, ezért faragtam belőle popup menüset, amivel Te választhatsz, hogy melyik metában tárolt URL-t nyissa a Safari. Lustáknak itt a bezippelt workflow, aki meg olvasgatná itt a postban a forrást az ide nézzen:
on run {input, parameters}
	set theFile to (input)
	set aFile to quoted form of POSIX path of theFile
	set theURL to (do shell script "mdls -name kMDItemWhereFroms -raw " & aFile)
	if theURL is "(null)" then -- no attribute
		set theURL to "(URL info not found)"
		set theMessage to ""
	else
		set URLs to {}
		repeat with i from 1 to the count of paragraphs of theURL
			set p to paragraph i of the theURL
			set firstQ to findFirst(p, "\"")
			set lastQ to lastOffset(p, "\"")
			if firstQ > 0 and lastQ > 0 and (lastQ - firstQ > 1) then
				copy characters (firstQ + 1) through (lastQ - 1) of p as string to q
				set end of URLs to q
			end if
		end repeat
		set selectedURL to false
		if (count of URLs) = 1 then
			set selectedURL to (item 1 of URLs)
		else if (count of URLs) > 1 then
			set selectedURL to (choose from list URLs with title "Open URL" with prompt "Select URL to open:" without multiple selections allowed)
		end if
		if (selectedURL is not false) then
			tell application "Safari"
				tell window 1
					set current tab to (make new tab with properties {URL:selectedURL as text})
				end tell
			end tell
		end if
	end if
	return input
end run
on findFirst(str, findString)
	-- HAS (http://applemods.sourceforge.net/mods/Data/String.php)
	local str, findString, len, oldTIDs
	set oldTIDs to AppleScript's text item delimiters
	try
		set str to str as string
		set AppleScript's text item delimiters to findString
		considering case
			set len to str's first text item's length
		end considering
		set AppleScript's text item delimiters to oldTIDs
		if len is str's length then
			return 0
		else
			return len + 1
		end if
	on error eMsg number eNum
		set AppleScript's text item delimiters to oldTIDs
		error "Can't findFirst: " & eMsg number eNum
	end try
end findFirst
on lastOffset(the_text, char)
	try
		set i to 1
		set last_occurrence to 0
		repeat count of the_text times
			if item i of the_text as string = char then
				set last_occurrence to i
			end if
			set i to i + 1
		end repeat
	on error
		return 0
	end try
	return last_occurrence
end lastOffset
]]>

A hordozható adattárolókról

Józsi ajánló posztját, így azt gondoltam, pont passzolna mellé a dolog, úgyhogy vágjunk bele! Ha a Macintoshodon külső storage-ről szeretnél adatot elérni, az alábbi interfészek állnak rendelkezésre:

  • optikai meghajtó – nem jó. Kicsi, elavult, sérülékeny, lassan írható.
  • SD kártya – majdnem oké. Nem a leggyorsabb és a relatíve nagy kapacitás még drága, de kicsi, univerzális és viszonylag jól bírja a gyűrődést.
  • USB2 – lassan már nem oké. A leguniverzálisabb, de ahogy nő a storage igény, úgy érzed egyre lassabbnak. Cserébe viszont lassan a kávéfőzőn is van USB slot.
  • FW800 – nem oké. Sebességben veri az USB2-t, viszont minden ilyen csatlakozóval ellátott eszköz megkapja az AppleTaxot, amit a “buziAlmás” felhasználó fizet meg. Ezért cserébe a penetrációja is sokkal kisebb.
  • Gigabit Ethernet és WiFi – nem oké. Kevés a sebességük.
  • USB3 – oké. A sebesség már az, ami tisztességesnek mondható a mai (=2013-as) mércével, eszköz van bőven, az ár is megfelelő, viszont az Apple csak 2012 táján kezdett neki a 2008-ban tervezett standard implementálásának.
  • Thunderbolt – oké. A sebesség brutális, a szabvány tartalékai szintén, ám itt minden eddiginél irgalmatlanabbul súlyt le az AppleTax: az amúgy is méregdrága Thunderbolt csatolós eszközökhöz a gyártó licencspórolási céllal nem mellékeli a Thunderbolt kábelt, ami a usernek akár 10kHUF nagyságrendű újabb lehúzást is jelenthet (lásd a printerkábelek kispórolása anno, csak ez ma még gusztustalanabb mértékben megy).
A teljesség kedvéért: fentiekhez non-Apple világban csapódna még az eSATA. Megvan a lista, nem is elemezgetném, hanem inkább elmondom az általam talált megoldásokat.

The Nifty MiniDrive

Kickstarter project. A lényege, hogy a ma már minden Mac notebookon jelen levő SD kártya slotba egy olyan micro SD kártya foglalatot gyártsanak, ami teljesen belesimul a gép síkjába: Micro SD kártyák jelenleg 256 GB kapacitásnál tartanak (igaz eddig csak noname-ben láttam ekkorát, a SanDisk 64 gigánál tart). A Kickstarter project 2012 augusztus elején zárult, az utolsó infók szerint 2013 január végén indul a szállítás.

Seagate FreeAgent GoFlex Thunderbolt Adapter

A Seagate a hordozható GoFlex HDD családjához fejlesztette ezt a Thunderbolt adaptert: thunderbolt-portable-adapter Noha erről a gyártó sehol nem tesz említést, az adapter természetesen egy közönséges 2.5″-os SATA HDD csatlakozó. Ennek megfelelően bármilyen vele kompatibilis storage-et rádughatsz, nem kell annak GoFlex dobozban lennie. Egy tetszőleges méretű SSD-t ráapplikálva lényegében lebomlanak a sebességhatárok és brutális teljesítményű mobil adathordozót kaptál a kezedbe. Just think about it.]]>

Mac workflow: Open source URL service

erre. Ahogy töltögettem le Karácsony előtt a sok printelni való STL file-t a Thingiverse-ről, egyre többször jött elő, hogy meg kellene újra néznem valamit az STL file-t tartalmazó oldalon újra. Szerencsére OS X alatt a kMDItemWhereFroms metadata attribútumba bekerül a letöltés URL-je, amit én néha meg-meg néztem már korábban is egy vérbuta shell scripttel, ami nálam eddig így nézett ki:

#!/bin/sh
mdls -name kMDItemWhereFroms -raw "$*"
Ez egy zárójelek közé zárt comma delimited URL listát ad vissza. Nekem ebből az URL listából az utolsó kellene (a Thingiverse Amazon S3 storage-et használ, az első URL a storage-ra mutat, míg a második az eredeti Thingiverse oldalra), mégpedig minél kevesebb szüttyögéssel, azaz monjduk egy Service formájában. Némi rövid googling után dobta a gép a közel konyhakész scriptet a MacScripter oldaláról, már csak hozzá kellett ragasztani az Automator Service script számára szükséges paraméterátvételt és kész is:
property getSpecific : false -- show the specific download URL?
on run {input, parameters}
	set theFile to (input)
	set aFile to quoted form of POSIX path of theFile
	set theURL to (do shell script "mdls -name kMDItemWhereFroms -raw " & aFile)
	if theURL is "(null)" then -- no attribute
		set theURL to "(URL info not found)"
		set theMessage to ""
	else
		if getSpecific then -- get the first item (the download URL)
			set theURL to paragraph 2 of theURL
			set here to offset of "\"" in theURL
			set theURL to text (here + 1) thru -3 of theURL -- the download URL
			tell application "Finder"
				set name of theFile to theURL --I have no idea what im doing
			end tell
		else -- get the last item (the page/site URL)
			set theMessage to "page/site "
			set theURL to paragraph -2 of theURL
			set here to offset of "\"" in theURL
			set theURL to text (here + 1) thru -2 of theURL
		end if
		tell application "Safari"
			tell window 1
				set current tab to (make new tab with properties {URL:theURL})
			end tell
		end tell
	end if
	return input
end run
Ebből nagyjából két klikk az Automator workflow megalkotása, de ha ezzel bajban lennél, akkor
  • konyhakész service zippelt változata leszed innen
  • bemásol a ~/Library/Services/ folderbe, majd ott kicsomagol
]]>

OS X Address Book → Nokia C1-02

Preface: kiábrándító kompúteres kálvária körülírása következik, kizárólag kockáknak! Az élet úgy hozta, hogy mostantól két SIM kártyát kell használnom egyszerre. Mindig rettegtem attól, hogy két telefont hurcolásszak magammal, de hiába, amíg a roaming aranyárban van, addig nincs más választásom. Azt találtam ki, hogy main telefonnak megmarad a mindenkori iPhone, míg a másik SIM kártya megkapja a létező legolcsóbb && legegyszerűbb független telefont, amit csak be tudok szerezni. Az új készülékkel kapcsolatban az alábbi elvárásaim voltak:

  1. ha már muszáj, akkor kicsi és észrevétlen legyen
  2. egy töltéssel menjen minél többet, hogy ne kelljen sokat foglalkoznom vele
  3. legyen valami kommunikációs interfésze, amin rá tudom venni a jelenlegi címlistám szinkronizálására
  4. azonnal kapható legyen
Fentiek alapján több keresés után jött a Symbian S40-nel szerelt, Bluetooth és USB interfésszel is ellátott Nokia C1-02. Körbenéztem, mit lehet találni ma sync ügyben és több megoldásra akadtam:
  • OS X 10.8 alatt a szebb napokat megért iSync már nincs, ezt az utat felejthetem
  • Létezik egy SyncMate nevű alkalmazás, amely azt ígéri, hogy az ingyenes verzióban S40 készülékekkel menni fog a Contact sync Bluetooth-on keresztül. Itt jelezném minden további kommentár nélkül, hogy HAZUDIK.
  • Van a Nokia által Windows-ra írt alkalmazás, a Nokia Ovi Suite, amely még megoldást jelenthet. Ez Bluetooth és USB kapcsolaton keresztül is képes az alkotói szerint szinkronizálni.
  • Feliratkozós bétában létezik egy, szintén a Nokia által fejlesztett Nokia Software Updater nevű OS X alkalmazás is, melyről valahol azt olvastam, hogy szintén sync-kelne nekem address bookot. Az alkalmazás oldala azért van annyira cserépedény, hogy csak a subscribe után közli a támogatott eszközök teljes listáját, melyben a C1-02 momentán nem szerepel.

SyncMate hiszti

A SyncMate egy süt-főz-mosogat alkalmazás – talán csak a mikrosütőddel nem hajlandó szinkronizálni -, amely településekor az alábbi szemetet kívánja feltúrni a gépedre: SyncMate-reqd-services Ezeket ő azért szeretné nagyon, mert meg van győződve arról, hogy te minden egyes alkalommal automatikusan szinkronizálni szeretnéd a Bluetooth eszközöd vele, amint az a SynMate host gép közelébe ér. Nyilván szegénykém nincs felkészítve arra, hogy a rideg lelkű iPhone user egyszer használhatós alkalmazásnak tekinti őt. Summa summarum, nem barátkoztunk össze én és a SyncMate. A Bluetooth kapcsolattal nem volt különösebb gond, sőt látszólag maga a szinkron is pöpecül lemegy, csak miután befejeződött a contact sync, örömmel közli, hogy nulla darab contact adatot pumpált át a Mac-ről a kis szerencsétlen Nokiára. Néhányszor tíz alkalommal próbálkoztam mindenfélével (mondjuk tény, hogy ezúttal a fekete kakas áldozat teliholdkor kimaradt), majd a SyncMate ment a kukába.

Nokia Ovi Suite

Ez a bárány már valamivel segítőkészebbnek bizonyult. Első ránézésre látom rajta, hogy van pöpec VCARD import funkció. Ész nélkül rohanok az Address Bookba, exportálom a címlistát v3.0 VCARD-ba, majd vissza az Ovis programba importálni. Az eredmény siralmas: az Ovi Suite egy rohadt szót nem szól, hogy mi a baja, egyszerűen csak nem importálja a több contactot tartalmazó VCARD file-t. Nosza itt is megkezdődik a vudu, VCARD 2.1, single contact export, UTF-8-ból bárkibe (hátha az a baja neki), de semmi nem segít, az Ovi Suite nem eszi az OS X Address Book által gyártott VCARD-ot. Nota bene: a 2012-ben letölthető Ovi Suite egyesével akarja a VCARD-okat enni, azt el nem tudja képzelni, hogy több contact kerüljön ugyanabba a VCARD file-ba. Megnézem, hátha van contact sync az állatorvosi lóval (=Outlook Express). Voila, van! Most, hogy van új ellenfelünk, mehetünk ezt is kiismerni (Outlook Expresst a saját gépemen talán még soha az életben nem indítottam el). Az Outlook Express egy csomó address book formátumot támogat – az egyik ilyen az LDIF (=LDAP Data Interchange Format). Frankó, már csak OS X Address Book → LDIF konverter kell. Némi keresgélés után rátalálok a PHP-ban írt vCard to LDIF konverterre itt. Leszedem (mert ugye az embergyerek az egész Address Book-ját egy random szembejövő service-nek csak nem adja ki, ha nem muszáj), gyorsan gyártatok vele szép LDIF file-t, azt megetetem az Outlook Express-szel, az Outlook Express címlistáját az Ovi Suite-tal, majd csillogó szemekkel nézem, ahogy 2012 augusztus végén a 193 kilobyte-os állományt az USB2-es dróton az alkalmazás mintegy kettő perc leforgása alatt átrepíti a telefonba. Sync kész, ránézek: egy jó nagy kupac foshalom az egész – az ékezetek Windowsosan széjjelcsúszva, a contactoknak vagy van neve, vagy nincs – ez így nem jó. Első varázsigeként szedek a stackoverflow-ról egy Unaccent függvényt, bánja kánya az ékezeteket, csak menjen az a tetves contact sync (annyira szép megoldás, hogy ideteszem):
function Unaccent($string)
{
    return preg_replace('~&([a-z]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml|caron);~i', '$1', htmlentities($string, ENT_QUOTES, 'UTF-8'));
}
Persze az ékezetmentesítés nem old meg mindent, a contactok így is szanaszéjjel állnak. Sebaj, legalább teleszemeteltük a kis telefont, már lehet is guglizni, hogy hogyan pucoljunk le minden contactot (tekintettel arra, hogy ezt hiába kérem az Ovi Sync-től, nem csinálja meg). A telefon manualjából kiderül, hogy egy full system setting restore lesz nekem a jó. Elindítom, a telefon egy darabig molyol, majd se kép se hang: semmilyen buttonra nem reagál, incl. power on/off. Sebaj, volt már nekem sok Nokiám, ilyenkor jön a kivesz akksi varázslat és lőn: a kis telefon újra bootol, kéri a dátumot, ahogy a pap jön ki a templomból (=mintha mise történt volna). Lassan kezdem feladni, amikor eszembe jut, hogy volt még egy csomó formátum, amit az Outlook Express támogat – nosza akkor kínozzuk meg comma delimiteddel, abból nagy baj nem lehet! Szerencsére az elején talált vCard to LDIF tool képes mezei CSV exportra, sőt, akár codepage-et is cserél nekünk, szuper! Ugyan a codepage csere és a kötelező CSV header bekapcsolása újabb két export-import próbálkozást emészt fel, de legalább végre előáll a korrekt végeredmény: az Outlook Expressben egy olvasható címlista _majdnem minden_ contacttal. Előszedem a gordiuszi stuffokhoz tartogatott keyboard shortcutot és vérsebesen szabadulok meg a fattyú contactoktól. Már csak újabb 2 perc és a kis C1-02-ben meg is jelennek a telefonszámok. CSV gyártáshoz szembe jött még az azóta kihalt Address Book Exporter, valamint a galád pénzes Export Address Book, de hála az égnek időben rátaláltam az aranyat érő PHP csomagra. Ennyi hát a vasárnapi kényszermunkám története. Nem esküdnék rá, hogy rendszert csinálok ebből a szinkronból.]]>

dr. iPod [restored post]

Preface: Bognár Andrist anno én kereszteltem el dr. iPodnak – ez az eredetileg 2008 áprilisában készült post az első találkozásunkról szól. Még tavaly márciusban hoztunk hazafele jövet Szingapúrból egy 80GB-os 5G iPod-ot. A kütyü egy hónapig jól működött, aztán elmúlt belőle a hang – se a dock csatin, se a fejhallgató kimeneten nem szólalt meg. Amúgy minden más része teljesen korrektül ment, csak hát ha én mp3 doboznak akarom az autóban használni, akkor ez ugye édeskevés… Elmentem az iStyle-ba és iJoe-hoz is, hogy mit lehet tenni. Mondták, hogy worldwide garancia van a készülékre, de normális számla kell hozzá. Sajna én Szingapúrban csak egy sajtpapírt kaptam a tranzakcióról, viszont a hitelkártya kivonaton látszani fog a tétel, ami iJoe szerint már elég bizonyíték és menni fog a garanciális csere ezzel is. Elmentem a bankba az igazolásért, majd azzal az iStyle-ba – természetesen nem volt jó. iStyle okosan megvigasztalt: az iPodokat nem javítja az Apple, hanem cseréli – ha nem garanciális a készüléked, akkor az új árának 20%-áért beszámítják és persze a magyarországi Apple jelenlétnek megfelelően 3-4 hónap és hopp, itt is az új készülék… Na itt borult a bili és dühödten eljöttem az üzletből. Telt az idő, az iPod itt állt már jó ideje a szekrényben – egyszercsak PlastikJózsinál olvasok Bognár Andrásról (buundy), aki iPod és Mighty Mouse doki állítólag. Felvettem Andrissal a kapcsolatot. András megnézte és még aznap a következő levelet kaptam:

Megvizsgáltam és utánanéztem, hogy mi okozhatja ezt a jelenséget, hogy nem szól. Azt mondják, hogy ez sok iPod videó betegsége, hogy az alaplapon a “hangkártya” valamiért kontakthibás, és ez okozza a némaságot. Valószínűleg ez a gond, mert amikor megnyomogattam a ClickWheel mellett a fekete előlapot, néha szólt, néha nem, vagy csak recsegett. Megpróbáltam azt, hogy a belsejében egy félbehajtott papírlapot teszek az alaplapra, ami kis nyomást gyakorolna (ez a megoldás általában működni szokott), de nem adott ki hangot így sem. Ez sajna olyan hiba, ami az alaplapon egy chip-ben van, talán rosszul van leforrasztva, hidegben például kicsit jobb az esélye, hogy kiadjon hangot, mert az alkatrész melegben kitágul, hidegben összemegy és ez valamennyire befolyásolja a működését. Betettem pár percre a hűtőbe és annyit sikerült elérni, hogy kiadott pár reccsenést és a szobahőmérséklet miatt újra elnémult. Ha szeretnéd még használni az iPododat (naná! ), akkor új alaplapot kell bele venni. Általában küldöldről szoktam ezeket hozatni, így kell vári általában egy-másfél hetet, mire ideér. A javítás mindenestül 25ezer forintba kerülne. Vagy megpróbálhatod eladni valahol alkatrésznek, hátha abból valamennyit visszanyersz és akkor olcsóbb megvenni egy új iPodot. Nem szeretnélek befolyásolni de szerintem ez az iPod annyira új és karcmentes, hogy inkább javíttatsd meg. De te döntsd el, hogy mi legyen.
Teljesen korrekt, kimerítő válasz. Mivel a javítással is még bőven alatta vagyok a magyar árnak, kértem tőle, hogy szereljük meg – megcsinálta. Tökéletes – a szétszerelésnek nyoma nincs, az iPod teljesen karcmentes és András a végén 25kHUF helyett 23kHUF-ot kért mindezért: Találkoztam vele, hogy átvegyem az iPod-ot. Mondom neki, hogy mindjárt veszek ki akkor 25kHUF, ahogy megegyeztünk előzetesen. Erre Anrdás: elég lesz 23kHUF, mert sikerült kicsit olcsóbban alaplapot szereznem. Azt hittem, rosszul hallok – ilyet, Magyarországon báz?! Szóval bárkinek hibás *.Apple cucca van, elsőnek ő jusson az eszetekbe – terjeszteni fogom a nevét, amerre járok!]]>