jan 07

SMS arhiválás Androidról

Több évvel ezelőtt az akkori telefonom adta lehetőségek kapcsán merült fel bennem, hogy készíteni kéne egy olyan alkalmazást, ami képes a beérkezett és elküldött sms üzeneteket arhíválási célzattal tárolni és kereshetővé tenni.

Ennek megoldására született akkor egy C#-ban implementált WinForms alkalmazás, mely képes volt a Nokia PC Suite által létrehozott szöveges fájlokat egy MS SQL adatbázisba importálni, majd név, telefonszám és dátum alapján listázhatóvá tenni. Ezt követően idő hiányában létrejött egy "nyomtatási kép importáló" funkció, ami az időközben beszerzett Samsung telefonomról volt képes az üzenetek importálására. Könnyen látható, hogy egyik megoldás sem biztos, hogy igazán kényelmes, különösen az utóbbi, mely még korrekt megoldásnak sem nevezhető igazán (ellenben a célnak megfelelt, működött), ráadásul az egyre elterjedtebbé és divatosabbá is váló okostelefonok képességeit sem használja ki.

Ezt követően 2011 decemberében karácsonyi lazításként elkezdtem foglalkozni a frissen beszerzett Android operációs rendszerű telefonomhoz egy hasonló megoldáson. Bár az Android Market-ben találtam hasonló alkalmazást, különböző okokból kifolyólag mégis inkább a saját készítése mellett döntöttem.

A tervezés során fontos szempont volt az okostelefon nyújtotta lehetőségek minél mélyebb kihasználnása és hogy a megszületendő alkalmazás a későbbiek során akár másokszámára is hasznos lehessen, így az elődjénél meglévő túlzott fapadossággal is szakítani kívántam. Ennek eredményeként a tárolt sms üzenetek megjelenítésére egy Google Web Toolkit (GWT) segítségével, Java-ban elkészítendő webalkalamzást választottam.

A megvalósítandó Android klies feladata csupán a telefonon lévő üzenetek kiszolgálóoldalnak történő elküldése, helyi biztonsági másolat készítése (általánosan is használt formátumban, pl UTF-8 CSV), majd az eredeti üzenetek törlése kell legyen, egy minimális funkcionalitást biztosító felhasználói felület mellett.

Az Android alkalmazás elkészült, azonban a webes felület jelen pillanatban még nem rendelkezik a megfelelő szűrési képességekkel.

Az alábbi képen az elkészült Android kliens képe látható.

nov 15

Postfix

Már egy ideje foglalkoztat a gondolat, hogy a home.halacs.hu szerveremen lévő email szolgáltatáshoz érdmes lenne beállítani egy tartalék levelező szervert, ami az elsődleges gép elérhetetlensége esetén is tudná fogadni és átmenetileg tárolni a leveleket.

Figyelembe véve a kiszolgáló minimális e-mail forgalmát (szűk baráti kör), a dolog gyakorlati jelentőssége nem túl nagy (különösen az smtp-k "próbálkozós" működését ismerve), mégis a megvalósítás mellett döntöttem. Talán elsősorban kíváncsiságból.

A backup mail exchanger végül egy Ubuntu Serveren futó Postfix e-mail kiszolgáló alklamazás lett.

A szükséges MX rekordok DNS konfigurációhoz adásáért és a névszerver szolgáltatásért továbbra is köszönet a DynDns.hu-nak!

szep 28

Irregular verbs

Felkerült az angol rendhagyó igék gyakorlására, kikérdezésére szolgáló kis javascipt alkalamzásom, mely itt érhető el.

szep 26

TeamViewer 6 Windows service para

Frissen telepített Windowson futtattam egy régebben még másik oprendszeren szimplán csak kicsomagolt TeamViewer 6-ot, majd később egy rendszer indításnál szólt a tűzfal, hogy "para van, ő itt valamiért netezni akar, engeded?". Na számomra ekkor derült ki, hogy az egyébként szimplán telepítés nélkül is futtatható program a háttérbe feltelepítette a Windows szolgáltatását, ami a következő rendszerindítástól futott is. Ezért szépen szólt a tűzfal. Még hogy van! Már mint tűzfal, aki szól az ilyesmire.

Mivel a TeamViewer-ben nem találtam uninstall lehetőséget, ezért a következő megoldás született konzolból:

c:\TeamViewer> TeamViewer_Service.exe -uninstall

aug 13

VMware óra szinkronizálás tiltás

Szerettem volna letiltani egy VMware-es guest OS-ben az óra szinkronizálását, viszont mivel ezt a VMware Tools-ból Windows alatt hiába tettem, mert minden újraindításnál fene mód újra szinkronizálta az órát, ezért keresgéltem egy kicsit és a következőt találtam:

  1. Nyissuk meg az érintett virtuális gép .vmw fájlját
  2. Adjuk hozzá/modosístuk a következő értékett
    time.synchronize.tools.startup = "FALSE"
  3. Ha a guest OS is szeretne internetről szinkronizálni, akkor azt még érdemes lehet letiltani vagy megszakítani az internet kapcsolatot a virtuális gép konzolján ("kábel kihúzás")
aug 01

Teszt felhasználónevek

Elkezdtünk családilag teszt felhasználóneveket kitalálni a szakdolgozatomhoz:

  • Teszt Elek
  • Gipsz Jakab
  • Mezei Virág
  • Vincs Eszter
  • Disz Nóra
  • Eszet Lenke
júl 27

Windows 7 kiadás váltás

A napokban felmerült az igény, hogy egy már meglévő Windows 7 Home operációs rendszert a már telepített alkalmazások újratelepítése nélkül Windows 7 Professional kiadású operációs rendszerre frissítsünk. Sajnos azonban ezt a múveletet a megvásárolt home és professional Windows 7 telepítőlemezek segítségével nem lehet közvetlenül végrehajtani. A kiadások közötti frissítésnek ez a módja ugyanis nem támogatott.

Fontosnak tartom megjegyezni, hogy az alább leírtakat csak valóban jogtisztán megvásárolt operációs rendszerek esetén tartom elfogadhatónak a nyilvánvaló jogsértések elkerülése érdekében.

A kiadásváltáshoz a következő eszközökre lesz szükség:

  • Windows 7 Professional telepítőlemez (eredeti, jogtiszta, a telepített Home operációs rendszer nyelvével megegyező nyelvű és arhitektúrájú - 32bit / 64bit)
  • Windows 7 Downgrader segédprogram (nem feltétlen szükséges, csak két registry kulcsot módosíthatunk vele kényelmesen)

A telepítés első lépéseknént a Windows 7 Downgrader-t rendszergazdaként futtatva (jobb klikk, futtatás rendszergazdaként) a megjelenő ablakban meg kell nyomni a "Downgrade to Professional" gombot. Ennek hatására a 'KEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion Windows regisztációs kulcs EditionID és ProductName értékei változnak meg a megfelelő konstans értékekre.

Ezt követően a telepítőlemezt a DVD meghajtóba helyezve, majd a számítógép újraindítása nélkül futtatva indítható a telepítő alkalmazás. A telepítés elején megkérdezi, hogy egyéni telepítést vagy frissítést szeretnénk-e, melyre a frissítés a jó válasz. Ezt követően megtörténnek a szükséges kompatibilitási ellenőrzések, mely után végrehajtódik a tényleges frissítés, végül az új Windows regisztrációs kulcs bekérése és a telepített operációs rendszer aktiválása is.

A Service Pack 1 megjelenésével lényegessé vált az is, hogy amennyiben a frissítendő home kiadásra felkerült az SP1, akkor a telepítendő professional kiadást tartalmazó DVD-nek is integráltan  tartalmaznia kell azt, különben a telepítés a kompatibilitás ellenőrzést követően nem folytatható.

A telepítés végeztével elvileg az új kiadásra frissített Windows 7 fogad a régi programok és bállítások megtartása mellett.

júl 14

'Legyen Ön is Milliomos!' desktop játék adatbázis frissítés

Néhány hónappal ezelőtt, amikor egy hirtelen ötlettől vezérelve elkészítettem a 'Legyen Ön is Milliomos!' Facebook játékot, felmerült, hogy később esetleg érdemes lenne egy adatbázis frissítést kiadni a letölthető társához is. Ennek ma el is jött az ideje.

Úgy érzem, hogy sikerült lényegesen finomítani a kérdésgyűjteményen, melyet most részben egy frissítés formájában letölthetővé is teszek.

Sajnos azonban kénytelen voltam egy talán kegyetlennek tűnő döntést is meghozni. A Facebook játék kérdéseinek védelme érdekében az a döntés született, hogy az ott megtalálható kérdéseknek csak egy részét, egész pontosan 1.875 darab kérdést adok így ismét közre. Bár több érv is felsorakoztatható lenne ezen döntés ellen, mégis úgy gondolom, hogy talán ez a jobb döntés.

Az általam elérhető adatok szerint, a régi verzió letöltéseinek száma napi szinten továbbra sem nulla és stagnáló tendenciát mutat, viszont már koránt sem olyan jelentős, hogy vetekedhessen a Facebookon elérhető társával.

A játék Facebookra készült verziója ITT érhető el, míg a régebbi, letölthető társa és a hozzá tartozó most elkészült frissítés pedig ITT.

Készül az adatbázis frissítés...

A frissítés összeállítása közben több nem várt problémát is meg kellett oldani, melyek mind a már nagyon nagyon régi adatbázis szerkesztő alkalmazásnak voltak felróhatóak (lásd fenti kép).

júl 14

Hibás Facebook like és send gombok

A napokban figyeltem fel , hogy valamiért nem működnek megfelelően a Facebook like és send gombjai. Elsőként a szellkalmanter.hu oldalon vettem észre, hogy valami nem stimmel, majd később láttam, hogy nem csak nálam, hanem többek közt az index.hu-n és az origo.hu-n sem működnek megfelelően ezek a gombok.

Ma pedig ezt megerősítendő belefutottam a webtisztán blog egyik bejegyzésébe, ahol szintén ezekről írnak. Itt említik még azt is, hogy a hvg.hu és a blog.hu is észlelte a problémát.

A Facebook support oldalán természetesen jeleztem a problémát. Vajon mikorra oldódik meg?

júl 04

Rendelkezésre állások

Néha elgondolkozok rajta, hogy konkrétan, éves szinten mennyi időt enged meg például a legtöbb webhoszting szolgáltatónál megadott 99.9%-os rendelkezésre állás. Ilyenkor általában előveszem Google barátunkat, vagy a Wolframalpha-t és szépen kiszámoltatom valamelyikkel, mert hát nem egy nagy cucc ugyebár. Aztán ma ezzel ellentétben ha lehet ilyet, akkor a még lustábbik utat választottam és egész egyszerűen rágugliztam a rendelkezésre állás kifejezésre, amire pedig ezt találtam:

Availability % Downtime per year Downtime per month* Downtime per week
90% ("one nine") 36.5 days 72 hours 16.8 hours
95% 18.25 days 36 hours 8.4 hours
97% 10.96 days 21.6 hours 5.04 hours
98% 7.30 days 14.4 hours 3.36 hours
99% ("two nines") 3.65 days 7.20 hours 1.68 hours
99.5% 1.83 days 3.60 hours 50.4 minutes
99.8% 17.52 hours 86.23 minutes 20.16 minutes
99.9% ("three nines") 8.76 hours 43.2 minutes 10.1 minutes
99.95% 4.38 hours 21.56 minutes 5.04 minutes
99.99% ("four nines") 52.56 minutes 4.32 minutes 1.01 minutes
99.999% ("five nines") 5.26 minutes 25.9 seconds 6.05 seconds
99.9999% ("six nines") 31.5 seconds 2.59 seconds 0.605 seconds

* For monthly calculations, a 30-day month is used

Forrás: Wikipedia

Azt hiszem ez elég korrekt, úgyhogy ezt a kérdést megválaszoltnak is tekinthetem :)

jún 18

Keyboard locker alkalmazás

A napokban egyik barátom felvetésére, hogy egy olyan programot keres, amivel lezárhatja a notebook-ja billentyűit, hogy arra papírokat pakolhasson, készítettem egy keyboard_locker alkalmazást.

A programot Visual Studio 2010 fejlesztőrendszerrel, C# nyelven készítettem. Ebből adódóan a program .NET alapú, néhány natív rendszerhívással.

A billentyűzet lokkolásának módját egy már régebben C++ -ban készített programomból "loptam". Ott alapvetően a leütött billentyűk naplózása volt a cél, melyre a Windows low level keyboard hook-ját használtam.

A programom ezzel bekerült a billentyűzet eseményfeldolgozásának folyamatába, melybe ezek után bele is tud avatkozni.

A beavatkozás jelen esetben annyit jelentett, hogy az operációs rendszernek visszatérési értékben jelezte, az esemény sikeres feldolgozását, aminek következtében az már nem hozta létre a további alkalmazás szintű eseményeket, vagyis a billentyűzet lényegében magasabb szintről nézve "blokkolva" lett.

A dolog egyetlen komolyabb szépséghibája, hogy a CTRL+ALT+DEL billentyűkombináció továbbra is lekezelődik, azonban ennek megoldásához valószínűleg kernel driver írására lenne szükség, melyet azonban a jelen probléma szempontjából nem tartok szükségesnek.

Ugyanakkor, csak a poén kedvéért, lehet erre rövidesen mégis sortkerítek, és folytatom ezirányú részletesebb ismerkedésemet Visual Studio C++ környezetben. Azon túl, hogy valamiért időnként komolyabb vonzalmat érzek az alacsony szintű kódok (pl assembly, c++) írása irányába, azontúl még fantáziát is látok az ilyen irányú orientálódásban eszköz meghajtók készítése szempontjából.

jún 12

PHP Magic Quotes

Feltűnt, hogy valamiért a 'Legyen Ön is Milliomos!' játékomban, gyűlnek az olyan kérdések, amelyekben az idézőjel és az aposztróf karakterek rendre eszképelve jelennek meg. Vagyis ' karakter helyett \' karakterek és " karakter helyett pedig \" karakterek lesznek. Eléggé furcsálltam a dolgot, aztán most utánanéztem, miért is lehet ez, majd eszembe jutott, hogy hát már ezer éve találkoztam egyszer ezzel a problémával.

Akkoriban még épp csak kezdtem ismerkedni a PHP-val saját szerveremen, amikor rábukkantam a PHP-nak erre a funkciójára: http://hu.php.net/manual/en/security.magicquotes.php Szépen átírtam a php.ini-ben a magic_quotes_gpc direktívát off-ra, majd téma lezárva. Egész mostanáig.

Ezúttal már utána is olvastam, hogy mire is találták ezt ki. Alapvetően azt a célt szolgálja, hogy a kezdő PHP programozóknak segítsen elkerülni az SQL Injection alapú támadásokat, azonban a PHP 5.3-tól kezdve már elavult megoldásnak számít és használata nem javasolt. Helyette a futás idejű, explicit eszképelés ajánlott. Ez a megoldás egyébként több tudatosságot igényel, viszont mivel nem alakít át minden bejövő adatot ész nélkül, ezért teljesítmény növekedést is eredményezhet.

A mostani problémám így ezek után pedig röviden abból fakad, hogy a jelenlegi tárhely szolgáltatónknál vélhetően egyszer csak valamilyen oknál fogva bekapcsolták ezt a funkciót.

1. megoldás: levelet írni nekik, hogy hát izé.
2. megoldás: kódom megfelelő helyére beilleszteni egy pár plusz sort, ami lekérdezi a funkció állapotát és bekapcsoltság esetén konvertál. Ehhez egyébként találtam is egy pont megfelelőnek tűnő kódot a http://php.net oldalon: http://hu.php.net/manual/en/security.magicquotes.disabling.php

if (get_magic_quotes_gpc())
{
    $process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
    while (list($key, $val) = each($process))
    {
        foreach ($val as $k => $v)
        {
            unset($process[$key][$k]);
            if (is_array($v))
            {
                $process[$key][stripslashes($k)] = $v;
                $process[] = &$process[$key][stripslashes($k)];
            }
            else
            {
                $process[$key][stripslashes($k)] = stripslashes($v);
            }
        }
    }
    unset($process);
}

Több okból kifolyólag is a második megoldás tűnt célravezetőbbnek, így azt választottam.

jún 11

Duplikált kérdések

Kíváncsiság képpen készítettem egy SQL lekérdezést, mellyel a 'Legyen Ön is Milliomos!' Facebook játékban lévő duplikált kérdéseket céloztam meg.

A kérdés és a jó válasz mezők string komparálásán alapuló lekérdezés sajnos viszonylag sok duplikált kérdés párt eredményezett.

A duplikált kérdésekkel kapcsolatos problémát nyilvánvalóan szerettem volna valamilyen módon rendezni, így végül a következő döntés született (a műveletek sorrendje fontos!):

Töröljük az egyes kérdés párok azon tagját,

  1. amelynek a megjegyzés mezője nincs kitöltve, de csak akkor, ha a másik kérdésnél ez a mező nem üres (a megjegyzés mező kitöltöttsége mindenképpen manuális ellenőrzést jelent, mely a kérést tartalmi szempontból is vizsgálta).
  2. amelyiket határozottan kevesebbszer tett fel a játék (a nehézségi szint beállítását célzó statisztikai ok).
  3. amelyik előbb szerepel az adatbázisban. (eddigre már csak kevés kérdés volt érintett, melyek esetében egyéb lényegi szempont nem merült fel)

Az adatbázis konszolidáció eredményeképpen összesen 128 kérdés került törlésre, ami az egész adatbázisnak csupán mintegy 2%-át jelenti.

jún 10

Elkészült a kérdések kézi beállítása

Nemrég sikerült befejezni a "nagymama project" névre hallgató teljes adatbázis ellenőrzést a 'Legyen Ön is Milliomos!' Facebook játékban.

Az ellenőrzés elsődleges célja az volt, hogy az általános iskola végén és a középiskola elején született adatbázisban az egyes kérdésekhez tartozó nehézségi szintek megközelítőleg helyes értékekre kerüljenek, illetve a feltűnően rossz kérdések is javítva, törölve legyenek.

Ezen törekvéseim a mai nappal teljesültek a már említett "nagymama project" keretében, melynek túlnyomó részét nagymamám végezte szabadidejében, egy az öcsém által kifejezetten erre a célra készített adminisztrációs felület segítségével.

A jelenlegi hét nehézségi szintet rövidesen a kérdések számával megegyező, 15 szintre tervezem bővíteni, amennyiben ezt a kérdések statisztikai eloszlása is lehetővé teszi.

Az ellenőrzés során összesen 5 695 kérdést ellenőriztünk.