HTML

Programozó Páternoszter

Ez a Programozó Páternoszter (PP) blogja, a programozásról szól. Aktualitása, hogy a Debreceni Egyetem Informatikai Kara Magasszintű programozási nyelvek 1-2, C++ esattanulmányok, Java esettanulmányok című kurzusainak blogja is egyben.

A vadászat

A Debreceni Egyetem Programozói Évkönyve: az UDPROG projekt. A szakmai fórumunk a Facebook-en. Az új előadások a prezin.
A régi előadások:
Prog1:
1. C bevezetés
2. C tárgyalás
3. C befejezés
4. C a gyakorlatban
5. C++ bevezetés
6. C++ tárgyalás
7. C++ befejezés
8. C++ a gyakorlatban
9. Java platform bevezetés
10. Kvantuminformatikai alg. bev.
Prog2:
1. Java bevezetés
2. Java tárgyalás
3. Java befejezés
4. Java a gyakorlatban
5. Software Engineering bev.
6. Java EE bevezetés
7. AspectJ bevezetés
8. BPMN-BPEL SOA programozás
9. C++ haladó
10. Tensorflow

Kövess engem!

Friss topikok

Linkblog

YANonymous élesítve

2013.10.21. 00:48 nb

Múlt hét szerdától elérhető a git repó a SF-on, most már át is szerveztem: egy "Helló, Világ!" szintű Google Protobuf kommunikációs osztályt formálisan betettem a Maven projektbe (lásd a pom.xml-t). Ez lesz az alapja a YANonymous Construct és a YANonymous Puzzle közötti kommunikációnak.

Az API forgatása

Az előző laboron az immár IDE független (azaz Maven csomagként elkészített) YANO csomagot szereltük fel különféle riportokkal, s kicsit a projekt szakmai vezetőjeként ellenőriztünk néhány riportot, hogy például betartottuk-e a kódolási szabályokat? egyébként koránt sem... 

A mostani poszt fővonala előtt jöjjön egy reguláris kitérő: 5 pontért ismételd meg az alábbi mérést. Nem haszontalan, hiszen ezt a Java (vagy saját, de ugyanezt végző) programot kell "félévközbeni védésként" bemutatnod.

Nyilván a prog1 után lerágott csont a humán genom 2. kromoszómája, de ismételjük  meg most Javában a futtatást:

norbi@colossus:~/P2$ javac LZWBinFa.java
norbi@colossus:~/P2$ wget ftp.ncbi.nlm.nih.gov/genomes/H_sapiens/CHR_02/hs_alt_HuRef_chr2.fa.gz
norbi@colossus:~/P2$ gunzip hs_alt_HuRef_chr2.fa.gz
norbi@colossus:~/P2$ time java LZWBinFa hs_alt_HuRef_chr2.fa -o kimenet

real    4m22.409s
user    3m51.348s
sys    0m52.252s
norbi@colossus:~/P2$ tail kimenet
------------------------------------------------------------------------------------------0(29)
------------------------------------------------------------------------0(23)
------------------------------------------------------------------0(21)
------------------------------------------------0(15)
------------------------------------------0(13)
------------------------0(7)
------------------0(5)
depth = 291
mean = 77.910095987775
var = 8.81903638228341

Ha menet közben elszállna a program, pl. notebook-okonez tipikus lesz, akkor add ki a jconsole parancsot, ha a JDK bin könyvtára szokás szerint benne van a PATH-ban, akkor ez indulni fog simán, s látni fogod, hogy a heap használatával volt a gond, ez esetben a java nem sztenderd opcióit kell használnod (lásd java -X, a képen nem volt gond egyébként, ahogyan látszik is)

prof1.png

S most jöjjön maga a mérés, aki az átírásban a java.io.PrintWriter helyett eleve a java.io.PrintStream osztályt használta, az alapban élvezheti a 2. kromóra futtatást :) Egyébként elég formálisan cserélni a Writer-t Stream-re, illetve a main-ben az alábbi pár sort tedd a szereplő helyére:

      java.io.PrintStream kiFile =
              new java.io.PrintStream(
              new java.io.FileOutputStream(args[2]));

Csak ki tudtam várni az eredményt:

norbi@colossus:~/P2$ javac LZWBinFa.java
norbi@colossus:~/P2$ time java LZWBinFa hs_alt_HuRef_chr2.fa -o kimenet

real    63m31.260s
user    17m31.872s
sys    47m20.944s

prof2.png

15 pontot ér, ha megmagyarázod a futási idő 5 percről 1 óra 5 percre növekedését, 5 pont, ha jeéentkezik memóriagond, de elhárítod, további 10, ha a Stream-el is lefut jó időben.

Védési szezon

A következő két hétben javaslom beütemezni az első védést, ahol éppen az iménti programot kell védeni, lehat akár már holnap is! Laborközösségenként az első 3 sikeres védőnek holnap, de csak holnap 10-10 pont is üti a markát. Védeni természetesen teljesen saját programot is lehet, feltéve, ha ugyanazt adja, mint a fenti (természetesen minden félévben más és más az eredmény, s nyilván nem a 2. kromoszóma változott meg, hanem a programunk javult, de most igazodjunk a default progi kimenetéhez.)

A védések lesznek tehát a fókuszban, de íme néhány feladat a következő két laborra:

  • 5 pontért végezd el a BBP-s sebességtesztet, ahol a C és a Java implementációt veted össze. További 25 pontot könyvelhetsz el magadnak, ha ehhez a 2 nyelves összehasonlításhoz további nyelveken (pl.: C#, Python stb.) is implementálod a programot (nyilván ugyanazt adja). Ne felejts el elolvasni a Javát tanítok ezeket a programokat tárgyaló részét! Hiszen itt találod a szóban forgó forrásokat is.
  • 15 pont, ha ezt a Maven alapú "Helló Világ!" szervletes példát feléleszted tetszőleges környezetben, s további 15 pont minden más környezetért (pl. az előadás fóliák alapján defaultban deployolod Tomcat-re, majd további ismerkedésként az alkalmazásszerverek használatával: GlassFish 2, GlassFish 3-ra, vagy ébben JBoss-ra).
  • 30 pont, ha feltöröd ezt a hibásan implementált RSA-val kódolt titkos szövege. Indulj ki az előadás fóliáiból és szótár alapon törd! Ilyen törés lesz az írásbeli vizsga szokásos "beugrója", ezért szerintem semmiképen ne hagyd ki!

55 komment

YANonymous = YANA + Anonymous = You Are Not Anonymous

2013.09.26. 19:16 nb

"MORPHEUS: This is the Construct. It is our loading program.  We can load anything from clothes, to weapons, to training simulations. Anything we need."
http://www.imsdb.com/scripts/Matrix,-The.html

YANonymous = YANA (You Are Not Alone)  + Anonymous = You Are Not Anonymous

Az app képletének értelmezése:

  1. Anonymous: az alkalmazás teljesen anonim úgy a felhasználó, mint az általa jellemzett további szereplők esetén.
  2. You Are Not Alone: sokan készítik el a kapcsolati hálójukat
  3. Ami feladatunk az 1.) és 2.) alapján a felhasználók valódi közösségi hálózatának a felderítése (tehát az anonimítás olyan értelmű "törése", hogy azt továbbra sem tudjuk, hogy valójában ki-kicsoda, de azt igen, hogy a felvitt anonim szereplők kinek a kiei)

Ez az alapfeladat és alap app, ahol a kapcsolati hálót a YANonymous Construct program építi fel, amelyekből a YANonymous Puzzle építi fel a közösségi hálót. Előbbi háló tehát kicsi, lokális és anonim, utóbbi globális és az előbbiekből számított.

Előző posztunknak megfelelően a héten folytatjuk a lokális kapcsolati háló megadását biztosító Androidos kliensprogram - a névadása (lásd a mottót) tekintetében a Mártrix ihlette - Construct fejlesztését. Fontos szempont, hogy a háló megadásánál az adatokat szolgáltató felhasználó és az általa megadott további szereplők is anonímek maradjanak (az más kérdés, hogy párhuzamosan megkezdjük a ConstructGPS fejlesztését is, amelybe olyan funkciókat ad majd, amelyek bizonyos értelemben odavágnak az anonimitásnak...! )

Feladatok

Nem felejthetjük el, hogy a fejlesztés egyik hordozója a prog2 kurzus (illetve a prog2-esek bejöhetnek a Java esettanulmányokra is, ahol ugyanez a téma, csak fokozottabb a tempó, hiszen ott ez a fejlesztés elsődleges cél). Szóval jövő hétre prog2-ből írásban kérek pár észrevételt, hogy mi a különbség az alábbi első 5 Maven forráscsomag között. Természetesen a lényeg az src könyvtárakban lévő néhány Java forrás összehasonlítása!

Emlékezz az első laborra, ezeket a forrásokat felhasználva könnyen fel tudod éleszteni a projekteket az ADT Bundle Eclipse-ében, de immár nem IDE rabszolgaként akár a Maven-elis dolgozhatsz, lásd a csomagokbeli README állományt. (Android/Java kezdőknek javaslom, hogy 1-2 hétig még maradjanak az Eclipse-ben.) De már most +10 pont, aki az előző pont feladatait Maven projektként készíti el, adja be, természetesen feladatonként.

Az 5.tar.bz2 itt tart:

yanoc5.png

a pártos profilt használja, lásd a Unidentifiable.java forrást a csomagban

package hu.unideb.inf.batfai.yanonymous5;

interface Unidentifiable {

    void next();
    int getColor();

    interface PoliticalAffinity extends Unidentifiable {

        @SuppressWarnings("serial")
        public static final java.util.Map<String, Integer> partyColors = java.util.Collections
                .unmodifiableMap(new java.util.LinkedHashMap<String, Integer>() {
            {
                put("Party",
                        android.graphics.Color.rgb(0x01, 0x0a, 0xbf));
                put("Fidesz",
                        android.graphics.Color.rgb(0xef, 0x9a, 0x2b));
                put("MSZP",
                        android.graphics.Color.rgb(0xef, 0x07, 0x0c));
                put("KDNP",
                        android.graphics.Color.rgb(0xf1, 0xec, 0x5b));
                put("Jobbik",
                        android.graphics.Color.rgb(0x4d, 0x53, 0x53));
                put("LMP",
                        android.graphics.Color.rgb(0x1d, 0x8e, 0x06));
                put("YANO",
                        android.graphics.Color.rgb(0x80, 0xe3, 0x05));

            }
        });
    }

    interface Archetype extends Unidentifiable {

        @SuppressWarnings("serial")
        public static final java.util.Map<String, Integer> relationship = java.util.Collections
                .unmodifiableMap(new java.util.LinkedHashMap<String, Integer>() {
            {
                put("Relationship",
                        android.graphics.Color.rgb(0x01, 0x0a, 0xbf));
                put("Csajom",
                        android.graphics.Color.rgb(0xef, 0x9a, 0x2b));
                put("Fiúm",
                        android.graphics.Color.rgb(0xef, 0x07, 0x0c));
                put("Muter",
                        android.graphics.Color.rgb(0xf1, 0xec, 0x5b));
                put("Fater",
                        android.graphics.Color.rgb(0x4d, 0x53, 0x53));
                put("Tesó",
                        android.graphics.Color.rgb(0x1d, 0x8e, 0x06));
                put("Szomszéd",
                        android.graphics.Color.rgb(0x80, 0xe3, 0x05));

            }
        });
    }
}

25 pontért bővítsd úgy a programot, hogy az élekre és a csomópontokra kiírja a, de szépen ám az iménti kulcsok neveit! +10 pont, ha egy gombbal ezt a kiírást ki/be lehet kapcsolni.

A reguláris feladat, amely mindenkinek kötelező az 5 csomag rövid írásbeli összevetése, hogy az i+1 csomag miben több, mint az i (hasonlításonként max 1-2 mondat).

S itt az én protóm a hatosra:

yanoc3.png

További trófeák: a Construct-os apk-t, ha kiteszed, akkor 5 pont annak, aki teszteli Neked és talál egy BUG-ot, amelyet a fejlesztő elismer - s 5 pont a fejlesztőnek is, ha javítja és a bejelentő ezt elfogadja a BUG javításának.

A hetes plussz fícsörei:

  • üres terület húzásával lehet mozogni a kapcsolati hálón ("végtelen" távolságba bármely irányba)
  • egy módosított Android logó jelzi, melyik csomópont vagyok én

yano7.png

A nyolcas plussz fícsörei:

  • más mozgatás
  • pager

yanoc8.png

38 komment

süti beállítások módosítása