Blogbejegyzések

Ujjgyakorlat: Üres sor ellenőrzése kizárólag shell belső parancsokkal

Én napi feladataimhoz még ma is gyakran közönséges shell scriptet használok. Ilyenkor rendszeresen szükséges ellenőrizni, hogy valamilyen szöveges adatban van-e üres sor. Erre egy egyszerű grep pont megfelelő. Rákeresünk az adatban az üres sort jelentő regexp-re ( ^$ ), és a státusz kód jelzi.

Természetesen ezzel is van baj: létezik még a világban olyan rendszer, amelyiknél a grep nem ismeri a -q opciót, így ha hordozható kódot kell írni, akkor a triviális megoldást bonyolítani kell, és nem a grep-pel, hanem a shell-lel kell eldobatni az esetlegesen megjelenő fölösleges kimenetet. Azaz nem így:


if echo "$VAR" | grep -q '^$' ; then
# van üres sor

hanem így:


if echo "$VAR" | grep '^$' > /dev/null ; then
# van üres sor

A napokban viszont az egyik megoldandó probléma kapcsán elégedetlen voltam a kapott teljesítménnyel, így felmerült bennem, hogy ha a tízezres nagyságrendű fölösleges processz létrehozása helyett (merthogy egy ekkora számban lefutó ciklusban történt mindez) a shell belső parancsaival csinálnám az üres sor ellenőrzését, nyilván gyorsabb lenne a dolog. Viszonylag hamar beugrott, hogy melyek azok a shell konstrukciók, amelyek alkalmasak lehetnek, de valahogy nem nagyon sikerült a működő megvalósítást megtalálni. (Mindezt nehezítette az, hogy mint általában ilyen agymenésekkor mindig, a feladatot úgy szerettem volna megoldani, hogy ne használjak ki valami olyasmit, amit kizárólag a bash ismer - nálam az alap, hogy lehetőség szerint a kereskedelmi UNIX-okban kicsit sűrűbben előforduló Korn-shellben is működő módszert találjak.) Tegnap éjszaka aztán kigyököltem a megoldásokat. A könnyű tesztelés és olvashatóság érdekében shell-függvényt csináltam. Annak neve lehet valami értelmes, kódja lehet a francban a valódi futáshoz képest (tehát nem zavarja az olvashatóságot) - sőt az autoloading function nevű játékkal totál el is lehet rejteni :-) ; szóval az úgy jó.

A fény az alagút végén...

Szóval, a derék Samba a 'make install' hatására szétszórja rengeteg shared libjét a fájlrendszerben, gondosan ügyelve arra, hogy mindenhová jusson (na jó, mondjuk a /dev-be most nem tett, talán majd a következő verzióban).

Mivel közben írja, hogy mit csinál, kapunk egy esélyt, hogy megállapítsuk azt a '-rpath' értéket, amit a fordításkor kellett volna a libtool-nak megadni. (Illetve az export-fájlba belegyógyítni)

Kieg: mondjuk az érdekelne, hogy ha nem keletkezik libdnsserver-common.so, de a python-dsdb_dns.so használja (használná, pontosabban), azzal kell-e valamit ténykedni...

Magyar lorem ipsum generátor

Lórum ipse

Nos, valójában nem lorem ipsum, inkább egy magyar halandzsagenerátor, de vakszövegnek is lehet használni. Hogyan működik? Fog egy véletlenül választott mintaszöveget, amely a Szószablya Webkorpuszból származik. és lecseréli benne a tartalmas szavakat (főneveket, mellékneveket, igéket) halandzsa alakokra. A halandzsa szavak úgy jönnek létre, hogy egy n-gram alapú fonológiai modell generálja a szótőt, és egy szabályalapú morfológiai modell előállítja az eredeti szó nyelvtani kategóriájának megfelelő alakot.

[megoldódott] Vodafone-os kalandok

Adott egy informatikus végfelhasználó (továbbiakban ügyfél), aki 8GB-os mobilnet csomagját, annak eddigi 2 éves hűségének lejártakor, az díjcsomag aktuális változatával a neten újraköti. Az újrakötés mellé választ egy Huawei K5150-es 4G modemet, merthogy milyen jó és sebes lesz a (Vodás) 4G.

A szerződéshosszabbítási csomag szerdai kiszállítása és átvétele után hazamegy, modemet kibont, majd konstatálja, hogy csak 3G (HSDPA) jön ki belőle.
Megnézi a Vodafone (marketing) letedettségi térképén, és konstatálja, hogy jelenlegi tartózkodási helyén (vidéki megyeszékhely), a térkép szerint van 4G-s indoor térerő.
Ha kiválasztja a modem beállításai között a 4G-only üzemmódot, akkor a modem fel sem tud csatlakozni a hálózatra. Azt mondja, nincs térerő.

stat

Átírtam a webes terhelés megjelenítő cuccomat úgy, hogy gnuplot helyett html5-ös vektort használjon és ne legyen httpd függőség:

https://github.com/log69/stat

sudo apt-get install dstat ruby
wget "https://raw.githubusercontent.com/log69/stat/master/stat.rb"
ruby stat.rb &
firefox 127.0.0.1:8888

(Megjegyzés: várni kell pár percet míg dstat begyűjt adatokat, mert a cél, hogy visszamenőleg hosszú távra lássuk a gép terhelést és ne az aktuálisat - arra vannak egyéb eszközök).

Onenote 2010: keresés idióta korlátozásokkal

Ismét egy elszabott Onenote2010 funkció: a keresés!

https://blogs.msdn.microsoft.com/onenotetips/2010/11/16/searching-for-n…

"Due to a limitation of Windows Desktop Search, OneNote cannot support substring searches or wildcard searches."

Nem tud többszavas EXACT match-t kezelni: pl. "szó1 szó2" (így, macskakörmözve) kiad minden kiszabott találatot, amiben szó1 VAGY szó2 bennevan, nemcsak olyat amiben szó1 ÉS szó2 van benne. Az AND / OR (csupanagybetűvel kell írni) kulcsszavak használatára nem bírtam rájönni, azaz nem működik így sem.

Másik nyomorúságos eset: csak szóeleji egyezést képes kezelni a barma, szó1* típusút nem. sztring1sztring2 -ben megtalálja sztring1-et, de sztring2-t már nem.

registry a sambában?

Ezt én csodálatosan jó dolognak tartom, támogatom és helyeslem; egyetlen apróságot szeretnék csak ezzel kapcsolatban megemlíteni: azt, hogy én nem kérek belőle. Namostan természetesen nem indult el az új Samba a gépemen, ez nyilvánvalóan így is van rendjén, de a /var/log/warning.log-beli üzenetek kicsit nyugtalanítóak:


Apr 20 18:30:45 host daemon:err|error smbd[6881382]: [2016/04/20 18:30:45.657482,  0] ../lib/util/util.c:220(directory_create_or_exist) 
Apr 20 18:30:45 host daemon:err|error smbd[6881382]:   mkdir failed on directory : No such file or directory 
Apr 20 18:30:45 host daemon:err|error smbd[6881382]: [2016/04/20 18:30:45.657914,  0] ../source3/registry/reg_init_basic.c:36(registry_init_common) 
Apr 20 18:30:45 host daemon:err|error smbd[6881382]:   Failed to initialize the registry: WERR_NOMEM 
Apr 20 18:30:45 host daemon:err|error smbd[6881382]: [2016/04/20 18:30:45.658101,  0] ../lib/util/become_daemon.c:111(exit_daemon) 
Apr 20 18:30:45 host daemon:err|error smbd[6881382]:   STATUS=daemon failed to start: Samba cannot init registry, error code 13 

NFS performance issue (getattr)

Volt 11 kpacket/sec getattr a hálózaton, mondjuk 100%. Diskio nem történt, de mégis jelentős volt a lassulás.

Szóval, a kliens minden opennél elküld egy getattr requestet a szervernek.
Noatime esetében is. Minden más cache kivállóan működik, szinte semmiféle más forgalom nincs (ez egy nfsroot). Képzeld el, hogy /bin/true, és ez 4 geattr. (még a /etc/ld.so.cache -re is)

Szóval, ha cto, akkor kimegy egy getattr, ha nocto akkor nem feltétlen. Ez annyira nem volt kihangsúlyozva a doksiban, beleértve a google-t is.

íme, a jelenlegi kliens boot paraméter:
nfsroot=192.168.1.253:/h/srv/nfs/cn38,nocto,hard,timeo=70,acregmin=3600,acregmax=7200,acdirmin=3600,acdirmax=7200,nolock

Roseapple Pi unboxing

A hányattatott sorsú LemonPi indiegogo kampány (https://www.indiegogo.com/projects/lemonpi-35-single-board-computer-and…) eredményeképpen kaptam egy Roseapple Pi-t.

Itt vannak a képek, nem túl élesek:
https://plus.google.com/photos/114479166657045546000/albums/62755559514…

A lényeg amúgy is itt van: http://roseapplepi.org/

2 GB RAM-mal, USB3-mal még akár használható is lesz valamire.

AMD-hez plusz 1GB kell ha... Tomb Raider 2013

Szóval, nemsoká (talán pár nap, hét) tényleg megjelenik natívan a 2013-as Tomb Raider Linux alá. Én nagyon örülök neki, mert végre valóban egy nagyon jó és okkal népszerű címről van szó, ami három év után is az egyik legszebb.

Az ajánlott gépigénynél valami feltűnt. AMD kártyável egy GB-tal több kell a minimális futtatáshoz. Tényleg ennyivel gyengébb lenne az a gyártó? A driver biztosan, de az nem ok a memóriatöbbletre.

PHP --> NodeJS - a legelso lepes mielott atternel

Mindenkinek elfelejtik elmondani az elso lepest, aki PHP-bol vagy egyeb proceduralisan mukodo nyelvbol a NodeJS vilagaba terne at. Egyvalamiben ugyanis maskepp kell gondolkodni.

Pelda: proceduralis pszeudokod (PHP-ban, de meg C/C++-ban es Java-ban is ezt szoktad meg):


Utasitas1();
Utasitas2();
Utasitas3();
Utasitas4();
Utasitas5();
Utasitas6();
Utasitas7();
Utasitas8();
Utasitas9();
Utasitas10();

Nos, tegyuk fel hogy Utasitas 1 utan futhat le csak a 2-es utana a 3-as. A 3 utan lefuthat a 4, es az 5, de a 4 nem elokovetelmenye az 5-nek (pl. az egyik csak egy tracking, hogy a 3-as sikerult). A 6 -> 7 -> 8 -> 9 igazabol mar a futasido kezdeten lefuthatna ebben a sorrendben, nem fugg az 1-es utasitastol sem. A 10-eshez le kell futnia a 4-esnek es a 9-esnek.

Hardcore Henry

Megnéztem. Kétszer.

És még mindig nem értem miért üresek a mozik.
Egyszerűen minden benne van,
ami egy jó filmhez kell (akció, szép nő, csajok, esetleg sztori).

Haverokkal sör mellett végig lehet röhögni, igazi hentelős élmény.

Az elején az a James Bondos lassított animáció (felirat alatt) egy igazi fricska.

Azt hiszem ez egy művészfilm volt művészlelkeknek.
Saját filmműfajt teremtett. Ha másért nem, ezért mindenképp meg kell nézni.