ugrás a tartalomhoz

Archívum - Jún 2012 - Fórum téma

június 23

A lepattanó labdák kapcsán (OOP)

eddig bírtam szó nélkül · 2012. Jún. 22. (P), 22.04
Mikor megláttam morocztamás topikját, az első reakcióm az volt, hogy ha már Python, akkor miért nem OOP?
Nem akarok beleszemetelni a témájába, ezért inkább áthozom önálló topikba: ha van egy ilyen, bár nem webes, de egyszerűnek látszó feladvány, hogy néhány golyót kell mozgatni egy 2D-s, grafikus felületen, ezt hogy lehetne objektumokra bontani?
A feladat egyszerűnek tűnik, nem kell semmiféle különösebb fizikával foglalkozni. A mozgó "golyók" (nevezzük inkább korongnak, mivel 2D) véletlenszerű irányba mozognak azonos sebességgel. Ütközéskor a mozgás irányát 180fokkal megfordítom. Hogy melyik irányt (x v. y tengely) az mondjuk attól függ, hogy a korong kerületének mely pontján történt az ütközés.

Már a kiindulásnál elakadtam: a Tiszta kódban azt olvastam, hogy egy osztályról úgy lehet legegyszerűbben eldönteni, megfelel-e a SRP-nek, hogy leírom néhány szóban a feladatát. Amennyiben a leírásban megjelenik legalább egy "és", akkor az az osztály biztosan nem felel meg neki. Sajnos amit el tudok képzelni, azzal nem jön össze.
Egy osztály/objektum lenne a tábla, amin a korongok mozognak.
Ennek van mérete, színe és...
Két feladata: részben konténer jellegű objektum, amelynek egyik feladata a korongok "tárolása", másik feladata a megjelenítés. Máris egy "és" kapcsolat(??? ezen az osztályon/objektumon nem sokat gondolkodtam, számomra a lényeg a Korong osztály lenne)

Másik osztály a Korong nevű, amely a korongokat modellezné.
Ennek vannak olyan tulajdonságai, hogy szín, aktuális pozíció, valamilyen formában tárolva a mozgás iránya. Eddig OK.
És vannak feladatai... Többesszám??? Akkor ez eleve nem lesz jó. De... lehet, hogy mégis, csak én értelmezem rosszul a SRP-t?

Python egymásról lepattanó labdák

morocztamas · 2012. Jún. 22. (P), 14.44
Egy Python alkalmazás készítése során akadt gondom. Nem pont a nyelvvel, inkább a feladat megoldással. A lényeg, hogy a labdáknak egymásról vissza kellene pattanniuk, de nem nagyon csinálják, vagy ha igen, akkor is csak néha. Hogyan hozhatom helyre? Két labdánál tökéletesen működött még.

[colorer=python]# -*- coding:Utf-8 -*-
################################################################################
# Python program #
# Szerző: Mórocz Tamás, Budapest, 2012 #
# Liszensz: GPL #
# #
# Több színű labda mozog, amik egymásról és az oldalfalakról visszapattannak.

css betűk

Garpeer · 2012. Jún. 22. (P), 11.53
Üdv!

A Shapes of CSS nézegetése közben jött ötlet kicsit elburjánzott, de sikerült megalkotni az angol ABC-t CSS-sel.
Nem szép, de legalább nem jó semmire.
Esetleg valakinek ötlete, hogy az ékezeteket hogy lehetne megoldani?
 

június 21

onmousedown onmouseup

csman007 · 2012. Jún. 21. (Cs), 12.41
Sziasztok!
A következő lenne a problémám.
Egy "csúszkát" csinálok éppen.
A js kód:

function getBox(e){
    	    var x=0;
    	    var y=0;
    	    var p=e;
    	    while(p){
    	        x+=p.offsetLeft;
    	        y+=p.offsetTop;
    	        p=p.offsetParent;
    	    }
    	    p=e;
    	    while(p){
    	        if((p.scrollLeft||p.scrollTop)){
    	            x-=p.scrollLeft;
    	            y-=p.scrollTop;
    	        }
    	        p=p.parentNode;
    	    }
    	    
    	    
    	    return [x,y,x+e.offsetWidth, y+e.offsetHeight]
    	}
    	intervalButton={};

    	function intervalButtonDown(ev,e,name,side){
    	    ev=ev?e:window.event;
    	    intervalButton.e=e;
    	    intervalButton.name=document.getElementById(name);
    	    intervalButton.side=side;
    	    e.parentNode.onselectstart = function (){return false};
    	    e.parentNode.style.MozUserSelect="none";
    	    return false;
    	}
    	
    	function intervalButtonMove(t,e){
    	    if(!intervalButton.e){return};
    	    e=e?e:window.event;
    	    var b=getBox(intervalButton.e.parentNode)
    	   	var v=Math.round((e.clientX-b[0])/30)*5+30;
		   	v=Math.min(v,55);
		    intervalButton.e.style.left=((6*(v-30))-5)+"px";
    	    intervalButton.e.parentNode[intervalButton.side]=v;
    	    $('#einsparung').val(v-25);
    	}
    	function intervalButtonUp(t,e){
    	    intervalButton={};
    	}
a html kód pedig

<div class="intervalInput" onMouseMove="intervalButtonMove(this,event);" onMouseUp="intervalButtonUp(this,event);" >
   <div style="left: 55px;" onMouseDown="intervalButtonDown(event,this,'minV','min');"  class="intervalButton"></div>
</div>
Minden jól megy, csak néha olyat csinál, hogy lenyomom az egérgombot és nem áll meg az onmousemove ha nincs lenyomva az egér gombja, hanem csúszkál ahogy húzom az egeret, pedig nincs lenyomva az egérgomb.
 

Szöveg megjelenítés probléma

pilot · 2012. Jún. 21. (Cs), 10.32
Sziasztok!

Egy weblap készítése során az a probléma merült fel, hogy az Internet Explorer 8 és a Mozilla Firefox 3.5 az oldal szöveges tartalmát nem egyformán jeleníti meg.
Konkrétan: 17px-es betűméretig a karakterek IE esetén kövérebbek, mint a Mozillá-nal. 18px-től már nem szembetűnő a probléma.

Itt a kód:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
BODY {
	font-family: Arial, Helvetica, sans-serif; 
	font-weight: normal;
	font-size: 17px;   
}
</style>
<title>Untitled Document</title>
</head>
<body>
<?php
echo 'teszt';
?>
</body>
</html>
 

PHP - kivételek szerializálása

inf · 2012. Jún. 21. (Cs), 06.08
Üdv.

Nem akartam ennek külön blog bejegyzést, mert annyira kis dolog, úgyhogy ide teszem be.

class Clean_Exception extends Exception {

    public function __sleep() {
        return array_keys(get_object_vars($this));
    }

}
Ha sima Exception-t akarunk szerializálni, vagy annak valami leszármazottját, akkor az egész stack trace-t is szerializálja a php az összes benne lévő változóval. Ez vicces dolgokat tud okozni, mondjuk amikor a munkamenet kezelő objektumok meg hasonlók is belekerülnek...

Egyébként mindez űrlap validáláshoz kell nekem. Jelenleg úgy oldom meg, hogy a validator-tól el lehet kérni egy kivétel példányt, ha hiba van, és utána eldobni, vagy menteni, attól függően, hogy mi a szitu... Felhasználóbarátabb űrlapoknál így vissza lehet küldeni az eredeti űrlaphoz munkamenet változókban a hiba okát. Azért ezt a módszert választottam, mert működik rá az automatikus kiegészítés, és lehet nézni a típusokat. Ha mondjuk típuskóddal, vagy bármi mással küldeném vissza a hiba okát, az sokkal nehezebben kezelhető lenne.
 

Kódkiegészítés

Pepita · 2012. Jún. 21. (Cs), 01.24
Sziasztok!

Olyan gondom van, hogy egy számomra nagyon tetsző framework-ot (CodeIgniter 2.1.0) és - szerintem - nagyon jó szerkesztőt (Komodo Edit 6) használok, de nincs kódkiegészítésem a CI "gyári" osztályaihoz és az általam írtakhoz sem. Ez nekem elég nagy probléma, úgy gyorsaságban, mint szintaktikai hibalehetőségként.

Próbáltam a Komodo-t "ráuszítani" a használt könyvtárakra (még egyenként is, bár elvileg az alkönyvtárakat is felveszi), de a plafon - jelenleg - az, hogy egy-egy helpernél működik. Ezek nem definiálnak osztályt, csak függvényeket.

Gondolom, a CI load->library(...) osztály betöltése/kezelése körül van valami trükk, amit a Komodo "nem ért". Annyira még nem bengéztem át a kódják, hogy rájönnék. Illetve valószínűleg nem is tudok eleget hozzá, legalábbis tartok tőle. (Kicsit még mindig idegen az interpreteres OOP.) A saját doksijában erre nem térnek ki, csak kb. annyi van, hogy "ha betartod ezeket és ezeket a név/fájlnév/könyvtár szabályokat, akkor hú de jó neked, használhatod a loadert és csak egyszer fogja betölteni stb."

Letöltöttem már a Komodo 7-et és a CI-ből is van már 2.1.1, de egyelőre nincs időm azokkal kísérletezni, de ha valaki azt mondaná, hogy akkor megoldódik a probléma, akkor a következő projektre már úgy készülnék.

Megköszönök minden észrevételt, elsősorban azok válaszát várom, akik használják/használták a fent említett szoftvereket.

Üdv. Pepita
 

június 20

Kérdés: PHP kód "megvédése" hogyan?

Zsolesz74 · 2012. Jún. 20. (Sze), 14.07
Sziasztok!

Egy olyan problémában kérném segítségeteket, hogy mi a teendő akkor, ha ha ügyfelem csak akkor hajlandó fizetni, ha a szerverére töltöm fel a kódokat, de sajnos félő, hogy egyszerűen lemásolja, s elfelejt fizetni. Sajnos a program nagy részét már feltöltöttem a szerverére, eddig ott tesztelték, de a programozója elszólta magát, hogy nagyon átlátható a kód, könnyű benne módosítani. Ezek után a többit a sajátomra töltöttem fel, ahol fut is jól, tesztelte is, de nem hajlandó fizetni, csak akkor, ha azt az Övére is feltöltöm. Olyan ötletet kérnék, ami vagy egy idő után "megsemmisíti" a kódokat, avagy úgy van becsomagolva, hogy az visszafejthetetlen. (md5 hash stb-t ismerem, nekem sem sok idő visszafordítani).
A jótanácsokat nem kérem, hogy szerződés meg ilyesmi, nincs pénzem ügyvédre, hogy pereskedjek.
Hasznos, gyakorlati tanácsot várnék.

Üdv:
Zsolesz
 

Kép igazítás probléma

Karvaly84 · 2012. Jún. 20. (Sze), 06.02
Sziasztok!

Valószínűleg én vagyok az analfabéta és mivel angolul nem tudtam megfogalmazni a problémám, nem tudtam érdemi találatot kicsikarni a keresőből, így felteszem a kérdést:

Lényegében van egy konténer div 336 pixel széles belső térrel. 360(padding: 0 12px);

Ebbe a konténerbe pakolnék 7 darab 48x48-as képet ami együtt elvileg pont 336 pixel;

A Firebug-al nem mentem sokra, viszont egy outline beállításával a képeken látszik, hogy a képek között kb 2 pixel széles tér van, ami miatt az utolsó kép lecsúszik új sorba;

június 19

Liskov substitution principle

eddig bírtam szó nélkül · 2012. Jún. 19. (K), 07.45
Ezen már régóta töröm a fejem: OK, ezek nem kőbe vésett szabályok, csak elvek, de ha ragaszkodom a S.O.L.I.D. L betűjének betartásához, akkor mi értelme a felüldefiniálható metódusoknak az OO nyelvekben? Hiszen ennek épp az a lényege, hogy az adott metódus működését megváltoztatom. Nem?
Mi az amit rosszul értelmezek?

Valahol erről már beszéltem valakivel, de nem találom, a memóriám meg... :-(

--------------------------------------------

(Itt találtam egy magyar leírást. Úgy látszik, az angolom hiányosabb, mint képzeltem. És a felfogóképességem is. Továbbra sem értem, de attól tartok, ezek után hiába próbálja bárki elmagyarázni, nem fogom megérteni. :-(