Archive for the ‘geek’ Category

Online Youtube to mp3 converter

Sunday, August 29th, 2010

A youtube-on található zenék hangminősége elég kérdéses, de ha valaki csak azért halgat meg egy zenét, hogy megtanulja (tehát a hangminőség nem releváns), arra bőven elég. Sajnos a youtube sok dolgot viszont nem tud, ezért szükségünk lehet a hanganyagra valami “fogyasztható” videó nélküli formátumban. Erre az általam ismert legjobb megoldás:

http://www.dirpy.com/

Online, gyors, és mindent tud, amire csak szüksége lehet az embernek egy ilyen konvertálás során.

Levélküldés tesztelése

Wednesday, August 25th, 2010

Manapság már nem nagy dolog olyan alkalmazást fejleszteni ami emailt tud küldeni. Ellenben fejlesztés alatt egyáltalán nem biztos, hogy szerencsés, ha a valódi felhasználók a fejlesztők viccesebbnél viccesebb tárgyú leveleit kapják kézhez (pl. szerződését díjrendezettség hiányában töröltük, stb). Ezt elkerülendő lehet mindenféle if-eket írni a kódba, de ez sajnos megváltoztatja a program működését, és ezzel a metódussal elég sok potenciális hibaforrást elrejthetünk a kódban. Célszerűbb csinálni egy saját smtp szervert, ami e leveleket fogadja, de nem küldi ki, hanem lementi egy könyvtárba.

Erre a legegyszerűbb megoldás linux alatt a fakemail nevű program, ami a phytonnal együtt jön.

Tehát a telepítés

sudo apt-get install python

Az indítás (pl. init.d-ből)

sudo su -c ‘fakemail.py –host=voji.hu –port=10025 –path=/var/samba/servers/smtp –background’ voji

A lényeg a ‘ ‘ jelek közötti rész, a su -c csak azért felel, hogy voji userként fusson a szerver.

A paraméterek:

  • host – a cím, ahol a szerver fut
  • port – port ahol hallgatózik majd az smtp szerverünk
  • path – könyvtár ahova a leveleket lementi amit a szerveren keresztül küldenek.
  • background – háttérben fusson, ne a konzolon

Symbian developer certificate

Saturday, July 3rd, 2010

Dúl a háború az okostelefonok piacán, és elég letisztult a kép. Harcol az Apple az Android ellen, elviekben ezzel mindenki jól jár, megismétlődik az összecsapás a nem nyílt és a nyílt forráskódú operációsrendszerek között. Szerintem mostmár változott akkorát a világ (és fejlődött a szoftverfejlesztés), hogy a nyílt forráskódú rivális nyerjen. De majd elvállik.

Mindenesetre a futottak még kategóriában harcol a nokia a symbiannal, ami inkább csak vicc. Sajnálnám őket, de nem tudom, volt idejük, sőt, több idejük és pénzük volt mint bárkinek, hogy fejlesszenek egy normális operációs rendszert, meg normális telefonokat… Ha valaki szoftvert szeretne rá telepíteni, akkor szembesül azzal a problémával, hogy a telefonra csak aláírt szoftvert lehet telepíteni. Aláírni csak pénzért lehet. Ezért minden komolyabb szoftverért fizetni kell, legalább a certificate árát. Ki jár ezzel jól? A Nokia. Nem elég hogy eladják a telefont minimum 10x áron, de bárki belefekteti idejét/pénzét hogy fejleszzen valamit, még azután is lehúzzák a sápot. Developer certificatet is csak úgy lehetne szerezni, ha ŐK engedélyezik, és adnak.Szóval nem baj, ha kihal az egész symbian vonal, és a nokia-ért se fogok könnyeket hullatni, ha ilyen pofátlanok megérdemlik. Legalább most, hogy közel a vég, észheztérhetnének.

Addig is amíg ez nem történik meg (a kipusztulás, vagy észheztérés) az alábbi kínai oldalról imei szám megadása után saját fejlesztői certificate-t generálni:

http://cer.opda.cn/en/

Mindenkinek saját dns szervert

Friday, June 11th, 2010

Amennyiben az otthoni számítógépünk nem rendelkezik fix ip-címmel, sokat segíthet a DynDNS szolgáltatás. Ennek segítségével beregisztrálhatunk magunknak egy tetszőleges domain nevet (ingyen) és a szolgáltatáshoz adott kis kliens program segítségével (linux alatt ddclient apt-get-tel telepíthető) az otthoni gépünk mindig frissítheti a saját dns-éhez tartozó ip címét (tehát akkor is elérhetjük a gépünket, ha a gonosz szolgáltató más ip-t adott neki).

Tegyük fel, adott Lajos, aki szeretné a számítógépét elérni otthonról. Beregisztrálja magának a lajos.homeip.net címet. Ezek után az otthoni számítógépét mindig eléri ezen a címen, aminek nagyon örül. Ellenben ha Lajos belső hálózatot is használ, akkor két dolgot tapasztalhat:

1. Olyan szerencsés, hogy a routere támogatja a nat loopback funkciót, és ha beírja otthon, hogy lajos.homeip.net akkor minden működik

2. Nem szerencsés

A nem szerencsés esetet két féle képpen orvosolhatjuk. Ha beírjuk a hostfile-ba, hogy lajos.homeip.net az a szerver lokális ip címe (pl 192.168.2.1). Ez jó, de ha Lajos hazamegy, midnig át kell írnia a host-fájlt, ha meg elmegy otthonról midnig vissza kell írni. Lássuk be ez nem a legelegánsabb megoldás.

Másik alternatíva, hogy Lajos saját dns szervert csinál. Ez azért is hasznos, mert megismeri a DNS szerverek működését, és felépítését (persze csak nagyon felületesen) és mert lát ilyet is…

Linux alatt dns szerverre a bind nevű csomagot szokták használni, amit az alábbi módon telepíthetünk:

sudo apt-get install bind9

Ezekután már van jól működő DNS szerverünk, ami a 67-68 udp portokon üzemel már csak konfigurálni kell. A dns szerver konfigurációját az alábbi helyen találjuk: /etc/bind

Ide kell két fájlt létrehoznunk, ami alapján a dns szerver megoldja majd a név-ip és ip-név fordítást.
db.1.168.192
;
$TTL 604800
@ IN SOA localhost. lajos.homeip.net. (
28 ; Serial
604800 ; Refresh
86400 ; Retry
241920 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS localhost.
2 IN PTR lajos.homeip.net.

db.homeip.net
;
$TTL 604800
@ IN SOA homeip.net. lajos.homeip.net. (
28 ; Serial
604800 ; Refresh
86400 ; Retry
241920 ; Expire
604800 ) ; Negative Cache TTL
;

@ IN NS dns1.hu.
@ IN NS dns2.hu.

@ IN A 204.13.248.119
www IN A 204.13.248.119
lajos IN A 192.168.1.2

Az db.1.168.192 nevű fájl megmondja, hogy a 192.168.1 tartományban a 2 ip cím (192.168.1.2) az nem más mint a lajos.homeip.net.

A második db.homeip.net nevű fájl pedig megmondja, hogy a homeip.net domainban a sima hivatkozás nemmás mint a homeip.net szerver neve (ezt ping homeip.net-el meg lehet tudni), és a lajos.homeip.net pedig nemmás mint a 192.168.1.2 ami a szerverünk címe…

Ezek után már csak használni kell ezeket a fájlokat, a named.conf.local fájlba fel kell venni az alábbi két sort:

include “/etc/bind/zones.rfc1918″;

zone “1.168.192.in-addr.arpa” {
type master;
file “/etc/bind/db.1.168.192″;
};

zone “homeip.net” {
type master;
file “/etc/bind/db.homeip.net”;
};

Ezek után kell egy bind újraindítás (/etc/init.d/bind9 restart), ha elrontottunk valamit arról a var/log/syslog-ban fogunk kapni infót.

Az eredményről magunk is meggyőződhetünk:

dig @localhost lajos.homeip.net

Értelemszerűen a dhcp szervernek meg kell adni, hogy a DNS szerver címe a lokális szerver (192.168.1.2) legyen.

Vnc ubuntu alatt

Sunday, June 6th, 2010

Sokszor kell, mindig elfelejtem, most már leírom ide is:

Telepítés:
sudo apt-get install vnc4server

ezekután elindítjuk a vnc4servert (létrehoz mindenféle konfigokat, bekéri a jelszót, stb)
vnc4server

ezekután lelőjjük:
vnc4server -kill :1

kicsit átírjuk a konfigurációt ami az alábbi helyen található:
nano ~/.vnc/xstartup

A fájl tartalma ez legyen:
#!/bin/sh
unset SESSION_MANAGER
exec /etc/X11/xinit/xinitrc
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources

Biztos ami biztos adjunk jogot az xinitrc-re:
sudo chmod 755 /etc/X11/xinit/xinitrc

Csatlakozhatunk a host:5901 porton… (ahány példányt indítunk annyiszot emelkedik a portszám 1-el)

Az UltraVNC ha kis porotot adunk meg alapból hozzáad 5900-at, tehát ott elég megadni így: host:1

Spring

Thursday, June 3rd, 2010

Manapság divatos szó a Spring. Ha már csak megjelenik a szövegkörnyezetben, rögtön betölti a levegőt a misztikum, és mindenki érzi, hogy itt valami nagyon komoly, és jó dologról van szó.
Valószínű azért, mert már önmagában a szó jelentése is tavasz, rugalmasság, tehát csupa jó dolog egy olyan világban, ahol a legtöbb dolgot már csak 3 betűs rövidítésekkel illetik (igen kreatív módon, mint pl esb, ejb, ear, stb. :)

Programozóknak a spring szó már önmagában olyan, mint az átlagembernek egy üveg Chteau Latour Pauillac. Nem tudja mi az, de jól hangzik, biztos jó lesz valamire.

A fentiek miatt, manapság már szinte nem is találkozni olyan dokumentummal amiben ne szerepelne ez a misztikus szó, ami önmagában örvendetes, és ugyanakkor elszomorító is.
Elszomorító, mert az esetek nagyrészében nagyon kevés ember tudja elmondani, hogy miért és legfőképp mire is használja a springet.

Hogy ezt tisztába tegyük, röviden mire is jó a Spring:
- Az alkalmazások Spring alkalmazás környezetben futnak, ami független lehet az alkalmazásszerver gyártójától, és egyéb megkötésektől. Ezáltal könnyen mozhatható az alkalmazás különböző alkalmazásszerver vendor-ok között, vagy használható az alkalamzás akár alkalmazás szerver nélkül is.

- Megvalósítja azt jól, ami az ejb-nek nem sikerült valami fényesen: alkalmazásobjektumok kezelését, és azok automatikus egymásba ágyazását, működésének meghatározását az alkalmazástól „független” konfiguráció alapján

- Segítségével könnyedén lehet integrálni sok más divatos szóval jelölt technológiát (hibernate. quartz, stb.)

Hirtelen ennyi gondolatébresztőnek, nemsokára várható pár érdekesség a témában :)

Websphere telepítése Ubuntu alá

Tuesday, May 11th, 2010

Régi topic, de időnként mindig beleütközök…

sudo unlink /bin/sh
sudo ln -s /bin/bash /bin/sh

Csak ez után települ/működik (mert szakemberek írták)

Excel LÁTVÁNYT.MUTAT

Saturday, May 1st, 2010

Lehet, hogy a korral jár, de már mindent használok, ami a munkámat könnyíti. Mostanában az Excel ez a nagy felfedezés, amiben számokon alapuló dolgokat elég jól lehet modellezni… Ez a remek kis termék ötletes funkcióival többször is meglepett, és persze az Office szoftvercsomag többi tagjához hasonlóan még többször idegesített fel (pl. valaki megmondhatná, hogy 2010-ben azonos nevű de más helyen lévő xls-t miért nem lehet megnyitni, meg miért nem tud az excel 2 vagy tetszőleges számú ablakban futni, vagy a feltételes formázás miért nem működik több munkalapon is, stb…). De ez a Microsofttól már megszokott, csinálnak valami jót (lásd Visio) és aztán a végén megfejelik olyan apró kis idegesítő bakikkal, amit ilyen szarul csak az MS berkein bellül lehet megoldani (pl. a visio layerek kezelése ékes példa erre…). Mondjuk lehet ez a védjegyük, de amíg nincs jobb, kénytelenek vagyunk ezzel élni.

Visszatérve az Excelre a legidegesítőbb dolog amit csak kitalálhattak, az a képletek lefordítása volt. Ha végre nagynehezen az ember megtalálja azt amit keresett, akkor szembesül csak azzal, hogy az órákig tartó keresgélés eredménye mitsem ér, hiszen a magyar excelbe minden magyar…

Talán maguk a magyar Excel készítői is szembesültek ezzel, ezért is került bele egy táblázat, ami minden képletet eredeti nyelven is tartalmaz :)

c:\Program Files\Microsoft Office\Office12\1038\FUNCS.XLS

Ha esetleg valaki nem 12 office-t használ akkor neki az a könyvtár más…

Gwt memory leak

Thursday, January 28th, 2010

Ezer éve nem volt módom (és időm) írni, de most sikerült, megtaláltam, és megengedek magamnak ekkora pihenőt. Jó ideje egy GWT alapú alkalmazás készülget, és eddig szinte minden „simán” ment a fejlesztés során, volt néhány kisebb trükk, pár gwt-s osztályt át kellett írni, de összességében szerintem a GWT keretrendszer jól teljesített, sőt felül is múlta az elvárásaimat.
Egészen tegnapig, amikor is azt jelezték, hogy az alkalmazás sok memóriát fogyaszt. Ilyenkor az ember hajlamos azt mondani, hogy persze, hiszen nagy alkalmazás, de a C++-hoz szokott énem rögtön kétségbe esett, ez bizony memory leak. Gyors mérések után a tünetek egyértelműek voltak. Az alkalmazás leak-el, menüpontonként pár megát. Az látszott, hogy nem a javascript memóriahasználata nő (google chrome kiírja), hanem a böngésző memória használata. Ekkor kezdtem gyanakodni, hogy ezt pedig mi rontottuk el, és a végén igazolódott is ez az állítás. A hibát csak a tanúsága miatt megosztom mindenkivel.

Az eredeti kód:


private void setLoadingVisible(boolean pVisible) {
if (pVisible) {
waitingPopup=new APopupWaiting(msgs.main_waitingmessage(), Window.getClientWidth(),Window.getClientHeight());
waitingPopup.center();
}
if (!pVisible && waitingPopup.isVisible()) {
waitingPopup.hide();
}

Ez a szolgáltatás arra szolgál, hogy ha tölteni kell, akkor kirak egy töltés dialógust. Első látásra minden rendben van, létrehoz egy újat, megjeleníti, vagy elrejti a megadott paraméter alapján. Az implementáció hibás, az már érdekesebb kérdés miért. Normál esetben maximum egy nem optimális implementáció lenne, hiszen miért hozunk mindig létre valamit, ami már egyszer létre lett hozva, ráadásul sohasem változik. Sokkal nagyobb probléma, hogy ez javascriptben fut, és a GWT a változót (és a hozzá javascript által generált HTML dom-ot) csak akkor szabadítja fel, ha már nincs rá referencia. Ellenben a PopupDialogra igen is lesz referencia, és nem a DOM-on keresztül, hanem azon eseménykezelők miatt, amikre működéséből fakadóan feliratkozott. Tehát az objektum lóg a levegőben, és fogyasztja a memóriát.

Egy lehetséges megoldás:


private void setLoadingVisible(boolean pVisible) {
if (pVisible) {
if (waitingPopup==null) {
waitingPopup=new APopupWaiting(msgs.main_waitingmessage(),
Window.getClientWidth(),Window.getClientHeight());
waitingPopup.center();
} else {
waitingPopup.center();
}
}
if (!pVisible && waitingPopup!=null) {
waitingPopup.hide();
}
}

Végezetül egy kis olvasmány (de az ellen nem véd ;) :
http://code.google.com/p/google-web-toolkit/wiki/DomEventsAndMemoryLeaks

XFCE Ubuntu alatt

Sunday, September 20th, 2009

XFCE telepítése:
sudo aptitude update && sudo aptitude install xubuntu-desktop

Az alapértelmezett session managert az alábbi utasítással állíthatjuk be:
sudo update-alternatives --config x-window-manager