Diplomaterv. Utazási jegyek vásárlása, ellenőrzése, 1D és 2D vonalkód algoritmusok implementálása. Konzulensek neve: Tihanyi Attila, Dr.

Méret: px
Mutatás kezdődik a ... oldaltól:

Download "Diplomaterv. Utazási jegyek vásárlása, ellenőrzése, 1D és 2D vonalkód algoritmusok implementálása. Konzulensek neve: Tihanyi Attila, Dr."

Átírás

1 Diplomaterv Dolgozat címe: Utazási jegyek vásárlása, ellenőrzése, 1D és 2D vonalkód algoritmusok implementálása Konzulensek neve: Tihanyi Attila, Dr. Takács György Hallgató neve: Szilvássy Balázs Pázmány Péter Katolikus Egyetem Információs Technológiai Kar Műszaki Informatika Szak november 10. 1

2 PÁZMÁNY PÉTER KATOLIKUS EGYETEM INFORMÁCIÓS TECHNOLÓGIAI KAR DIPLOMATERV-TÉMA BEJELENTÉS Név: Szilvássy Balázs Tagozat: nappali Szak: Műszaki Informatika Témavezető neve: Dr. Takács György, Tihanyi Attila A dolgozat címe: Utazási jegyek vásárlása, ellenőrzése, 1D és 2D vonalkód algoritmusok implementálása A dolgozat témája: Mérje fel és elemezze a napjainkban leggyakrabban használt vonalkód technikákat. Válassza ki és implementálja egy mobiljegyes alkalmazás céljának megfelelő vonalkódtípust. Értékelje a kamera alkalmasságát a felhasznált vonalkód szemszögéből, és osztályozza az esetleges hibaforrási lehetőségeket (orientáció, perspektivikus torzítás, zaj stb.). Az elkészített programot értékelje az irodalomban szokásos módon. Az értékelés eredményeit vesse össze az irodalmi adatokkal a fontosabb paraméterek (felismerési arány, robosztusság stb.) szempontjából. Dolgozzon ki egy jegyvásárlásra, ellenőrzésre alkalmas vonalkód technikára alapuló bemutató rendszert. A bemutató rendszeren igazolja a kidolgozott vonalkód algoritmusok működőképességét, állapítsa meg, és dokumentálja azok felhasználhatóságának korlátait. Mutassa be a kidolgozott minta megoldás üzleti alkalmazhatóságát, és annak korlátait. 2

3 A témavezetést vállalom:... (a témavezető aláírása) Kérem a diplomamunka témájának jóváhagyását. Budapest, (a hallgató aláírása) A diplomamunka-témát az Információs Technológiai Kar jóváhagyta. Budapest, Nyékyné dr. Gaizler Judit Dékán A diplomatervet átvettem: Budapest, (a témavezető aláírása) 3

4 Pázmány Péter Katolikus Egyetem Információs Technológiai Kar Tanulmányi Osztály 1083 Budapest, Práter u. 50/A Tel/Fax: Nyilatkozat a hallgatói konzultáció rendszeres látogatásáról Szilvássy Balázs hallgató (neptunkódja CPXSHK) témavezetője bejelentem, hogy a diplomaterv címe: Utazási jegyek vásárlása, ellenőrzése, 1D és 2D vonalkód algoritmusok implementálása a diplomavédés időszakára (a Diplomaterv beadási határidő: december 15.) várhatóan elkészül nem készül el Budapest, 200 A konzulens neve: Konzulens aláírása 4

5 Nyilatkozat az önálló munkáról Alulírott Szilvássy Balázs, a Pázmány Péter Katolikus Egyetem Információs Technológiai Karának hallgatója kijelentem, hogy ezt a diplomatervet meg nem engedett segítség nélkül, saját magam készítettem, és a diplomamunkában csak a megadott forrásokat használtam fel. Minden olyan részt, melyet szó szerint, vagy azonos értelemben, de átfogalmazva más forrásból átvettem, egyértelműen a forrás megadásával megjelöltem. Ezt a Diplomamunkát más szakon még nem nyújtottam be. 5

6 Tartalomjegyzék Diplomaterv...1 DIPLOMATERV-TÉMA BEJELENTÉS...2 Nyilatkozat a hallgatói konzultáció rendszeres látogatásáról...4 Nyilatkozat az önálló munkáról...5 Tartalomjegyzék...6 Ábrajegyzék...8 Összefoglaló Magyar nyelvű összefoglaló Summary in English Deutschsprachige Zusammenfassung Bevezetés A feladat értelmezése A tervezés célja A feladat indokoltsága A diplomaterv felépítésének rövid vázlata Vonalkódtechnika Előzmények Vonalkód és más automatikus azonosítási eljárások A vonalkódok fejlődése a kezdetektől napjainkig Felhasznált eszközök Vonalkód összefoglaló Vonalkódtechnikai kifejezések definiálása Az általános vonalkód felépítése Kereskedelmi és ipari kódok Egydimenziós numerikus és alfanumerikus vonalkódok UPC és EAN of 5 vonalkódok Szélesség-modulált vonalkódok Codabar vonalkódok Code 39 alfanumerikus ipari vonalkód Code 128 alfanumerikus ipari kód Stacked barcodes

7 2.4. Kutatásom összefoglaló eredményei Az egydimenziós kódolás elégtelensége Kétdimenziós vonalkódok Datamatrix A Datamatrix vonalkód, mint elektronikus jegy A Datamatrixszal kapcsolatos nehézségek Nyílt forráskódok Datamatrix szemben a QR kóddal A datamatrix kód írása A datamatrix kód olvasása A datamatrixszal kapcsolatos kihívások Vonalkód olvasó, mint mobiltelefonos alkalmazás Képfeldolgozási eljárások, saját program létrejötte A Google ZXing nevű projektben való szerepem A feladat konkretizálása és előkészítése A keretrendszer és a tesztképek két fontos szereplője Datamatrix kód megtalálása egy képen Elektronikus jegy-rendszer bevezetése egy kitalált cégnél A rendszer céljának leírása a megrendelő cég szemszögéből A rendszer funkcionális követelményei A rendszer nem-funkcionális követelményei Szakterületi követelmények vázlata Egy használati eset forgatókönyvének felvázolása Az elektronikus utazási jegy bevezetésének célja Létrehozandó termékek, szolgáltatások és elvégzendő feladatok A rendszer architekturális modellje A rendszer tesztelési tervei Elektronikus jegykezelő rendszer egy gyakorlati megvalósítása Összefoglalás Köszönetnyilvánítás Irodalomjegyzék Mellékletek

8 Ábrajegyzék 1. ábra: Egydimenziós vonalkód ábra: Kétdimenziós vonalkód ábra: A vonalkódok fejlődése ábra: Morse-kódtáblázat ábra: Vonalkód összehasonlító táblázat ábra: Általános vonalkód felépítése ábra: Diszkrét kódolás ábra: Folytonos kódolás ábra: CODE 39 típusú, minta vonalkód ábra: Vonalkódok sokszínűsége ábra: UPC-A vonalkód ábra: UPC-A vonalkód rendszerazonosítói ábra: UPC-E vonalkód ábra: EAN-13 vonalkód ábra: EAN-8 vonalkód ábra: UPC kiegészítő kódolás ábra: Standard 2 of 5 vonalkód ábra: Interleaved 2 of 5 vonalkód ábra: Szélesség modulált vonalkód ábra: Codebar vonalkód ábra: Code 39 vonalkód ábra: Ál-kétdimenziós vonalkód ábra: Saját egydimenziós vonalkód író és olvasó programom ábra: Saját egydimenziós vonalkód író/olvasó programom szkennelés közben ábra: Saját egydimenziós vonalkód író és olvasó programom szótárfájlja ábra: Kétdimenziós vonalkódok [11] ábra: A kétdimenziós datamatrix vonalkód tulajdonságai ábra: A kétdimenziós datamatrix vonalkód magas szintű kódolása ábra: A datamatrix vonalkód diagonális menti bejárása ábra: Információkódolás folyamatábrája ábra: Információkódolási folyamatábra Datamatrix esetén ábra: QR kód hibajavítási szint táblázat ábra: QR kód és Datamatrix helyigényét összehasonlító táblázat ábra: QR kód és Datamatrix méretbeli különbsége ábra: Datamatrix vonalkódot író és elmentő alkalmazás ábra: Google ZXing Java SE változata újrafordítva működés közben ábra: KaywaReader, mobiltelefonos alkalmazás ábra: Teszt-keretrendszerem kezelőfelülete ábra: Teszt-keretrendszerem képmegjelenítője ábra: Teszt-keretrendszerem clusterező algoritmusának végeredménye ábra: Teszt-keretrendszerem befoglaló négyzet számítás utáni eredménye ábra: Teszt-keretrendszerem eredményképei binearizálás után ábra: Teszt-keretrendszerem eredményképei első iterációs rossz binearizálás 66 után 44. ábra: Teszt-keretrendszerem eredményképei első iterációs jó binearizálás után ábra: Teszt-keretrendszerem eredményképe szándékosan rosszul 67 paraméterezett vonalkódkeresésre 8

9 46. ábra: Teszt-keretrendszerem eredményképe clusterezés után ábra: Teszt-keretrendszerem véglegesnek tekinthető eredményei ábra: Teszt-keretrendszerem egy alternatívája módosított él-kereséssel ábra: Tesztképek a keretrendszeremhez ábra: Nem-funkcionális követelmények és mérésük ábra: Egy lehetséges használati eset UML diagram ábra: Ellenőrzés folyamatának adatfolyam modellje ábra: Adatfolyam modell az ellenőr napi kódlekérdezésének folyamatáról ábra: Szerver oldali adatfolyam modell ábra: Szerverre befutó igény adatfolyam modellje ábra: Az elektronikus mobiljegyek rendszerének rétegezett architektúra 79 modellje 57. ábra: Az ellenőr oldali alrendszerek UML diagramja ábra: A szerver oldali alrendszerek UML diagramja ábra: Tesztelési lépések folyamatábrája a rendszer fejlesztésekor ábra: Az Androidos mobilalkalmazásomhoz használt teszt datamatrix ábra: Datamatrix kapacitástáblázata a különböző formátumokra [28] ábra: Külön futási szálon végrehajtott SMS jegy értelmezés ábra: A tárolt SMS jegyek megjelenítése ábra: A tárolt SMS jegyek megjelenítése kétdimenziós Datamatrix 90 vonalkódként 65. ábra: Elektronikus jegy vásárlásának és ellenőrzésének folyamata 96 9

10 Összefoglaló Magyar nyelvű összefoglaló Magyarországon a nyugati országokkal ellentétben rossz tendencia, hogy a tömegközlekedéssel utazók többsége még mindig bliccel. 1-2 éve figyelhető meg az a kezdeményezés, mely hivatott ezen az állapoton változtatni. Szigorították az ellenőrzéseket a főbb vonalak mentén, továbbá az esti járatokon is egyértelművé teszik, hogy nem a szórakozóhelyek búcsúajándéka az ingyenes hazaút. Ezek a szigorítások bár mérsékelték a közlekedési vállalatok veszteségességét, a cégek továbbra sem termelnek profitot, ezért komoly állami támogatásra szorulnak, ami pedig az adófizető polgárok pénzéből történik. Korunk technológiai vívmányait kihasználva ez a ráfordított összeg sokkal hatékonyabban is felhasználhatóvá válna más szektorokban. Egy szintén új keletű fogalom az úgynevezett zöld gondolkodás, mely arra próbálja ösztönözni a cégeket, hogy a mindennapi rutinműveleteket sokkal környezettudatosabban végezzék el. A korszerű technológiai invesztíciókkal a kezdeti, magasabb költségek ellenére is, hosszútávon kifizetődőbbé válik a zöld gondolkodás. Jelen szakdolgozat témája egy olyan rendszer kifejlesztése, mely követi a mai trendeket, ügyelve a környezettudatosságra, a kornak megfelelő technológiai háttérrel felvértezve igyekszik a papír alapú vásárlást 21. századibbá tenni, és utat nyitni az elektronikus kereskedelem világába. A rendszer főbb aspektusai a már szinte mindenki által elérhető elektronikus készülékekben rejlő lehetőségek kiaknázása, a papír alapú vásárlás leváltása, egy új, lehetséges alternatíva felvázolása úgy, hogy a végeredmény hatékonyabb, biztonságosabb és nyomon követhetőbb legyen. Diplomamunkámban sorra veszem a napjainkban leggyakrabban használt egy- és kétdimenziós vonalkódolási technikákat, példákkal illusztrálva ezek előnyeit és korlátait. Bemutatom egy választott egydimenziós vonalkód implementálásának kétféle - általam használt - megközelítését, majd levonva a következtetést, miszerint célunk eléréséhez ezek nem elégségesek, haladok tovább a kétdimenziós kódolások irányába. Bemutatom az általam preferált kétdimenziós Datamatrix vonalkódot, pozitív tulajdonságait, és az írásához, olvasásához használt alkalmazásokat és eszközöket. A továbbiakban beszélek az általam 10

11 épített rendszer egyik fő komponenséről, a mobiltelefonról. Egy általam programozott keretrendszerben vizsgálom tesztképeken a Datamatrix vonalkód felismerhetőségét általános célú mobiltelefon minőségű kamerák használatával. Irodalmi kutatást végezve összehasonlítom az általam írt kép detekciós algoritmusokat a piacon kapható szoftverek képességeivel egy-két példát külön ki is emelve. Végső soron vázolom majd egy elektronikus jegyek vásárlását kiszolgáló rendszer üzleti lehetőségeit és az általam implementált bemutató jellegű változatát. 11

12 Summary in English Unlike the other Western countries the tendency is pretty bad in Hungary when using the public transportation since the majority is still playing hooky. Finally a couple of years ago the system introduced an improvement of this situation. On the main lines they toughened up checking of the tickets and now it is made sure that everyone is aware of the fact that the usage of a night bus is not included in the clubs entrance fee. There is no such a thing as a free ride home. These aggravations restrained some losses of the transportation corporate but it is still not making any profit which is still based on the massive support from the state which comes from taxes. Using the technologies we have today the amount of money could be spent more efficiently and on more useful purposes. There is another new idea. The so called Thinking Green, which encourages companies in the idea that the daily routine duties should be done with more focus on the environment. Also that with the recent technology based investments even if at the beginning it might be more expensive in long-terms Thinking Green will be paid-off. This thesis is about a system following today s trend. Paying attention to the environment, making the paper based shopping more XXI. Century-like, opening up to the world of electronic commercialism. The system s main aspects are the utilization of the electronic devices which are available to almost everyone and the potential alternative of relaying the paper based shopping to a more efficient, safer, and more traceable issue. In my thesis I look at today s most used one- and two-dimensional barcode techniques showing their pros and cons. I demonstrate two approaches of the implementation of an elected one-dimensional barcode, taking conclusions, which says that to reach our goal these barcodes are not sufficient and I move towards the two-dimensional barcodes. I exhibit a two-dimensional barcode I prefer, the so called Datamatrix, its positive features, and applications that are needed to read and write it. Henceforward I talk about a main component of a system I have built, about the cell phones, and about a framework I have programmed. Furthermore how it tests Datamatrix barcode s recognizability by a common call phone s camera. Using literary research I compare the image detection algorithms - which I have invented - with the softwares available on the market, highlighting a couple of examples. Finally I outline the business opportunities of a shopping system, using electronic tickets, and an exhibitory version, which I implemented. 12

13 Deutschsprachige Zusammenfassung Die Mehrheit der Benutzer der öffentlichen Verkehrsmitteln fährt schwarz, das heißt ohne gültigen Fahrschein. Diese Tendenz ist in Ungarn im Gegensatz zu den westeuropäischen Ländern noch immer steigend. Die Initiative zur Änderung dieser Situation ist seit ein paar Jahren zu beobachten. Dabei wurde die Kontrolle bei den Hauptlinien verschärft, und es wurde auch eindeutig klar gemacht, dass die kostenlose Fahrt in der Nacht kein Gratisangebot der Vergnügungsstätten und Discos ist. Obwohl diese Verschärfungen einen Teil des Defizits der Verkehrsunternehmen verringert haben, sind die Firmen noch immer nicht gewinnbringend. Sie benötigen hohe staatliche Unterstützungen, die mit dem Geld der Staatsbürger finanziert werden. Wenn wir die heutigen technischen Errungenschaften nutzen würden, könnte man dieses Geld in anderen Bereichen viel wirksamer verwerten. Der Begriff Grünes Denken, der auch ziemlich neu ist, versucht die Firmen dazu zu bewegen, die alltäglichen Routineaufgaben viel umweltbewusster zu erledigen und die neuen technischen Errungenschaften auch trotz der anfänglich höheren Kosten zu nutzen, denn das Grüne Denken wird sich auf lange Sicht lohnen. In dieser Diplomarbeit geht es um die Entwicklung eines Systems, das den neuen Trends folgt, auf das Umweltbewusstsein achtet und versucht, aufgrund des technischen Hintergrunds von heute, den Kaufprozess zu modernisieren und statt Millionen von Papierblättern zu verwenden, eher die Möglichkeiten des 21. Jahrhundertes zu nutzen und den Weg für die Welt des elektronischen Handels zu bereiten. Die wichtigsten Aspekte des Systems sind die Nutzung der vielen Möglichkeiten aller bekannten elektronischen Geräte und die Vorstellung einer möglichen Alternative zur Ablösung des auf Papier gründenden Kaufprozesses, deren Endergebnis man besser auf die Spur folgen kann und deswegen viel wirksamer und sicherer ist. Ich nehme mir in meiner Diplomarbeit die am öftesten benutzten ein- und zweidimensionalen Strichcodes der Reihe nach vor, und zeige dabei ihre Vor- und Nachteile auf. Ich präsentiere zwei von mir verwendete Annäherungsweisen der Implementierung eines gewählten eindimensionalen Barcodes. Danach komme ich zur Schlussfolgerung, dass diese Methoden hinsichtlich unseres Ziels nicht befriedigend sind, und gehe weiter in die Richtung der zweidimensionalen Barcodes. Im Folgenden gebe ich die von mir bevorzugte zweidimensionale Datamatrix Strichcode, ihre positiven Eigenschaften und die beim 13

14 Schreiben und Lesen verwendeten Anwendungen und Mittel bekannt. Im Weiteren schreibe ich über die Komponente des von mir geplanten Systems, über das Handy, und untersuche die Erkennbarkeit der Datamatrix Barcode auf Testbildern in einem von mir programmierten Rahmensystem mit Hilfe von Kameras mit Handyqualität. Ich vergleiche aufgrund literalischer Forschungen die von mir vorgestellten Algorithmen zur Imagedetektion mit den Fähigkeiten der ähnlichen Produkte auf dem Markt. Zum Schluss schildere ich die Geschäftsmöglichkeiten eines Systems zum Verkauf elektronischer Tickets und die von mir erstellte Demovariante. 14

15 Bevezetés A városi tömegközlekedés a modern nagyvárosok egyik legfontosabb infrastruktúrája. Manapság egyre nagyobb az igény arra, hogy minél gyorsabban, minél hatékonyabban, valamint minél kényelmesebben jussunk el A pontból B-be. Ez a városi tömegközlekedés fő profilja, azaz megtervezi és összehangolja a létező infrastrukturális lehetőségeket. Ez természetesen hatalmas kiadásokkal jár, melyek nem maradhatnak fedezet nélkül. Világviszonylatban egyre inkább elterjedt trendnek mondható az, hogy a nagyvárosi tömegközlekedés félig piaci alapokon áll, azaz állami támogatásban részesül, ugyanakkor a fennmaradó hiányt jegyek, bérletek értékesítésével pótolja. Ezek megvásárlásával szerzik meg az utasok a jogot arra, hogy használhassák a városi tömegközlekedés szolgáltatásait. A jegyek, bérletek értékesítése a rendszer egyik kényelmi szempontokból sarkalatos eleme. Az utasoknak sok esetben hosszú, kígyózó sorokat kell végigállnia, hogy meg tudjanak venni egy a következő időszakra, vagy egy másik körzetre szóló bérletet/jegyet. Kényelmi szempontokból indokolt az elektronikus jegyrendszer bevezetése. Így az utasoknak nem kell a pénztárak előtti sorokban tölteniük értékes idejüket, csupán egy SMS segítségével megválthatják utazási jegyüket vagy bérletüket. Általánosságban kijelenthető, hogy manapság 1 főre 1-2 mobiltelefon jut Magyarországon, azaz csak a tömegközlekedésben részt vevő személyek elenyésző része nem rendelkezik az elektronikus jegyrendszer használatához szükséges feltételekkel. Ennek ellenére számukra is óriási előnyökkel jár az új rendszer, mivel a bérletpénztárak előtti sorok hosszúsága várhatóan nagymértékben csökkenni fog. Ennek köszönhetően az olyan forgalmas helyeken, ahol több pénztárablak is működik, egyszerre kevesebb nyitva tartó ablak is elegendő lehet. Ugyanakkor egy időszakos forgalomnövekedés esetén az összes pénztárablak működésbe állítható, így jóval rugalmasabb lesz a kiszolgálás, és az időszakos nagy tömegek (pl. sportesemény, nemzeti ünnep, egyéb tömegrendezvény) kiszolgálása is gördülékenyebb lesz. Indirekt módon itt utalnék arra, hogy természetesen nem lehetne jelenleg csak úgy megszüntetni a papír alapú jegyvásárlást, hiszen nem várható el egy embertől sem, hogy polgári kötelessége legyen legalább egy mobiltelefon birtoklása és ennek készségszintű használata. 15

16 A rendszer egy másik előnye, hogy nagyon nagy pontossággal képes az utazásra jogosulatlan személyek kiszűrésére a multidiszciplináris ismereteket igénylő implementációnak és a már más területeken kiválóan teljesítő titkosítási eljárásoknak köszönhetően. Hamisítani ezen okok miatt szinte lehetetlen, pontosabban értelmetlen, hiszen időigényes munka egy ilyen kód visszafejtése. Ha az ellenőrökön át is jutna valaki egy hamisított kóddal, a szerveroldali megoldásom pillanatok alatt kiszúrja a potenciális veszélyt, és megváltoztatja a titkosítási kódot, melyet így újból hosszas munkával fejthetne vissza a tettes, és esetleg használhatna újabb egy napi utazásra. Ebből kifolyólag a bliccelők száma a bevezetést követően az azt megelőző időszak töredékére fog visszaesni. Nem elhanyagolható tény továbbá az sem, hogy az elektronikus rendszer elterjedése kiváltja a korábbi papír alapú megoldásokat, mellyel plusz pont érhető el a környezetvédők szférájában. Az elektronikus úton történő vásárlás feleslegessé teszi majd a hatalmas mennyiségben gyártott papír alapú jegyeket és bérleteket, illetve ezek lejárta után további hulladéktól kíméljük meg a környezetünket, mely jelenleg túlnyomó részben nem újrahasznált szemétként fejezi be pályafutását. A feladat értelmezése Feladatom tehát egy olyan rendszer kidolgozása, mely utazási jegyek vásárlását és ellenőrzését segíti elő a napjainkban egyre divatosabbá váló vonalkód-technikák alkalmazásával. Meg kell találnom, hogy mely vagy melyek azok a vonalkódok, amik a legalkalmasabbnak tekinthetőek a kitűzött cél eléréséhez. Vizsgálnom kell, hogy elektronikus jegyek vásárlását milyen eszközök használatával tudnám lehetővé tenni, illetve hogy ezeknek mik az előnyeik és hátrányaik, továbbá, hogy valós rendszerként is megállnák-e a helyüket. Ezen felül meg kell terveznem a vásárlói oldalt kiszolgáló részt, mely az egész rendszer lelkéül szolgál majd. Egy fontos részét jelentené dolgozatomnak annak kidolgozása is, hogy megfelelő biztonsági rendszert építsünk ki a digitális jegyek hamisításának megakadályozására. 16

17 A tervezés célja A rendszer tervének célja egy olyan kliens-szerver architektúra kidolgozása, melyben a vásárlók elektronikus eszközök segítségével tudják megvásárolni a korábbi, papír alapú utazási jegyeket. További fontos tervezési szempontnak minősíthető a vásárolt jegyek korszerűbb ellenőrzése, nyilvántartása, mely mind a kiszolgáló szerver oldalon, mind utazási jegyek ellenőrök által történő ellenőrzések formájában valósulna meg. Ezáltal a polgároknak lehetőséget tudnánk kínálni egy környezettudatosabb és kényelmesebb vásárlási forma asszimilálására. Az üzemeltető cég számára pedig egy olyan módszert jelentene ez, mellyel közel nullára redukálható a jegyhamisítások száma vagy egyáltalán a hamisítás kísérlete. Ezen felül komoly és pontos vásárlói statisztikák készítésére és kimutatására adna lehetőséget. A tervezett rendszerrel nyomon követhetőek lennének - más adatok mellett a legterheltebb utazási pontok. Számszerű adatokkal, korrelációkat lehetne felfedni ezen pontok és a vásárlás dátuma között (például sportesemények nagyfokú látogatottsága), továbbá havi és éves összesítések is pillanatok alatt kinyerhetőek lennének. A feladat indokoltsága Egyre több vészjósló hírről lehet hallani, mely szerint Földünk erőforrásainak és élőkörnyezetének észnélküli kiaknázása komoly következményekkel fog járni, melyeket már gyerekeink, unokáink, és az utánuk következő generációk fognak megsínyleni. Egy apró papírjegy ugyan mit tehet hozzá vagy vehet el, gondolhatná egy laikus ember. Többségünk fejében fel sem merül, hogy egy papírjegy elkészítéséhez is legalább egy fát ki kell vágni. A fából varázsszóra sem lesz papír, azt el kell szállítani a feldolgozóüzembe, mely jó esetben a természet segítségével történik, amikor folyókon úsztatják le a kivágott fatönköket. A benzinevő motoros fűrészek okozta károk után pedig az elszállítás is újabb fosszilis üzemanyag használatával történik. Az üzem működése is energiához kötött, a fát fel kell dolgozni, vegyi anyagokkal keverni, és előállítani a kész végterméket. Erre majd még nyomtatunk, majd méretre vágjuk és a felhasználási területekre kiszállítjuk. Mind-mind energiaigényes műveletek sorozata. Ki gondolná, hogy egy utazási jegy ilyen hosszú utat jár be, míg a zsebünkbe kerül?! Ha nem is váltjuk meg egy elektronikus rendszer kifejlesztésével a világot, indirekt módon talán akkor is sokat könnyíthetünk a természet igénybevételén. 17

18 Egy másik hasonlóan fontos érv is áll még a kidolgozandó rendszer megvalósítása mellett. Nevezetesen, hogy az utaztatás költségei kézben tarthatóbbak és nyomon követhetőbbek legyenek. Szükséges, hogy az államnak pontos rálátása legyen az állapotokra. Egy elektronikus utazási rendszer bevezetésével digitálisan archiválhatóak és elemezhetőek lennének az adatok, tervezni lehetne a költségekkel, a fejlesztésekkel, és sokkal figyelemmel kísérhetőbbé és elszámoltathatóbbá válna a tömegközlekedést kiszolgáló rendszer. A diplomaterv felépítésének rövid vázlata Diplomamunkámban végigveszem a manapság használt fontosabb egy- és kétdimenziós vonalkódokat, írok ezek előnyeiről és hátrányairól. Bemutatom egy általam választott - a mai napig használatban lévő - egydimenziós vonalkód olvasását és írását lehetővé tévő program implementálását. Beszélek továbbá kétféle programozási megközelítésről, melyeket az implementáláskor használtam. Ez után levonom a következtetést, hogy az egydimenziós kódok használata vagy a kód tartalmának korlátozottsága vagy a helyigénye miatt, számunkra nem alkalmas, ezért a kétdimenziós kódolás irányába kell továbbhaladnunk. Bemutatom az általam preferált Datamatrix vonalkódot, pozitív tulajdonságait, írásához és olvasásához használt alkalmazásokat és eszközöket. Egy általam írt keretrendszerben vizsgálok majd általános minőségű mobiltelefon kamerájával készített képekkel egyenértékű, Datamatrix kétdimenziós vonalkódot tartalmazó tesztképeket. Majd bemutatom a hibaforrási lehetőségeket. Irodalmi forrásokkal összevetve osztályozom az általam írt kép detekciós algoritmus használhatóságát. Végső soron vázolom majd egy elektronikus jegyek vásárlását kiszolgáló rendszer üzleti lehetőségeit és az általam implementált bemutató jellegű változatát, melynek alapjául egy kliens-szerver architektúra szolgál, mely komoly biztonsági tényezők figyelembevételével készült el. 18

19 1. Vonalkódtechnika Napjainkban egyre nehezebb lépést tartani a rohanó világ tempójával. A követelmények magasabbak, és az nyer, aki ezeknek eleget tud tenni. Polihisztorok már nem léteznek, az emberiség tudása már oly szerteágazó és hatalmas, hogy egy ember ezt nem lenne képes mind átlátni. Ennek következménye az is, hogy a számítástechnika fejlődésével nemcsak a szoftver és a hardver vált szét, de külön specialisták foglalkoznak a hálózatokkal, a multimédiával, és így van ez a vonalkódtechnikával is. Magyarországon több mint 20 éve már, hogy az első vonalkódos szakcégek megjelentek. A magyar vonalkódos fejlesztések szintúgy megtalálhatóak az APEH-nál, a könyvtárakban, gyógyszertárakban, a benzinkutaknál vagy épp a legkülönbözőbb profilú iparvállalatoknál. Az automatikus azonosítás, melynek a vonalkódtechnika, továbbá az optikai karakterfelismerés, a rádiófrekvenciás azonosítás, mágnescsík-felismerés vagy a hangfelismerési technika is része, több százmilliárd eurós piaci forgalmat tudhat magáénak. Ebből kifolyólag érthető, hogy igény van az egyre korszerűbb és hatékonyabb megoldásokra. A vonalkódtechnika és egyéb automatikus azonosítási technikák használta számtalan előnyt hordoz magában. A korszerű informatikai rendszerekben, napjainkban, az egyetlen gyenge láncszemet az ember testesíti meg, aki a számítógépet kezeli. Kutatások eredménye bizonyítja, hogy az adatrögzítők átlag 300 karakterenként tévednek egyet hagyományos adatbevitel esetén, amelyekből származó hibák jelentős része nem szűrhető ki programokkal, de létrejöttük megelőzhető lett volna például vonalkódok alkalmazásával. Továbbá az idő is egy nagyon fontos faktor, mely nem elhanyagolható tényező, akár szolgáltatást nyújtunk, vagy éppen szeretnénk igénybe venni. Így a valós idejű robosztus megoldásokra kell hangsúlyt fektetnünk Előzmények Az évtizedekkel visszanyúló kezdeti kísérletezések és próbálgatások után az 50-es, illetve 60-as évek elején jelentek meg az első gyakorlatilag is alkalmazható vonalkódolvasók, és a mai szemmel már primitívnek tűnő vonalkódok. Az első alkalmazások szinte kivétel nélkül válogató rendszerben történtek. A gyors fejlődés a 70-es évek elején kezdődött és 19

20 napjainkig tart. Ugyanis ekkorra jutott a lézertechnika és a számítástechnika is olyan szintre, hogy nagy tömegű adatot megbízhatóan és gyorsan volt képes felismerni, továbbítani és feldolgozni. Az első mozgósugaras lézer fényforrást használó szkenner még 60 kilógrammos volt, és körülbelül 1973-ra tehető a piacra kerülésének időpontja [1]. Ez a szerkezet még diszkrét logikával működött, amit aztán később a szoftver-vezérelt megoldások váltottak fel. A mikroelektronika ugrásszerű fejlődése lehetővé tette intelligens hordozható olvasók és terminálok kifejlesztését. Elérhetővé vált a számítógépekkel történő valós idejű kommunikáció. A 80-as évek elejére az egydimenziós vonalkódos technológia minden tekintetben kiforrott. A technikai fejlődés azonban sohasem öncélú, hanem valós piaci igények kiszolgálására alapul. A nagy tömegben előállított termékek áramlásának manuális eszközökkel történő nyomon követése nagy élőmunka ráfordítást igényel, és ami még hátrányosabb, hogy növekvő adatmennyiségek esetén az emberi tévesztések aránya exponenciálisan nő. Így a folyamat nem állt meg, megszülettek az újabb vonalkód-típus családok Vonalkód és más automatikus azonosítási eljárások Automatikus azonosításnak azon eljárásokat és technológiákat nevezzük, melyek lehetővé teszik, hogy emberi beavatkozás nélkül egy objektumról adatokat nyerjünk ki, és azt további feldolgozásra alkalmas formára alakítsuk. Ide sorolandó többek között az alakfelismerés, mágneses jelfelismerés, rádiófrekvenciás azonosítás és az optikai jelfelismerés is. Az automatikus azonosítási eljárások közül mindegyiknek megvan a saját, már jól kitaposott alkalmazási területe. Így például a hitelkártyák azonosítására a mágneses felismerés szolgál, gépjárművek azonosítására pedig a rádiófrekvenciás megoldás terjedt inkább el. A vonalkódok (angolul: barcode) egy gépek által olvasható reprezentációi az információnak. Általában fekete tintát használnak fehér háttéren, hogy az adatokat rögzítsük. Eredetileg a vonalkódok a nevükből adódóan is paralel vonalakból álló információhordozók voltak, melyek a váltakozó fehér és fekete vonalak szélességében kódolták az adatokat (1. ábra) [2]. Napjainkra persze ezek már kinőtték a dimenziójukat, és megjelentek újabb tagjaik, melyek inkább hasonlítanak zajos, összepöttyözött fekete-fehér képekre (2. ábra). 20

21 1. ábra: Egydimenziós vonalkód 2. ábra: Kétdimenziós vonalkód A vonalkódok kiolvasásához általában optikai elven működő vonalkódolvasókat használnak, de a mai csúcsteljesítményű számítógépekkel már könnyűszerrel megoldható, hogy a digitalizált képből speciális képfeldolgozó szoftverekkel nyerjék ki az információt. Valószínűleg észre sem vesszük, de valamennyi azonosítási eljárás közül talán a vonalkódtechnológia jelenik meg napjainkban a leginkább. Miért is van ez így? A kérdésre a választ kezdetben a költséghatékony előállítás jelenthette, napjainkra pedig már olyan bejáratott nemzetközi szabványok és megoldások állnak mögötte, melyek helyett igen nehéz lenne bármi jobbal is előrukkolni. Nyomtatott adathordozó lévén, például a rádiófrekvenciás megoldásokkal szemben, talán az egyik legolcsóbb automatikus azonosításra alkalmas információhordozó. Egy tanulmány szerint vonalkódok implementálása napi szinten csupán 0,005 US$, míg a rádiófrekvenciás megoldás 0,07-0,30 US$ körül mozog [2]. Továbbá a vonalkódok megvalósításának és a mai technológiai eszközöknek köszönhetően akár még nagyobb távolságokból is biztonságosan olvasható. A mágneses eljárásokkal ellentétben nem igényel közvetlen közelséget a leolvasásnál, hiszen optikai úton történik az egész folyamat. Az optikai karakter-felismeréssel összehasonlítva pedig nyilvánvaló előnye, hogy kevésbé sérülékeny, és egyes típusok esetén még nagyfokú rongálódás után is biztonságosan kinyerhető az eredeti információ. Talán a rovásukra írható egyetlen hátrányuk, különösen az 1 dimenziós kódok esetén, hogy csak korlátozott adattartalom befogadását teszik lehetővé A vonalkódok fejlődése a kezdetektől napjainkig Mint ahogy azt már korábban említettem, a legelső vonalkódos alkalmazások osztályozó, válogató rendszerekben láttak napvilágot. Ezek zárt rendszerek voltak, melyekben a vonalkódtípus és az eszközök kiválasztását külső szempontok nem motiválták. Mint mindenhol, a zárt rendszeres megvalósítások a tömeges alkalmazhatóság természetes korlátait képezik. Nem teszik ugyanis lehetővé például tulajdonosváltás esetén az előzőleg vonalkóddal ellátott termékek azonosítását. A figyelem ezért már a kezdetektől fogva a 21

22 kisebb-nagyobb mértékben nyitott rendszerekben alkalmazható vonalkódok és szabványok felé fordult. Az első nagy lépés 1973-ban történt, mikor az USA-ban megalakult az UPC (Uniform Products Code Council), és kiskereskedelmi alkalmazásokra elfogadta a róla elnevezett vonalkódtípust [1]. Míg a tradicionális vonalkódokban korlátozott hosszúságban, csak numerikus adatokat lehetett kódolni, az újabb szabványok már lehetővé tették karakterek implementálását is. Egyesek csak az angol ABC nagybetűs elemeit, míg más vonalkódokkal a teljes ASCII karakterkészlet kódolhatóvá vált. Az igény, hogy számokon kívül egyéb karaktereket is vonalkódként tárolhassunk, illetve hogy azonosan kicsi felületre minél több adatot zsúfolhassunk, továbbá hogy ezek információtartalma nagyfokú sérülés esetén is még biztonságosan kinyerhető legyen, elvezetett a kétdimenziós mátrix kódokhoz (3. ábra). Az első próbálkozások egydimenziós vonalkódok egymás alá pakolásával valósultak meg. Ezeket angolul stacked barcodes -nak hívjuk. Később megjelentek ezek sokkal komplexebb formái [11]. 3. ábra: A vonalkódok fejlődése: (egydimenziós-, ál-kétdimenziós-, kétdimenziós-, dombornyomott vonalkód) 1.4. Felhasznált eszközök Munkám során az algoritmusok implementálására kezdetben a Macromedia Flash 8 [16] most már az Adobe terméke - fejlesztői környezetet, és Action Script 2.0-s [16] szkriptnyelvet használtam. A későbbiekben Eclipse [32] fejlesztői környezetben folytattam a feladatom és Java(1.4-es verzió) [18] nyelven kódoltam, hiszen a jövőben Symbian [17] operációs rendszert futtató mobiltelefonokra terveztem átültetni az alkalmazásokat. Erre a célra sokkal alkalmasabbnak találtam egy magas szintű nyelvet, mint a Java, mintsem egy szkriptnyelvet. Mivel a két említett, modernebb 3GL-es nyelv (third-generation programming language) szintaktikájában és szemantikájában is sok hasonlóságot mutat, így az 22

23 algoritmusok majd könnyebben konvertálhatóak át a Symbian-on futó C nyelv [17] számára akár egy forráskód konvertáló program segítségével *20+. Itt szeretném megjegyezni, hogy az általam használt két nyelv önmagában is alkalmas lenne arra, hogy mobiltelefonon használják, de bizonyos korlátok miatt még sem ezekre esett a választás az egydimenziós kódokkal való ismerkedés során. A Flash fejlesztői környezetnek létezik egy Flash Lite [15] nevű változata, mely direkt mobiltelefonos alkalmazások megírásához készült. A Flash futtatható fájljairól azt érdemes pár szóban megemlíteni, hogy nagyon magas fokú az adattömörítése, azaz nagyméretű forráskódokból is kisméretű, számára futtatható gépi kódot gyárt, továbbá hogy biztonsági rendszere hasonló a Java sandbox modelljéhez, azaz, ha valamit szeretnénk, azt csak rajta keresztül tehetjük meg, és ő majd eldönti, hogy jogunkban áll-e vagy sem. Ez utóbbit nevezzük virtuális gép architektúrának, mikor a futtatható kód nem az alapul szolgáló operációs rendszer natív hívásait használja, hanem egy virtuális gépben fut, ami értelmezi és végrehajtatja a kódot. A virtuális gép architektúrát az egyszer megír, több gépen futtat igény szülte, mely annyit jelent, hogy a programozónak nem kell minden platformra külön megírnia az alkalmazását, hanem a virtuális gépeknek létezik több változata a különböző platformokra. Az egyetlen probléma ezzel a megoldással csupán annyi volt, hogy Magyarországon - tudomásom szerint - nem volt kapható olyan telefon, melynek szerves része lenne a Flash Player, mely ezt a szükséges virtuális gépet testesíti meg, ami a futtatható kódot interpretálja és végrehajtatja a mobiltelefon operációs rendszerével. Az interneten keresgélve főleg japán gyártmányú mobiltelefonokon láttam ezt a kiszereltséget. (Ezen diplomadolgozat írásakor már kaphatóak - többnyire Nokia márkájú - telefonok, melyek rendelkeznek ezzel a kiszereltséggel.) A tiszta Java-s megvalósításnak pedig az állt útjában a kezdetekkor, hogy a különböző mobiltelefonok különböző mértékben támogatták/támogatják a Java nyelvet, és nem lett volna biztos, hogy az egyik telefonhoz megírt kód, más hasonló telefonon is futott volna. 23

24 2. Vonalkód összefoglaló A vonalkódok megjelenésének és elterjedésének kezdete nem a matematikai apparátus hiányában volt viszonylag késői, sokkal inkább az olvasáshoz és nyomtatáshoz szükséges eszközökkel hozható összefüggésbe. Ezek elemi felbontása, érzékenysége, hibatűrése és fizikai mérete jelentősen hatottak a kódolható adatmennyiség meghatározásában. A lézertechnika fejlődése, amely lehetővé tette a kisebb méretek melletti nagyobb megbízhatóságot, sem hozott nagyságrendi változást az így feldolgozható információ méretében, ezért a fejlesztések a vonalkódok új típusainak kifejlesztése felé folytatódott. A különböző cégeknél indult fejlesztésekből mintegy harminc-negyven különböző vonalkódtípus született, amelyek közül azonban csak egy tucatnyi vált elterjedtté, illetve szabvánnyá, pontosabban többségében szabvány értékű ajánlássá. A szabványosítást végző szervezetek illetve rendszerek közül a legfontosabbak: - AIM, Automatic Identification Manufacturers Inc., AIM-Europe - ANSI, American National Standard Institute - CEN, European Standard Commitee - EAN, European Article Numbering Association, - UCC, Uniform Code Council - EDI, Electronic Data Interchange,(EDIFACT,ODETTE,TRADACOMS stb.) 2.1. Vonalkódtechnikai kifejezések definiálása A vonalkódok ősének sokan a Morse kódot tekintik (4. ábra), melyben az angol abc és a számjegyek szerepelnek különböző hosszúságú jelek és a köztük lévő szünetek formájában. 24

25 4. ábra: Morse-kódtáblázat Ezen szimbólumokból és a közéjük ékelt szünetekből építették fel a Morse üzeneteket [19]. Az említett jel, azaz az ábrán lévő egy fekete vagy fehér részegységet nevezzük elemi információnak. Ez a digitális rendszerekben egy bitet jelent, vonalkódos nevén pedig modulnak hívjuk. Az egy dimenziós vonalkódok két lényeges pontban térnek el a Morse kódoktól. Az első az, hogy a modulok közötti szünet nem egyszerűen a jelek elválasztására szolgál, hanem maga a szünet-jel is információ értékű. Tehát a vonalkód sötét és világos modulok sorozatából áll. Egy kódolandó karakter mindig rögzített számú modulból áll, és azon belül a sötét és világos jelpárok száma is rögzített [1]. A továbbiakban a sötét modulokat az 1-es érték, a világos modulokat a 0-s érték jelenti majd. A kódolás paramétereinek rögzítése egyben meghatározza a kódolható karakterek számát is, hiszen meghatározott számú modulból csak meghatározott számú elempárt lehet véges és könnyen kiszámítható módon kiválasztani. Illusztrálja ezt egy táblázat három vonalkódtípus paramétereinek összehasonlításával (5. ábra) [1]: 25

26 Vonalkód típus Modul-mérete Jelpárok száma Kódolható karakterszám Felhasznált karakterszám Biztonsági faktor EAN/UPC CODE PDF ábra: Vonalkód összehasonlító táblázat A biztonságos olvasás érdekében nem használják ki a teljes kódolható karaktermennyiséget, hanem úgy választják ki a felhasznált karaktereket, hogy azok kódja a lehető legjobban eltérjen egymástól. Így az apróbb nyomtatási hibák és az olvasási bizonytalanságok a legkisebb valószínűséggel fognak karaktertévesztést eredményezni. Minden vonalkódtípus egy általános elvrendszer szerint épül fel, ugyanakkor szinte mindegyik megsérti az általános elvek legalább egyikét. (Ez a vonalkódok humán jellege [1].) Saját irodalmi kutatásaimból összegyűjtött információk alapján azzal egészíteném még ki a fentebb látható táblázatot, hogy interneten keresgélve sok pontatlan információval szembesülhetünk. Talán a legcélszerűbb eljárás, amennyiben be akarunk törni a vonalkód piacra, hogy mindig a specifikációt vesszük alapul, és szabványokra támaszkodunk Az általános vonalkód felépítése 6. ábra: Általános vonalkód felépítése A fentebb található ábrán az olvasás megkönnyítése érdekében lettek az egyes részek indexszel ellátva a felső sorban (6. ábra). A vonalkódot általában a világos modulnak megfelelő nagyobb háttérre nyomtatják, hogy az egész még jobban elkülöníthető legyen a 26

27 környezetétől. Ez a tiszta terület segíti az olvasókhoz kapcsolt dekódert a jelsorozat kezdetének biztonságos felismerésében. Ezt hívják nyugalmi zónának. Az 1-es és 15-ös indexen lévő részeket START és STOP karaktereknek hívják. Ez egy további egyértelmű azonosító jelzés a kódolt adatterület meghatározásához. A START és STOP karaktereket nem minden vonalkódtípus használja, de a legtöbb esetben legalább a nyitó START karakter használatos. A kezdetet és a véget jelző START és STOP karakterek lehetnek egyezőek vagy különbözőek is, sőt vannak olyan kódok, ahol magunk választhatjuk ki egy karakterkészletből őket. Vannak kódok, melyek a további biztonságos olvashatóságot megkönnyítendő még egy plusz KÖZÉP karaktert is elhelyeznek. Ilyen a 8. indexen lévő résznél figyelhető meg. Van ahol ez csak a vonalkód pontos kiolvasását segíti, de van ahol fontosabb elválasztó szerep is jutott a számára, mint például a gyártóra és a termékre vonatkozó információ szeparálása. A kódolt adatokat a START és a STOP karakterek között találhatjuk. Ezek hordozzák a számunkra és nem a vonalkódolvasók számára fontos információkat. A kódolható adatok hossza néhány típusnál rögzített, a többinél szabadon megválasztható, bár ez utóbbiaknál is lehetnek bizonyos szabályok, mint például hogy csak páros számú karaktert használhatunk. A kódolható adatok készletét minden esetben vonalkódtípusonként rögzített karaktertábla tartalmazza. Egyes típusokkal csak számokat, másokkal már az angol ABC nagybetűit is, míg ismét másokkal már a teljes ASCII karakterkészletet felhasználhatjuk. A vonalkódban - általában a végén - szokott szerepelni egy további speciális karakter, az ellenőrző karakter, amely egyszerűbb esetben a kódolt karakterek értékeiből, vagy a karakterhez rendelt értékekből, aritmetikai számításokkal egy kiegészítő karaktert képez. Ez beépül a vonalkódba, bizonyos esetekben a kódolt adatokhoz tartozóan. Visszaolvasásnál a dekóderek is elvégzik a vonalkódtípushoz tartozó ellenőrző karakter kiszámítását, majd összehasonlítják azzal az értékkel, amit a vonalkódban rögzítettek. Nem minden esetben használják az ellenőrző karaktert, bizonyos esetekben pedig a felhasználó dönthet az alkalmazásukról. Itt érdemes még említést tenni egy másik fontos kulcsszóról, az önellenőrzésről (angolul self-checking), mely azt jelenti, hogy egy egyszerű nyomtatási vagy szkennelési hibától egy karakter nem fog tudni egy másik karakterbe átkonvertálódni. A vonalkód alatt található még egy számsorozat, az értelmező sor. Ez a kódolt adatok megjelenítésére szolgáló, emberek számára meglévő kiegészítő információ, melynek 27

28 alkalmazása a vonalkód sérülése esetén lehet hasznos. Használata, elhelyezése, mérete és formája többnyire rugalmasan kezelhető. A vonalkódoknak szokott lenni még egy fontos rendszerjellemzője, az arányszám. Nevezzük el az egymás melletti azonos értékeket, azaz 00 vagy 11 modulokat széles modulnak. Néhány vonalkódtípusnál lehetőség nyílik arra, hogy a széles modul ne egyszerűen a modul kétszerese legyen, hanem az arányszám által meghatározott. Az arányszámot mindig úgy kell megadni, hogy a modulmérettel szorozva egész számot adjon, például 2:1, 7:3, 5:2, 3:1 stb. Az arányszám alkalmazásával segíthetünk az esetleges, méretből adódó elhelyezési problémák megoldásában. Az arányszám optimális és egyben maximális értéke 3:1. Diszkrét kódolás alatt azt értjük, hogy a karakterek önmagukban is értelmezhetőek, nincs szükség a többi kódra hozzájuk. Az ilyen kódolású karakterek általában vonallal kezdődnek és fejeződnek is be, és a karakterek között karakter közötti szünetek találhatóak (7. ábra). 7. ábra: Diszkrét kódolás A folyamatos kódolás pedig éppen ennek az ellentettje, mikor a karakterek önmagukban nem értelmezhetőek az előzőek tudta nélkül. Az ilyen kódolás végén általában egy termináló karakter szokott állni (8. ábra). 8. ábra: Folytonos kódolás 28

29 Kereskedelmi és ipari kódok A kereskedelmi kódok, mint például az általunk is ismert élelmiszerüzletekben, a termékeken látható vonalkódok. Ezek kiosztásáról nemzetközi szervezetek gondoskodnak. Olyasmi ez, mint az interneten a domain nevek és az ezekhez tartozó aldomainek kiosztása. A kereskedelmi vonalkódunk, ha nemzetközi szabványhoz igazodik, tartalmaznia kell egy megjelölést, pontosabban egy rendszerazonosítót, továbbá a gyártó azonosítóját. Ezután következik a termékkód, mellyel maga a termék azonosítható. Ezzel a módszerrel lehet megoldani, hogy a termékek és gyártóik beazonosíthatóak legyenek. Az interneten keresve olyan szervezetet, akik ezt a bejegyzést ingyen csinálják, nem találtam. Természetesen, mint mindenhol, az adminisztrációs feladatokért fizetni kell. Magyarországon a Magyar Gazdasági Kamara az illetékes szerv ez ügyben. Még egy fontos észrevétel a kereskedelmi kódokhoz az, hogy ezek numerikus adatokat kódolnak. Formájuk a legtöbb esetben szigorúan rögzített, hogy az azonosítás problémamentes legyen, viszont egyes kódtípusoknál egy speciális jelölő karakter használatával fel lehet rúgni ezeket a szabályokat. Az ipari kódokban lényegesebb különbség, hogy ezek már nem csupán numerikus, hanem az abc karaktereinek kódolására is képesek. Természetesen más-más kód más-más mértékben és hatékonysággal. Ezeket a kódokat alfanumerikus kódoknak nevezzük. Az ipari kódok hossza általában szabadon választható. Az egydimenziós megvalósításoknál ezzel akár nagyon vicces, átláthatatlan és használhatatlan, méteres vonalkódokat is gyárthatunk. Itt van például egy CODE 39 vonalkód: 9. ábra: CODE 39 típusú, minta vonalkód A fentebb látható CODE 39 típusú alfanumerikus vonalkódba a HELLO VILAG BALU VAGYOK MIZU VELETEK karakterek sorozata lett bele kódolva egy ingyenes, nyílt forráskódú programmal, melynek online változata innen érhető el (9. ábra): 29

30 Egy másik példa a létező és használatos vonalkódok sokszínűségére (10. ábra): 10. ábra: Vonalkódok sokszínűsége 2.2. Egydimenziós numerikus és alfanumerikus vonalkódok Az alábbiakban összefoglalom a napjainkban használt, legfontosabb numerikus, azaz csak számokat kódoló, illetve alfanumerikus, vagyis számokat és karaktereket is kódoló vonalkódokat UPC és EAN Az UPC talán az egyik legismertebb kódolási szabvány, legalább is az USA-ban. Ez az a kód, amivel minden szupermarketekben találkozhatunk, de magazinokon, könyveken vagy éppen újságokon is láthatunk. Az UPC-nek több formátuma van: UPC-A, UPC-E, UPC 2- számos kiegészítése és az UPC 5-számos kiegészítése. Az UPC-A 11 darab számot kódol. A 12. karakter egy ellenőrző karakter, melyet úgy számítunk, hogy a páratlanodik indexen lévő értékeket összegezzük, majd vesszük a 30

31 háromszorosát, majd ehhez hozzáadjuk a páros indexeken lévő számok összegét. Az ellenőrzőszám az a legkisebb, pozitív egész szám, amelyet az előbb kiszámolt végeredményhez adva, összegük tízzel történő osztása maradék nélkül végrehajtható. Egy tipikus UPC-A vonalkód (11. ábra): 11. ábra: UPC-A vonalkód A kód alatt szerepel az emberi olvasást megkönnyítendő értelmező sor is. A legelső szám a rendszerazonosítót jelöl, az utána következő 5 szám a gyártó kódja, a rákövetkező 5 a termék kódja, a legutolsó pedig a generált ellenőrző szám. A rendszerazonosítók kiosztására az alábbi táblázat szolgál alapul (12. ábra): Rendszerazonosító szám Jelentés 0 Általános UPC kód 1 Fenntartott 2 Csomag 3 Gyógyszer 4 Saját belső kód 5 Kupon 6 Fenntartott 7 Általános UPC kód 8 Fenntartott 9 Fenntartott 12. ábra: UPC-A vonalkód rendszerazonosítói Az UPC-E az UPC-A egy változata, ami egy sokkal tömörebb formátumot biztosít azáltal, hogy a fölösleges extra nullákat eliminálja, továbbá hogy trükkösen az 5 hosszú gyártó kódból, illetve az 5 hosszú termék kódból, egy 6 karakter hosszú kódot generál. Ezt a vonalkódtípust általában olyankor használják, ha az UPC-A nem fér el a felhasználásra szánt felületen (13. ábra). 31

32 13. ábra: UPC-E vonalkód Az EAN-13 az UPC-A standardon alapul, mely szabványt az International Numbering Association(EAN) in Europe fejlesztett ki. Ez a változat azért volt szükséges, mert az UPC-A nem volt tökéletesen kitalálva nemzetközi használatra. Másrészt azért, mert az európaiak nem szívlelték, hogy egy amerikai szabványügyi hivatal szerint működjenek. Az EAN-13 az UPC-A egy kibővítése (14. ábra). Ebből kifolyólag, ami képes EAN-13 vonalkód olvasására, az UPC-A kódot is probléma nélkül tud értelmezni. A két típus közötti egyetlen különbség, hogy míg az UPC-A esetén egy 0-9 közötti intervallumból származó rendszerazonosítót használnak csupán, addig EAN-13-nál ez egy ig terjedő kétszámjegyű azonosító, ami valójában egy országkódot jelent az esetek döntő többségében, de a korábbi UPC-A rendszerazonosítókra is megvannak a neki megfelelő számok. 14. ábra: EAN-13 vonalkód Az EAN-8 az UPC-E EAN megfelelője. Az EAN megfelelő alatt annyi értendő, hogy a korábban említett rendszerazonosítást használja az egyszámjegyű helyett. 32

33 15. ábra: EAN-8 vonalkód A mellékelt ábrán látható, hogy az EAN-8 is egy rövidített formája az EAN-13-nak, továbbá az, hogy az UPC-E-nél viszont egy picit hosszabb (15. ábra). A JAN(Japanese Numbering Authority) kódok az EAN-13 japán megfelelői a 49-es rendszerazonosítót használva. Az UPC-A, UPC-E, EAN-13 és EAN-8 kódok mindegyike tartalmazhat a vonalkód jobb oldalán egy plusz kiegészítő kódot. Ez általában nem olyan magas, mint az eredeti kód, és kiegészítő információkat tartalmaz a termékkel kapcsolatban (16. ábra) [11]. 16. ábra: UPC kiegészítő kódolás 33

34 of 5 vonalkódok A standard 2 of 5 vonalkód egy önellenőrző numerikus kód. Már az 1960-as évektől használatosak. Annak a ténynek köszönhetően hívják 2 of 5-nek, hogy a numerikus karakterek 5 modulból állnak, melyből kettő mindig széles modul. Az interleaved 2 of 5-tel ellentétben itt az adat a vonalakba van kódolva, a vonalak szélessége tartalmazza az információt, a szünetek fix hosszúságúak, és csupán a karakterek szeparálására szolgálnak (17. ábra). A standard 2 of 5 kódot általában áruházi szortírozásnál, fényképelőhívásoknál vagy repülőjegyeken használják [4]. Viszont mára már elavultnak számít, és az interleaved 2 of 5 használatát javasolják helyette. 17. ábra: Standard 2 of 5 vonalkód Az industrial 2 of 5 a standard 2 of 5 egy másik elnevezése. Az interleaved 2 of 5 a standard 2 of 5 ötletén alapszik azzal a különbséggel, hogy itt már a szüneteknek nem csak szeparáló szerepe van, hanem szintén információ-hordozók. A kód hossza szabadon választható, viszont csak páros számú számjegyeket tartalmazhat. Itt is minden karakter 5 modulból áll, melyek közül 2 széles modul, és mindegyikük vagy csak sötét, vagy csak világos. Ez úgy lehetséges, hogy az egyik karakter sötét moduljait a másik karakter világos moduljai választják el egymástól. A kód karakterei tehát felváltva sötét és világos modulokból állnak, páronként egymásba ékelve (18. ábra). A felhasználó dönthet arról, hogy a kód tartalmazzon-e ellenőrző karaktert. Használatánál a párosság megtartására ügyelni kell, amit gyakran az első karakterbe helyezett nullával oldanak meg. 18. ábra: Interleaved 2 of 5 vonalkód 34

35 Szélesség-modulált vonalkódok Az MSI-t az MSI Data Corporation fejlesztette ki az eredeti Plessey kód alapján. Az MSI-t szokás még Modified Plessey-nek is nevezni, melyet leltári tárgyak ellenőrzésénél szoktak alkalmazni. Az MSI egy folytonos, nem önellenőrző kódolás. Bár ezen kódok hossza tetszőleges lehet, a különböző alkalmazások általában különböző fix hosszúsággal használják. A kód végére szokás egy moduló 10-es ellenőrző karaktert tenni. Minden karakter 8 modulból áll, 4 vonalból és 4 szünetből. Mint az eddig tárgyalt kódok is, ez is csupán numerikus karaktereket tartalmazhat (19. ábra). 19. ábra: Szélesség modulált vonalkód Codabar vonalkódok A Codebar vonalkódokat 1972-ben találta fel Pitney Bowes. Ez egy diszkrét, önellenőrző kódolás, ami 16 különböző numerikus és 4 fajta start/stop karakter tárolására alkalmas. Ezt az azonosítást az amerikai vérbankok, fotólaborok és a FedEx légi számláin használják. Mivel a kód önellenőrző, ezért nincsen semmilyen ellenőrző karakter a vonalkód végére applikálva. Természetesen lehet úgy dönteni, hogy a nagyobb biztonság érdekében szeretnénk egyet kreálni, ekkor viszont figyelnünk kell majd arra, hogy az ellenőrző karaktert más vonalkód olvasók adatelemként fogják értelmezni. 20. ábra: Codebar vonalkód Az A,B,C és D betűk a kódokban a 4 fajta, különböző START/STOP karaktert jelölik (20. ábra). 35

36 2.2.5 Code 39 alfanumerikus ipari vonalkód A Code 39 volt a legelső alfanumerikus vonalkód (21. ábra). Még napjainkban is használatos. Ez a standard vonalkódja az Egyesült Államok Védelmi Minisztériumának, illetve az Egészségügyi Vonalkód Tanácsnak (HIBCC). A Code 39-et szokás még 3 of 9 kódnak vagy USD-3-nak is nevezni. 21. ábra: Code 39 vonalkód A kód hossza szabadon választható. Fentebb már mutattam erre egy mókás példát, hogy méteres vonalkódok is előállíthatóak vele. Egy karakter valójában 13 modulból áll, amiből az utolsó 13. modul mindig a karaktereket elválasztó szünet, ezért nem is tekintjük a kód részének. A fennmaradó 12 modulból 3 mindig széles modul, azaz két azonos 00 vagy 11 értéket tartalmaz. Ebből kifolyólag kezeljük úgy, mint egy 9 modulból álló kód, tudván, hogy ebből 3 széles modul. Innen származik a neve is. A széles modulok megjelenítése a korábban említett arányszám felhasználásával történik. Az ellenőrzőszám képzését a karakterekhez rendelt értékek alapján számolhatjuk ki. A kódolás rögzített START és STOP karaktere a karakterkészlet * (csillag) eleme, ezért nem tartozik érték az ellenőrzőszám képzéséhez. A leképezhető karaktertábla a betűk közül csak az angol ABC nagy betűit tartalmazza. A kód teljes ASCII kiterjesztéséhez alkalmazott megoldásban a $, /, % és + karaktereket a maradék 39 karakterrel párba rendezve azonosítjuk az első 128 ASCII karaktert Code 128 alfanumerikus ipari kód A Code 128 sikerének oka a nagy sűrűség melletti nagy megbízhatóság a bőséges és többféleképpen variálható karakterkészlettel. Az elnevezés az első 128 ASCII karakter kódolhatóságából ered. A kód hossza itt is szintén szabadon választható. Egy karakter 11 modulból áll, a sötét és a világos modulpárok száma pedig három. Egy sötét vagy világos 36

37 modulsorozat 1-4 közötti modulszámból épülhet fel. Három A, B és C jelzésekkel megkülönböztetett típuskészlet létezik a takarékosabb kódolás érdekében. Ezek közül a B jelű az alapvető, a másik kettővel csak számjegyeket kódolhatunk. A típus helyes kiválasztása azért fontos, mert csupán numerikus adatok kódolása esetén sok helyet takaríthatunk meg, szemben azzal a típuskészlettel, amikor betűket és számokat egyaránt kódolunk. Az A típus jól alkalmazható az adatbevitel melletti szoftver vezérlésére is, hiszen a CR (Carrige Return), LF (Line Feed), ESC és egyéb escape szekvenciák is kódolhatóak vele, míg a C típus elsősorban a számsorok tömörítését segíti. A kód magába épít egy ellenőrző karaktert, melyről a felhasználó nem szerez tudomást. Az ellenőrzőkarakter képzéséhez itt már a kódolandó karakternek a karaktersorozatban elfoglalt sorszámát is figyelembe kell venni Stacked barcodes A mikroelektronika fejlődésével egyre precízebb vonalkódolvasókat és -írókat gyártottak, de ezzel még koránt sem sikerült megoldást nyújtani minden problémára. Voltak olyan esetek, amikor sok információt kellett volna kinyomni kis felületre, viszont az 1 dimenziós vonalkódokkal ez nem volt kivitelezhető. A kezdeti próbálkozások az egydimenziós vonalkódok egymás alá rendezésével történtek meg, mint például a Code 16k esetén. Ezek a legelső ál kétdimenziós vonalkódok (22. ábra). A Code 16k fizikai megjelenésében nagyon hasonlít a Code 49-re. A sorok száma 2 és 16 között változhat, és minden sor egyedi START és STOP karakterrel rendelkezik. Soronként 70 modulból áll, ami 5 karaktert tartalmaz. A sorokat egymástól és oldalról a nyugalmi zónától is külön elválasztó vonal védi. A karakterek kódolása a Code 128 inverzeként történik. Több ellenőrző karaktert tartalmaz, de soronkéntit nem. A vonalkód maximális kapacitása 77 ASCII karakter vagy 154 számjegy. 22. ábra: Ál-kétdimenziós vonalkód 37

38 2.4. Kutatásom összefoglaló eredményei Munkám során sikeresen elsajátítottam a vonalkódtechnika alapjait, olyan tudásra tettem szert, melynek köszönhetően biztonsággal felismerem a legtöbb nemzetközileg is használt egydimenziós és kétdimenziós datamatrix vonalkódtípust, és ismerem az ezek mögött rejlő matematikai apparátusokat. Leprogramoztam egy vonalkód író/olvasó keretrendszert Flashben, melybe tetszőleges számú újabb kód implementálható a moduláris felépítésének köszönhetően. Ezen belül az olvasásnál tovább realizálva a feladatomat a kapott információ elejére és végére random hosszúságú 0-ást zajt raktam, ahogy ez a valós életben is előfordul a nyugalmi zónákat illetően, és ezekből állítottam vissza az eredeti adatot olyan objektumba, melyből lekérdezhető a vonalkód rendszerszáma, gyártószáma, termékkódja, és hogy az ellenőrző karakter megfelelő-e. 23. ábra: Saját egydimenziós vonalkód író és olvasó programom 38

39 A fenti üzenetet generálta a programom, miután kiválasztottuk az UPC-A kódolási típust a legördülő menüből majd beírtuk a tetszőleges, 11 hosszú számsorozatunkat (23. ábra). (A programom validációt használ az input ellenőrzésére, és mivel tudja, hogy az UPC egy numerikus kódolás, csak számokat enged beütni.) Coding type changed for: UPC-A Control Number created for: Code's binary representation: A vonalkódra kattintás után elindul a szkennelés (24. ábra). 24. ábra: Saját egydimenziós vonalkód író és olvasó programom szkennelés közben 39

40 Majd a következő üzenet jelenik meg a kimeneti ablakban: Code scanned and normalized, random noises added at beginning and at the end. Binary code: START MIDDLE STOP Control Number passed. The code is valid. System ID: 1 - Free digit Manufacturer ID: Product ID: Control Number: 2 Ezt a framework-öt kétféle megközelítésből próbáltam bővíteni. A legelső változatban egy külső szótárfájlból olvastattam be a vonalkód-típusra jellemző paramétereket, melynek struktúráját én találtam ki (25. ábra). Az volt a célom vele, hogy minden típushoz legyen egy szótárfájl, ami tartalmazza a vonalkód szempontjából fontos paramétereket, például a számukra felhasználható karaktereket és az ezekhez hozzárendelt modulsorozatot, továbbá a program írása és olvasása ettől teljesen független legyen. 25. ábra: Saját egydimenziós vonalkód író és olvasó programom szótárfájlja 40

41 A második megközelítésben úgy láttam jobbnak és hordozhatóbbnak a kódot, hogy a kódtípusokhoz tartozó paramétereket is a programban tárolom, mindegyiket egy külön objektumban, mert a szótárfájlos megoldásomnál rengeteg plusz munka volt az adatok megfelelő parse -oltatásával, értelmezésével a programon belül. Ez utóbbi változatban teljesen elkülönül a grafikus felület, továbbá az írás és az olvasás, maguktól a vonalkódoktól. Írás esetén a vonalkód objektumoknak a framework átadja a kódolandó sztringet, majd az objektum visszaad neki egy bináris, 0 -ás és 1 -es karakterekből álló sorozatot, ami már a kódolt modulsorozatot tartalmazza. Erről semmi egyebet nem tud a keretrendszer, csak annyit, hogy hogyan jelenítse meg. Olvasás esetén pedig egy ilyen bináris sorozatot adunk át a vonalkódobjektumnak random hosszúságú 0 -ás zajjal az elején és a végén, majd az objektum visszaadja a dekódolt adatot, illetve lekérdezhetőek tőle az egyes paraméterek külön-külön is egy publikus interfacen keresztül Az egydimenziós kódolás elégtelensége Ahogy láthattuk, az egydimenziós vonalkódok közül, azok, amelyek helyigénye elfogadható lenne, csupán numerikus adatok kódolására alkalmasak. Az a néhány, amelyekkel pedig alfanumerikus értékek is rögzíthetőek lennének, vagy csekély kapacitásúak, vagy korlátlan adat rögzítése esetén hihetetlenül nagy méreteket öltenek, és ily módon használhatatlanok komplexebb elektronikus rendszerekben. Az ál-kétdimenziós vonalkódok sem hozták meg a kívánt sikert, ugyanis a kétdimenziós kódokkal szemben még mindig csak egy barkácsmódszert jelentettek a problémák áthidalására. Természetesen mind az egymind az ál-kétdimenziós vonalkódoknak megvan a saját, jól kitaposott felhasználási területe, ahonnét a kétdimenziós vonalkódok a komplexitás és a migráció bonyolultsága miatt valószínűleg sosem tudnák kiszorítani. De számunkra egy elektronikus jegy megvalósításánál elsődleges szempont a minél kisebb méret, a gépek számára könnyű olvashatóság és a nagy kapacitású, alfanumerikus és vezérlőkarakteres adattárolási lehetőség. 41

42 2.5. Kétdimenziós vonalkódok Az egydimenziós vonalkódok egymás fölé rendezése nem bizonyult kellően nagy denzitású kódolásnak. Még mindig igen korlátozott volt a mérete, és a hibavédelme sem volt kellően magas. Így megjelentek az első valós kétdimenziós vonalkódok. Ezek mögött már sokkal kigondoltabb és komplexebb matematikai apparátus működött. Több 100 vagy pár ezer karakter kódolására is képesek egy kis felületen, ezen felül még a sérülésből fakadó hibaarány is igen kis valószínűségű lett, amit a kódelméletből kölcsönzött hibajavító kódolási eljárásoknak köszönhettek, mint például a Reed-Solomon kódolás. Egy pár kétdimenziós vonalkód következzék most a változatosságuk reprezentálására a teljesség igénye nélkül (26. ábra): ArrayTag Aztec Code Code 1 CP Code DataGlyphes 42

43 Datastrip Code Dot Code A MaxiCode MiniCode PDF 417 QR Code Snowflake Code 43

44 Datamatrix 26. ábra: Kétdimenziós vonalkódok * Datamatrix A Datamatrix kétdimenziós vonalkódot a Siemens fejlesztette ki [13]. Az ISO/IEC16022 specifikáció tartalmazza a Datamatrix leírását (27. ábra). A Datamatrix egy 2 dimenziós vonalkód, ami körülbelül karakter tárolására alkalmas. Ez a vonalkód négyzet alakú, és 0,001 inchtől egészen 14 inchig terjedhet az oldalankénti mérete. Hogy a denzitását illusztráljam, 500 numerikus karakter egy 24-tűs nyomtatóval kinyomtatva csupán 1 négyzet inchnyi területen is elfér. A datamatrixot általában arra használják, hogy elektromos készülékek termék- és szériainformációit kódolják velük. Japánban sebészi eszközök azonosítására is ezt alkalmazzák. Továbbá lencsék identifikációjánál, áramköri nyáklapoknál és egyéb gyártás folyamán keletkező termékek azonosítására használatosak még. A datamatrixok olvasásához kétdimenziós szkennerre van szükségünk. Egyszerű lineáris vonalkódolvasóval nem lehetséges az információ visszanyerése. Kétféle változata létezik ezeknek a szkennereknek a piacon: lézeres és CCD kamerával működő. Ez utóbbira egy nagyszerű példa a Japánban már évek óta használatos kétdimenziós, vonalkódos, személyi információs lap, melyet a támogatott telefonok kamerájával lefényképezve, képfeldolgozási eljárásokkal nyerhetjük ki az adatot belőle [5]. 44

45 A kétdimenziós datamatrix vonalkód struktúrája és tulajdonságai Egy 18x18-as, négyzetes datamatrix. QUIT ZONE, az adatrégiót határoló külső marker területe. Magyarul nyugalmi zóna. Ennek a segítségével lehet behatárolni a datamatrixszal kódolt adatrégiót. A QUIT ZONE bal oldali és alsó része mindig egybefüggő, azonos színű vonal. Ez alapján fejjel lefelé lévő datamatrixról is biztosan meg tudjuk mondani, hogy hogyan kell olvasni, hiszen úgy kell csak rotálnunk, hogy a nyugalmi zóna két egybefüggő marker vonala bal oldalt és alul legyen. A QUIT ZONE jobb oldali és felső része mindig egy adategységnyi hosszú, váltakozó polaritású rész. Az egységnyi hosszúság és szélesség segít az adatcellák méretének meghatározásában, továbbá perspektivikus torzítás esetén is hasznunkra válhat az adatcellák méretének pontos értelmezésében. 45

46 A datamatrix nyugalmi zónája által határolt adatterület, a DATA AREA. Ez a rész tartalmazza a kódolt információt. Fehér alapon fekete polaritású datamatrix. Fekete alapon fehér polaritású datamatrix. A szabvány szerint a polaritás szabadon változtatható, azaz, hogy fehér alapon feketével kódolom az egyes cellákat vagy fordítva, de általában az előbbit szokás használni. Továbbá nem csupán négyzetes formája létezik a datamatrixnak, hanem a szabvány szerint engedélyezett a téglalap alakú is. Általában nagyon hosszú kódolt információ esetén találkozhatunk ezzel az esettel. 27. ábra: A kétdimenziós datamatrix vonalkód tulajdonságai Egy adat datamatrix vonalkóddá való konvertálása két lépésben történik. Először az adatokat 8 bites kódszavakká alakítjuk egy kódtáblázat segítségével, ami az ASCII kódolási táblázat minden értékéhez egy 8 bites reprezentációt rendel. Ezt hívjuk magas szintű kódolásnak. 46

47 Majd ezeket fekete-fehér négyzetekké alakítjuk. Ez utóbbi az alacsony szintű kódolás. A kódszavakat úgy helyezzük el az adatterületen, hogy egy egyedi 45 fokos paralel, diagonális vonal mentén helyezkednek majd el. Ahol szükséges, átlapolódás történik, hogy a négyzet alakú adatterületre beférjen, melyet ezen diagonális vonalak mentén lehet végigjárni. A lentebb található képen látható jelölés: X.Y, ahol X és Y természetes, egész számok, és X a kódszót jelöli, azaz az aktuálisan kódolandó karaktert, Y pedig a kódszó bitjeit reprezentálja, ami ugye 8 bites ábrázolás esetén egy 1-től 8-ig terjedő intervallumot ölel fel (28. ábra). 28. ábra: A kétdimenziós datamatrix vonalkód magas szintű kódolása Ahogy fentebb már szó esett róla, a datamatrix kódszavait párhuzamos, diagonális vonalak mentén helyezik el átlapolódások kíséretében, ezt szemlélteti a következő kép (29. ábra): 29. ábra: A datamatrix vonalkód diagonális menti bejárása 47

48 Mindezen felül még Reed-Solomon kódolást, az egyik leggyakrabban használt lineáris, hibajavító kódoló osztályt is felhasználják, hogy a datamatrix a végleges formáját elnyerhesse. Ez biztosítja, hogy a rosszul nyomtatott, törlődött, szemcsés vagy éppen elszakadt kódokból is jó százalékkal visszaállítható legyen az eredeti adat. Ez a hibajavító kód sokkal összetettebb, mint az egydimenziós kódoknál láthatott, paritásellenőrző bithez hasonló eljárás. Ennek a kódnak polinomiális számításokon alapszik a hibajavító képessége, de jelen dolgozatnak nem témája ennek ismertetése. Még egy fontos dolgot meg kell említeni a datamatrix kódok kapcsán, még pedig, hogy különböző módok léteznek az adatok kódolására, mint például a tisztán számadatos (DIGIT), ASCII, vagy éppen tiszta szöveges (TEXT). Ennek lényege az, hogy minél kisebb elemszámú a kód-abc-nk, annál takarékosabban és biztonságosabban tudjuk az információt kódolni. Az egydimenziós vonalkódoknál jött elő az a fogalom, pontosabban igény, hogy megakadályozzuk az átlapolódást. Ez annyit tesz, hogy ha megsérül egy adat, vagy rosszul olvassa egy készülék, akkor vegye észre a hibát, és próbálja meg kijavítani annak érdekében, hogy ne fordulhasson elő az, hogy egy hibás adat miatt egy értelmes, másik kódot kapunk. Természetesen azoknál a kódoknál, ahol ellenőrző értéket is iktatnak, ennek nem sok a valószínűsége, de mivel léteznek ellenőrző érték nélküliek, ezt egy példán keresztül illusztrálom. Szemléltetésképpen nézzük a következőt (30. ábra): Először is egy fogalom bevezetése, a kód-abc. Kód-abc-nek azon elemek halmazát értjük, amelyekből a kódszavainkat összeálltjuk. Bináris jelek esetén a kód-abc a {0,1} halmaz. És akkor a példa: Egy biten szeretnénk tárolni binárisan adatokat o Mivel bináris,,0,1- a kód-abcnk. Azaz vagy 0-át vagy 1-et használhatunk csak. o Mivel 1 biten szeretnénk tárolni adatot a lehetséges kódszavak permutációja: 0 vagy 1, ez 2 n -en lehetőség, azaz pontosan 2 1 = 2. o Ez azt jelenti, hogy összesen két üzenetet tudunk csupán kódolni. o üzenet1 -nek feleltessük meg a 0 kódszót, üzenet2 -nek pedig az 1 kódszót. o Van olyan rendszer, ahol elégséges csak két üzenet kódolása, de a valóságban gyakran előfordul, hogy ez nem elegendő. Ha például üzenet3 -at szeretnék továbbítani, nincs rá lehetőség, mert nem tudok kódszót hozzárendelni. 48

49 o A másik probléma az átlapolódás, azaz, ha egy zajos csatornán küldeném át a kódszavamat, egy bitnyi hiba esetén üzenet1 -ből már is üzenet2 lett, és ha ez egy ország bombázását elrendelő titkosított üzenet lenne, koránt sem mindegy, hogy igen vagy nem a fogadó oldalon értelmezett, dekódolt üzenet. Az átlapolódás elkerülésének megértéséhez szükséges ismertetnem egy újabb fogalmat. A kódelméletből ismert Hamming-távolság [27] alatt két azonos hosszúságú szöveges vagy bináris jelsorozat eltérő bitjeinek, illetve karaktereinek a számát értjük. Ez azt jelenti, hogy minél nagyobb a minimális Hamming-távolság a kódszavak között, annál kisebb az átlapolódás fennállásának a veszélye. A fentebb bemutatott bináris, két kódszavas, 1 bites tárolásnál a Hamming-távolság mindössze 1. Ez volt az oka annak, hogy kis zaj esetén is könnyen megeshet, hogy üzenet1 -ből üzenet2 lett. Leszögezhető tehát, hogy hatékony kódoláshoz szükséges a kódszavak közötti minimális Hamming-távolság minél nagyobb értékének elérése, amit úgy valósíthatunk meg, hogy kevés kódszót nagy bitpozícióbeli eltéréssel használunk és/vagy több biten tároljuk. (Több bites tárolás esetén a helyigény is megnő, aminek általában épp az ellenkezőjére van szükségünk.) A lényeg mindig ugyanaz, hogy a felhasznált kódszavak bitpozícióbeli különbsége a lehető legnagyobb legyen. Minél nagyobb a minimális Hamming-távolság a kódszavak között, annál nagyobb bithiba szükséges ahhoz, hogy egyik kódszóból egy másikat kapjunk. Üzenet: u u üzenet vektorhoz hozzárendelünk egy szabad c kódszót, vagy generálunk egyet Kódszó: c c-t átküldjük a csatornán Zaj: e e zajvektor hozzáadódik zajos csatorna a csatorna végén vett v vektor: v = c + e Dekódolt üzenet: u hibajavított és dekódolt u üzent előállítása 30. ábra: Információkódolás folyamatábrája 49 Vett üzenet: v

50 Ahogy azt már fentebb írtam, hibajavító kódolásoknál beépített módszer van a hiba fennállásának ellenőrzésére, illetve bizonyos számú bithiba javítására. Datamatrix esetén a kód-abc-nk szintén bináris, hiszen csupán fekete vagy fehér cellákat áll módunkban használni. Mivel a kódolni kívánt üzenetek elemi egységeire szánt tárolási méret 8 bitben kötött, a következőket mondhatjuk el: 2 8 = 256 kódszó áll rendelkezésünkre tól egészen ig. Ez elegendő az ASCII táblázat elemeinek használatához, azaz minden elemhez tudunk egy datamatrix kódszót rendelni. Megállapíthatjuk, hogy mivel a lehetséges kódszavak közül mindet felhasználjuk, ha az ASCII összes elemét kódolhatóvá szeretnénk tenni, 1 bitnyi hiba is átlapolódást okozna, ezért mindenképpen szükségszerű hibajavító kódolás alkalmazása, ami jelen esetben a Reed-Solomon hibajavító kód lesz, ugyanis a Datamatrix szabvány ezt használja. Továbbá azon is elgondolkodhatunk, hogy amennyiben a kódolt üzenetünkben nem akarjuk felhasználni az ASCII tábla összes elemét, példának okáért tudjuk, hogy csak számokat akarunk kódolni, amihez csupán 10 kódszó hozzárendelése elegendő, vagy csak az angol ABC betűit akarjuk felhasználni, figyelmen kívül hagyva az ASCII nyújtotta lehetőséget a vezérlési karakterek kiaknázására, nem kell az összes kódszót lefoglalnunk. Az illusztráció végett maradva annál az eshetőségnél, mikor csupán számokat kívánunk datamatrix kóddá konvertálni, látható, hogy a {0,1,2,3,4,5,6,7,8,9- halmaz elemeihez elegendő lenne a 8 bites tárolás helyett csupán 4 bit, hiszen 2 4 =16 kódszó lehetséges felhasználásával implementálnánk ezt a 10 elemet. Ezen információ birtokában miért ne tehetnénk meg, hogy elhelyezek egy jelzőkaraktert a datamatrix olvasójának, hogy csak számokat kódol az üzenetem, ami annyit fog tenni, hogy egy normális 8 bites karakter helyén 2 darab 4 bites számot fogok tárolni. Erre ad lehetőséget a Datamatrix szabvány különböző módú kódolása, és így ugyanakkora területen sokkal több információt is képesek vagyunk kódolni, ha tudjuk, pontosabban jelezzük, hogy nem kívánunk élni a teljes ASCII tábla felhasználásának lehetőségével. A vonalkódíró alkalmazásokba implementálható egy automata megoldás, mely megpróbálja megkeresni a kódolandó szövegnek legmegfelelőbb formátumot, amennyiben ezt az alkalmazandó vonalkód támogatja. Datamatrix esetén még arra is van lehetőség, hogy a 50

51 kódolási lépések között ugráljunk a kódolási módok között bizonyos speciális kódszavak segítségével [3]. Egy datamatrix kód írása és olvasása a fenti folyamatábra alapján akkor a következőképpen alakul (31. ábra): ASCII üzenet hello Kódolás A Datamatrix kódolási táblázata alapján hozzárendeljük az egyes karakterekhez a nekik megfelelő bináris kódot. h := Reed-Solomon e := hibajavító kódolás alkalmazása l := vagy az adatblokkok végén, o := vagy nagyobb mátrixok esetén (ezek csak kitalált értékek) a cellák közé ékelve. ASCII vett üzenet hello Dekódolás és hibajavítás Datamatrix vonalkód megépítése az adatokból négyzetes vagy téglalap alakú formában. Datamatrix adat stb. Zajos csatorna miatt szennyeződés és sérülés keletkezhet a vonalkódon, ami folytán az olvasó egyes cellákat tévesen olvashat majd. Képfeldolgozás QUIT ZONE alapján rotálás és térbeli transzformációk segítségével az adat zóna kiolvasása. 31. ábra: Információkódolási folyamatábra Datamatrix esetén 51

52 3. A Datamatrix vonalkód, mint elektronikus jegy A korábbi fejezetben láthattuk, hogy okkal léptünk át az egydimenziós vonalkódok felett, mikor az elektronikus jegyeinkhez keresünk egy hordozó médiumot. A kétdimenziós kódok sokkal kisebb helyen sokkal több információt képesek tárolni. Szinte kivétel nélkül mindegyik alkalmas ASCII elemek tárolására, továbbá a hibatűrő képességük is sokkal megbízhatóbbá teszi őket. Így talán joggal kijelenthetjük, hogy jó úton haladunk az elektronikus jegyünk formátumának rögzítése felé. Mint az összes többi vonalkód esetében, a Datamatrix mellett is szólnak pro és kontra érvek. De összehasonlítva a létező konkurenciával, elmondható róla, hogy az egyik legjobb hibatűrő képességgel rendelkezik, a tárolható karakterek száma is az élmezőnybe emeli, és nem lekicsinylendő az a tény sem, hogy egy jól bejáratott szabványról van szó A Datamatrixszal kapcsolatos nehézségek Annak ellenére, hogy a Datamatrix egy nyílt szabvány, azaz ingyenesen felhasználható, nem lehet találni ingyenes dokumentációt hozzá az interneten. Ezt nagyon jól érzékelteti az a tény is, hogy bár a datamatrix kulcsszóra a Google kereső több mint másfél millió találatot dobott ki, szinte majdnem minden oldalon más és más hibatűrési arányról vagy épp kódolási kapacitásról beszélnek. Nagyon sok utánajárás és önálló munka szükséges ahhoz, hogy valaki kiderítse, mik is a valós és pontos értékek Nyílt forráskódok 2008-ban vagy korábban, ha valaki fejébe vette, hogy szeretne implementálni egy datamatrix írására és/vagy olvasására képes programot valamilyen tetszőleges programozási nyelven, az vagy megvette az ehhez szükséges dokumentációkat, ISO szabványt, vagy idővel szembesülnie kellett a sötétben tapogatózás nem kellemes érzésével. 52

53 Szerencsére ez a helyzet változott. Jelenleg több nyílt forráskódú rendszer is létezik már, melyek szabadon letölthetőek és tanulmányozhatóak, illetve felhasználhatóak, és segítséget nyújtanak képekből vonalkód adatainak kinyeréséhez. Bár ezek sajnos még mindig gyerekcipőben járnak, és a release notes -ok szerint is még van rajtuk mit fejleszteni, nagyon nagy segítséget nyújthatnak a munkánkban. Két fontosabbat emelnék ki, melyekkel én is foglalkoztam: - A libdmtx fantázianevű ingyenes projekt, mely talán jelenleg az egyik legjobb szabadon felhasználható datamatrix vonalkód képből való kinyeréséhez és értelmezéséhez, valamint ezen kétdimenziós kód írásához. Ez egy C-s osztálykönyvtár, melyet jelenleg is fejlesztenek, és július végén készült el egy újabb verzió belőle, ugyanis korábban egy ideig állt a projekt. - A másik a Google által kezdeményezett ZXing fantázianevű Java csomag, melyen szinte az összes fontosabb egydimenziós vonalkódot implementálták már, és a kétdimenziós kódok közül is kész a QR kód, illetve a datamatrix részben. [23] A dolgozatban tárgyalt későbbi munkám során én is ezt használom majd Datamatrix szemben a QR kóddal A QR kód, azaz más néven Quick Respones kód szintén egy kétdimenziós vonalkód. A három sarkán található három nagy marker-négyzetről ismerhető fel könnyen. A standard szerint 21 * 21 modulból áll a legkisebb, míg 177 * 177-ből a legnagyobb QR kód. A Reed- Solomon hibajavító kódolást alkalmazva 4 fajta hibajavítási szintet különböztet meg (32. ábra) [24] : Hibajavítási szint Maximum kódolható karakter L (7%) 2953 M (15%) 2331 Q(25%) 1663 H(30%) ábra: QR kód hibajavítási szint táblázat A következő összehasonlító táblázat a QR és a Datamatrix vonalkódok helykihasználását szemlélteti (33. ábra). A különböző sorokban ugyanazt a karakterláncot sokkal kisebb 53

54 méretben lehetett datamatrixban kódolni. A negyedik csillagozott példában a karakterlánc japán Kana karaktereket tartalmazott (a QR kódot eredetileg ilyen speciális, japán karakterek effektív kódolására fejlesztették ki) * ábra: QR kód és Datamatrix helyigényét összehasonlító táblázat Ezen a két képen pedig már szemmel is jól látható a két kódolás eredménye (34. ábra). Mindkettő a karakterláncot kódolja. 34. ábra: QR kód és Datamatrix méretbeli különbsége Jól látható, hogy mindkét vonalkód hasonló megoldást használ az adatok tárolására, azaz fekete-fehér cellák váltakozása rögzíti az információt valamilyen formában. A szembetűnő különbség mindkét kód között a markerekben van. Míg a datamatrix kétdimenziós vonalkódnál a marker mindig a legszélső, bal oldalt és alul egybefüggő, jobb oldalt és felül fekete-fehér szaggatott, mindig páros hosszúságú vonal, a QuickResponse kódnál ezt a szerepet a 3 fekete-fehér négyzet tölti be, mely a jobb alsó sarok kivételével mindegyik csücsökben megtalálható. Ez utóbbi esetben is a negyedik csücsök kihagyása a képfeldolgozást segíti, ugyanis így mindig ki lehet találni a kód pontos orientációját. 54

55 3.4. A datamatrix kód írása A tesztjeim megkönnyítése érdekében, ahogy ezt már az egydimenziós kódoknál is tettem, nem csak a datamatrix vonalkód olvasásával, hanem az írásával is sokat foglalkoztam. Mivel szükségem volt tesztképekre, és 2008-ban még kevés, jó minőségű, online fellehető, ingyenes, datamatrix kódot generáló program volt elérhető, módosítottam egy Java alkalmazást, mely a begépelt szövegből és előre beállított paraméterekből létrehozta a kétdimenziós datamatrix kódot, és felkínálta a lehetőséget ennek az elmentésére (35. ábra). A program a dekódolt szöveg tartalmának megfelelő nevű jpg fájlt ajánl fel elmentésre, de png és gif formátumú képfájlok támogatására is létrehoztam segédosztályokat. Szeretném megemlíteni, hogy csupán a cél elérése érdekében, haszonszerzés vágya nélkül használtam és bővítettem ki ezt az alkalmazást, hogy tesztképeket tudjak generálni. Ily módon viszont sajnos nem áll módomban közéadni, mivel nem rendelkezem a megfelelő jogokkal. Terveztem még ennek a programnak a kibővítését különböző funkciókkal. Például a zajgenerálással, hogy hibák keletkezzenek a vonalkódon, illetve a különböző térbeli transzformációk használatával, hogy a valós képeket minél jobban tudjam szimulálni. De mivel időközben egyre sűrűbben bukkantak fel az ingyenes datamatrix vonalkód generátorok [12] [9], továbbá nem rendelkeztem a Datamatrix vonalkód szabványát leíró specifikációval, hogy egy saját író és olvasó alkalmazást implementálhassak, letettem erről. 35. ábra: Datamatrix vonalkódot író és elmentő alkalmazás 55

56 3.5. A datamatrix kód olvasása Jelenleg, a pár oldallal korábban már említett Google által kezdeményezett ZXing nevű projekt kódját használom datamatrix vonalkód olvasásához (36. ábra) [23]. Ez a as, akkori aktuális stádiumában még korántsem számított kész terméknek. Több egydimenziós kód képről való olvasását implementálták már ebbe a Java csomagba, és a kétdimenziós QR kódot is, de a datamatrix még mindig fejlesztés alatt áll. A kód egy kis átalakításával sikerült rávennem a programot, hogy az egyszerűbb datamatrix képeket is felismerje. Első lépésben a program indulásakor rátallózhatunk egy vonalkódot tartalmazó képre, majd a program az általa ismert vonalkód típusokat próbálja meg felismerni és dekódolni a képből. 36. ábra: Google ZXing Java SE változata újrafordítva működés közben 56

57 2008-ban a program részeként felismerhető vonalkódok a következők: Egydimenziós: o UPC-A o UPC-E o EAN_13 o EAN_8 o CODE_39 o CODE_128 Kétdimenziós: o QR kód o Datamatrix részben Ez a program teljes egészében letölthető forráskóddal együtt Java SE (Java Standard Edition: ezt használják desktop alkalmazásokhoz) és Java ME (Micro Edition: ezt használják mobiltelefonos alkalmazások fejlesztéséhez) változatokban. Legfrissebb tudomásom szerint a Datamatrix kód olvasását azóta sem implementálták, és úgy tűnik, lehet, hogy nem is fogják A datamatrixszal kapcsolatos kihívások Jelen állás szerint már létezik több szabadon felhasználható program, melyekkel datamatrix kódot olvashatunk vagy éppen írhatunk. De ezek most még kisebb-nagyobb hiányosságoktól szenvednek. Főleg a képfeldolgozási algoritmusokon van még mit javítani, hiszen a valós életben szinte biztos, hogy nem fogunk tudni olyan szép és tiszta vonalkódokat lefényképezni, mint amilyeneket én itt most tisztán a kibővített programommal vagy más programmal generáltam. A valóságban különböző fényviszonyok mellett, más-más szögből lefényképezett vonalkódot, a mobiltelefon kamerájának kalibrációs paramétereinek ismerete nélkül, kell tudnia az alkalmazásunknak, egy kódot detektálnia és értelmeznie minimális, a számára rendelkezésre álló erőforrás felhasználásával. 57

58 3.7. Vonalkód olvasó, mint mobiltelefonos alkalmazás Több, már létező piaci megoldás született a kétdimenziós vonalkódokban rejlő lehetőségek kiaknázására.*25+ Szinte korlátlan a lehetőségek tárháza, ha arra gondolunk, hogy nagyon kis helyen, ember számára olvashatatlan formátumban, viszont gép számára könnyen értelmezhetően, nagy hibatűréssel, információt tudunk tárolni. Egy ilyen megvalósítás a Japánban már évek óta sikeresen működő KaywaReader: * ábra: KaywaReader, mobiltelefonos alkalmazás Ennek sikere a robosztus alkalmazásban rejlik, mely letölthető közvetlen mobiltelefonra WAP-on keresztül, és már futtatható is. De leszedhetjük a számítógépünkre is, és onnan tetszőleges eszközzel töltjük át a mobiltelefonunkra, majd használjuk (37. ábra). Ahhoz hogy egy ilyen mobiltelefonos alkalmazás sikeres legyen, több faktort figyelembe kell vennünk. Egy ilyen fontos tényező véleményem szerint, hogy minél nagyobb lefedettséget érjünk el mobilalkalmazásunkkal a telefonok között. Hogy a Java-s verziót említsem: a Google által írt osztálykönyvtár akkor tud zökkenőmentesen működni, ha a mobiltelefonon futó Java virtuális gépen megtalálható a MIDP 2.0-ás Java csomag. Ez az osztály felel a mobiltelefon kamerájának Java-n keresztüli eléréséért. Viszont 2008-ban csak a legújabb modellekben volt megtalálható. Sok ember számára megfelelő alternatíva az lenne, hogy a saját mobiltelefonjaik alkalmazásával készítik el a képet, amit utána a vonalkód olvasóval betallóznak, majd dekódolnak. Ezzel szinte már is lefedtünk minden kamerával rendelkező mobiltelefont az alkalmazásunk számára, és valljuk meg, manapság már nem is nagyon található olyan készülök, mely ne rendelkezne legalább egy darab, egyszerű, beépített kamerával. Érdemes további ajánlásokat figyelembe vennünk, ha azt szeretnénk, hogy mobiltelefonra fejlesztett szoftverünknek jó visszhangja legyen *26+. Ezeket a javaslatokat négy fő csoportba sorolhatjuk, melyek további kisebb alcsoportokra tagolódnak: 58

59 - Használhatóság o Kisebb a képernyő mérete, mint egy normál PC-nek Elimináljuk a felesleges UI(felhasználói interfész) komponenseket. Használjunk teljes képernyőméretet, ha lehetséges. Gondosan tervezzük meg a felhasználói felületet. o Nem férnek el a párbeszédablakok a képernyőn Igyekezzünk kis méretű párbeszédablakokat alkalmazni. o A vertikális- és horizontális orientáció változhat Úgy tervezzük meg alkalmazásunkat, hogy mindkét orientációt támogassák. Használjunk teljes képernyőméretet. Bizonyos alkalmazások megkövetelik, hogy csak az egyik orientációt használják. Amennyiben a program funkcionalitása ezt szükségessé teszi, ez is egy elfogadható megoldás. o Nem elég nagy a képernyő, hogy megjelenítsük az adatokat Használjunk görgetősávokat. o A felhasználói felületen keresztül gyakran kérünk input-ot Ahol lehet, használjuk a hardware-es gombokat. o Véletlen aktiválás A gomboknak elég nagynak kell lenniük mind ujjal való használathoz, mind stylus-hoz. Biztosítani kell lehetőséget arra, hogy a felhasználó bárhonnan visszaléphessen az előző állapotba. - Felhasználói felület és hardware limit o A képernyő méret és a felbontás általában mindig más Bizonyosodjunk meg róla, hogy a szövegek olvashatóak. Készítsük fel termékünket a leggyakoribb méretekre. o Bizonyos eszközök csak opcionálisak Ne korlátozzuk a szövegbevitelt csak klaviatúrára. Tegyük lehetővé programok telepítését többféle módon, mint például web-ről vagy külső meghajtóról. o A képernyő orientációja változhat A képernyő rotációjához igazítsuk a felhasználói felületet, kivéve ha ez a funkcionális működés miatt nem lehetséges. 59

60 o Jobb oldali klikkek, több gombos klikkek általában nehezen kivitelezhetőek Próbáljuk elkerülni a nehezen kivitelezhető gomblenyomásokat, törekedjünk egyszerűségre. - Korlátozott erőforrások figyelembe vétele o Magas CPU utilizáció Optimalizáljuk a feladatokat úgy, hogy a CPU mihamarabb végezhessen, és visszaválthasson energiatakarékos üzemmódba. Nagyfokú leterheltség esetén legyen lehetőség a részletesség lebutítására például videó lejátszásnál. o Az adattároló hardware használata Puffereljük az adatokat, hogy minél kevesebb I/O műveletet kelljen végrehajtanunk mind gyorsaság, mind a hardware kímélése szempontjából. o Optimalizált médialejátszás - Kapcsolattartás o Nem megbízható kapcsolat Használjuk a rendszer eseményfigyelőit, hogy tisztában legyünk a kapcsolat állapotával. o Offline használat Cache-eljük az adatokat. o Adatvesztés, adatbiztonság Használjunk biztonsági megoldásokat a kényes adatok továbbítására. Használjuk a lokális cache-t míg a szerver nem verifikálja magát. o Szerver vagy web-service nem elérhető Használjuk a lokális cache-t, és tekintsük kapcsolódási hibának, míg el nem érhetőek. o Szinkron kommunikáció Használjunk aszinkron kommunikációt, hogy a válasz ne blokkolja a futási szálat. 60

61 További ötletek, melyekkel egy vonalkódolvasó, mobiltelefonos alkalmazás értéke és közkedveltsége talán nagyban növelhető: Semacode-hoz hasonló kódok fejlesztése, melyekkel nem pusztán szöveges információt dekódolhatunk, hanem belső utasításokat is adhatunk. Például kérjük a böngészőt, hogy a dekódolt URL-t nyissa meg és töltse be. *22+ Rengeteg lehetőség rejlik ebben, ha komolyabban belegondolunk, hiszen szinte korlátlan az elképzelések tárháza. Egy komplett, új utasításnyelvet implementálhatunk, mellyel webcímet tárolhatunk vonalkódban, és a mobiltelefon az adat értelmezése során, egy tag alapján, azonnal megnyitja a címet egy böngészőben. Szintén egy másik utasítás-tag arra lenne használható, hogy az utána lévő adatot a készülék névjegy adatként kezelje, és azonnal hozzon létre egy új kontaktot belőle. Élelmiszereket ilyen kódokkal felcímkézve, a mobiltelefonunk egy kattintásra receptötleteket jeleníthet meg az adott termékkel kapcsolatban, vagy éppen megmutathatja számunkra a vitamin és kalóriatáblázatát. Ezekből az illusztrációkból is látszik, hogy szinte bármilyen területen felhasználhatóak lennének ezek a vonalkódok, létjogosultságuk megkérdőjelezhetetlen. Vonalkód kinyerésének lehetősége nem csupán videó folyamból (video stream), hanem akciógomb lenyomására fényképezőből, vagy már korábban létrehozott és a programba betallózott képből is lehetséges. 61

62 4. Képfeldolgozási eljárások, saját program létrejötte Sikeresen eljutottunk odáig, hogy tudjuk, az elektronikus vásárlási rendszerünk megvalósításához kétdimenziós vonalkódot akarunk használni, a nagy tárkapacitása, a magas fokú hibatűrő képessége és a kis helyigénye miatt. Említettem, illetve be is mutattam általam használt megoldásokat kétdimenziós datamatrix vonalkód írására és olvasására. Így lehetőségünk nyílik tesztképek kreálására, illetve bizonyos szintig tesztképeken végrehajtható vonalkódolvasási műveletek elvégzésére. Tisztáztuk, hogy mobiltelefonra fejlesztett alkalmazásoknál sokkal korlátozottabbak a felhasználható erőforrások, így nem lehet a tervezést egy górcső alá venni egy PC-kre szánt alkalmazásfejlesztéssel vagy éppen egy web szerveren futóéval, más fajta megközelítésekkel kell élnünk. Mindezen felül meg kell állapítanunk, ahhoz, hogy az elektronikus utazási jegyünk ellenőrizhető is legyen, szükséges beleásnunk magunkat a képfeldolgozás színes világába, és fel kell térképeznünk a lehetőségeinket A Google ZXing nevű projektben való szerepem A ZXing a Google egy nyílt forráskódú tiszta Java-s fejlesztése Android alapú mobil operációs rendszerekre, melyet bárki az Apache 2.0-ás licensz keretei között használhat. Természetesen portolható az alkalmazás egyéb Java ME virtuális gépet futtató rendszerre is. Ennek a licensznek a lényege röviden összefoglalva, hogy bárki felhasználhatja a kódot ingyen és bérmentve, azzal a kikötéssel, hogy a módosított termékre is ugyan ezek a licensz feltételek érvényesek. Még egy fontos pontja van, hogyha valami módosítást végzünk a kódokon, fel kell tüntetnünk ezeket a változtatásokat is. A ZXing projekt októberében még 0-ás verziószámmal futott. Egyik főbb hiányossága volt, hogy a datamatrix kódok felismerése képekről, még korántsem volt tökéletes. (A forráskódban ki is volt kommentezve az ehhez tartozó modul, belenyúlás nélkül nem használható.) Legjobb tudomásom szerint jelenleg sem képes még valós, életszerű helyzetben lefényképezett datamatrix kódot felismerni, és egyelőre nem is dolgoznak ennek a modulnak fejlesztésén. Itt kerültem a képbe azáltal, hogy kifejeztem érdeklődésemet a munkával kapcsolatban a Google egy fórumán, és az egyik felelős fejlesztő felvette velem a kapcsolatot. 62

63 4.2. A feladat konkretizálása és előkészítése Az én feladatom végső soron az lett, hogy próbáljak meg kifejleszteni olyan algoritmust, mellyel nagy hatékonysággal lehet datamatrix képeket felismerni. Több fizetős program próba verzióját is megvizsgáltam. Szándékosan megváltoztatott tesztképekkel próbáltam felfedni gyenge pontjaikat, hogy végül egy olyan rendszert alkothassak, mely nagyobb biztonsággal végzi a feladatát, mint ezek a piacon kapható szoftvertermékek. Ezután munkám kezdeti lépései voltak egy olyan keretrendszer megalkotása, melyben grafikus felhasználói felületen(gui) keresztül tölthetek be tetszőleges számú képet. Ezeken több algoritmust ki is próbálhatok, majd a végeredményt megjeleníthetem és el is menthetem. Természetesen szükségem volt ehhez még egy függvénykönyvtár megalkotására, melyekkel a különböző képi transzformációkat tudtam könnyűszerrel, bármilyen sorrendben végrehajtani. Ezen felül még gyártottam érvényes, saját datamatrix kódokat a korábbi programommal, majd ezekből különböző verziójú tesztképeket készítettem, melyek például perspektivikusan el vannak torzítva, vagy éppen meg vannak forgatva. Továbbá más, az interneten fellelhető tesztképeket is felhasználtam a programom hatékonyságának tesztelésére A keretrendszer és a tesztképek két fontos szereplője A keretrendszerem három fő részből áll. Az egyik a program vezérléséért felelős felhasználói felület. Itt lehet betölteni a képeket, algoritmusokat lefuttatni rá, illetve az eredményeket kimenteni (38. ábra). 38. ábra: Teszt-keretrendszerem kezelőfelülete 63

64 A második rész a képek megjelenítésért felelős modul, mely minden számára átadott képet tetszőleges feliratú új ablakban jelenít meg, és automatikus görgetősávval lát el, amennyiben a kép nagyobb mint az ablak kerete (39. ábra). 39. ábra: Teszt-keretrendszerem képmegjelenítője A harmadik talán legfontosabb rész pedig egy statikus osztálykönyvtár létrehozása volt, melyben közel 30 képfeldolgozási eljárást implementáltam, mint például a Laplace élkeresés, binearizálás megadható küszöbértékkel, képek forgatása tetszőleges szögben, élesítés vagy éppen elmosás, vagy akár a különböző Java-s képtípusok és mátrixok között konverziót elvégző metódusok. Ezen felül még létrehoztam további olyan osztályokat, melyekkel a kép pontjain tudok hatékonyabban dolgozni, clusterekbe rendezhetem őket, melyeket eltérő színezéssel meg is jelenítek vagy éppen befoglaló négyzetet számíthatok rájuk ( ábra). 40. ábra: Teszt-keretrendszerem clusterező algoritmusának végeredménye 64

65 41. ábra: Teszt-keretrendszerem befoglaló négyzet számítás utáni eredménye Szeretném akkor utólag bemutatni tesztképeim két fontos szereplőjét, a fentebb látható két cicát, melyek az éjszakába nyúló programozások alkalmával is mindig mosolyt csaltak az arcomra, és a hátteret is, melyre a továbbiakban majd részletesebben kitérek Datamatrix kód megtalálása egy képen Az elgondolásom alapjául a datamatrix és szinte bármilyen egyéb vonalkód legfőbb vonásai szolgáltak. Jellegzetesen fehér háttéren fekete vonalak vagy pöttyök váltakozása. Ilyet egy képen lehetne keresni öntanuló vagy datamatrix mintázatú területen tanított textúra szegmentációval. Vizsgálhatnánk a képen hol van nagy intenzitásváltozás, azaz sűrűn előforduló fehérből-feketébe váltás vagy fordítva. De talán az egyik legegyszerűbb megoldás a binearizálás. Ehhez egy saját függvényt írtam, melynek paraméterben átadható, hogy milyen színértékek között színezzen valamit hasznos pixelnek, és milyenen ne (42. ábra) [31]. 65

66 42. ábra: Teszt-keretrendszerem eredményképei binearizálás után Erre azért van szükség, mert vannak olyan képek, ahol az ég, ajtófélfa vagy bármi más fehérebb, mint a datamatrix nyugalmi zónája, vagy épp a háttérben álló macska ugyan olyan fekete, mint a datamatrix sötét cellái. Ezzel a módszerrel iteratívan lehet változtatni az értékeket, hogy a lehető legtöbb - számunkra zajt kiszűrjük a képből, és akár már elsőre csak a megfelelő ponthalmazt találjuk meg. Az alábbi képen (43. ábra) jól látható például, hogy a korábbi paraméterekkel, az algoritmus binearizálás után semmi lényegi információt nem talált, mivel a datamatrix fehér része valójában inkább szürke a fényviszonyok miatt, és maga a flakon, amin szerepel, már az is világosabb, mint ő. Ezért van szükség az iteratívan léptető színérték menti vágásra ( thresholdolásra ) (44. ábra). 43. ábra: Teszt-keretrendszerem eredményképei első iterációs rossz binearizálás után 66

67 44. ábra: Teszt-keretrendszerem eredményképei első iterációs jó binearizálás után Egy másik szemléletes példa, ha a háttérben valami olyan fekete van, mint amilyen a datamatrix adatainak jelölése. Az alábbi képen jól látható, hogy a cicának a mellkasa is bekerült a datamatrix clusterébe, mivel színtartományban közel volt, továbbá mert a távolságszámítás szerint is lehetne akár még a datamatrix adat-ponthalmaz része (45. ábra) [30]. 45. ábra: Teszt-keretrendszerem eredményképe szándékosan rosszul paraméterezett vonalkódkeresésre Ez utóbbi hibák kiküszöbölhetőek úgy, hogy a fekete pontokra binearizálunk [31], azaz arra, ami a datamatrixban az adatot jelöli, viszont ugyan ezt megcsináljuk a fehér pontokra is, és csak azon fekete pontokat vizsgáljuk, melyeket valami fehér zár közre. Így elkerülhető, hogy a nyugalmi zónán kívül eső sötét pontot is adatpontnak vélje az algoritmus. 67

68 Az egész eljárás lényege, hogy olyan sötét pontokat keresünk, melyeket fehér pontok zárnak közre. Az ilyen fekete pontokon aztán végigjárunk, csoportokba zárjuk a pontokat, majd további vizsgálatokat végzünk rajtuk, hogy tényleg datamatrix lehet-e a clusterezett ponthalmaz (46. ábra). 46. ábra: Teszt-keretrendszerem eredményképe clusterezés után Ezek után megkeresem a csoportosított ponthalmazok befoglaló polygonját, majd ezek mentén kivágva a képrészletet vizsgálom meg, hogy valójában datamatrixot találtunk-e, vagy az iteratív eljárással változtatni kellene a paramétereken, esetleg eljutottunk egy olyan pontra, hogy túl régóta fut már a keresés, és valószínűleg nincs semmilyen vonalkód a képen. Az alábbi két kép két különböző hátterű tesztképen mutatja a megtalált régiót (47. ábra). 47. ábra: Teszt-keretrendszerem véglegesnek tekinthető eredményei 68

69 Az algoritmus robosztussága tovább javítható a már korábban említett egyéb eljárások használatával is, mint pl. az él-keresés vagy a textúra szegmentáció (48. ábra). Az előbbi például azért lehet hasznos, mert tudjuk, hogy a datamatrix jobb oldalán és alul kötelező jelleggel egy összefüggő sötét vonal található. Így ha a képet élesítjük, - mivel hogy a Laplaceélkereső érzékeny a zajra [31] - majd egy magas értékkel thresholdoljuk és végül lefuttatjuk rajta az él-keresést, bizonyos képeken hasznos plusz információhoz juthatunk. 48. ábra: Teszt-keretrendszerem egy alternatívája módosított él-kereséssel Ezen a fent látható képen (48. ábra) ott jelentkezik a probléma, hogy a háttérben látható ajtó mintázata is tartalmaz olyan egybefüggő vonalakat, mely akár datamatrix határoló szimbólum is lehetne. Összegezve az eredményeket, azt lehet elmondani, hogy Datamatrix vonalkód megtalálása egy képen, koránt sem triviális feladat, és többféle járható út is kínálkozik. Az egyik legjobb megoldást úgy érhetjük el, ha a különböző megközelítéseket mind felhasználjuk az eredmény pontosításához. A három fő tényező, amiből én kiindultam, hogy életszerű képeken is megtaláljam a datamatrixot, a következőek: A datamatrix fehér és fekete cellákból épül fel. o Alulátersztő szűrő alkalmazásával, jól beállított csúcsérték mellett megtalálhatjuk a vonalkód összes fekete celláját, plusz rossz esetben még némi zajt is a háttérből. 69

70 o Felüláteresztő szűrő alkalmazásával és jól beállított csúcsérték mellett megtalálhatjuk a vonalkód összes fehér celláját, plusz szintén némi zajt a háttérből, ha nem volt szerencsénk. o Az alul- és felüláteresztő szűrők eredményeinek uniója tartalmazza majd a vonalkódunkat, és némi zajt a háttérből [30]. o Ha nem csak egy csúcsérték alatt és felett vizsgálódunk, hanem két csúcsérték között, akkor iteratívan végig tudunk menni a színskálán rekurzív hívásokkal, és sokkal pontosabban ki tudjuk szűrni a háttérzajt, a legtöbb esetben szinte teljesen el is tüntetve azt. Ehhez persze vagy tisztában kéne lennünk a megfelelő színtartományokkal, ahol keresnünk kell, vagy minden iterációnak meg kell próbálnia utolsó lépésként a vonalkód felismerést, és ha nem sikerül, lépteti tovább a ciklust, illetve bizonyos idő elteltével akár terminálhatja is magát. A datamatrixnak a bal oldali és az alsó határoló cellája egybefüggő vonal, így élkereséssel felfedezhető. Természetesen ez esetben is számolni kell a háttérből eredő, hozzárakodó zajokkal. A vonalkódoknak nagy az intenzitásváltozása, ergo olyan területet kell keresnünk a képen, ahol kis részeket vizsgálva is sok a világos és sötét pixelek váltakozása. Még egy használható információ, hogy tudjuk, a vonalkódot nyugalmi zóna veszi körül, ami általában annyit takar, hogy a sötét polaritású vonalkódot fehér háttérre nyomtatták. Ezek az általam vázolt megoldások természetesen nem csupán datamatrix vonalkód észlelésére lehetnek alkalmasak, hanem bármely vonalkódéra, mely a következő tulajdonságok valamelyikével vagy mindegyikével rendelkezik: Sötét és világos színekből épül fel. Élek találhatóak benne. Nagy az intenzitásváltozás (sötét és világos színek váltakozása). Nyugalmi zóna veszi körül a vonalkódot, ami elüt a háttértől. Olyan elektronikus eszközökön, ahol emberi beavatkozás is feltételezhető, mint például a mobiltelefon, nagyban egyszerűsíthető az algoritmus egy olyan megoldással, hogy a kamera által megjelenített képre egy célkeresztet teszünk, és a vonalkód sikeres megtalálásának feltétele, hogy a célkereszt a vonalkód felett legyen a keresés elindításakor. Így rögtön meg tudjuk állapítani a világos és sötét színek tartományát, hiszen a célkereszt közvetlen 70

71 közelében lévő pixelekről beszélünk. Egy másik alternatíva lehet a kamera képén egy befoglaló négyszög megjelenítése, és a vonalkódnak ebben a négyszögben kell minél pontosabban elhelyezkednie. Tovább egyszerűsíthető a detektálás korlátozott erőforrásokkal rendelkező képeken, ha kifejezetten meghatározzuk, hogy milyen vonalkódot keressen a program, ne neki kelljen kitalálnia az összes lehetőség végigpróbálgatásával. A képfeldolgozást taglaló alfejezetben végezetül szeretném még bemutatni az általam kreált, eredeti tesztképeket, melyek mindegyike a valós szituációk egy vagy több különböző eshetőségét igyekezett lefedni (49. ábra). Eredeti Balu vagyok üzenetet kódoló kép. Az eredet kép síkban megforgatva 90 fokkal. Perspektivikusan torzított eredeti kép. Hullámos felületre elhelyezett és megforgatott kép. Térben nyújtott és elforgatott kép. Zajos kép. Színskála-módosított és enyhén szemcsés kép. Valóságszerű kép, térbeli torzítással, forgatással és sok zavaró elemmel a háttérben. Se egyéb zavaró tényező felvitele, se a képminőség rontása nem változtatott az algoritmusom hatásfokán. 49. ábra: Tesztképek a keretrendszeremhez 71

72 5. Elektronikus jegy-rendszer bevezetése egy kitalált cégnél Az utolsó fejezetben egy olyan rendszer megalkotását taglalom, melyet egy általam kitalált, tömegközlekedéssel foglalkozó cég szeretne bevezetni. A rendszer természetesen az elektronikus jegyek bevezetését és használatát valósítaná meg, a céget pedig a realitás kedvéért akár a Budapesti Közlekedési Vállalatnak, más néven BKV-nak, is tekinthetjük, de lényeges szempont, hogy a diplomamunkám alkalmazhatósága nem merül ki egy szakterületen, bármely más céggel is szimulálható lett volna A rendszer céljának leírása a megrendelő cég szemszögéből A megrendelő egy olyan elektronikus jegyrendszer bevezetését szeretné, mely nagyban megkönnyíti az utasok jegyvásárlását, nyomon követhető, pontos statisztikát ad az utazási szokásokról (így a járatok menetrendjének kialakításában is jelentős szerepet kaphatnak ezek az adatok), valamint a tömegközlekedési járműveket jogtalanul használó személyek kiszűrésére legalább akkora hatékonysággal képes, mint a jegy-alapú rendszer. Az elektronikus jegy nem függhet a mobiltelefon típusától (természetesen reális keretek között, pl. az 1 évnél nem idősebb telefonok 80%-án elérhetőnek kell lennie a szolgáltatásnak) és a mobilszolgáltatótól. Használata nem bizonyulhat bonyolultabbnak, mint egy SMS elküldése, valamint egy SMS vagy MMS fogadása, ugyanis az emberek nagy többsége ennek a technikai tudásnak birtokában van, míg például a WAP használatát ennél jóval kevesebben sajátították el, nem beszélve a legújabb technológiákról, melyeket csak egy viszonylag szűk, a technika iránt fogékony réteg használ ki. Az elektronikus jegyrendszer főként azok számára szeretné megkönnyíteni az utazást, akik csak átutazóban vannak, vagy időszakosan tartózkodnak a városban, így az utazás megkezdése előtt nem rendelkeznek utazásra jogosító szelvénnyel. Számukra az elektronikus napijegy és vonaljegy bevezetése fontos. Egy másik célcsoport a rendszeres bérletvásárlók. Ők ugyanis a bérletszelvény lejártakor kénytelenek sorban állni a bérletpénztárak előtt. Számukra az elektronikusan igényelhető bérlet lenne a legsürgetőbb megoldás. 72

73 5.2. A rendszer funkcionális követelményei Bemenetek az SMS-ek, melyek tartalmazzák a jegyrendelés követelményeit. Erre a rendszer válasza egy megfelelően kódolt SMS-jegy, illetve SMS-bérlet, mely az utazási feltételeknek megfelelő használat során érvényes utazást biztosít a felhasználónak, ami ellenőrizhető. A rendszernek alkalmasnak kell lennie nagy mennyiségű vásárlás valós idejű kiszolgálására (telefontársaság vagy szolgáltató felelőssége). Képesnek kell lennie nagyfokú terhelés mellett is megbízható működésre anélkül, hogy a szolgáltatás minőségében érezhető csökkenés következne be. Az SMS igénylése és a visszakapott elektronikus szelvény megérkezése között maximum 30 másodperc telhet el átlagos üzemi terhelés mellett. Szükséges, hogy a javasolt értéket meghaladó terhelés felett is stabil maradjon a rendszer. Némi késleltetéssel, de mindenképp szolgálja ki a beérkező vásárlási kérelmeket. Az igényelt jegyeket több évre visszamenőleg archiválni kell, hogy visszakereshetőek legyenek probléma esetén, vagy anonim statisztikák készítéséhez. A hosszú távú archiválás nem tartalmazhat személyiségi jogokat sértő adatokat, továbbá a tárolt rekordokból nem szabad, hogy kikövetkeztethető legyen a vásárló személye vagy bármilyen személyes adata. Szükséges a magas fokú diszkréció megőrzése. A rendszerben lévő adatok biztonsága az elvárható legnagyobb gondossággal legyen biztosítva. Az adatok tartalmi információjának biztonságára kell figyelni, hogy azok ne kerülhessenek ki illetéktelenek kezébe. Ezzel is csökkentve a rendszer feltörhetőségét. A jegyvizsgálóknál lévő SMS-jegy ellenőrző szoftver megbízhatósága 95% fölött kell, hogy legyen. Továbbá az ellenőrző szoftver használata nem igényelhet komolyabb műszaki tudást, cél a felhasználóbarát és egyértelmű kezelőfelület. A rendszerben alkalmazott titkosító kódolás a termékek árához képest elvárható nehézségű kell, hogy legyen, ugyanakkor az ellenőrök készülékein alkalmazott dekódoló futása nem lépheti át az 1-2 másodperes futási időt. Az ellenőrök készülékein az ellenőrzésnek körülbelül 3 másodpercen belül kell lezajlania. A rendszer egy bejövő SMS-re, amely tartalmazza a megálló kódját és a jegy típusát küld egy megfelelően kódolt számsort tartalmazó SMS-jegyet. 73

74 A megállókban kihelyezett kódoknak nem szabad hosszúnak lenniük, és mindegyiknek könnyen azonosíthatónak kell lennie. Hibás SMS jegyrendelés esetén egy válasz SMS-t kap a felhasználó a hibásan elküldött jegyrendelési igényéről, és nem kerül levonásra semmilyen extra összeg a felhasználó egyenlegéről A rendszer nem-funkcionális követelményei Minden BKV megállónak lesz egy saját egyedi azonosító kódja, melyet a jegy rendeléskor meg kell adnia a vásárlónak, ezáltal lesz ellenőrizve, hogy melyik járatra érvényes a menetjegy. Ezen felül egy normál SMS-jegy megvásárlásától számított 1 órán keresztül érvényes. Átszálláskor természetesen új menetjegyet kell megváltani. A vásárlók tájékoztatására minden BKV megállóban és járaton plakátok hirdetik, hogy milyen formában és milyen tarifával vehető igénybe az elektronikus SMS-jegy szolgáltatás. Egyéb nem-funkcionális követelmények, melyek konkrét pontosítást igényelnek (50. ábra): Tulajdonság Mérés Sebesség Méret Egyszerű használhatóság Megbízhatóság Robusztusság Hordozhatóság A másodpercenként feldolgozott tranzakciók száma A szoftver mérete kbyte-ban Szükséges képzési idő Felhasználóknak egyszerű használhatóság Ellenőröknek részletesebb oktatást igényel A hibák átlagos bekövetkezési ideje Annak valószínűsége, hogy a rendszer nem áll rendelkezésre Rendelkezésre állás Újraindulási idő hiba után A hiba okozta adat-meghibásodások valószínűsége A célrendszerek száma 50. ábra: Nem-funkcionális követelmények és mérésük 74

75 5.4. Szakterületi követelmények vázlata Ellenőrök oktatása az új rendszer használatával kapcsolatban. Jegyrendszer ismerete, jelenlegi rendszer áttekintése, esetleges módosítása. Jogi esetek felmérése az esetleges, jövőbeni, vásárlói panaszok kapcsán. Programot üzemeltető, felügyelő, karbantartó, fejlesztő hozzáértő alkalmazottak felvétele. A rendszer folyamatos üzemeltetéséhez szükséges emberi erőforrások részletezése műszakonként: o Két felsőfokú informatikai végzettséggel rendelkező szakember (hiba esetén mozgósítandóak, nem állandó felügyelet). o Két középfokú informatikai végzettséggel rendelkező szakember (állandó felügyelet). o Két alkalmazás-adminisztrátor (a jegyrendszerben szereplő adatok módosítása, beállítása, ellenőrzése). o Igénytől függő számú jegyellenőr oktatás céljából, akik az új készüléket és annak kezelhetőségét megtanítják az alkalmazottaknak Egy használati eset forgatókönyvének felvázolása Felhasználó oldali forgatókönyv (51. ábra): 1. A felhasználó megérkezik egy BKV megállóhoz. 2. Jegyet szeretne vásárolni elektronikusan. 3. BKV megállóban a leendő utas SMS-t küld a BKV megadott telefonszámára 4. A központ rövid időn belül visszaküld egy válasz üzenetet, amely lehet elfogadó, ilyenkor egy kódsorozatot és egy időpontot kap a leendő utas, így érvényes jeggyel fog rendelkezni a megadott időpontig vagy lehet elutasító, ilyenkor pedig az ügyfélszolgálat telefonszámát kapja meg, ahol érdeklődni tud a sikertelenség okáról. 5. Kellemes utazás a BKV járatán. Ellenőr oldali forgatókönyv: 1. Műszak kezdete, az ellenőr a leolvasó készülékkel bejelentkezik a központba a saját felhasználó nevével és jelszavával. 2. A bejelentkezés után a központból letöltődik az aznapi érvényes kódgenerálás. 75

76 3. Az ellenőr beállítja a leolvasó készüléknek az ellenőrizendő járat járatszámát, majd felszáll. 4. Menetjegyek ellenőrzésekkor az egyik utasnak elektronikus jegye van, megkéri az utast, hogy nyissa meg a válasz SMS-t, amely a kódot tartalmazza, majd mutassa fel a leolvasó készüléknek. 5. A készülék leolvassa a kijelzőt, majd ellenőrzi, hogy a kód érvényes-e. 51. ábra: Egy lehetséges használati eset UML diagram 5.6. Az elektronikus utazási jegy bevezetésének célja Időspórolás a jegyvásárlóknak. Nem helyhez kötött jegyvásárlás lehetősége. Jegyek érvényesség ellenőrzésének biztosítása. Jegyekkel való visszaélés, csalás megelőzése. Jegyellenőrök munkájának segítése (akár gyorsabbá tétele, persze ehhez ki kell dolgozni a büntető rendszer meggyorsítását is). Utasszállító vállalatok jegyekből származó bevételeinek biztosabbá tétele (talán többen veszik meg, többet lehet ellenőrizni). 76

77 Egyszerűbb jegyvásárlás ( biztonságosabb: nem látják, hogy sorban áll, és nem tudják, hogy pénz van nála, nem tudják, hol tartja a tárcát). Környezetvédelem (a fölösleges szeméttermelés kiiktatása). Vásárlási statisztikák alapján marketing és célirányosabb üzleti logika kigondolása a nagyobb haszon érdekében. Az elektronikus jegyek bevezetésénél élnünk kell a következő feltételezésekkel: Az emberek inkább megveszik a jegyet így, mint várnak a sorokban. A telefontársaságok, és az utasszállító vállalatok megegyezése/szerződése akár a haszon megosztásának figyelembevételével, de létrejön Létrehozandó termékek, szolgáltatások és elvégzendő feladatok Telefonvállalatokkal való szerződés, és a jegyrendszer programjának megvalósítása, üzenetek kódolásának megoldása. Telefonvállalatokkal való szerződés, és a jegyrendszer programjának megvalósítása, üzenetek kódolásának megoldása. Büntető rendszer megoldása, annak egyszerűsítése. (Helyben való fizetés telefon útján történő megoldhatósága esetleg, kiszűrendő a "na akkor inkább leszállok" megoldás.) Jegyrendszer elérésének (SMS, MMS, WAP, web) megtervezése és leprogramozása. Attól függően, hogy milyen kódolást választunk, annak megjelenítésének és a bármilyen telefonra alkalmazhatóságának megoldása. A rendszer egységei közötti kommunikáció specifikálása, az adatreprezentálás módjának megalkotása, a biztonsági kockázatok felmérése. Redundáns, telefonvonalra kapcsolt SMS-szerver konfigurálása, programozása. Automatikus biztonsági mentések készítésének megszervezése, a tárolás biztosítása. A központi szerver megfelelő védelmének kialakítása (tűzfal, jogosultságok beállítása). Telefonos alkalmazások megvalósítása (lehetőleg platform független nyelven). Jegyellenőrző kapuk megvalósítása, és a rendszerbe történő integrálása. 77

78 5.8. A rendszer architekturális modellje Az adatfolyam modell funkcionális szemszögből mutatja be, hogy hogyan dolgozza fel a rendszer az adatokat, és ezek áramlását is. Ezen felül reprezentálja a különböző állapotok között. Az ellenőrzés adatfolyam modellje (52. ábra): 52. ábra: Ellenőrzés folyamatának adatfolyam modellje Napi kód lekérése: ellenőr adatfolyam modellje (53. ábra): 53. ábra: Adatfolyam modell az ellenőr napi kódlekérdezésének folyamatáról Napi kód lekérése: központi adatfolyam modell (54. ábra): 54. ábra: Szerver oldali adatfolyam modell 78

79 Szerver oldalon beérkező igénylés adatfolyam modellje (55. ábra): 55. ábra: Szerverre befutó igény adatfolyam modellje A rendszer rétegezett architektúra modellje (56. ábra): 56. ábra: Az elektronikus mobiljegyek rendszerének rétegezett architektúra modellje Alrendszerek definiálása: Szerver o Központi adatbázis Regisztrált felhasználók hozzáadására és adminisztrálására szolgáló alprogramok Megállószámok megváltoztatását szolgáló szubrutinok Jelenleg érvényes vonaljegyek és bérletek megváltoztatását szolgáló szubrutinok Vonaljegyek megváltoztatását szolgáló szubrutinok Bérletek megváltoztatását szolgáló szubrutinok Biztonsági másolatok készítését végző időzített alprogramok o Telefonhálózati interfész Bejövő SMS-ek fogadására szolgáló alrendszer 79

80 Kimenő SMS-ek küldését szolgáló alrendszer o Kérésfeldolgozó szubrutinok Adatbázis bejegyzések írását szolgáló műveletek Kódgenerátor indítására és konfigurálására szolgáló alegység Regisztrációs kérelmek kezelése Adatbázis lekérdezési templatek o Kódgenerátor o Adminisztrációs felület Adatbázis biztonságáért felelős alegységek Régebbi adatbázisdumpokból adatok kinyerésére szolgáló szubrutinok Hibaelhárítás o Vendég felület (online, bankkártyával történő bérletigénylésre) Hitelesítés Elektronikus készpénz átutalási megbízás o Internetes felület (kódvalidáció lebonyolítására) Ellenőr oldali telefonos alkalmazás validációs kérelmeinek fogadása Kódvalidátor konfigurálása Eredmény visszaküldése Felhasználó oldali telefonos alkalmazás o kommunikációs interfész o grafikus felhasználói interfész Ellenőr oldali telefonos alkalmazás o Grafikus felhasználói interfész Ellenőrzési feladatokat kiszolgáló szubrutinok o Kommunikációs interfész Napi kódot lekérő szubrutin Nap végén a teljesítéseket szummázó szubrutin o Képfelismerő modul o Karakterfelismerő modul o Kódvalidátor 80

81 Ellenőr oldali alrendszerek UML-je (57. ábra): 57. ábra: Az ellenőr oldali alrendszerek UML diagramja Szerver oldali alrendszerek UML-je (58. ábra): 58. ábra: A szerver oldali alrendszerek UML diagramja 5.9. A rendszer tesztelési tervei Két részre bontjuk a tesztelési terveket: szerver oldali tesztelés ellenőrző készülék oldali tesztelés Általános megjegyzések az egység- és rendszertesztekhez: Igyekszünk a fejlesztési fázis már korai szakaszaiban a komponens és integrációs teszteknél rálelni a lehető legtöbb hibára, mert később a kész termékből már nehezebb lesz az esetleges bugokat, hibákat vagy hiányzó funkciókat kiemelni, 81

82 pótolni. Ehhez a tesztelések során is mérföldköveket fektetünk le, és az egyes mérföldkövek elérése mind felénk, mind a megrendelő számára a szoftver minőségét igazoló informatív jellegű jel lesz. Bevett tesztstratégiaként mi is használjuk azt az elvet, hogy egy szoftverben ahol egy hiba van, annak környékén több is akad. Így igyekszünk nagyobb ráfordítást szentelni az esetleges hiba-clusterek felfedésében, majd ezek után mindig végrehajtjuk a regressziós teszteket. Mivel sajnos az elvi felépítésből eredendő hibákat a komponens és integrációs teszteknél nem tudjuk még felfedezni, a rendszertesztek fázisa után folyamatosan összevetjük a specifikáció követelményeit a megfelelő tesztesetekkel, és review-kat alkalmazunk. A stabil és robusztus működés a megrendelő egy kiemelten fontos kívánsága, attól hogy a definiált tesztesetek már nem jeleznek hibákat vagy hiányokat, a fejlesztői gárdának mindenképpen implementálnia kell a rendszerbe worst-case-scenerio-s megoldásokat is. A tesztfolyamat a következő szigorú részekből tevődik össze (59. ábra): 59. ábra: Tesztelési lépések folyamatábrája a rendszer fejlesztésekor Szerver oldali tesztelés: Komponens teszt: A szerver oldali program moduláris felépítéséből adódó komponensek egyedi tesztjeit a program bonyolultságának elenyésző komplexitása miatt a programozók 82

83 maguk végzik el. A komponenseknek eleget kell tenniük a komponens specifikálásakor lefektetett követelményeknek, illetve elő- és utófeltételeknek. Integrációs teszt: A tervezett interface-ek hibáinak felderítése végett, a komponensek integrálása után egy szigorú integrációs tesztet vezetünk végig az SMS szolgáltatást nyújtó szerződtetett telefontársaság(ok) és a szerveroldali feldolgozó program között, különböző tesztstratégiákat figyelembe véve, hogy a későbbiek folyamán szinte közel 0-ára redukáljuk a telefontársaság szolgáltatása miatt bekövetkező esetleges hibák megbúvásának esélyét. Rendszerteszt: A DIN-ISO 9126-nak megfelelően hajtjuk végre a használhatóságra, módosíthatóságra, funkcionalitásra, portabilitásra, megbízhatóságra és hatékonyságra vonatkozó rendszerteszteket, hogy ráleljünk a szoftvertermékben rejlő funkcionális és nemfunkcionális hibákra a rendszer viselkedésében. White box teszt: Az SMS jegyek strukturális ismeretére alapozva a jó és rossz SMS jegyek teszteseteire tesztadatokat generálunk, melyek lefedik az azonos ekvivalencia osztályokba tartozó teszteseteket. A program generálja a helyes SMS-jegy igényeket és küldi a szervernek. A szerver válasz SMS-eket küld a programnak vagyis elektronikus jegyeket, miután feldolgozta a bejövő üzeneteket. Ezzel tesztelhető a szerver oldali helyes kiszolgálás viselkedése. Black box teszt: Teszt programmal a szerver oldali kiszolgálás tesztelése helytelen SMS-jegyek esetén. A program generálja a helytelen SMS-jegyeket, például: "autó", "Imre", "gsgf987" és küldi a szervernek. A szervernek észre kell venni a hibát és figyelmeztető SMS-t kell küldenie a programnak további útmutatással. Terhelés teszt: Teszt programmal a szerver oldali kiszolgálás tesztelése változó SMS-jegy forgalom esetén. A program ciklusban generál feldolgozandó SMS-t pár másodperc alatt és a rendszer nem omolhat össze, szigorú elvárás a rendszerrel szemben a stabil robosztus működés. Amennyiben a rendszer elbukik a terhelés teszten, javaslat a fejlesztői gárdának a többszálú programozást támogató pool-ok használatára az erőforrások szétosztása végett, így az SMS-ek feldolgozása érkezési sorrendben kis késleltetéssel, de biztosan befejeződik. 83

84 További tesztek: A rendszerkövetelményeknek megfelelően az üres SMS-eket, illetve az olyat, ahol az SMS jegy ára nem vonható le a feladótól (például ingyenes internetes SMS küldési lehetőség), ezeket is le kell kezelnie a rendszernek. Megrendelő tesztesetei: A megrendelő tesztadataival a szoftvertermék specifikációnak megfelelő futását mutatjuk be. Ellenőr oldali tesztelés: Komponens teszt: az ellenőrök készülékein futó SMS-jegy detektáló, illetve -kinyerő, a jegy értékét dekódoló és az ellenőr számára a készülék rendszerüzeneteit generáló komponensek tesztelése. Integrációs teszt: a fentebb említett készülék-komponsensek kommunikációjának átfogó tesztelése előre definiált tesztesetekre. White box teszt: Az SMS-jegyek hitelességének vizsgálata. A helyes formátumban küldött SMS-jegyekre szkenelhető érvényes válasz SMS-jegyek küldése. Ha a szerver szándékosan hamisított jegyet kap, akkor azt észre veszi és egyéb jelentést ír róla a felhasználónak és az üzemeltetőnek is. Black box teszt: A különböző SMS-jegyek beolvasásának a tesztelése. Ha a rendszer csak a megadott formátumot olvassa SMS-jegynek. Például: Ha képet kap egy tárgyról, azt ne értelmezze jegynek. Szkenner teszt: A különböző telefonokról való leolvasás tesztelése. Eltérő kijelzőjű és struktúrájú telefonok szkenelhetőségének tesztelése Elektronikus jegykezelő rendszer egy gyakorlati megvalósítása Munkám végső fázisaként implementáltam egy működőképes elektronikus jegyek kiszolgálását lehetővé tévő rendszert az eddig tárgyaltak alapján. Mivel diplomatémám egyik fő aspektusa volt az utazási jegyek megvalósítása elektronikus vonalkódok formájában, így az 84

85 általam írt megoldásban is a kétdimenziós Datamatrix vonalkódot használom a jegyek információtartalmának tárolásához. A korábbi, általánosított példában főképp olyan megoldást taglaltam kezdetben, ahol az SMSjegy egy egyszerű szöveges SMS mindenféle vonalkód felhasználása nélkül. De nézzük is, hogy ennek mik a hátulütői, és miért lenne célszerűbb az általam preferált kódot felhasználni. Képzeljük el a jelenleg még papír alapon működő vonaljegyeket. Egyik metróállomáson kilyukasztom, akkor kapok rá egy nyomtatott kis számsorozatot. Ha két megállóval arrébb utazok, majd ott is újból kilyukasztok egy vonaljegyet, a két számsort összevetve már is rengeteg mindent ki lehet találni belőle. Például könnyen megtalálható, hogy mely pozíciók jelölik az aktuális dátumot és időt, illetve az állomás sorszámát. Ily módon a jegy érvényességét igazoló számsorozat könnyűszerrel hamisíthatóvá válik, ha ez bárkinek is érdekében állna. Mivel haladunk a korral, oda kell figyelnünk a zöld-technológiák alkalmazására, és szükség van a pontos és megbízható statisztikákra, idővel át fogunk térni az elektronikus jegyekre mi is. Itt történik az első bökkenő, ha nem vagyunk elég felkészültek. Papír alapú jegynél még visszatartó tényező volt, hogy jegyhamisításhoz az utazási jegy papírját is hamisítani kéne. De egy digitális jegynél ennek már semmi akadálya. Hiszen az elektronikus jegyek a készülékek memóriájában tárolódnának SMS formájában, és ha valaki egy csöppnyi erőfeszítéssel visszafejti a számsorozat kódolását, továbbá meg van áldva némi informatikai képzettséggel, könnyűszerrel kezdheti kreálni magának az érvényes utazási jegyeket anélkül, hogy akár egy ellenőrnek is szemet szúrna ez. Az első megoldás az lenne, hogy akkor titkosítsuk úgy az SMS tartalmát, hogy ne lehessen könnyedén, rövid időn belül visszafejteni a kódolást. Ez működne is, hiszen rengeteg jól bevált titkosítási algoritmus létezik már. Ugyanakkor ez a megoldás magával vonná azt a következményt, hogy nem csak visszafejteni, de ellenőrizni is sokkal nehezebbé válna az elektronikus jegy, hiszen ezután az ellenőr már nem tudja megmondani ránézésre, hogy érvényes-e a kód. Persze lehetne játszani a kódolással, hogy pl. bizonyos pozíciókba egyes napokon mindig ugyan az a kód szerepel, de ez is könnyen kitalálható, továbbá bonyodalmasan kezelhető, és csak ránézésre mondhatnánk meg, hogy egy jegy valódi lehet talán. o Egyik megoldás lenne, hogy az ellenőr folyamatos összeköttetésben áll a jegyeket kiállító szerverrel, és ellenőrzés alkalmával bepötyögi a kódolt üzenetet a gépébe, ami aztán lekérdezi a szervertől, hogy történt-e ilyen 85

86 vásárlás. Ez borzasztó időigényes megoldás, ha mindenkit ellenőrizni szeretnénk, kígyózó sorokban mérhetnénk a hatékonyságát. Továbbá a mellégépelés esélye is igen magas. o Egy másik megoldás lehetne, hogy az ellenőr készüléke képfeldolgozási algoritmusokkal próbálja meg kinyerni a megnyitott SMS üzenet tartalmát, és vagy lekérdezi a szervertől, hogy vásároltak-e ilyet, vagy ő maga dekódolja, és állapítja meg, hogy a tartalom alapján érvényes lehet a jegy. Ez még kivitelezhetőnek is hangzik, hiszen az SMS-ek szövegének betűtípusa viszonylag könnyedén felismerhető OCR (Optical Character Recognition) technológiával. Ugyan akkor balgaság lenne már is ilyen nagy fába vágni a fejszénket, mert különböző telefonoknak különböző a kijelző mérete, a világossága, egyeseknek tükröződik a felülete bizonyos fényviszonyok között, másoknál sokkal kevesebb vagy épp több karaktert tudunk megjeleníttetni a képernyőn egyszerre. Ezekre mind gyógyír lenne a kétdimenziós Datamatrix vonalkód alkalmazása, ugyan is teljesen indifferens számára, hogy mekkora képernyőn jelenítjük meg, hiszen könnyűszerrel átméretezhető úgy, hogy még mindig olvasható marad a kód. Továbbá aki egy Datamatrix SMS-jegyet szeretne visszafejteni, nem elég, hogy a titkosítással meg kéne küzdenie, de még a vonalkódolás rejtelmeibe is bele kéne ásnia magát, hogy sikerre vigye az akcióját. Ezekre alapozva döntöttem amellett, hogy az én tesztrendszeremben a kétdimenziós Datamatrix vonalkód fogja megtestesíteni az SMS-jegy hordozó formátumát. Alapból természetesen egy mobiltelefonon sincsen olyan alkalmazás, ami képes lenne egy SMS-ből Datamatrix kódot kreálni és a képernyőn megjeleníteni. Pedig ilyen alkalmazások létrehozásához nincs is sok mindenre szükségünk. A választott programozási nyelvből ezeket a funkciókat kell tudnunk elérni: Tárolt SMS-ek tartalmának beolvasása. ( Létrehozás dátuma és a feladó címe is jól jöhet. Az SMS megérkezésének dátuma jól jön, ha már több SMS jegyünk is van a telefonon. A feladó számának lekérdezése pedig azt a lépést egyszerűsíti le, hogy minden SMS-be bele kelljen olvasnia a programunknak, hogy vajon Datamatrix-jegyre hasonlít-e a formátuma. Hiszen ha az utazási vállalat SMS-szerver számáról jött az üzenet, biztos, hogy nem szülinapi jókívánság. ) 86

87 Képernyőre rajzolás, hogy ki tudjuk tenni a feldolgozott kétdimenziós vonalkódot. Én e célból a Google Android operációs rendszerét és az erre a platformra használható Java programozási nyelvet választottam [33]. A 0.9-es verzióban volt beépített függvény a programozók számára, hogy végigiteráljanak az összes tárolt SMS-en, de ez valahogy az 1.0- ás verzióban már szó nélkül eltűnt. Én az 1.5-ös verziójú Android-ra fejlesztettem a megjelenítő alkalmazásom, aminek az API-jából arra nyílik csupán lehetőségünk, hogy SMS érkezéséről értesüljön a programunk, és az újonnan érkezett SMS-hez hozzáférjen. Az egyik amit tehetünk, hogy míg az alkalmazásunk fut, értesülhet a beérkező SMSekről, és ha a kiszolgáló szervertől jön SMS vagy az SMS tartalma megjeleníthető Datamatrixként, akkor ezt elmenti az alkalmazás magának egy lokális adatbázisba, amihez csak ő férhet hozzá, és ő is törölhet onnan. Egy másik megoldás egy hivatalosan nem támogatott út, hogy tudjuk az SMS-ek elérési útvonalát az operációs rendszeren, ráállítunk egy mutatót, és végigiterálunk az elemeken. A probléma a hivatalosan nem támogatott megoldásokkal az, hogy semmi sem garantálja, hogy ez mindig és mindenhol működni fog, így meg nehéz piacképes alkalmazást készíteni. Az egyszerűség kedvéért, és mert szimulátorban nem tudtam SMS-eket küldeni tesztelés céljából, egy helper osztályt hoztam létre, amiben eltároltam 3 tesztadatot. Ezt a 20x20-as, négyzetes Datamatrix-ot használtam a tesztadatok létrehozásakor, mely a V3;Arpad hid; karakterek sorozatát kódolja (60. ábra): 60. ábra: Az Androidos mobilalkalmazásomhoz használt teszt datamatrix Első kísérletezésekkor úgy próbáltam meg SMS-ben tárolni a Datamatrixot, hogy rögzítettem egy fejlécet: 20x20;, ami leírta a vonalkód teljes méretét a markereket is beleszámítva. Majd az adatcellák következtek oly módon, hogy negatív szám jelezte, ha fekete cella jön. 87

88 Továbbá pontosvessző választott el minden cellát, és az egész számok azt jelezték, hogy az az adott színből hány cella jön egymás után. Példa sor kódolására: 2;-1;7;-2;3;-1;1;-1;. De ez rendkívül pazarló megközelítésnek bizonyult. Pontosan 450 karakteres SMS keletkezett így, ami nem elfogadható. A második megközelítésben negatív számok csak az adatsorok elején lehettek, és azt jelölték, hogy sötét vagy világos a legelső cellacsoport. Utána a pontosvesszők mindig színváltást jelöltek, így nem volt szükség mindig feltüntetni a negatív értékeket. De ez sem bizonyult járható útnak, ugyanis 396 karakter volt még mindig az így kreált SMS hossza. A harmadik és végső formátumomban végül a pontosvesszőket is eltüntettem, azzal a feltételezéssel élve, hogy az azonos színcsoportba tartozó cellák 1 és 9 közötti értéket vehetnek csak fel. Feltehetnénk a kérdést, hogy ezt milyen alapon feltételezi az alkalmazásom, és hát én fel is tettem magamnak ezt a kérdést. Az általam használt 20x20- as négyzetes Datamatrixba közel 50 karakter tárolható, aminek én csupán csak a töredékét használtam fel. A legkisebb használható Datamatrix mérete 8x8 (61. ábra). Amiket mi tárolni kívánunk egy SMS jegyben, azok a következőek: Milyen típusú a jegy (jelölheti akár egy rögzített szám) Mely állomástól érvényes (szintén rögzíthető maximum 3 karakteren) Mikortól érvényes (év első két száma elhagyható, feltéve, hogy 3000 után nem akarjuk használni ugyanezt a rendszert) Ezek az információk akár egy 14x14-es Datamatrixban már elférnek numerikus adatként. 61. ábra: Datamatrix kapacitástáblázata a különböző formátumokra [28] 88

89 Amennyiben a feltételezés még sem állja meg a helyét, és lehet a kódolandó vonalkódunkban 9-nél nagyobb, egybefüggő cella, úgy csak az SMS kódolás formátumának a feldolgozását kell átírni hála a programom moduláris felépítésének. Erre az eshetőségre hagytam is egy elágazást a program struktúrájában, hogy kezelje, ha paraméterként azt kapja, hogy a feltételezéssel nem élhet. Ezen felül egy negyedik fajta kódolás is elképzelhető még. Mégpedig, hogy a fekete-fehér cellák minden lehetséges permutációjához hozzárendelünk egy értéket, úgy mintha csak egy Hash-táblát készítenénk. Ha folytonosan inkrementált egész számokat is alkalmaznánk csupán, egy 22x22-es datamatrix adatcelláinak összes lehetséges változata =2 20 = Azaz a Datamatrix bármely sorát le tudjuk írni egy legrosszabb esetben 7 soros számmal. Ez annyit jelent, hogy legrosszabb esetben fejléc + 20* szeparáló karakter ~= 160 karakteren tudunk tárolni 60 numerikus karaktert. Természetesen ehhez a megoldáshoz szükség van arra, hogy a vásárlók készülékén is ott legyen a megfeleltetési táblázat a Datamatrix felépítéséhez. Folytatván a korábban megkezdett gondolatmenetet, lényegében ezzel a harmadik fajta SMS kódolással sikerült 190 karakterre lezsugorítanom a 20x20-as Datamatrixot. Egy 14x14-es mátrix esetén ez leszűkíthető egy SMS tartalmára. Amennyiben még is több SMS-ben férne csak ki a kód, ilyen eshetőségre is szükségesek a szerződések a telefontársaságokkal. Biztos, hogy meg lehet velük egyezni és kedvezményes áron küldeni a jegyeket, vagy pedig belekalkulálni ezek összegét a vonaljegyek árába. A mobiltelefonos alkalmazásom tehát végigiterál egy külön futási szálon a tárolt SMS-eken, és ezt jelzi is a felhasználó felé (62. ábra): 62. ábra: Külön futási szálon végrehajtott SMS jegy értelmezés 89

90 Jelenleg úgy működik az eljárás, hogy minden SMS tartalmába beleolvas, és egy gyorstesztet végez, megpróbálja megkeresni a fejlécet az első karaktereken. Amennyiben talál fejlécet, megjelöli az SMS objektumot, és átadja egy teljes feldolgozásra. Ez a teljes értelmezés még mindig mondhatja, hogy nem volt érvényes az SMS vonalkód tartalma, ha bármi problémája merült fel a Datmatrix összeállítása közben. Majd a sikeresen értelmezett jegyeket a létrehozásuk dátuma alapján egy görgethető listában megjeleníti: (63. ábra) 63. ábra: A tárolt SMS jegyek megjelenítése A felhasználónak csak annyi a dolga, hogy kiválasztja a dátum alapján bemutatásra szánt jegyet, és a program meg is jeleníti az ellenőrnek (64. ábra): 64. ábra: A tárolt SMS jegyek megjelenítése kétdimenziós Datamatrix vonalkódként 90

91 Ezt a megjelenített vonalkódot az ellenőr a ZXing vagy más hasonló, mobiltelefonon is futó, vonalkódolvasó alkalmazással kiolvastatja, kinyeri belőle a Datamatrix vonalkód információ tartalmát, amit átad a dekódoló kulcsának, és már is megjelenik számára az eredeti, SMS szerver által összeállított üzenet: V3;Arpad hid; Ezt a megjelenítést természetesen szépen formázva jelenítjük meg majd az ellenőr felé, hogy ránézésből meg tudja állapítani a jegy tartalmát. Egy ilyen ellenőrzés a valóságban körülbelül a következő időtartamot öleli fel: SMS jegyet megjelenítő alkalmazás elindítása és az aktuális jegy kiválasztása függ attól, hogy csak ellenőr felszólítására történik meg ez, vagy már az ellenőrzőpont elérésekor készen van a jegy bemutatásra. Képfeldolgozó algoritmus futtatása az adat kinyerése érdekében 1-4 másodperc Kinyert adat dekódolása 1-2 másodperc Döntés a jegy érvényességéről 1-2 másodperc. Zökkenőmentesen 10 másodperc alatt elvégezhető az ellenőrzés. Természetesen nagy tömegben ez soknak számít, ha mindenkit ellenőrizni kívánunk. Ugyanakkor itt léphetne életbe a beléptető rendszerek bevezetése, egy forgó fémtárcsa, ami kamerával van ellátva. Ez a kamera és a hozzá tartozó feldolgozó egység akár összeköttetésben is állhat a központtal, és mindenkinek be kell mutatnia az SMS jegyét az áthaladás érdekében. Esetleg egy ellenőr vigyázhat a belépési pontoknál, hogy ne próbáljanak meg átsurranni, vagy ne rongálják meg a készüléket. Reklamáció esetén, vagy a régi papíralapú utazási jegy használatakor is segítséget tud nyújtani. Az ellenőröknél található jegyellenőrző eszközök tartalmazhatnak egy cserélhető memóriakártyát, amin folyamatosan logolnák az aznap beolvasott SMS jegyeket. Egy komolyabb készülék GPS vagy GSM bázisállomások alapján még azt is hozzáfűzhetné a rekordokhoz, hogy hol történt az adatok felvitele. Egy adatbázisból a koordinátához tartozó megállót is ki tudná keresni magának. Ezeket a memóriakártyákat a munka végeztével a készülékekkel együtt le kellene adni a vállalatnál, ahol egy szakember összegyűjtené őket, majd lementené az információt róluk, és egy program elindításával megtörténne az SMS szerver által jóváhagyott vásárlások és az ellenőrök által rögzített jegyek összevetése, továbbá mindezek archiválása későbbi statisztikai vagy marketingcélokra. Ily módon azonnal kitűnnének azok a rekordok, ahol az ellenőr olyan jegyet engedett át, amiért nem fizettek. Ez 91

92 esetben pedig azonnal le lehet cserélni a titkosítási kulcsot, és a hamisító másnap már fenn fog akadni az ellenőrök rostáján. A titkosításhoz használt dekódoló kulcsot a memóriakártyákat összegyűjtő szakember minden éjszaka visszatölthetné az eszközökre, amennyiben erre szükség van, mert változott a kód. Természetesen a készülékeknek az 1 évnél nem korábbi kulcsokat is meg kell őrizniük, hogy például régebbi érvényes éves bérlet ne akadjon fenn a megváltoztatott titkosítás miatt. Gondolni kell továbbá arra is, hogy az ellenőrök készüléke ilyen folyamatos használat mellett hamar lemerülhet. Ezért töltőket, esetleg csereelemeket kell számukra biztosítani, vagy az ellenőrző ajtók bevezetése felé kellene orientálódni. Eljutottunk addig a pontig, hogy már tudjuk, hogy valósul meg az elektronikus utazási jegy megjelenítése és ellenőrzése. Most ideje rátérni arra, hogy hogyan készül el egy ilyen utazásra feljogosító, digitális adat. De mielőtt erre rátérnék, még pár mondatban visszatérnék a biztonságosságot szolgáló ötletekre mind az ellenőr oldalon, kis trükkök alkalmazásával, vagy akár szerveroldali komoly titkosítás felhasználásával, továbbá pár, már korábban pedzegetett érdekes kérdés: Felszállhasson-e valaki ellenőrzés nélkül? Random ellenőrzések elegek-e, beszállásnál kell-e? Csak forgalmasabb helyeken van állandó ellenőrzés? Mi történik, ha én elküldtem az SMS-t, de valamiért nem kapok választ a szervertől? o Én készülékemben van a hiba (ellenőr lekérdezheti a szervert, hogy kapott-e erről a számról SMS-t mostanában a szerver! Ha nem, akkor sajnáljuk, szolgáltatójával beszéljen, miért nem továbbította az SMS-ét.) o A szerver túlterhelt (ezért kell a szerződés, hogy ilyen ne fordulhasson elő, garantálják nekünk, hogy ez nem esik meg.) o Éterben veszett el az üzenet, és mondjuk csak fél óra múlva kapnám meg. SMS karakterformátuma is egy bizonyos szabványos, jól olvasható fonttípus. Esetleg a válaszkódot, ami betű és számok sorozata, is felismerhető kamerás rendszerrel. (Érdemes lenne elgondolkodni azon, hogy a válaszkódban vannak bizonyos betűkszámok, amik mindig változnak az adott dátumtól és esetleg óráktól függően. Így ránézve is viszonylag biztonságosan megmondható, hogy valaki tényleg akkor vette-e az SMS jegyét, azért, hogy ne legyenek akkora torlódások, ha esetleg elromlana a kamerás felismerés.) 92

93 Egyszerű lineáris kódolást nincs értelme használni, mert küldünk pár SMS-t, és ha még van kis affinitásunk is hozzá, pillanatok alatt visszafejthető a kódoló eljárás. Egy jó megoldás lenne, hogy md5, sha-1, dsa vagy hasonló titkosítást használnánk. Itt van pár példa php-n implementált md5(message digest)-ös kódolásra. A kódolt szöveg formátuma: o "jegy vásárlásának ideje - idő" o "mettől jó - idő" o "meddig jó -idő" o "tel szám" o "diákjegy" o idő: év hónap nap óra perc másodperc o tel szám: a szám, amiről vették o diákjegy: opcionális a végén. Ha diákjegy, akkor van a kódolt üzenet végén egy D betű, és kéretik felmutatni a diákit ellenőrzéskor. o Például: b1e5d18e5f f20ab bd67bda0af3659a2a5ee1c2f61273ed fab5e8b5dc36152f7ddc2321a2156c44 o Online kipróbálható verzió: o Jól látható, hogy a sor végén 1 szám változása teljesen más kódot eredményez. ==> ezek nem-lineáris kódolók. Ha egy ilyen SMS-t kapnék egy barátomtól, ránézésre meg nem tudnám mondani, hogy mit tartalmaz. Viszont, ha valaki próbálgatással rájön a kódolás formátumára, hiszen tudjuk, hogy milyen adatoknak kéne szerepelnie a kódolt szövegben, és az algoritmus típusára, onnantól kezdve bármikor gyárthat magának SMS jegyet. Nem lenne egyszerű rájönni, de ha valakinek még is sikerülne, elég költséges lehetne a BKV számára. ==> nyilvános kulcsú titkosítás o ==> generált privát kulcs és hozzá tartozó publikus kulcs o ==> az üzenetet a privát kulccsal kódoljuk (privát kulcs a szerveren) 93

94 o ==> a kódolt üzenetet csak a privát kulcshoz tartozó publikus kulccsal lehet kinyitni (publikus kulcs az ellenőrök gépén) o ha egy ellenőr gépét ellopják, semmire nem mennek vele o az értelmes üzenetet, amit kódolt a szerver, csak publikus kulccsal lehet visszafejteni o publikus kulcsot meg csak a megfelelő privát kulcsból lehet generálni o a privát kulcs pedig sohasem hagyja el a szervert. o ha valamiért még is új privát kulcs kellene, ez lényegében egy text fájl, és rövid időn belül generálható új, majd üzembe helyezhető o ehhez az egészhez annyi kell, hogy az ellenőrök gépére egyszer minden privát kulcs generálása utána a nekik megfelelő publikus kulcsot rátöltsük. o az egész rendszer kibővíthető egy olyan csalás ellenőrzéssel, mivel ahhoz, hogy egy jegy érvényes legyen, a formátuma is érvényes kell, hogy legyen. Az általam találomra kitalált formátumnak a végén pedig ott van a mobilszám, amiről rendelték. Szóval minden ellenőrzéskor valamilyen memóriakártyára menti az ellenőrök gépe, hogy xy számról volt egy SMS jegy. Ugyanezt a szerveroldalon is megtesszük. Így bármikor, ha összevetjük a két oldal mentett adatait, ha az ellenőrzéskor olyan szám jelenik meg, amit a szerveroldal még sosem logolt abban az időpontban, akkor biztos, hogy hamisított jegyet engedtünk át, és generálunk új privát meg publikus kulcsot. o nem akármilyen privát kulcsos kódolás kell, mert az terjedelmes, hosszú kódolt szövegeket is tud generálni. Nekünk kifejezetten változó hosszúságú privát kulcsú titkosítás kell, ahol meg tudjuk határozni, hogy maximum milyen hosszú lehet egy kódolt üzenet, hiszen több oldalas SMS-t nem fogunk küldeni a vásárlónak, ha meg egy oldalra sem fér ki, problémás a gyors ellenőrzése. o ==> a kódolás kiegészíthető azzal a már korábban tárgyalt megoldással, hogy plusz karaktereket szúrunk a kódolt szöveg elejére, végére vagy bármilyen pozícióba, melyeket naponta / fél naponta vagy bármilyen időközönként változtatunk. Ehhez ugye az kell, hogy miután a szerver kódol egy SMS jegyet, az adott pozícióba beszúrja a plusz karakter(ek)et. Ellenőrzéskor, meg az ellenőr gépének is tudnia kell erről, hogy ne tekintse a kódolt üzenetnek. Ezért ezt reggelente, mikor az ellenőrök találkoznak a központi helyükön, és megbeszélik, hogy aznap ki hová megy, akkor megbeszélik, hogy délután 3ig például egy A-t szúrunk a kódolt szöveg 2. pozíciójába, azután meg egy 9-est. 94

95 Az ellenőr gépén bekapcsoláskor megjelenik egy GUI, ahol be kell állítani, hogy melyik nap, hánytól hányig, melyik indexben milyen plusz karakter lesz. Ezt azért találtuk ki, hogy gyorsítható az ellenőrzés, mert így ránézésre is nagyjából eldönthető egy sima jegyről (nem vonalkód-jegyről), hogy érvényes-e vagy sem. Továbbá nehezíti az esetleges visszafejtést is, hisz így már nem csak azt kell egy cracker-nek kitalálnia, hogy milyen algoritmussal kódolták az üzenetet, és hogy milyen kulccsal, hanem számolnia kell azzal is, hogy változó helyen változó tartalom lehet. Ezzel a módszerrel szintén, ha sikeresen visszafejtené a kódot, maximum arra a napra tudna ingyen jegyet kreálni. Visszakanyarodva a szerveroldali megoldáshoz, ismertetném az általam készített SMS-szerver működési alapjait: A szinte minden mobiltelefonon megtalálható AT [29] parancsokkal végeztettem számítógéphez csatlakoztatott GSM készülékkel az SMS-ek küldését és fogadását. A Java Communication API*30+ használatával csatlakoztam Java programból a GSM készülékhez, és adtam ki a bemeneti folyamára az AT parancsokat. Poolingot használtam az SMS-ek érkezésének lekérdezésére, azaz, rövid időközönként rákérdeztem a GSM készülékre, hogy jött-e új SMS. Amennyiben igen, kiolvastam a tartalmát o itt történik meg az SMS vásárlás értelmezése o a jegytípus, a vásárlási időpont és a megálló rögzítése o a mobilszámhoz tartozó egyenlegről az összeg levonása o a műveletek logolása Majd ezen információk alapján összeállítom a válasz SMS-t: o összeállítom a sztring üzenetet o titkosítom a privát kulccsal o datamatrixszá kódolom o A datamatrix képpontjait az SMS formátumba rögzítem o majd elküldöm ezt a válasz SMS-t 95

96 Az egész folyamat az alábbi ábrán szemléltethető (65. ábra): SMS elküldése V3;15 SMS jegy megjelenítése SMS szerver SMS jegy ellenőrzése - Datamatrix képből adat kinyerése - Titkosított adat dekódolása - Szöveges adat megjelenítése az ellenőr számára olvasható formátumban SMS feldolgozása - jegytípus - vásárlási időpont - megálló - telefonszám Datamatrix kód képzése SMS kód összeállítása és küldése 20x20; Fizetés és logolás Összeg levonása a telefonszámhoz tartozó egyenlegről. Tranzakció rögzítése. SMS titkosítása x345345&@345đsdßł##sdf SMS üzenet összeállítása V3;Arpad hid; ábra: Elektronikus jegy vásárlásának és ellenőrzésének folyamata 96

A GS1 DataMatrix felépítése és műszaki előírásai

A GS1 DataMatrix felépítése és műszaki előírásai A GS1 DataMatrix felépítése és műszaki előírásai Krázli Zoltán vezető szakértő A 2dimenziós DataMatrix kód alkalmazása az egészségügyben é 2009. október 15. A DataMatrix szabványai ISO/IEC 160022:2006

Részletesebben

Általunk alkalmazott főbb vonalkód- típusok

Általunk alkalmazott főbb vonalkód- típusok Általunk alkalmazott főbb vonalkód- típusok EAN 13 Az első világméretű egydimenziós termékazonosító kódrendszer, mely leginkább a kereskedelemben használatos. A kód rögzített hosszúságú számsorozat, neve

Részletesebben

Az Internet jövője Internet of Things

Az Internet jövője Internet of Things Az Internet jövője Dr. Bakonyi Péter c. docens 2011.01.24. 2 2011.01.24. 3 2011.01.24. 4 2011.01.24. 5 2011.01.24. 6 1 Az ( IoT ) egy világméretű számítógéphálózaton ( Internet ) szabványos protokollok

Részletesebben

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása Tömbök kezelése Példa: Vonalkód ellenőrzőjegyének kiszámítása A számokkal jellemzett adatok, pl. személyi szám, adószám, taj-szám, vonalkód, bankszámlaszám esetében az elírásból származó hibát ún. ellenőrző

Részletesebben

EuroOffice Professzionális Vonalkód és QR kód generátor

EuroOffice Professzionális Vonalkód és QR kód generátor 1. oldal EuroOffice Professzionális Vonalkód és QR kód generátor Az EuroOffice Professzionális Vonalkód és QR kód generátor segítségével könnyen elkészítheti az EuroOffice (vagy egyéb OpenOffice.org alkalmazás)

Részletesebben

Bevezetés a vonalkódok elméletébe. Melis Zoltán BCS Hungary (C) 1992-2006

Bevezetés a vonalkódok elméletébe. Melis Zoltán BCS Hungary (C) 1992-2006 Bevezetés a vonalkódok elméletébe Melis Zoltán BCS Hungary (C) 1992-2006 Bevezetés A számítógépek általánosan valamilyen bemenő adathalmazon végeznek mûveleteket Az adatbevitel módja sokféle lehet Kézi

Részletesebben

Alkalmazások fejlesztése A D O K U M E N T Á C I Ó F E L É P Í T É S E

Alkalmazások fejlesztése A D O K U M E N T Á C I Ó F E L É P Í T É S E Alkalmazások fejlesztése A D O K U M E N T Á C I Ó F E L É P Í T É S E Követelmény A beadandó dokumentációját a Keszthelyi Zsolt honlapján található pdf alapján kell elkészíteni http://people.inf.elte.hu/keszthelyi/alkalmazasok_fejlesztese

Részletesebben

Informatika Rendszerek Alapjai

Informatika Rendszerek Alapjai Informatika Rendszerek Alapjai Dr. Kutor László Alapfogalmak Információ-feldolgozó paradigmák Analóg és digitális rendszerek jellemzői Jelek típusai Átalakítás rendszerek között http://uni-obuda.hu/users/kutor/

Részletesebben

SZAKDOLGOZAT ÓBUDAI EGYETEM. Neumann János Informatikai kar Alba Regia Egyetemi Központ

SZAKDOLGOZAT ÓBUDAI EGYETEM. Neumann János Informatikai kar Alba Regia Egyetemi Központ ÓBUDAI EGYETEM Neumann János Informatikai kar Alba Regia Egyetemi Központ SZAKDOLGOZAT OE-NIK Hallgató neve: Berencsi Gergő Zsolt 2010. Törzskönyvi száma: T 000123/FI38878/S-N Tartalomjegyzék Tartalmi

Részletesebben

BSc hallgatók szakdolgozatával szemben támasztott követelmények SZTE TTIK Földrajzi és Földtani Tanszékcsoport

BSc hallgatók szakdolgozatával szemben támasztott követelmények SZTE TTIK Földrajzi és Földtani Tanszékcsoport BSc hallgatók szakdolgozatával szemben támasztott követelmények SZTE TTIK Földrajzi és Földtani Tanszékcsoport Az alapszakon a záróvizsgára bocsátás feltétele szakdolgozat készítése. A szakdolgozat kreditértéke:

Részletesebben

ZEBRA LI3678 VONALKÓD OLVASÓ

ZEBRA LI3678 VONALKÓD OLVASÓ VONALKÓD OLVASÓ TERMÉK ISMERTETŐ Zebra LI3678 vonalkód olvasó A Zebra LI3678 mérsékelt áron kínál egy nagy teljesítményű vonalkód leolvasót, 36 hónap garanciával. A kiskereskedelemi értékesítési helytől

Részletesebben

EURÓPAI PARLAMENT. Belső Piaci és Fogyasztóvédelmi Bizottság

EURÓPAI PARLAMENT. Belső Piaci és Fogyasztóvédelmi Bizottság EURÓPAI PARLAMENT 2004 2009 Belső Piaci és Fogyasztóvédelmi Bizottság 2007/0248(COD) 15.5.2008 MÓDOSÍTÁS 61 292 Jelentéstervezet Malcolm Harbour (PE404.659v01-00) az egyetemes szolgáltatásról, valamint

Részletesebben

Oktatáskutató és Fejlesztő Intézet TÁMOP / XXI. századi közoktatás (fejlesztés, koordináció) II. szakasz NÉMET NYELV

Oktatáskutató és Fejlesztő Intézet TÁMOP / XXI. századi közoktatás (fejlesztés, koordináció) II. szakasz NÉMET NYELV Oktatáskutató és Fejlesztő Intézet TÁMOP-3.1.1-11/1-2012-0001 XXI. századi közoktatás (fejlesztés, koordináció) II. szakasz NÉMET NYELV 3. MINTAFELADATSOR EMELT SZINT Az írásbeli vizsga időtartama: 90

Részletesebben

SYMBOL/MOTOROLA LI4278 VONALKÓD OLVASÓ

SYMBOL/MOTOROLA LI4278 VONALKÓD OLVASÓ SYMBOL/MOTOROLA LI4278 VONALKÓD OLVASÓ TERMÉK ISMERTETŐ Symbol/Motorola LI4278 vonalkód olvasó A Symbol/Motorola LI4278 mérsékelt áron kínál egy nagy teljesítményű vonalkód leolvasót, 36 hónap garanciával.

Részletesebben

IBAN: INTERNATIONAL BANK ACCOUNT NUMBER. I. Az IBAN formái

IBAN: INTERNATIONAL BANK ACCOUNT NUMBER. I. Az IBAN formái IBAN: INTERNATIONAL BANK ACCOUNT NUMBER A EUROPEAN COMMITTEE FOR BANKING STANDARDS (ECBS) által 2001. februárban kiadott, EBS204 V3 jelű szabvány rögzíti a nemzetközi számlaszám formáját, valamint eljárást

Részletesebben

Szegedi Tudományegyetem Informatikai Tanszékcsoport SZAKDOLGOZAT. Fertői Ferenc

Szegedi Tudományegyetem Informatikai Tanszékcsoport SZAKDOLGOZAT. Fertői Ferenc Szegedi Tudományegyetem Informatikai Tanszékcsoport SZAKDOLGOZAT Fertői Ferenc 2010 Szegedi Tudományegyetem Informatikai Tanszékcsoport 3-dimenziós táj generálása útvonalgráf alapján Szakdolgozat Készítette:

Részletesebben

2010.09.21. Internet of Things 2

2010.09.21. Internet of Things 2 Az Internet jövője Internet of Things Dr. Bakonyi Péter c. docens 2010.09.21. Internet of Things 2 2010.09.21. Internet of Things 3 2010.09.21. Internet of Things 4 2010.09.21. Internet of Things 5 2010.09.21.

Részletesebben

DATALOGIC POWERSCAN PBT9530-DPM VONALKÓD OLVASÓ

DATALOGIC POWERSCAN PBT9530-DPM VONALKÓD OLVASÓ DATALOGIC POWERSCAN PBT9530-DPM VONALKÓD OLVASÓ TERMÉK ISMERTETŐ Datalogic PowerScan PBT9530-DPM vonalkód olvasó A Datalogic PowerScan PBT9530-DPM mérsékelt áron kínál egy nagy teljesítményű vonalkód leolvasót,

Részletesebben

ZEBRA DS8178 VONALKÓD OLVASÓ

ZEBRA DS8178 VONALKÓD OLVASÓ VONALKÓD OLVASÓ TERMÉK ISMERTETŐ Zebra DS8178 vonalkód olvasó A Zebra DS8718 mérsékelt áron kínál egy nagy teljesítményű vonalkód leolvasót, 36 hónap garanciával. A kiskereskedelemi értékesítési helytől

Részletesebben

ZEBRA LI3608 VONALKÓD OLVASÓ

ZEBRA LI3608 VONALKÓD OLVASÓ VONALKÓD OLVASÓ TERMÉK ISMERTETŐ Zebra LI3608 vonalkód olvasó A Zebra LI3608 mérsékelt áron kínál egy nagy teljesítményű vonalkód leolvasót, 36 hónap garanciával. A kiskereskedelemi értékesítési helytől

Részletesebben

Megoldások a mintavizsga kérdések a VIMIAC04 tárgy ellenőrzési technikák részéhez kapcsolódóan (2017. május)

Megoldások a mintavizsga kérdések a VIMIAC04 tárgy ellenőrzési technikák részéhez kapcsolódóan (2017. május) Megoldások a mintavizsga kérdések a VIMIAC04 tárgy ellenőrzési technikák részéhez kapcsolódóan (2017. május) Teszt kérdések 1. Melyik állítás igaz a folytonos integrációval (CI) kapcsolatban? a. Folytonos

Részletesebben

Hálózatok esszé RFID A rádiófrekvenciás azonosító rendszerek. Gacsályi Bertalan (GABMAAT.SZE)

Hálózatok esszé RFID A rádiófrekvenciás azonosító rendszerek. Gacsályi Bertalan (GABMAAT.SZE) Hálózatok esszé RFID A rádiófrekvenciás azonosító rendszerek Gacsályi Bertalan (GABMAAT.SZE) TARTALOMJEGYZÉK 1. RFID (Radio Frequency Identification) meghatározása... 3 2. A rendszer felépítése... 3 3.

Részletesebben

5. KOMBINÁCIÓS HÁLÓZATOK LEÍRÁSÁNAK SZABÁLYAI

5. KOMBINÁCIÓS HÁLÓZATOK LEÍRÁSÁNAK SZABÁLYAI 5. KOMBINÁCIÓS HÁLÓZATOK LEÍRÁSÁNAK SZABÁLYAI 1 Kombinációs hálózatok leírását végezhetjük mind adatfolyam-, mind viselkedési szinten. Az adatfolyam szintű leírásokhoz az assign kulcsszót használjuk, a

Részletesebben

Cím: 1054 Budapest, Bank utca 6. II. em. 9. Telefonszám: ; cím: ZEBRA DS2278 VONALKÓD OLVASÓ

Cím: 1054 Budapest, Bank utca 6. II. em. 9. Telefonszám: ; cím: ZEBRA DS2278 VONALKÓD OLVASÓ ZEBRA DS2278 VONALKÓD OLVASÓ TERMÉK ISMERTETŐ Zebra DS2278 vonalkód olvasó A Zebra DS2278 mérsékelt áron kínál egy nagy teljesítményű vonalkód leolvasót, 36 hónap garanciával. A kiskereskedelemi értékesítési

Részletesebben

DATALOGIC HERON HD3430 VONALKÓD OLVASÓ

DATALOGIC HERON HD3430 VONALKÓD OLVASÓ DATALOGIC HERON HD3430 VONALKÓD OLVASÓ TERMÉK ISMERTETŐ Datalogic Heron HD3430 vonalkód olvasó A Datalogic Heron HD3430 mérsékelt áron kínál egy nagy teljesítményű vonalkód leolvasót, 60 hónap garanciával.

Részletesebben

OpenCL alapú eszközök verifikációja és validációja a gyakorlatban

OpenCL alapú eszközök verifikációja és validációja a gyakorlatban OpenCL alapú eszközök verifikációja és validációja a gyakorlatban Fekete Tamás 2015. December 3. Szoftver verifikáció és validáció tantárgy Áttekintés Miért és mennyire fontos a megfelelő validáció és

Részletesebben

Internet of Things 2

Internet of Things 2 Az Internet jövıje Internet of Things Dr. Bakonyi Péter c. Fıiskolai tanár 2009.09.29. Internet of Things 2 2009.09.29. Internet of Things 3 2009.09.29. Internet of Things 4 2009.09.29. Internet of Things

Részletesebben

KARAKTERFELISMERÉS AZ EVASYS-BEN

KARAKTERFELISMERÉS AZ EVASYS-BEN KARAKTERFELISMERÉS AZ EVASYS-BEN HOL HASZNÁLHATÓ, KI HASZNÁLHATJA A Miskolci Egyetem megvásárolta a kézírásfelismerés (ICR) modult az Evasys legutóbbi licencével együtt. Ezzel lehetőség nyílt a papír alapú

Részletesebben

EGYÜTTMŰKÖDŐ ÉS VERSENGŐ ERŐFORRÁSOK SZERVEZÉSÉT TÁMOGATÓ ÁGENS RENDSZER KIDOLGOZÁSA

EGYÜTTMŰKÖDŐ ÉS VERSENGŐ ERŐFORRÁSOK SZERVEZÉSÉT TÁMOGATÓ ÁGENS RENDSZER KIDOLGOZÁSA infokommunikációs technológiák EGYÜTTMŰKÖDŐ ÉS VERSENGŐ ERŐFORRÁSOK SZERVEZÉSÉT TÁMOGATÓ ÁGENS RENDSZER KIDOLGOZÁSA Témavezető: Tarczali Tünde Témavezetői beszámoló 2015. január 7. TÉMAKÖR Felhő technológián

Részletesebben

A számítógép-hálózat egy olyan speciális rendszer, amely a számítógépek egymás közötti kommunikációját biztosítja.

A számítógép-hálózat egy olyan speciális rendszer, amely a számítógépek egymás közötti kommunikációját biztosítja. A számítógép-hálózat egy olyan speciális rendszer, amely a számítógépek egymás közötti kommunikációját biztosítja. A hálózat kettő vagy több egymással összekapcsolt számítógép, amelyek között adatforgalom

Részletesebben

Cím: 1054 Budapest, Bank utca 6. II. em. 9. Telefonszám: ; cím: ZEBRA DS2208 VONALKÓD OLVASÓ

Cím: 1054 Budapest, Bank utca 6. II. em. 9. Telefonszám: ; cím: ZEBRA DS2208 VONALKÓD OLVASÓ VONALKÓD OLVASÓ TERMÉK ISMERTETŐ Zebra DS2208 vonalkód olvasó A Zebra DS2208 mérsékelt áron kínál egy nagy teljesítményű vonalkód leolvasót, 60 hónap garanciával. A kiskereskedelemi értékesítési helytől

Részletesebben

Iman 3.0 szoftverdokumentáció

Iman 3.0 szoftverdokumentáció Melléklet: Az iman3 program előzetes leírása. Iman 3.0 szoftverdokumentáció Tartalomjegyzék 1. Az Iman rendszer...2 1.1. Modulok...2 1.2. Modulok részletes leírása...2 1.2.1. Iman.exe...2 1.2.2. Interpreter.dll...3

Részletesebben

Összefoglaló jelentés

Összefoglaló jelentés Összefoglaló jelentés A 2018. évi országgyűlési képviselők választásának lebonyolítási időszakában a választást támogató informatikai rendszerek működése során történt informatikai események vizsgálatáról

Részletesebben

GYŐRI HITTUDOMÁNYI FŐISKOLA A SZERVEZETI ÉS MŰKÖDÉSI SZABÁLYZAT.. SZÁMÚ MELLÉKLETE A SZAKDOLGOZAT FORMAI KÖVETELMÉNYEI

GYŐRI HITTUDOMÁNYI FŐISKOLA A SZERVEZETI ÉS MŰKÖDÉSI SZABÁLYZAT.. SZÁMÚ MELLÉKLETE A SZAKDOLGOZAT FORMAI KÖVETELMÉNYEI GYŐRI HITTUDOMÁNYI FŐISKOLA A SZERVEZETI ÉS MŰKÖDÉSI SZABÁLYZAT.. SZÁMÚ MELLÉKLETE A SZAKDOLGOZAT FORMAI KÖVETELMÉNYEI GYŐR, 2015 1 1. BEVEZETÉS 1.1. A szakdolgozat célja A hallgató a szakdolgozatban bizonyítja

Részletesebben

SYMBOL/MOTOROLA LS2208 VONALKÓD OLVASÓ

SYMBOL/MOTOROLA LS2208 VONALKÓD OLVASÓ SYMBOL/MOTOROLA LS2208 VONALKÓD OLVASÓ TERMÉK ISMERTETŐ Symbol/Motorola LS2208 vonalkód olvasó A Symbol/Motorola LS2208 mérsékelt áron kínál egy nagy teljesítményű vonalkód leolvasót, 60 hónap garanciával.

Részletesebben

Intelligens közlekedési rendszerek (ITS)

Intelligens közlekedési rendszerek (ITS) Budapesti Műszaki és Gazdaságtudományi Egyetem Közlekedésüzemi és Közlekedésgazdasági Tanszék Intelligens közlekedési rendszerek (ITS) Térinformatika (GIS) közlekedési alkalmazásai Közlekedési adatbázisok

Részletesebben

A Clipper evolúciója

A Clipper evolúciója A Clipper evolúciója Ismét itt a nyár, a szabadságolások, és ismét dupla számmal jelentkezünk. Egy könnyedebb nyári tartalom érdekében, ebben a számban összefoglaljuk, mi történik a verzióváltáskor. A

Részletesebben

Összeállította: Sallai András. Árurendszerezés

Összeállította: Sallai András. Árurendszerezés Összeállította: Sallai András Árurendszerezés Árurendszerezés Hagyományos Kódok alapján Árurendszerezés célja Optimális készletmennyiség biztosítása Statisztikai adatszolgáltatás Áruazonosítás származás

Részletesebben

Grafikonok automatikus elemzése

Grafikonok automatikus elemzése Grafikonok automatikus elemzése MIT BSc önálló laboratórium konzulens: Orosz György 2016.05.18. A feladat elsődleges célkitűzései o eszközök adatlapján található grafikonok feldolgozása, digitalizálása

Részletesebben

Értékelés a BUS programhoz elkészült termékek magyar változatáról Készítette: Animatus Kft. Jókay Tamás január 07.

Értékelés a BUS programhoz elkészült termékek magyar változatáról Készítette: Animatus Kft. Jókay Tamás január 07. Értékelés a BUS programhoz elkészült termékek magyar változatáról Készítette: Animatus Kft. Jókay Tamás 2011. január 07. Tartarlom Guide book,,...3 Trainer s slides,,...4 Trainer s handbook,,...5 CD,,...6

Részletesebben

Bevezetés a számítástechnikába

Bevezetés a számítástechnikába Bevezetés a számítástechnikába Beadandó feladat, kódrendszerek Fodor Attila Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék foa@almos.vein.hu 2010 október 12.

Részletesebben

DATALOGIC QUICKSCAN I QD2100 VONALKÓD OLVASÓ

DATALOGIC QUICKSCAN I QD2100 VONALKÓD OLVASÓ DATALOGIC QUICKSCAN I QD2100 VONALKÓD OLVASÓ TERMÉK ISMERTETŐ Datalogic QuickScan I QD2100 vonalkód olvasó A Datalogic QuickScan I QD2100 mérsékelt áron kínál egy nagy teljesítményű vonalkód leolvasót,

Részletesebben

Vonalkód olvasó rendszer. Specifikáció Vonalkód olvasó rendszer SoftMaster Kft. [1]

Vonalkód olvasó rendszer. Specifikáció Vonalkód olvasó rendszer SoftMaster Kft. [1] Specifikáció Vonalkód olvasó rendszer SoftMaster Kft. [1] T a r t a l o m j e g y z é k 1 Bevezetés... 3 1.1 A rendszer rövid leírása... 3 1.2 A dokumentum célja... 3 1.3 A rendszer komponensei... 3 1.4

Részletesebben

Java I. A Java programozási nyelv

Java I. A Java programozási nyelv Java I. A Java programozási nyelv története,, alapvető jellemzői Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2007. 02. 12. Java I.: Történet, jellemzők, JDK JAVA1 / 1 Egy kis történelem

Részletesebben

Tananyagok adaptív kiszolgálása különböző platformok felé. Fazekas László Dr. Simonics István Wagner Balázs

Tananyagok adaptív kiszolgálása különböző platformok felé. Fazekas László Dr. Simonics István Wagner Balázs elibrary ALMS Tananyagok adaptív kiszolgálása különböző platformok felé Fazekas László Dr. Simonics István Wagner Balázs Mire jó az mlearning Tanulás bárhol, bármikor A dolgozó ember már nehezen tud időt

Részletesebben

Alumínium bejárati ajtók Modell családokról általában. Tartalomjegyzék

Alumínium bejárati ajtók Modell családokról általában. Tartalomjegyzék Tartalomjegyzék Modell megnevezések széria P00 széria P00 széria P300 széria P400 3 széria P500 3 Méretfüggő kivitelek 3 Díszítő elemek iránya 4 Nemesacél lizénák 4 Fa dekor 5 Beton design 6 Szín logika

Részletesebben

Az Agrármérnöki MSc szak tananyagfejlesztése TÁMOP-4.1.2-08/1/A-2009-0010 A NÖVÉNYTERMESZTÉSI ÁGAZATOK ÖKONÓMIÁJA

Az Agrármérnöki MSc szak tananyagfejlesztése TÁMOP-4.1.2-08/1/A-2009-0010 A NÖVÉNYTERMESZTÉSI ÁGAZATOK ÖKONÓMIÁJA Az Agrármérnöki MSc szak tananyagfejlesztése TÁMOP-4.1.2-08/1/A-2009-0010 A NÖVÉNYTERMESZTÉSI ÁGAZATOK ÖKONÓMIÁJA 11. Előadás Az üzleti terv tartalmi követelményei Az üzleti terv tartalmi követelményei

Részletesebben

DATALOGIC QUICKSCAN QD2400 VONALKÓD OLVASÓ

DATALOGIC QUICKSCAN QD2400 VONALKÓD OLVASÓ DATALOGIC QUICKSCAN QD2400 VONALKÓD OLVASÓ TERMÉK ISMERTETŐ Datalogic QuickScan QD2400 vonalkód olvasó A Datalogic QuickScan QD2400 mérsékelt áron kínál egy nagy teljesítményű vonalkód leolvasót, 36 hónap

Részletesebben

Vezetői információs rendszerek

Vezetői információs rendszerek Vezetői információs rendszerek Kiadott anyag: Vállalat és információk Elekes Edit, 2015. E-mail: elekes.edit@eng.unideb.hu Anyagok: eng.unideb.hu/userdir/vezetoi_inf_rd 1 A vállalat, mint információs rendszer

Részletesebben

Korszerű raktározási rendszerek. Szakdolgozat

Korszerű raktározási rendszerek. Szakdolgozat Gépészmérnöki és Informatikai Kar Mérnök Informatikus szak Logisztikai Rendszerek szakirány Korszerű raktározási rendszerek Szakdolgozat Készítette: Buczkó Balázs KOKIOC 3770 Sajószentpéter, Ady Endre

Részletesebben

SYMBOL/MOTOROLA LS1203 VONALKÓD OLVASÓ

SYMBOL/MOTOROLA LS1203 VONALKÓD OLVASÓ SYMBOL/MOTOROLA LS1203 VONALKÓD OLVASÓ TERMÉK ISMERTETŐ Symbol/Motorola LS1203 vonalkód olvasó A Symbol/Motorola LS1203 mérsékelt áron kínál egy nagy teljesítményű vonalkód leolvasót, 36 hónap garanciával.

Részletesebben

DATALOGIC GRYPHON GD4100 VONALKÓD OLVASÓ

DATALOGIC GRYPHON GD4100 VONALKÓD OLVASÓ DATALOGIC GRYPHON GD4100 VONALKÓD OLVASÓ TERMÉK ISMERTETŐ Datalogic Gryphon GD4100 vonalkód olvasó A Datalogic Gryphon GD4100 mérsékelt áron kínál egy nagy teljesítményű vonalkód leolvasót, 60 hónap garanciával.

Részletesebben

2. Készítsen awk szkriptet, amely kiírja az aktuális könyvtár összes alkönyvtárának nevét, amely februári keltezésű (bármely év).

2. Készítsen awk szkriptet, amely kiírja az aktuális könyvtár összes alkönyvtárának nevét, amely februári keltezésű (bármely év). 1. fejezet AWK 1.1. Szűrési feladatok 1. Készítsen awk szkriptet, ami kiírja egy állomány leghosszabb szavát. 2. Készítsen awk szkriptet, amely kiírja az aktuális könyvtár összes alkönyvtárának nevét,

Részletesebben

INTELLIGENT ENERGY EUROPE PROGRAMME BUILD UP SKILLS TRAINBUD. Quality label system

INTELLIGENT ENERGY EUROPE PROGRAMME BUILD UP SKILLS TRAINBUD. Quality label system INTELLIGENT ENERGY EUROPE PROGRAMME BUILD UP SKILLS TRAINBUD WP4: Deliverable 4.5 Development of voluntary qualification system Quality label system 1 INTELLIGENT ENERGY EUROPE PROGRAMME BUILD UP SKILLS

Részletesebben

VIRTUALIZÁCIÓ KÉSZÍTETTE: NAGY ZOLTÁN MÁRK EHA: NAZKABF.SZE I. ÉVES PROGRAMTERVEZŐ-INFORMATIKUS, BSC

VIRTUALIZÁCIÓ KÉSZÍTETTE: NAGY ZOLTÁN MÁRK EHA: NAZKABF.SZE I. ÉVES PROGRAMTERVEZŐ-INFORMATIKUS, BSC VIRTUALIZÁCIÓ KÉSZÍTETTE: NAGY ZOLTÁN MÁRK EHA: NAZKABF.SZE I. ÉVES PROGRAMTERVEZŐ-INFORMATIKUS, BSC A man should look for what is, and not for what he thinks should be. Albert Einstein A számítógépek

Részletesebben

ALKALMAZÁS KERETRENDSZER

ALKALMAZÁS KERETRENDSZER JUDO ALKALMAZÁS KERETRENDSZER 2014 1 FELHASZNÁLÓK A cégvezetők többsége a dobozos termékek bevezetésével összehasonlítva az egyedi informatikai alkalmazások kialakítását költséges és időigényes beruházásnak

Részletesebben

A DIPLOMAMUNKA FORMAI KÖVETELMÉNYEI JAVASLAT

A DIPLOMAMUNKA FORMAI KÖVETELMÉNYEI JAVASLAT A DIPLOMAMUNKA FORMAI KÖVETELMÉNYEI JAVASLAT A diplomamunka kötelező részei (bekötési sorrendben) 1. Fedőlap - Bal felső sarokban a kiíró tanszék megnevezése (ha két tanszékkel együttműködve dolgozzuk

Részletesebben

Honlapkoncepció. Miskolc város hivatalos honlapjához

Honlapkoncepció. Miskolc város hivatalos honlapjához Honlapkoncepció Miskolc város hivatalos honlapjához Ennek a dokumentumnak a célja, hogy rögzítse azokat az alapelveket, amelyek egyrészt irányt szabnak, másrészt kereteket adnak az új városi honlap részletes

Részletesebben

DR. MUNDT THOMASNÉ * Prezentációk nemzetközi vásárokon

DR. MUNDT THOMASNÉ * Prezentációk nemzetközi vásárokon DR. MUNDT THOMASNÉ * Prezentációk nemzetközi vásárokon Präsentationen auf internationalen Messen Messen sind Kommunikationsveranstaltungen, die als Teil des Gesamtmarketings das eigene Image stärken und

Részletesebben

iphone és Android két jó barát...

iphone és Android két jó barát... iphone és Android két jó barát... Multiplatform alkalmazásfejlesztés a gyakorlatban Kis Gergely MattaKis Consulting 1 Tartalom Miért multiplatform fejlesztés? Multiplatform fejlesztési módszerek A közös

Részletesebben

Geográfus MSc és Földtudomány MSc szakos hallgatók diplomamunkájával szemben támasztott követelmények SZTE TTIK Földrajzi és Földtani Tanszékcsoport

Geográfus MSc és Földtudomány MSc szakos hallgatók diplomamunkájával szemben támasztott követelmények SZTE TTIK Földrajzi és Földtani Tanszékcsoport Geográfus MSc és Földtudomány MSc szakos hallgatók diplomamunkájával szemben támasztott követelmények SZTE TTIK Földrajzi és Földtani Tanszékcsoport A mesterszakon a záróvizsgára bocsátás feltétele diplomamunka

Részletesebben

A digitális televíziótechnika áramkörei II.

A digitális televíziótechnika áramkörei II. A digitális televíziótechnika áramkörei II. Életmódunk, szokásaink hatása a készülékek konstrukciójára Készítette: Zigó József Készült: 2012. május Visszatekintő az egy évvel korábbi előadásra 2010 végén

Részletesebben

Rendszermodellezés: házi feladat bemutatás

Rendszermodellezés: házi feladat bemutatás Rendszermodellezés: házi feladat bemutatás Budapest University of Technology and Economics Fault Tolerant Systems Research Group Budapest University of Technology and Economics Department of Measurement

Részletesebben

TERC V.I.P. hardverkulcs regisztráció

TERC V.I.P. hardverkulcs regisztráció TERC V.I.P. hardverkulcs regisztráció 2014. második félévétől kezdődően a TERC V.I.P. költségvetés-készítő program hardverkulcsát regisztrálniuk kell a felhasználóknak azon a számítógépen, melyeken futtatni

Részletesebben

BKK Elektronikus jegyrendszer Megvalósíthatósági vizsgálat

BKK Elektronikus jegyrendszer Megvalósíthatósági vizsgálat Megvalósíthatósági vizsgálat Budapest, 2011. december 31. Tartalomjegyzék 1. VEZETŐI ÖSSZEFOGLALÓ... 11 2. ELŐZMÉNYEK ÉS MÓDSZERTAN... 20 3. A JELENLEGI BUDAPESTI JEGY- ÉS BÉRLETRENDSZER... 23 3.1. A jelenlegi

Részletesebben

Diplomamunka, Szakdolgozat, Projekt munka, Komplex tervezés felépítésének tartalmi és formai követelményei

Diplomamunka, Szakdolgozat, Projekt munka, Komplex tervezés felépítésének tartalmi és formai követelményei Diplomamunka, Szakdolgozat, Projekt munka, Komplex tervezés felépítésének tartalmi és formai követelményei 1. Kötelezően leadandó Az Automatizálási és Infokommunikációs Intézet honlapján található tervezési

Részletesebben

GENERIKUS PROGRAMOZÁS Osztálysablonok, Általános felépítésű függvények, Függvénynevek túlterhelése és. Függvénysablonok

GENERIKUS PROGRAMOZÁS Osztálysablonok, Általános felépítésű függvények, Függvénynevek túlterhelése és. Függvénysablonok GENERIKUS PROGRAMOZÁS Osztálysablonok, Általános felépítésű függvények, Függvénynevek túlterhelése és Függvénysablonok Gyakorlatorientált szoftverfejlesztés C++ nyelven Visual Studio Community fejlesztőkörnyezetben

Részletesebben

1. számú ábra. Kísérleti kályha járattal

1. számú ábra. Kísérleti kályha járattal Kísérleti kályha tesztelése A tesztsorozat célja egy járatos, egy kitöltött harang és egy üres harang hőtároló összehasonlítása. A lehető legkisebb méretű, élére állított téglából épített héjba hagyományos,

Részletesebben

GS1 KisOkos 28. füzet. Hungary. A GS1 DataMatrix jelképrendszer. www.gs1hu.org

GS1 KisOkos 28. füzet. Hungary. A GS1 DataMatrix jelképrendszer. www.gs1hu.org Hungary KisOkos 28. füzet A jelképrendszer www.gs1hu.org Jelképrendszer Jelkép tulajdonságai A kód elsősorban az elektronika és gépgyártás területén terjedt el, míg napjainkban az egészségügyi ágazatban,a

Részletesebben

i5000 sorozatú szkennerek

i5000 sorozatú szkennerek i5000 sorozatú szkennerek Vezérlő kód információk _hu Vezérlőkód információk Tartalomjegyzék Vezérlő minta részletek... 4 Vezérlő minta tájolás... 5 Vonalkód részletek... 7 Vezérlő pozícionálása... 9 Papír

Részletesebben

Auswandern Bank. Ungarisch

Auswandern Bank. Ungarisch - Allgemeines Fel tudok venni pénzt külön díjak fizetése nélkül? Fragen, ob Gebühren anfallen, wenn man in einem bestimmten Land Geld abhebt Mennyi a költsége annak, ha nem a saját bankom automatáját használom?

Részletesebben

MOBIL PLATFORMHÁBORÚ. Török Gábor

MOBIL PLATFORMHÁBORÚ. Török Gábor MOBIL PLATFORMHÁBORÚ Török Gábor Szabad Szoftver Konferencia, 2010 Tartalom Bevezetés A mobilpiacról Mobil platformok Fejlesztői szemszögből A nyíltság szintjei Történelmi áttekintés Mérföldkövek: mobil

Részletesebben

E-Számla Szerver szolgáltatás bemutató és díjszabás

E-Számla Szerver szolgáltatás bemutató és díjszabás E-Számla Szerver szolgáltatás bemutató és díjszabás E-Számlázás E-Archiválás E-Hitelesítés RENDESWEB Fejlesztési és Tanácsadó Kft. Kinek ajánljuk az E-Számla Szerver megoldást? Az E-Számla Szerver megoldást

Részletesebben

Informatika. 3. Az informatika felhasználási területei és gazdasági hatásai

Informatika. 3. Az informatika felhasználási területei és gazdasági hatásai Informatika 1. Hírek, információk, adatok. Kommunikáció. Definiálja a következő fogalmakat: Információ Hír Adat Kommunikáció Ismertesse a kommunikáció modelljét. 2. A számítástechnika története az ENIAC-ig

Részletesebben

Informatikai Rendszerek Alapjai

Informatikai Rendszerek Alapjai Informatikai Rendszerek Alapjai Dr. Kutor László A redundancia fogalma és mérése Minimális redundanciájú kódok 1. http://uni-obuda.hu/users/kutor/ IRA 2014 könyvtár Óbudai Egyetem, NIK Dr. Kutor László

Részletesebben

Tarts lépést a fogyasztói igényekkel!

Tarts lépést a fogyasztói igényekkel! Tarts lépést a fogyasztói igényekkel! KLIKKPATIKA CSOMAG Patika sorban állás nélkül A KlikkPatika Csomaggal olyan megoldást kínálunk, amellyel a mai fogyasztói igényeknek megfelelő kiszolgálást teszünk

Részletesebben

Struktúra nélküli adatszerkezetek

Struktúra nélküli adatszerkezetek Struktúra nélküli adatszerkezetek Homogén adatszerkezetek (minden adatelem azonos típusú) osztályozása Struktúra nélküli (Nincs kapcsolat az adatelemek között.) Halmaz Multihalmaz Asszociatív 20:24 1 A

Részletesebben

REGINFO feszültség minőség mérő rendszer az E.ON Hungáriánál Szilágyi Ákos 2008. szeptember 11. A fejlesztés okai: Belső igény mérési eredmények központi tárolása, egységes felületen történő megjelenítése

Részletesebben

Rónai Gergely. fejlesztési főmérnök BKK Közút Zrt.

Rónai Gergely. fejlesztési főmérnök BKK Közút Zrt. ITS fejlesztés Budapesten Rónai Gergely fejlesztési főmérnök BKK Közút Zrt. A fővárosi ITS kezdetei Nemzeti Közlekedési Napok 2013 - ITS fejlesztés Budapesten 2 ITS fejlesztések szervezeti háttere Budapest

Részletesebben

Végrehajtói Nyilvántartó Rendszerbe illeszkedő Postázási modul ismertetése

Végrehajtói Nyilvántartó Rendszerbe illeszkedő Postázási modul ismertetése Oldalak: 1/10 Ez a modulkiegészítés a Végrehajtói Nyilvántartó Rendszerben elkészülő nyomtatványok postai vagy kézi kézbesítésének fárattságos dokumentálását hivatott felváltani gépi nyilvántartással.

Részletesebben

Plágium, vagy mások eredményeinek

Plágium, vagy mások eredményeinek Plágium, vagy mások eredményeinek összefoglalása? Egy kutató tűnődései Kollár István Budapesti Műszaki és Gazdaságtudományi Egyetem Tartalom kísérlet a definícióra miért baj? mit keresünk? magyarul plusz

Részletesebben

BARANGOLÁS AZ E-KÖNYVEK BIRODALMÁBAN Milyen legyen az elektonikus könyv?

BARANGOLÁS AZ E-KÖNYVEK BIRODALMÁBAN Milyen legyen az elektonikus könyv? BARANGOLÁS AZ E-KÖNYVEK BIRODALMÁBAN Milyen legyen az elektonikus könyv? Készítették: Névery Tibor és Széll Ildikó PPKE I. évf. kiadói szerkesztő hallgatók, közösen 1 BEVEZETŐ Az elektronikus könyv valamilyen

Részletesebben

1. előadás. Lineáris algebra numerikus módszerei. Hibaszámítás Számábrázolás Kerekítés, levágás Klasszikus hibaanalízis Abszolút hiba Relatív hiba

1. előadás. Lineáris algebra numerikus módszerei. Hibaszámítás Számábrázolás Kerekítés, levágás Klasszikus hibaanalízis Abszolút hiba Relatív hiba Hibaforrások Hiba A feladatok megoldása során különféle hibaforrásokkal találkozunk: Modellhiba, amikor a valóságnak egy közelítését használjuk a feladat matematikai alakjának felírásához. (Pl. egy fizikai

Részletesebben

Könyvtári címkéző munkahely

Könyvtári címkéző munkahely Könyvtári címkéző munkahely Tartalomjegyzék A RENDSZER HARDVER ELEMEI...3 1 RFID CÍMKÉK... 3 2 RFID ASZTALI OLVASÓ... 3 A RENDSZER SZOFTVER ELEMEI... 4 1 KÖNYV CÍMKÉZŐ MUNKAÁLLOMÁS... 4 2 A PC- S SZOFTVEREK

Részletesebben

IBM Datacap Taskmaster. Bejövő Számlák feldolgozása Accounts Payable Taskmaster (APT) Előadó: Csendes Balázs / IBM Industry Solutions Brand Executive

IBM Datacap Taskmaster. Bejövő Számlák feldolgozása Accounts Payable Taskmaster (APT) Előadó: Csendes Balázs / IBM Industry Solutions Brand Executive IBM Datacap Taskmaster Bejövő Számlák feldolgozása Accounts Payable Taskmaster (APT) Előadó: Csendes Balázs / IBM Industry Solutions Brand Executive Időpont: 2011.11.24. Napirend Miért Bejövő számlák Feldolgozása?

Részletesebben

Zebra Cameo 2 mobil nyomtató Felhasználói és m szaki leírása. 12-Cameo2-12 Verzió: február

Zebra Cameo 2 mobil nyomtató Felhasználói és m szaki leírása. 12-Cameo2-12 Verzió: február Zebra Cameo 2 mobil nyomtató Felhasználói és m szaki leírása 12-Cameo2-12 Verzió: 1.2 2006. február Copyright 2005-2006. BCS Hungary Kft. 2 Tartalom Tartalom...3 1. A készülék felépítése, részei...4 2.

Részletesebben

ÓBUDAI EGYETEM Neumann János Informatikai Kar Informatikai Rendszerek Intézet Témavezető: Bringye Zsolt

ÓBUDAI EGYETEM Neumann János Informatikai Kar Informatikai Rendszerek Intézet Témavezető: Bringye Zsolt Témavezető: Bringye Zsolt Diplomamunka/szakdolgozat címe: X64 szerver virtualizáció technológiai kérdéseinek áttekintése, kereskedelmi termékekben történő megvalósításuk elemzése (funkcionalitás, teljesítmény,

Részletesebben

Tájékoztató a szakdolgozat elektronikus feltöltéséről

Tájékoztató a szakdolgozat elektronikus feltöltéséről Tájékoztató a szakdolgozat elektronikus feltöltéséről Tisztelt hallgató mielőtt belekezd a szakdolgozata feltöltésébe az elektronikus felületen kérem, hogy figyelmesen olvassa el a tájékoztatót. Csak akkor

Részletesebben

4. Használati útmutatás

4. Használati útmutatás megbízható(másnéven: robusztus): mert a programozási hibák egy részét megakadályozza,a másik részét pedig futás közben kisz ri és támogatja a fejleszt t azok professzionális kezelésében. biztonságos: megakadályozza

Részletesebben

Informatikai aktualitások. Bagi Zoltán Quadro Byte Zrt.

Informatikai aktualitások. Bagi Zoltán Quadro Byte Zrt. Informatikai aktualitások Bagi Zoltán Quadro Byte Zrt. Mi az a Felhő? Múlt évben bemutattunk egy új informatikai környezetet! Lényeges tulajdonságai: A programok szerver központban futnak A felhasználónál

Részletesebben

Procontrol Device Detector. Felhasználói leírás

Procontrol Device Detector. Felhasználói leírás Procontrol Device Detector Felhasználói leírás Létrehozás dátuma: 2010.10.26 14:45 1. oldal, összesen: 9 Tartalomjegyzék Bevezetés... 3 Ismerkedés a programmal... 4 Készülék lista... 5 Funkció menü...

Részletesebben

CodeMeter - A Digitális Jogkezelő

CodeMeter - A Digitális Jogkezelő CodeMeter - A Digitális Jogkezelő Másolásvédelem és Komplett Kereskedelmi Rendszer Digitális Tananyagokhoz CodeMeter a jövő Digitális Jogkezelése Mikola Rezső ügyvezető ig. MrSoft Kft. T: 1-280-8811 -

Részletesebben

Bevezetés a programozásba. 5. Előadás: Tömbök

Bevezetés a programozásba. 5. Előadás: Tömbök Bevezetés a programozásba 5. Előadás: Tömbök ISMÉTLÉS Specifikáció Előfeltétel: milyen körülmények között követelünk helyes működést Utófeltétel: mit várunk a kimenettől, mi az összefüggés a kimenet és

Részletesebben

Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter

Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter Adatszerkezetek Tömb, sor, verem Dr. Iványi Péter 1 Adat Adat minden, amit a számítógépünkben tárolunk és a külvilágból jön Az adatnak két fontos tulajdonsága van: Értéke Típusa 2 Adat típusa Az adatot

Részletesebben

1. feladat: A decimális kódokat az ASCII kódtábla alapján kódold vissza karakterekké és megkapod a megoldást! Kitől van az idézet?

1. feladat: A decimális kódokat az ASCII kódtábla alapján kódold vissza karakterekké és megkapod a megoldást! Kitől van az idézet? Projekt feladatai: 1. feladat: A decimális kódokat az ASCII kódtábla alapján kódold vissza karakterekké és megkapod a megoldást! Kitől van az idézet? 65 109 105 32 105 103 97 122 160 110 32 115 122 160

Részletesebben

Az RFID technológia bemutatása

Az RFID technológia bemutatása Állami Nyomda Nyrt. RFID (Rádiófrekvenciás Azonosítás) Az RFID technológia bemutatása Rácz László, chipkártya és RFID tanácsadó racz@any.hu, Telefon: 431 1393 Állami Nyomda Nyrt. www.allaminyomda.hu RFID

Részletesebben

Panorámakép készítése

Panorámakép készítése Panorámakép készítése Képregisztráció, 2009. Hantos Norbert Blaskovics Viktor Összefoglalás Panoráma (image stitching, planar mosaicing): átfedő képek összeillesztése Lépések: Előfeldolgozás (pl. intenzitáskorrekciók)

Részletesebben

Programtervezés. Dr. Iványi Péter

Programtervezés. Dr. Iványi Péter Programtervezés Dr. Iványi Péter 1 A programozás lépései 2 Feladat meghatározás Feladat kiírás Mik az input adatok A megoldáshoz szükséges idő és költség Gyorsan, jót, olcsón 3 Feladat megfogalmazása Egyértelmű

Részletesebben

A képek feldolgozásáról

A képek feldolgozásáról A képek feldolgozásáról Úgy gondoljuk joggal tételezzük fel, hogy a digitális fotótechnika elterjedésének köszönhetően nagyon sokan készítenek fotókat a különböző alkalmakkor a településeken. A régi papírképek

Részletesebben