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

Ó, mondd, te kit választanál?

2013.09.17. 19:18 nb

"Valakinek holnap le kell győzni a sötétséget
Mondd, te kit választanál?
Valakinek holnap át kell írni a régi meséket
Ó, mondd, te kit választanál?
Valakinek holnap meg kell váltani ezt a világot
Mondd, te kit választanál?"

István a király

Az első laborfeladat (szept. 23): a Prog1-beli első (humán genomos) védési feladatodat írd át C++ nyelvről Java-ra. Ez a bemelegítő feladat demonstrálja, hogy a Java, C# és társai valóban a "homokozó"... Természetesen magam is dobok egy megoldást, de ezt csak akkor nézd meg, ha önállóan nem sikerül!

Itt találod: http://www.inf.unideb.hu/~nbatfai/LZWBinFa.java

Egyszerűen fogtam a védési referencia z3a7.cpp forrást, s az eredeti kommenteket, kódot is meghagyva, egyszeri szekvenciális csipetenkénti átírással Java-ra alakítottam. Miért is és milyen szempontból "homokozó" ez? Lásd még az előadást majd a teljes képhez. de pl. a szereplő

public:
  LZWBinFa ():fa (&gyoker)
  {
  }
   ~LZWBinFa ()
  {
    szabadit (gyoker.egyesGyermek ());
    szabadit (gyoker.nullasGyermek ());
  }

helyett elegendő ennyi:

  public LZWBinFa() {

    fa = gyoker;

  }

hiszen itt nincs a megszokott (tag, referencia, pointer) csak a referencia, de mivel más nincs, így azt sem kell tudni, hogy ez referencia :-) s amit a programozó nem tud, az nem zavarja össze :-)))

20 pont annak az első 3-nak, aki ugyanígy magától átírja (s természetesen ugyanúgy működik), de a kód ne legyen nyilván ugyanaz, mint az enyém, hiszen azért még nem jár egy rúgóra az agyunk, tehát ne másoljuk, az enyémet csak végső elkeseredésben nyissuk ki! További 20 pont annak, aki átírja C#-ba is, s még további 20, aki Python-ba, ez esetekben is kérem a futás riportolását, hogy lássam első szűrőként, hogy ugyanúgy müxik.

Határidő: szept. 23., a labor., ahol ez lesz a hivatalos feladat is a labor-közösségnek.

Ki-kit választana?

Az előadás alatti ismerkedés meggyőzött, hogy a közösség képes lehet egy közös fejlesztést véghezvinni, ennek kapcsán itt az első házi feladat! Az alábbi használati esethez készíts pár Android tabletes, mobilos vagy webes kliens oldali képernyőtervet!

A pártválasztási preferencia (killer :) app használati esete

Intelligens polgári avatár/Pártválasztási preferencia

Ádám belép kedvenc közösségi portáljára és ott kitölt egy rövid kérdőívet, amivel anonim és implicit módon Éva pártválasztási preferenciáját próbálja prediktálni.

Lucifer mobiltelefonján közvetlenül a polgári avatár/pártválasztási preferenciával foglalkozó webes felületét keresi fel és kitölti az Éva pártválasztási preferenciáját implicite vizslató rövid kérdőívet.

Évának fülébe jut ismerősei ténykedése, de ő maga nem is foglalkozik ezzel egészen a választások előestéjéig, amikor is bosszantják a polgári avatár választási szimulációi alapján kialakulni látszó erőviszonyok, ezért most már ő maga is meghajtja a rendszert néhány ismerősének jellemzésével.

Másnap a választások eredménye alapján azt állapíthatjuk meg, hogy a polgári avatár pártválasztási szimulációi az idő előrehaladtával szépen konvergáltak a kapott eredményhez! Véleményünk szerint az intelligens polgári avatár pártválasztási preferencia alkalmazás „killer alkalmazás” lehet.

Határidő: szept. 23., a labor.

Te hogy készíted el?

Nem jönnek tömegesen a kétségbeesett kommentek, hogy keveset tudunk a fejlesztendő alkalmazás koncepciójáról a feladott képernyőskiccekhez... ennek oka az lehet, hogy még nem gondoltatok bele. Íme hát egy kis gondolatébresztő az elinduláshoz:

A legegyszerűbb az lenne, ha a felhasználó anonim maradna, viszont megadná, hogy az X Y nevű Z-beli U utca I házszám alatti lakos az O párt szavazója... Ő, azaz a felhasználó szerint. (Ennél már csak az lehetne kényelmesebb, ha az "Ő" is megadja az adatait...) Hoppá!

Próbáljuk meg hoppá nélkül, mert ez elég aggályosan hangzi, abból a szempontból, hogy börtön lehet a vége egy ilyen rendszernek - gondolom én, persze teljesen laikusként és nyilván azért túlozva-sarkítva. De az bizonyos, hogy ez a koncepció nem lenne elfogadható!

Szóval láthatóan a polgárokat leképezni a szoftverünk "polgári-avatárjába" lehetetlen...

Sokan ezzel lezártnak is tekinthetnék a fejlesztést, de mindig a lehetetlennek tartott dolgok egy elfogadható megoldása adja az innovációt, a felfedezés élményét; így ez a konklúzió minket ne tántorítson egy pillanatra sem. Sokkal inkább lássuk azt, hogy ez a fejlesztés biztosan nem a háromszög területének kiszámítása. De bajban vagyuk nem vitás, gondolkoznunk kell, mert a lehetetlen kifejleszteni érzést csak egy jó ötlettel tudjuk lelkesedésre változtatni, szóval hoppá nélkül:

Lássunk néhány agyvihart a leendő felhasználói követelmények tekintetében:

  1. a felhasználók teljesen anonimek legyenek, tehát a regisztrációkor nem kérünk be sem nevet, sem címet (hanem csak mondjuk egy tetszőleges emailt a sztenderd jelszóváltáshoz; talán egy város belefér, esetleg a fővárosban kerület)
  2. a felhasználók által jellemzett polgárok is teljesen anonimek legyenek, azaz itt se szerepeljen se név, se cím (sőt ide már a város sem kell)
  3. a felhasználók a saját lokális kapcsolati hálójukban (barátok, ellenségek, szomszédok stb.) mérnek
  4. a felhasználói mérés nem más, mint kijelentések tevése, pl. profilokba szervezve
    Exem profil/
    az exem egy "SZABAD SZAVAS SOREDITOR"
    az exem "PÁRT CHOICE" szavazó
    stb.
    Szomszédok profil/
    az alsó szomszédom egy "SZABAD SZAVAS SOREDITOR"
    az alsó szomszédom "PÁRT CHOICE" szavazó
    a bal oldali szomszédom egy "SZABAD SZAVAS SOREDITOR"
    stb.
  5. a fejlesztendő rendszer tudjon olyan térképes riportot generálni, amelyen az országtérképen a város és kerület felbontásban lászik a pártok százalékos megoszlása

Tehát ebben az értelmezésben a feladat kigondolni olyan attributumok összességét, amelyet a felhasználó hajlamos megadni egyrészt, másrészt alkalmasak arra, hogy valamilyen hatásfokkal velük a felhasználók és az általuk jellemzett polgárok megfeleltethetők anonim, de valóságos polgároknak, ami (városonként vett) leképezés alapján már triviálisan használható egy párteloszlás számolásához.

Tehát általánosan a fejlesztendő szoftver feladata a bevitt információkból, pontosabban azok redundanciájából egy "térképet" generálni éppen a redundanciák kiszűrésével (az X  jobb szomszédú bal szomszédja X és tk. az Y is X p valséggel mert ugyanazok a leíró tulajdonságai és...)

Az iménti c. pont lokális hálójának felvitele lesz a laborok első lépése, íme a kapcsolódó feladatok:

yanonymous1.png

az ehhez vezető első lépést vittem be a laborra, ezt nyomkodtuk a kurzus-tableten stb., de patetikusabban: a hallgatóság többségének ez volt az első Java programja! A kép a lokális kapcsolati-háló rajzoló verzióinak második lépését mutatja, amelyet a laboron kértem, hogy ne csak a csomópontokat, hanem az éleket is rajzolja ki. Ezek a lépések növekvő erősorrendben itt találhatóak (nyilván apránként töltöm fel, hogy az igényeseknek megmaradjon a saját megoldás adásának öröme). Az aktuális feladatok a következők:

  • 3. lépés - a tabletet forgatva (emulátorban Ctrl+F11 az AVD ablakban) újraskálázva a koordinátákat helyesen rajzolja ki a gráfot /10 pont/
  • (3.1 lépés - laboron volt, de már elfeleltettem, de még jó, hogy kommenteltek:) a húzásnak legyen nyoma /5 pt/ persze ezt a feature-t a saját app-otok felülírhatja, ha máshogy szervezitek meg a használatát, pl. nem akartok benne ilyen "vonszolást")
  • 4. lépés - húzzon politikai profilt a gráfra: nálam az élek lesznek a "barátok, ellenségek, szomszédok" (pl. csajom, tesóm stb.), a csomópontok pedig a pártpreferencia, első lépésben több profilt egyelőre ne szuszakoljunk be életünk első Android progijába :) /20 pont/
  • 5. lépés - a lehúzott csomópontokat és kapcsolatokat törölje /5 pt/
  • 6. lépés - legyen pár gomb, például "Clear" illetve "Upload" stb. (utóbbi persze csak gomb, egyelőre funkcionalitás nélkül) /15 pt/
  • 7. lépés - a lokális kapcsolati hálót mentse kilépéskor, belépéskor pedig töltse be /20 pt/

Kötelező olvasmány-csipet

Nyékyné Gaizler Judit [et al.], Java 2 : útikalauz programozóknak : 5.0 8. átdolg., bőv. kiad.

könyv első 55 oldalának értő-elolvasását kérem, s ebből írásban mindenki magának jelöljön meg szokásosan 3 olyan részt, ami nem világos, vagy kevésbé világos.

Pár szórakoztató kérdés zárásul:

milyen bitminával kezdődnek a Java bájtkódok? (Jávácska kérdés, csak 12 év alattiaknak, így erre 1 pontot adok, de aki nem tudja, annak -5 pontot :-)

Jöjjenek hát az éles kérdések, az alábbi prezi 17. feladatától van pár szórakoztató kvíz kérdés, kérdésenként adnék 5 pontot a válaszoló első három hallgatónak (figyelem ez most játék, nem laborkártya!) - azaz csak nyerni lehet vele..

47 komment

A bejegyzés trackback címe:

https://progpater.blog.hu/api/trackback/id/tr175521024

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

B.Norbi93 2013.09.17. 20:46:10

19 -> 7.: A: alma,dió B: alma,körte,dió

25 -> 4 almát ír - remélhetőleg jól írok mindent: a String referencia típus, ezért a == operátor azt vizsgálja, hogy két String (referencia) típusú változó ugyanarra az objektumra (jelen esetben stringre) mutat-e, míg a .equals() a két értéket hasonlítja (mivel a == hamis lesz, ezért csak 4)

28 -> a 3. válaszra tippelek, de csak hex editor képe alapján :)

Továbbá, hogy akkor az aktuális posztnál is meglegyen:
progpater.blog.hu/2013/03/10/kozos_feladatok_allamvizsga_beugro/fullcommentlist/1#c20624367

B.Norbi93 2013.09.17. 20:59:43

Egyből módosítanám is a 28-as válaszomat az 1. lehetőségre, a hexa "betűk" átváltásáról megfelejtkeztem :)

Smajdam 2013.09.17. 22:18:55

Én gondolkodom a layouton, de azt nem értem, hogy a usernek minek kiválasztania "évát" pl és megjelölni az ő lehetséges választottját. Mi haszna lesz nekünk abból, hogy beír egy nevet? Plusz utána udvariasan egy kérdést be lehetne iktatni, hogy "és ön kire szavaz?" Ez játszik?

Smajdam 2013.09.17. 22:20:19

Ja igen és még egy kis help kellene a kérdőívhez. Mi lehet ebben? Mert azon kívül, hogy felsorolom a pártokat, nem tudom mi lehet még.

nb · http://fersml.blog.hu 2013.09.17. 22:58:47

@veni_vidi_vici: okés, de a humán genomra nyomassuk a példa futást; ám hogy ne kérjek úgy, hogy semmit nem adok, további 5 pont, ha van sebességteszt, szimplán a time-al futtatva (de a genomra persze, mint a védésen)

nb · http://fersml.blog.hu 2013.09.17. 23:38:54

@Smajdam: a use case-t ne tekintsétek szentírásnak, bátran térjetek el tőle, ha kell. Ha beírna nevet, azért az jó lenne, de sokan nem írnának be, meg nem is írattathatjuk be... a börtönt el kéne kerülni, x kreditért nem érdemes ennyit kockáztatni :-))

nb · http://fersml.blog.hu 2013.09.17. 23:41:23

@Smajdam: szerintem a pártok mehetnek, csak az nem, hogy ki a kitöltő és az, hogy kiről tölti ki - ha kérdőívben gondolkodunk :)

Smajdam 2013.09.18. 00:45:46

Na én valami ilyesmire gondoltam :
www.kepfeltoltes.hu/130918/Screenshot_2013-09-18-00-39-07_www.kepfeltoltes.hu_.png

így több adatot lehet gyűjteni egy usertől, és szerintem barátságosabb is, mint pötyögni. Aztán majd leokézhatja, akkor majd feltölti az adatokat, és a kövi activityben pedig generál belőle valami diagrammot az aktuális állásról. Ezt majd lehet holnap(vagyis ma) suliban elkészítem. Vélemény?

veni_vidi_vici 2013.09.18. 09:29:40

@nb
lefuttattam a java kódot a humán genomra
screen: imagerz.com/QFdDWloAVQM

elkészült az lzw binfa c# verziója, ez is a humán genomon tesztelve:
source: pastebin.com/deDUW0n3
screen: imagerz.com/QFdDWloAVQI

B.Norbi93 2013.09.18. 20:29:01

17 - CCN = 6 - if és else if utasítások száma (csak else nem számít) + switchen belül case-ek száma (default nem számít) + ciklusok száma (kivéve feltétel nélküli ciklusok) + try-catch blokkok száma + 1 az alap main flow

18 - remélhetőleg jól értelmeztem a feladatot:
Java SE: java.lang.Math
Java ME: java.io.PrinStream
leJOS: lejos.robotics.navigation.Move

Java SE interfész: java.rmi.activation
Java ME interfész: javax.microedition.io

23 (goto) - én a 10. lehetőséget mondanám, miszerint egyik válasz sem helyes: van goto a nyelvben, de "not used"-ként van megjelölve

veni_vidi_vici 2013.09.18. 21:43:33

18.
SE: public class java.io.File
ME: public abstract class javax.microedition.MIDlet
Android: public final class android.Mainfest
lejOs: public class lejos.geom.Line

SE: public interface java.util.Iterator
ME: public interface javax.microedition.HttpConection

21.
1. ez a bájtkód hordozhatósága.
a java egyik legnagyobb előnye a hordozhatóság,
a bájtkódot átvihetjük másik operációs rendszerre,mert a bájtkódot nem közvetlenül a számítógép futtatja,hanem a JVM(java virtual machine).a linuxon lefordított kód futni fog windows op.rendszeren is.
22.
6.
a java.lang minden JVM alapcsomagja.ez tartalmazza a legalapvetőbb osztályokat:Object,System,Thread stb.
az android jvm-e egy módosított jvm azonban megmaradtak benne ezk az osztályok,így androidon is futnak azok a kódok amelyek csak java.lang osztályait használják.
api dokumentációk:
SE:docs.oracle.com/javase/7/docs/api/
ME:docs.oracle.com/javame/config/cldc/ref-impl/midp2.0/jsr118/
Android:developer.android.com/reference/packages.html
lejOS:www.lejos.org/nxt/nxj/api/
mindegyikben megtalálható a java.lang csomag
mobilon és android is futtatható a kód csak be kell rakni a .class fájlt egy .jar tömörített fájba,mert a .class-t nem tudják közvetlenül futtatni a mbilok jvm-je.
a jar ugyanazt az algorimust hsználja tömörítésre mint a zip csak .jar kiterjesztéssel(executable java archive).ezt tudja futtatni a mobil jvm-je.
24.
2.egy asztrakt osztály minden metódusát felül kell definiálni akár üres testtel.
25.
7.
string összehasonlításnál nem szabad használni a == operátort,az equals() metódust kell használni.
str1.equals(str2);formában.

nb · http://fersml.blog.hu 2013.09.18. 21:44:09

@Smajdam: nagyon jó a kép, de a logók használhatóságát tisztázni kell, ha nincs használható, akkor lehet egy sima kör a párt jellemző színével.

nb · http://fersml.blog.hu 2013.09.18. 21:55:19

@B.Norbi93: még nem nézegettem különösebben a beküldéseket, de a "goto"-s példán megakadt a szemem. Ennek a feladatnak a históriája, hogy írásbeli vizsgán a hallgatók kipróbálják a NetBeans-ben (már gyanús, mert IDE-fundamentalisták, az elég veszélyes népcsoport :) szóval a NetBeans igaz pirossal aláhúzza, tiltakozik minden szinten, rákérdez a végén, hogy ennek ellenére futtassa, s ha hagyjuk, akkor Ő bizony leinterpretál mindent... vagyis próbálja, amig tudja, de ez elég ahhoz, hogy a hallgató jelezze, hogy nem fogadja el a javításomat, mert Neki futott...

Szóval ezt az alapkönyvet forgasd meg egy kicsit a kérdésben a válaszod előtt:

docs.oracle.com/javase/specs/jls/se7/jls7.pdf

rákeresel a goto szóra és a pár találat után teljesen képben leszel, pl. a html változatból egy kapcsolódó rész:

"Unlike C and C++, the Java programming language has no goto statement"

docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.7

nb · http://fersml.blog.hu 2013.09.18. 21:58:40

@nb: s természetesen az is fontos, hogy parancssorból a javac-al kipróbáld a go.to-s példát, így teljesen pontos választ tudsz majd adni.

veni_vidi_vici 2013.09.18. 22:08:26

23.
7.
java-ban a goto foglalt kulcsszó,de nincs goto a java-ban
26.
4.
lefut és nem keletkezik kivétel,a java.net.Socket osztálynak van egy konstruktora:public Socket(String host,int port).
az "alma" sztringet írja ki.
27.
7.
hg.openjdk.java.net/jdk6/jdk6-gate/jdk/file/tip/src/share/classes/java/util/Random.java
28.
1.
Fantasztikus Programozás 1. :37.oldal 1.9 ábra
1100-C
1010-A
1111-F
1110-E
1011-B

veni_vidi_vici 2013.09.18. 22:35:44

27.
a link jó,de a szám elvan írva a 9. a jó.ugyanúgy kzdődik.

B.Norbi93 2013.09.18. 22:36:10

@nb: Igen, ezt láttam én is, hogy nincs goto statement (javac-vel is próbáltam, de már a gedit is pirossal kiemelte), de a keyword listában is benne volt not used-ként megjelölve. Először a 7-es válaszra gondoltam, aztán még további infokért rákerestem a Googleben, ott találtam egyrészt a fenti állítást (nincs goto statement), de itt jutottam el a keyword listáig is. Gondoltam, hogy lesz valami trükk, ezért válaszottam a 10-est, de akkor ezek szerint nincs :)

veni_vidi_vici 2013.09.19. 05:38:11

Elkészítettem az lzw binfa python implementációját is. Ahogy számítottam rá a python pokolian lassú :) ezért a humán genomos fájl első 100 ezer sorával teszteltem, s összevetettem a végeredményt a tanár új java kódjának outputjával

source: pastebin.com/ZcwLyu1z
python kód futása: imagerz.com/QE5PXUtvAwMCUF4cQAVQ
tanár úr kódjának futása: imagerz.com/QE5PXUtvAwMCUF4cGAVQ

Cvanger 2013.09.22. 12:54:09

Intelligens választó!
Akkor tehát az a probléma, hogy valahogy azonosítani kell a polgárokat, és nem lehet a nevét, vagy a személyi számát (:D) felhasználni, viszont amit biztosan tudunk az egy e-mail cím és egy város. Ezeken felül tudjuk még a polgár által megadott (a bekéréskor "nyilaktozott") kapcsolatait. Sztem 3-4 kapcsolat/tulajdonság által szinte egyértelműen be lehet azonosítani az illetőt, hiszen gondoljatok bele: én nyilatkozok: az éjfolyamtársam (~300), akivel a gólyatáborban ismerkedtem meg (~4) + debreceni (~1), vagy valami hasonló. Tehát a bekéréskor, rá kell venni a felhasználót, hogy adjon meg (kötelezően) min. 2-3 kapcsolati viszonyt, de nem muszáj közte és "valaki" között, be lehet vonni a 2-3 kapcsolat meglétéhez akár egy 3. személyt is, a lényeg az, hogy egy relativa minnél nagyobb "részgráfot" adjon meg, mert ezt könnyebb beilleszteni a már meglévőbe, illetve könyebb felfedezni a redundanciát. Erre pl.: egy kör vagy ellipszis reprezentálja a személyeket és az ezeket összekötő vonalak a kapcsolatokat ( csúcs - él - csúcs) és a z élekre csak szavakat lehet írni mondjuk az előre definiált magyar szavak listájából, így kerülve el az elírásokat, illetve a "Terike azt mondta a zöldségesnél, hogy a fia lakótársa stb.", ennek az elemzését hagyjuk a Google-ra. Mit szóltok ehhez az irányhoz?

Kassen 2013.09.23. 11:15:17

Android részesedése a piacon(2013) 79 %

www.gartner.com/newsroom/id/2573415

5 pont

DeeGort 2013.09.23. 16:20:13

Órai kötelező kérdésem:
A kérdés a kommentelt sorok müködésének miértje lenne.

public class Progi
{
static class Test1
{
private int fizetes = 0;

private void FizetesNoveles()
{
++fizetes;
}

public int FizetesLekerdezes()
{
return fizetes;
}
}

static class Test2
{
public void EgyMetodus()
{
Test1 test = new Test1();

System.out.println(test.FizetesLekerdezes());
test.FizetesNoveles(); // Milyen jogon hivhatom en ezt meg?
System.out.println(test.FizetesLekerdezes());
test.fizetes = 2312; // Milyen jogon tehetem ezt meg?
System.out.println(test.FizetesLekerdezes());
}
}

public static void main(String[] args)
{
Test2 test = new Test2();

test.EgyMetodus();
}
}

B.Norbi93 2013.09.23. 19:33:06

@DeeGort: Egy könyvből szedem az infot: (statikus osztályok csak beágyazott osztályok lehetnek)
"Mivel azonban a statikus beágyazott osztályok továbbra is a tartalmazó osztály tagjának számítanak, hozzáférhetnek a külső tartalmazó osztály bármely privát tagjához - persze csak azokhoz, amelyek szintén statikusak" (Head First Java / Agyhullám Java)
(és akkor úgy tűnik, hogy a static osztály privát tagjaihoz is van hozzáférés)

Android market share (táblázat kicsit lentebb a cikkben)
bgr.com/2013/08/07/windows-phone-blackberry-market-share/

5 pont

Cvanger 2013.09.24. 13:45:24

www.dropbox.com/s/7ahba3cnnn966ac/alap_graf.png

mostmár lehet összeköttetéseket létrehozni, mindig ahhoz köti, amelyikhez a legközelebb volt az ACTION_DOWN, de még húzás közben nem rajzolja "folyamatosan", az a következő

B.Norbi93 2013.09.24. 14:08:54

Az Android ADT-s gyakorlati progival lenne kérdésem (pontosabban annak beüzemelésével):
- New Android App. Project -> adatok megadása (package: com.example.<projectname>) és blank project választása
- 2 új osztály létrehozása, Anonymous superclassa az Object, a YourWorldView-nek az android.view.View
- Emulátor működik

És itt bizonytalan vagyok, hogy hogyan tovább, a progi a Hello worldot írja ki. Gondolom a MainActivityben az onCreate eljárásban kellene valamit alkotni, de nem igazán látom, hogy mi lenne az (pl a YourWorldView konstruktorainak milyen paramétereket kellene átadni?)

--
A három kérdés gyakorlatról + oldalszám:
1. Mohó kiértékelésű logikai műveleteknél: mit jelent az, hogy egy kifejezés mellékhatásos? (26. oldal)

2. Ha pl. egy int változót becsomagolok egy Integerbe, akkor az adott változó érték v. paraméter szerint lesz átadva egy függvénynek/eljárásnak? (38. oldal lábjegyzet)

3. Félnyilvános tagok nem érhetik el egy másik csomag tagjait - Ha tehát én egy java.util csomagbeli osztályt terjesztek ki, akkor nem érhetek el egy olyan osztályt, ami a java.lang-ot terjeszti ki? (43. oldal)

VSanyi94 2013.09.24. 14:20:10

Az órán feltett kérdésem:

Ha egy absztrakt osztály őse egy másik absztrakt osztály, akkor az ősosztály absztrakt függvényei absztraktak maradhatnak-e?

Kipróbált programom és a működése:

kepfeltoltes.hu/view/130924/abstract_www.kepfeltoltes.hu_.png
(3 pont)

nb · http://fersml.blog.hu 2013.09.24. 21:14:06

@Cvanger: ahogy magánban is leveleztük (de arra bíztatok mindenkit, hogy itt nyomjuk, hogy egy valódi közösségi fejlesztés legyen), szóval szerintem a jelenlegi szinten jól érted a koncepciót. Nyilván azóta a labor is rövidre zárta, hogy a lokális kapcsolati háló jellemzésére egy olyan Androidos "vastag" klienst (azaz nem sima böngészős) készítünk, ahol az anonimizált kapcsolati hálóját mindenki felviheti.

(Elfelejtettem, de természetesen a pontokat nemcsak a gráfos, térképes hallhgatók kapják meg, hanem akik "vékony"/böngészős kliensben gondolkodtak - tehát akinek volt képernyőkép skicce - nem papíros :) vagy ugye konkrét Androidos gyors-prototípusa.)

A fő kérdés továbbra is, hogy miért is használná ezt a közösség? Mert mi nyilván nem tudunk nyereményautót adni a szerencsés kattintónak... :) Ezért gondolkodok a "profilokban", amelyeket úgy válogatunk össze, hogy meg tudjanak szólítani egy közösséget egy adott témában. Bár a politikát volt, aki opponálta a laboron, de ez a közösség azért szerintem létezik.

Többen már az "anonimuzálásra" is javasoltak volna algoritmust, ezt még korainak tartom, hiszen még a koncepció sem tisztázódott a jelen agyvihar fázisban. Azt persze lehet feltételezni, hogy a teszteléshez generálunk egy "valódi" gráfot, ez alapján pár ágens készítünk, akik e valóság + kis hiba + kis hazugság mellett auto tesztelnek, s a megoldások ott versengenek majd, hogy az ezen ágensek szolgáltatta adatok alapján a csapat implemtációja mennyire tudja sikeresen előállítani az eredeti "valóság" gráfot. Hiszen ahogy korábban is írtam, ha megvan a valóság, akkor az adott profilbeli statisztikák kiszámolása már triviális.

nb · http://fersml.blog.hu 2013.09.24. 21:18:08

@Cvanger: remek! A "húzás nyomát" könnyen tudod implementálni: az eseménykezelőben elkapod a android.view.MotionEvent.ACTION_MOVE mozgást, az eseménybeli x,y-t elmented példánytagokba, invalidate és a rajzoló módszerben e példánytagokba elmentett x, y-ra rajzolsz valamit, ez szépen fogja húzni a "húzás csíkját".

Cvanger 2013.09.24. 23:05:58

@nb: elkészült a "húzás", bár már készen volt mielőtt az előző komment kikerült, kb 1 órát kinlódtam a rögzítéssel, a recordmydesktop nem jól működik és sok googlezás után rátaláltam, hogy a cinnanomba alapból be van építve: CTRL+SHIFT+ALT+R-rel kezdi venni, ugyanezzel megál és a Home mappába menti *.webm néven. A kis kitérő után itt tartok:

www.dropbox.com/s/v5qydz31oa4qc63/huzas.webm

Azt hogyan tudom megoldani, hogy ha kihúzza, akkor ne tegye le? van rá ACTION_ vagy egyszerüen nézzen, hogy ha a kijelző szélességénél nagyobb az x akkor nem kell letenni?

nb · http://fersml.blog.hu 2013.09.24. 23:56:02

@Cvanger: néztem a videót, szerintem jobb így valóban a felhasználói élmény és jobban tudja pozícionálni is.

A törlés a progidtól is függ, de pl. ha kihúzza a koordináták alapján az ablakból, akor egyszerűen azt a node-ot törlöd a listából és a node-nak megfelelő kapcsolatot is persze, s a rajzoló már a módosított listák alapján egyszerűen nem rajzolja majd azokat.

veni_vidi_vici 2013.09.25. 00:09:29

elkészültem az androidos alkalmazás bővítésével. Amit tud:

- új csúcs létehozása
- meglévő csúcshoz új csúcs létrehozása, éllel összekötve
- él létrehozása 2 meglévő csúcs között
- külön színnel kiemeli az aktuálisan kiválasztott csúcs részgráfját

screenshotok:
imagerz.com/QE5PCUtvAwMCUFIfFQVQ
imagerz.com/QE5PCUtvAwMCUFIfFAVQ
imagerz.com/QE5PCUtvAwMCUFIfFwVQ

veni_vidi_vici 2013.09.25. 04:26:26

bekerült a clear és upload gomb, persze csak a clear működik :D

videó: www.youtube.com/watch?v=8QTguLi-aVw

B.Norbi93 2013.09.28. 21:49:33

Lenne egy olyan kérdésem az androidos feladatokkal kapcsolatban, hogy a lépéseknek mi a határideje (meddig lehet rá pontot kapni)? Minden lépésnek egy hét? Vagy lépésenként egy hét?

Illetve, hogy minden lépésnek előfeltétele-e az előző lépés, tehát lehet-e pontot kapni pl. a 3.1-esre, ha még nincs 3.0-som?

A vonalas feladatot (3.1) megcsináltam 5 pontért, de a 3.0-s még nem igazán áll össze..
www.dropbox.com/s/qkavnmbdpap9ck7/lines.avi

nb · http://fersml.blog.hu 2013.09.29. 10:06:05

Holnap az első 5 projekt említett forrásai közötti különbségek mindenkinek alapfeladat (ugye az www.inf.unideb.hu/~nbatfai/YANonymous/1.tar.bz2-ben pl. csak az Anonymous.java-t és a YourWorldView.java-t kell nézni, az Activity osztályt pl. nem is, s ezt kell végigvinni az 5-ig)

a lépéseknek nincs határideje, csak az lényeges, hogy aki azután küldi be, hogy én kitettem a sajátomat, attól azt is várom, hogy röviden sommázza, hogy Neki mi segített az enyémből, mit írt át, tehát, hogy ne csak szolgai letöltöm beadom legyen, mert az nyilván nem éri ela célját!

a lépéseknek nem előfeltétel, de úgy építettem fel, hogy a kezdőknek segít, a profik kezdik a hetes-nyolcal szinten akár.

Szerintem jó a videó, amit küldtél az adott szinthez, a sima 3.0-ssal az lehet a gondod, hogy az anonimek és relációik kapcsolata nem statikus és átméretezéskor új objektum jön létre a View-ból, szerinte, De nyomd a kérdéseket akár ide, akár a tegnap izzított levlistára, be van linkelve a poszt elején, ha olvasás közben be vagy logolva a google-ra, akkor látod.

A.Betti 2013.09.29. 21:35:08

Órai kérdés:
Ha van egy olyan osztály, ami rendelkezik egy ősosztállyal, akkor annak a konstruktora ha az ősosztályra is akarunk hivatkozni super-rel, muszáj super-rel kezdeni vagy a végére is hagyhatjuk?

kepfeltoltes.hu/view/130929/ososztaly_www.kepfeltoltes.hu_.png

3 pont

veni_vidi_vici 2013.09.30. 04:56:01

7. lépés, 20 pont
a lokális kapcsolati háló mentése / betöltése (jelenleg 2 gombbal megvalósítva)

videó: www.youtube.com/watch?v=Cqk4nxsNjeo

B.Norbi93 2013.10.01. 15:30:09

Scrollozás + sikerült megcsinálni a forgatást (utóbbiért 10 pont)
www.dropbox.com/s/7yvqv2tt7qn2v3r/scroll.avi

Valamint Clear, Undo, Upload gombok: (15 pont)
www.dropbox.com/s/hbjm1tcct1ega36/clear.avi

A forgatásnál nekem valamiért nem tartotta meg az Anonymousokat, csak ha a Mainfest XML activity elemének van olyan attribútuma, hogy:
android:configChanges="orientation|screenSize|keyboardHidden"
Ha pl az orientationt kihagytam, akkor már nem maradtak meg a csúcsok. Ha pedig az onSizeChanged-ből hívtam meg egy másik függvényt, ami mondjuk a koordinátákat számolta volna, akkor szintén eltűntek a pontok, szóval helyben kellett megoldani a két for ciklust. Tehát elég nehéz szülés volt, de legalább meglett :)

APK:
www.dropbox.com/s/lc9fkzns4kl8n2f/MyFirstApp.apk

veni_vidi_vici 2013.10.14. 14:33:13

Kapcsolati háló mentés / betöltés (5 pont):

SharedPreferences osztály:
developer.android.com/reference/android/content/SharedPreferences.html

A csúcsokat egyértelműen megkülönböztethetjük a képernyőn elfoglalt x és y koordinátájuk és a képernyő orientációja alapján. Tárolnunk kell még a csúcs által tárolt pártpreferenciát. A csúcsok számát is elmentjük, hogy megkönnyítse a betöltést. Ezek után jönnek a csúcsok közti kapcsolatok. Amit tárolnunk kell: 2 csúcsot, melyek között az él húzódik, valamint az él típusát.

veni_vidi_vici 2013.11.04. 14:39:41

kommentek elején a java source.

VSanyi94 2013.11.15. 13:01:09

Védési program pythonba való átírása, nem tudom, hogy még erre lehet-e pontot kapni:

pastebin.com/RKkNKBTL

Futtatása:
kepfeltoltes.hu/view/131115/pythonLZW_www.kepfeltoltes.hu_.png

+20 pont

B.Norbi93 2013.11.26. 16:00:02

Kicsit megkésve, de még én is prezentálnám a binfa pythonos és C#-os átiratát, ha még lehet. Már kb két hete kész van, de eddig próbálkoztam a pythonnal, hogy a teljes humángenomos kromoszómára futtassam, mivel kb 40-50 MB hátralévő karakternél nagyon megnő a futási idő (én kb +10 órával számoltam). Ezt próbáltam csökkenteni, sikertelenül, (bár lehet, hogy én nem tudok valamit :) ), szóval végül én is egy 100 ezer soros tesztet csináltam:

kép: imagerz.com/QE4SUUtvAwMCX1xKFwVQ
forrás: pastebin.com/E5Fi6Nbd

C#
kép: imagerz.com/QE4SUUtvAwMCX1xKFgVQ
forrás: pastebin.com/iM8K3qgL

(20+20 pont)
süti beállítások módosítása