Category Archives: Tech

Depreszzív, húsvéti Exceles poszt

több, mint 80 országban futnak szerte a világban. Ezidáig nem találkoztam olyan problémával, aminél széttártam volna a kezem. A VBA interpreter telis-tele van hibákkal, de eleddig mindenre sikerült valamilyen workaroundot találni (nota bene: ha saccolnom kellene, nem kevés időt tenne ki a különböző fejlesztésekből az, hogy az interpreterben maradt bugokra gyógyírt találjak). Ma azonban találtam valamit, ami előtt jelenleg szét kell, hogy tárjam a kezem és azt kell, hogy mondjam a kedves ügyfélnek: sajnálom, ezt nem tudjuk implementálni. Utálok ilyet tenni, különös tekintettel arra, hogy a jelenlegi problémának egyszerűen nem szabadna léteznie. A feladat az volt, hogy egy cirka 1 millió cella méretű tábla kb. 10%-ban relatíve bonyolult képleteket kell generálni, majd miután az Excel elvégezte a számítási műveleteket, a cellákban szereplő képleteket le kell cserélni a kiszámolt értékekre. A tábla egy kb. 7 MB méretű dokumentumban lakik, a tábla teljes struktúráját és az abban levő összes képletet függvények generálják, a felhasznált adat jó részét szintén függvények importálják külső adatforrásokból, a végfelhasználó pusztán statikus számokat gépel bele a táblázat celláiba. A dolog egyszerűnek hangzik, mint egy faék – az is lenne, ha a mocsadék interpreterben nem bujkálna valahol egy ordas memleak. A képlet értékre cserélését VBA-ból többféleképpen is meg lehet oldani: az egyik művelet a clipboardot használja, kb. így:

srcRange.Copy
srcRange.Cells(1,1).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Ebben az esetben a srcRange változó által mutatott Range tartalma megy a Clipboardba, majd a következő sorral a kiszámolt értékek visszakerülnek a képletek helyére. Az Application.CutCopyMode = False hivatott arra, hogy a Clipboardot felszabadítsa. A másik megoldás nem használ Clipboardot az adatcseréhez:
srcRange.value = srcRange.value
Mindezt elvégezzük egy ~2000 soros táblában, a sorokon egy ciklussal lépkedve, egy sorban ~500 cella tartalmát változtatva egyszerre. A gond ott jön, hogy ahogy halad a ciklus, a művelet látványosan lassul (annak ellenére, hogy a táblában levő képletek fokozatosan tűnnek el, tehát épp az ellenkezőjének kellene történnie), majd egy idő után az interpreter egyszerűen nem hajlandó az aktuális value paste műveletet végrehajtani és a kód futatása megáll, amit egy generic, semmire nem jó hibaüzenettel dokumentál a rohadék (1004 – Application defined or object defined error). Ha ezen a ponton fejlesztő kollégaként úgy éreznéd, hogy kommentálnod kéne a dolgot, mert mondjuk nagy eséllyel nem szabadítok fel valami változót a ciklus belsejében és az nyeli a memóriát, akkor kérlek ne tedd: minden lehetséges megoldást kipróbáltam már, fejlesztői oldalról a memleak esélye jelen esetben teljesen kizárt. Az teljesen nyilvánvaló, hogy a képletek értékre cserélése felzabál egy erősen limitáltan rendelkezésre álló RAM-ot (HEAP, STACK?), ami 2014-ben egy 2010-es szoftvert használva azért elég vicces (a kódot futtató gépben jelenleg 32 GB RAM van, mi meg egymillió darab lebegőpontos számmal dolgozunk). Cirka 7 óra knowledge base bújás és egyéb keresés után sem tudok olyan megoldást, ami a paste value művelet elvégzése után felszabadítaná a művelet által elemésztett RAM-ot, ezért ordas memleakre gyanakszom. Ez a poszt így ahogy van, elmegy a Microsoft Tech Supportnak, de sajna túl sok reményt nem fűzök ahhoz, hogy bármi érdemi választ kapjak (=sok rossz tapasztalatom volt korábban). Ettől függetlenül a lepényhal megy elöl, a remény hal meg utoljára, szóval ha érdemi válasz jön, azzal nyilván kiegészítem a posztot, hadd legyen még egy 100%-ig elégedett ügyfelem.]]>

Solarized for OS X CLI

erre. terminal-solarized terminal-solarized A linkelt zipben van egy Solarized shell config, egy .vimrc és egy .vim folder – ez utóbbi kettő megy a home folderedbe, az elsőt meg nyitja a Terminal. Vim-ben az F2 billentyű átkapcsol a solarized dark/light témák között, továbbá a .vim/plugin folderben lakik egy diacritics.vim, ami a vim-be töltött file ékezetlenítésére szolgál – ez utóbbihoz HOWTO erre. Persze nem én találtam fel a spanyolviaszt, a fentiekhez csak túrni kellett a netet. A patchelt terminal configot Schorin Ionescu készítette, a Solarized téma pedig Ethan Schoonover érdeme.]]>

Wireless video broadcast: Airtame – FUNDED!

írtam a magyar srácok által gründolt kis eszközről, ami majd elhozza a “minden OS-ről szinte mindenhova videót streamelek” Nirvánát. Ma lezárult az Indiegogo kampány és a fiúk az általuk kitűzött 160.000 USD céllal szemben az egy nagyságrenddel nagyobb, elképesztő 1.268.148 USD összeget gyűjtötték be, ezzel utat nyitva egy, a lehetőségeikhez képest valóban limitek nélküli eszköz létrehozásához: airtame-goals Már a kezdetektől fogva nagyon tetszett az ötlet és amellett, hogy folyamatosan drukkoltam nekik, boldog-boldogtalannak meséltem lelkendezve az általuk megálmodott kis kütyüről. Kaptam is érte hideget-meleget: kezdve onnan, hogy már megint előjött belőlem a geek hardware junkie, odáig, hogy de hát van már AirPlay|Chromecast|Miracast és minek még egy ilyen, ez egy kis magyar csapat és ezért nem rúgnak majd labdába, nem lesz normális supportja a terméknek, et cetera. Nagyon hittem/hiszek a kis kütyüben és remélem jó sok hozzám hasonló geeket sikerült rádumálni arra, hogy beálljon a támogatók sorába. A konkurrenciával érvelőknek idebiggyesztem a posztba a srácok által készített összehasonlító táblát: airtame-vs-competitors A többi érv meg egyszerűen nem érdekel, inkább csak örülök a lelkes fejlesztők sikerének. airtame-success-celebration ]]>

Elektronikát csak a Farnelltől rendelEK

Farnell magyar oldalán. Még most sem hiszem el, hogy a tegnap 15:41-kor feladott rendelésemet az angliai Leedsből a UPS futár _ma_ 15:00-kor a fiam kezébe adta Baján – mindezt 1400 HUF szállítási költségért. Proof: farnell-order_Speedy-Gonzales-delivery Srácok, nem tudom, hogy csináltátok ezt, de nyertetek egy lelkes gadget vásárlót magatoknak. Le a kalappal!]]>

Építsünk bárhol használható AirPlay servert magunknak, mert az jó

suti-nem-suti …illetve dehogyis, hát nem olvastad a címet, kis butus? 🙂 A süti majd jön valamikor a közeljövőben, most inkább hackeljünk! Az ötlet elég régóta motoszkál a fejemben: olyan konykakész megoldást akarok, amiből kilóg egy audio out és egy tápcsatlakozó és az eszköz AirPlay serverként funkcionál, azaz küldhetek drótok nélkül az ő audio portjára zenét. Az ilyen dobozkát be lehet építeni az autóba, vagy akár egy aktív hangfal dobozába és kész a wireless audio stream bárhol. Nézzük, mire jutottam. Kétféle megoldást fogok megmutatni – mindkettő járt már a fejemben elég régóta. Az érdekes az, hogy mindkét ötletet implementálták már korábban, vannak is róluk többé-kevésbé használható leírások, én mégis összeszedem ide a saját tapasztalataimat, mert szerintem több szempontból is megéri.

No time Tolouse” hack: Airport Express vérének kiontása teliholdkor

Az első ötletet a lifehacker dokumentálta precízen. Ennek a lényege, hogy egy gyári Apple Airport Expresst kinyitunk, a nagyfeszültségű tápot kiszedjük és a helyére egy 5V-3.3V átalakítóval egy USB aljzatot kötünk, amit megtáplálunk egy mezei szivargyújtós USB tápkábellel. Az Airport Expresst az asztalon felkonfiguráljuk, aztán mehet a kocsiba, vagy akár a nappaliba bárhova (ez utóbbi esetben nyilván nincs sok értelme annak, hogy szétbarmoljuk a pöpec kis Apple hardvert).
Hozzávalók és költségek
  • Airport Express: ~32000 HUF
  • USB drót: ~500 HUF
  • 5V-3.3V átalakító: ~1000 HUF
  • szivargyújtós USB töltő: ~1500 HUF
Nagyjából tehát 35000 pénzből hozzuk ki a dolgot.
Időszükséglet
  • Airport Express konfigurál: ~10 perc
  • Airport Express szétszed, táp kibányász, stepdown konverter beforraszt, USB drót beforraszt: ~45 perc
Közel egy órát pepecselünk tehát evvel a verzióval.

“Szeretünk rollerezni” hack: Raspberry Pi-vel minimalizáljuk a költségeket

A Raspberry Pi alapú játék igazi do it yourself feladat lesz. Nincs konyhakész disztró erre (vagy legalábbis én nem találtam), nekünk kell shellben nindzsáznunk. Azért ez sem rocket science, nyugi.
Hozzávalók és költségek
  • RPi “A” variáns (egy USB port, no ethernet), 8GB-os SD kárytával: ~9600 HUF
  • Micro USB táp (számoljuk csak a kocsiba valót): ~1000 HUF
  • USB billentyűzet és HUB – legyen az, hogy van otthon vagy kölcsönbe: 0 HUF
  • RPi dobozka: ~1000 HUF
Szűk 12000 HUF pénzből összeszedtük tehát a vasat – az nem is rossz, közel a harmada a “kényelmes” confignak!
Időszükséglet
Több forrást is találtam, akik a stock Raspbian OS-ből indulva építenek ilyen configot maguknak. Az egyik egy Instructables leírás volt, míg a másik Stanislav Khromov kicsit up-to-date-ebb tutorialja. Kisebb-nagyobb gubancok mindkettővel akadtak, ezért gondoltam, írok egy harmadikat, hogy lássuk, mivel telik az idő, miután kiperkáltuk a 12000 HUF-ot a vasért. 0. Preface Feltételezem, hogy a default “pi” userrel lépsz be és annak home folderében csinálsz mindent, amit írok. 1. OS Ha a RPink mellé rendeltünk gyári SD kártyát, akkor azon nagy eséllyel NOOBS lesz installálva, ami az első bootkor rákérdez, hogy melyik disztrót kérjük és helyettünk süt-főz-mosogat kicsit, majd reboot után előáll a disztónk. Ha magunk csináljuk, akkor vettünk egy 8+ gigás SD kártyát és felpakoltuk rá a Raspbiant. Ezt nem részletezném, tökéletes leírás van minden platformra a Raspberry Pi wikijében. A Raspbian egyébként egy Debian Linux disztró fork. 2. OS config Mindenekelőtt csomag adatbázist frissítünk, beállítjuk a locale-t, billentyűzetet, hostname-et:
sudo apt-get update && apt-get upgrade
sudo raspi-config
3. WiFi install Én egy 2000 HUF-os Logilink donglét használtam. A Raspbian gyárilag tartalmazza a hozzávaló firmware-ralink modult, így ezzel semmi dolgunk, csak magát a network interface-t kell bekonfigurálnunk. Módosítsuk meg a /etc/network/interfaces file-t:
sudo vim /etc/network/interfaces
Ez legyen az új file-ban:
auto lo
iface lo inet loopback
iface eth0 inet dhcp
auto wlan0
  iface wlan0 inet dhcp
  wpa-ssid "a_wifi_routered_ssidje"
  wpa-psk "a_wifi_routered_passwordje"
Ha ezt elmentettük, bootoljuk újra a RPi-t és nézzük meg, hogy látszik-e a wlan0 network interface:
ifconfig -a
4. Dependency install Az shairport névre hallgató AirPlay servercsomagunk forrásának fordításához kell majd pár csomag, így felpakoljuk azokat:
sudo apt-get install vim build-essential libssl-dev libcrypt-openssl-rsa-perl libao-dev libio-socket-inet6-perl libwww-perl avahi-utils pkg-config git chkconfig libssl-dev libavahi-client-dev libasound2-dev pcregrep pgrep
5. Csúnyán pattanó hang kikapcsolása a hangkártya indulásakor Ehhez a kis masinánk komplett firmware-ét cseréljük az aktuálisra:
git clone git://github.com/Hexxeh/rpi-update.git
sudo rpi-update/rpi-update
Ez elmolyol egy darabig, majd közli, ha minden OK és akkor rebootolhatunk egy sudo reboot parancs kiadásával (fehér ember nem veszi el a tápot proper shutdown nélkül ugye…) 6. ALSA config módosítás Azért, hogy a shairport indulásakor ne Unknown PCM cards.pcm.front hibát kapjunk, bele kell picit túrnunk a hangkártyát meghajtó software configfile-jába:
sudo vim /usr/share/alsa/alsa.conf
Itt keressük meg a pcm.front cards.pcm.front részt és cseréljük ki pcm.front cards.pcm.default értékre. 7. avahi daemon hack Ez a discovery service – nem a TV csatorna, egy másik. Ha érdekel a mélye, itt a link felül. A lényeg, hogy a default configgal az avahi daemon szeret nekünk avahi-daemon disabled because there is a .local domain hibával visszatérni, ami azért nem nagyon jó. Hogy ezt ne tehesse, a DISABLE_TAG paraméterét egy invalid filenévre változtatjuk:
sudo vim /etc/init.d/avahi-daemon
Keresd meg a DISABLE_TAG szöveget és azt a sort cseréld ki erre:
DISABLE_TAG="/var/run/avahi-daemon/disabled-for-unicast-local-DISABLED"
Ha a config módosítás kész, újraindítjuk a daemont és biztos ami biztos bekapcsoljuk, hogy bootkor induljon a service:
sudo service avahi-daemon restart
sudo chkconfig avahi-daemon on
8. Audio teszt Mielőtt shairportot forgatunk, ellenőrizzük, hogy megy-e a hangkártya. Mindenekelőtt állítsuk be az amixer binárissal default kimenetnek az analóg out-ot, nehogy azért ne szóljon a cucc, mert a HDMIbe tolja a hangjegyeket a mini jack helyett:
amixer cset numid=3 1
Ha ez megvan, akkor letöltünk egy .wav file-t, aztán az aplay binárissal lejátszatjuk próbának:
wget http://snippets.khromov.se/wp-content/uploads/2013/04/piano2.wav
aplay piano2.wav
A próba audio file-t nekik köszönhetjük. Ha nem megy, akkor indítsunk egy alsamixer binárist és tekerjük fel a volumét úgy 85%-ig, hátha csak azért nem szól az egész, mert nullán volt a hang. 9. Shairport install Ehhez klónozzuk a git repóból a forrást, aztán konfiguráljuk, fordítunk, majd installérázunk:
git clone -b 1.0-dev git://github.com/abrasive/shairport.git
cd shairport
sudo ./configure
sudo make
sudo make install
Próbáljuk ki, hogy megy-e! Indítsuk el a shellben, aztán nézzük meg egy AirPlay kliensen, hogy megjelent-e a Vizesnyolcas nevű AirPlay audio target:
./shairport -a 'Vizesnyolcas'
Mielőtt továbbszaladnánk, installáljunk kultúráltan, azaz pakoljuk be a default configfile-t és a logrotate démon vezérlőt is a helyére:
sudo cp shairport/scripts/debian/default/shairport /etc/default/
sudo cp shairport/scripts/debian/logrotate.d/shairport /etc/logrotate.d/
10. Shairport autorun install Be kell konfigurálnunk, hogy a shairport serverünk bootkor magától induljon. Ehhez kell a rendberakott startup script innen:
git clone https://gist.github.com/khromov/6398615
sudo cp 6398615/gistfile1.txt /etc/init.d/shairport
Aztán kapcsold ki, majd be a script bootkori indítását:
sudo chkconfig shairport off
sudo chkconfig shairport on
11. Watchdog Ha a shairport serverünk a korábban már beállított avahi multicast DNS service felállása előtt indul el, akkor az nem lesz jó. Azért, hogy ezt biztosan kiküszöböljük, egy ronda, de annál hasznosabb watchdog scriptet írunk, ami semmi mást nem csinál, mint leellenőrzi a process listában, hogy fut-e már a shairport daemonunk és ha nem, akkor elindítja:
sudo vim /root/shairport-watchdog.sh
A watchdog scriptünk így néz ki:
pgrep shairport
if [ $? -ne 0 ]
then
 service shairport start
 echo "shairport started or restarted."
fi
Ezt a scriptet aztán percenként egyszer elindíttatjuk a cronnal. Kinyitjuk editálni a /etc/crontab file-t:
sudo /etc/crontab
…és az alábbi sort biggyesztjük a végére:
* * * * * root /bin/sh /root/shairport-watchdog.sh > /dev/null
12. Jog fix Végül Stanislav tanácsára még megfixáljuk a /home/pi folderünk összes termeiben a jogokat:
sudo chown -R pi:pi /home/pi/
Ha minden jól ment, a következő sudo reboot után kisvártatva meg kell, hogy jelenjen a shairport AirPlay serverünk az AirPlay audio targetek között az AirPlay klienseken. A serverünknek a RPi hostnevét örökli – ha cifrábbat szeretnénk, akkor a /etc/default/shairport file-ban az AP_NAME=SzabadsagElvtasrak sor definiálásával módosíthatunk rajta. Megvagyunk. Summa summarum, nekem ez keresgéléssel, tokkal-vonóval nagyjából 2 órámba telt – ha nekivágsz, neked valószínűleg kevesebb ideig tart, mivel most up-to-date a fent leírt doksi és így menni fog azonnal. Azt mindenki döntse el maga, hogy végig akarja-e tolni a Linuxos vonalat, vagy inkább karosszékből konfigurálná csak az Airport Expresst, mert úgy érzi, öreg már az efféle hackelősdihez. Az én pálcám a “jó pap holtig” irányba tört most. ]]>

Wireless video broadcast: Airtame

ern0 találta a kütyüt, ami mindhárom desktop platformra ígér drótok nélküli video+audio broadcastot. Remélem ez lagmentes lesz – I’m in. Magyar srácok Indiegogo kampánya, vidd a hírt te is: ]]>

Fotós vállszíjak: ki lop kitől?

poszt. Anno nekem a Luma Labs kommandós mountos szíja, a Loop volt a favorit – a mai napig azt a mountot használom, igaz ma már egy másik szíjon van, mert a Loop szíját és többi fémalkatrészét megette az idő. Mikor kiderült a szabadalmi fiaskó a BlackRapid és a Luma labs között, akkor Luma labs-ék abbahagyták a Loop gyártását és helyette nekiálltak egy Cinch nevű új szíjnak. Ebben a szíjban annyi volt az extra, hogy kapott egy érdekes alakú fémdarabot, ami lehetővé tette, hogy a szíj hosszát egy ujjal azonnal változtathasd: cinch Aztán pár napja szembejön egy Kickstarter project, amiben pontosan ilyen megoldást használnak: Emlékeztem a korábbi Luma Labs sztorira, gondoltam megnézem az oldalukat, hogy ők mit szólhatnak az új AirStraphez, és láss csodát: a Cinch-ről eltűnt a forradalmi fémrész: cinch-trio Most akkor ki lop kitől? Update: Csabi a commentekben sajnálkozott, hogy lemaradt a Loop vállszíjról, ezért némi Orosz doki zaklatás és szűk 3 óra keresés után kitúrtam neki, hogy a Loop szíj lényegét adó gyorscsatlakozót amerikaiul push button detachable swivel névvel illetik és párosával árulják, párját 20 USD pénzért.]]>