Hirdetés

2021. május 18., kedd

Gyorskeresés

Blog

[ ÚJ BEJEGYZÉS ]   [ ÚJ CIKK ]

  • RTX 3060 "megjelenés" margójára

    Peter Kiss 3 hónapja 7

  • Széteső kép

    Pár hete olyan gondom volt, hogy böngészés közben ahogyan görgettem, véletlenszerűen szétesett a kép egy pillanatra a kép közepén, valahogy így:

    Környezet:
    MSI B450M Mortar MAX
    AMD Ryzen 3400g (az összes driver)
    Dell U2518D DisplayPort-on (1440p)
    Random Panasonic TV HDMI-n (1080p)
    Windows 10 20H2

    Nyomozás közben ezekkel játszottam:
    - driver-csere
    - VSYNC/AMD spéci sync
    - kábelek cseréje
    - HDMI-re kötni a monitort (ekkor talán kevésbé jelentkezett)
    - csak a monitor legyen csatlakoztatva
    - monitort átkapcsolni DisplayPort 1.1-re
    - Ubuntu 20.04.1 teszt, ugyanaz volt a jelenség

    Interneten találtam hasonló eseteket, volt, ahol az IOMMU letiltása megoldotta Linux alatt, vagy épp a Dell adott egy másik típusú monitort, de cserélni bármit én nem akartam, illetve a javasolt megoldások egyike sem segített nekem.

    Minden baj volt mindennel, de ugyanezzel a lendülettel ellenőriztem a monitort magát is egy 2170p és egy 8540p EliteBook segítségével, minden rendben volt ezekkel, nem jelentkezett a hiba.

    Folytatás...

    Peter Kiss 5 hónapja 2

  • Asus N18U Samba bajok

    Router-emen FreshTomatoUSB fut (2019.2 most éppen, de régebbi firmware-rel is baj volt), és USB megosztásról való másolás közben a CPU-ja 100%-nál ívet húzott, emellett a sebessége leesett 1-3 MiB/s körülre, így kb. használhatatlan volt.

    Megoldást egy kis konfiguráció jelentett:
    USB and NAS > File Sharing alatt a Samba/Custom Configuration részbe írjuk be a következőket:

    use sendfile = no
    socket options = TCP_NODELAY SO_KEEPALIVE IPTOS_LOWDELAY SO_RCVBUF=262144 SO_SNDBUF=262144

    Ezután nekem USB2-es HDD-ről értelmeseb sebességgel jöttek a bitek (kb. 20 MiB/s), és a router se sípolt ki.
    Érdekes, de a sendfile javítana a teljesítményen, itt mégis problémát okozott.

    Jó ideje így használom, hátha hasznos másnak is.

    Peter Kiss 11 hónapja 0

  • HP T610 és az NVMe

    Ragyogó ötletem támadt ismét, hogyan lehetne kicsit pimp-elni a vékonykliensemet, csak épp akadályba ütközik dolog, egészen pontosan oldallapba...

    Majdnem sikerült, de ettől függetlenül majd teszek egy teljes próbát vele, csak előbb kell még egy NVMe SSD.

    Peter Kiss 12 hónapja 7

  • RETRO-20

    Lázban égek, de nem a COVID-19, hanem a RETRO-20 miatt, elővettem a régiségeimet, hogy lássam, működnek-e még, illetve megoldható-e némi modernizáció.

    Az alapot egy ACORP 6VIA85P lap adja, amely újkorában sem volt egy acélos darab mivel a VIA chipset memóriakezelése elég gyatra volt (memory interleaving-et nem vitte), de ezen már rég segítettem egy moddolt orosz BIOS-szal.

    Chipset VIA693A+596B
    CPU Support PC-PGA Pentium III Coppermine, PPGA Celeron, Cyrix III Processor
    233Mhz ~ 1000Mhz
    Voltage Regulator VRM 8.4 (Auto Detect)
    Bus CLK 66 / 100 / 133 Mhz
    Bus Architecture PCI x 3, ISA x 2, AGP x 1
    System Memory DIMM x 2
    USB Support 2 x Universal Serial Bus
    On board I/O Super I/O, Floppy x 1, Serial Port x 1, Parallel Port x 1, IR x 1
    DMA Support Ultra DMA 33 / 66
    Power Support AT, ATX
    BIOS 2MB BIOS and PC System Monitor
    Intelligent Wake Up Wake on Lan,
    Wake on Modem,
    Wake on Alarm
    Board Size 22 x 22 cm

    Az alaplap másik érdekessége mai szemmel, hogy igényli a -5V-ot a tápegységtől, ezért csak ATX 2.0 vagy régebbi szabványú táppal indul el.

    Folytatás...

    Peter Kiss 1 éve 2

  • HP ThinClient T610 WiFi-vel

    T610-es vékonykliensünk belül rendelkezik rengeteg porttal, csatlakozóval, kihasználni őket persze nem egyszerű, de nem is lehetetlen.

    Már egy pár hónapja kitaláltam, hogy WiFi-vel is lehetne bővíteni a masinát, erre alkalmas a lapon találtam x1-es PCIe slot.

    A rögzítésre használt aljzatokat külön kiemelném, mert ezek nem fognak nekünk sokat segíteni abban, hogy bármit is rögzítsenek, ugyanis lehetetlen kicsi csavart tudnak csak fogadni, amit nekem sikerült beletekernem, azt egy notebook hűtőjéből operáltam ki, habár még ez is túl hosszú, nem fogja szorosan a kártyát.

    A használt WiFi kártya pedig a már bemutatott Intel® Centrino® Advanced-N 6235 - ez volt kéznél.

    Folytatás...

    Peter Kiss 1 éve 2

  • Nosztalgia: Segélyvonal

    Volt régen a magyar PC World-nek egy Segélyvonal fóruma, ami ugyan nem volt nagy, de sok cucc összegyűlt az évek során. Sajnos mostanta már kb. nyoma sem maradt, de magamnak lementettem pár összefoglalót még, itt elérhető:

    pcw-segelyvonal/raw/

    Egy kis részét átdobtam markdown-ba, így talán élvezhetőbb, majd még megcsinálok párat:

    pcw-segelyvonal/halozatepites/routerek-switchek-access-pointok-a-halozatban/router-ek-beallitasa.md

    Talán ez volt a legnépszerűbb, azóta sok minden változott, én is máshogyan írnám már meg ezt, de még jól jöhet bármikor így is, hogy már 10+ éves.
    Eredeti linkje: http://www.pcworld.hu/forum/index.php?showtopic=13299 - pár helyen fellelhető hivatkozva :D

    Peter Kiss 2 éve 11

  • HP ThinClient T610 2.5"-os HDD-vel

    A napokban beszereztem egy ilyen T610-es vékonyklienst bizonyos célokra, de már az elejétől fogva kerestem, hogyan lehetne majd HDD-t is pakolni bele, szerencsére port akad a masinában, sajnos beépítési lehetőség mérsékelten.

    Alapkiszerelésen egy SATA SSD-vel szerelik, főlötte látható egy szabad SATA foglalat kiépítve, ide tudunk csatlakoztatni másik egységet, ha meg tudjuk oldani a HDD vagy SSD rögzítését.

    A megoldást egy spéci keret adta, amelyet valaki megalkotott, és bárki ki tudja nyomtatni magának, itt elérhető, letölthető, persze vannak más ötletek is, amelyeket itt meg is nézhetünk.

    Maradtam a keretnél, ami ma át is vettem Janix12 kollégától, akitől 2 ilyen keretet kértem, biztos, ami biztos.

    Folytatás...

    Peter Kiss 2 éve 5

  • Intel® Centrino® Advanced-N 6235

    Akinek Intel® Centrino® Advanced-N 6235 WiFi kártya van a gépében, az dobhatja ki is nyugodtan.

    2170p géppel küzdöttem és még küzdök is, de ilyen hulladék kártyát még nem láttam, nem tudom, ki szaladt még ilyenbe bele, de gyakorlatilag az összes driver rossz, vagy mondjuk a kártya maga. Intel fórumok is tele vannak mindenféle gonddal, legyen szó bármilyen gépről.

    Kicseréltem egy 6205-ösre (így nincs BT, de, na), ezzel már jobb a helyzet, legalább csatlakozni bír rendesen, még, ha a teljesítménye nem is az igazi, de itt már simán bejátszhat maga a gép az antennáival.

    Intel® Centrino® Advanced-N 6235 WiFi kártya eladó :DDD

    Peter Kiss 3 éve 11

  • HP EliteBook 2560p optibay - nem áll le a gép

    Vettem egy optibay-t a notebook-jaimba, de azt vettem észre, hogy nem tudom lekapcsolni a gépet. Windows önmagában leáll, de a kikapcsolási folyamata a gépnek megáll, és a végtelenségig bekapcsolva tudna maradni.

    A probléma az optibay-jel van, sok notebook-nál jelentkezik, megoldási lehetőségek:

    1. 1 pin leragasztása

    2. ha van kapcsoló a HDD caddy-n:

    Esetleg máshol van a kapcsoló:

    Nekem ez a probléma új volt, hátha segít másnak is.

    Peter Kiss 4 éve 4

  • Hyper-V, Opteron és a power plan

    Virtual machine teljesítményét nem kis mértékben tudja befolyásolni a hyper visor power plan beállítása. Neten olvasható számtalan hasonló probléma vagy tapasztalás.

    Itt csak egy SuperPI futás látható, de a számokból látszik némi különbség, emellett ugyanez előjött egy sima Windows Update telepítésnél vagy bármi másnál.

    Hyper-V Server 2016
    2xAMD Opteron 4170 HE

    Peter Kiss 4 éve 1

  • PHP Web service 3: Extensibility

    Hol is tartunk? Service van, valamilyen szinten védve is (idő közben a WSDL is), de ezen túl is van még lehetőség a szolgáltatásunk fejlesztésében, mert üzenetek sima kiszolgálásán túl nem sok mindenre alkalmas, illetve akadhatnak olyan feladatok, amelyek megoldása felesleges zavart kelthetnek a service osztályunk kódjában.

    A kulcsa a bővíthetőségnek szintén az, hogy service implementálásakor ne kelljen sokat azzal foglalkoznunk, mi hogyan működik, illetve ne keltsünk a feleslegesnél nagyobb zavart a rendszerben.

    Mi az egyáltalán, amivel foglalkoznunk kellene?
    - valamilyen extra header-t kell kezelnünk a szerveren
    - paraméterek vizsgálata a service adott operation-jének meghívása előtt
    - operation meghívása
    - visszatérési érték vizsgálata serialization előtt
    - valamiféle hibakezelés
    - más?

    Mivel rendelkezünk eddig?
    - valahogyan értelmeződék a kérés (MVC routing - handler mechanizmus)
    - autentikálunk, ha kell
    - kiszolgáljuk a WSDL kéréseket
    - kiszolgáljuk a SOAP kéréseket, futtatunk egy SoapServer-t

    Szerintem érződik, hogy ez az infrastruktúra nem elég a fentiek megoldására, hiszen pl. a SoapServer objektumon dolgozik teljesen zárt rendszerben, nem férhetünk hozzá.

    Folytatás...

    Peter Kiss 8 éve 2

  • PHP Web service 2 - Az őrület folytatódik: autentikáció

    Az előző epizódban láthattuk, hogy egészen egyszerűen és olvashatóan össze lehet rakni egy web szolgáltatást PHP-val, de azzal az volt a gond, hogy bárki használhatta a service-t, nem volt korlátozva az elérhetősége.

    Éppen ezért megnézzük, mit lehet tenni az ellen, hogy illetéktelen lepjék el a webszerverünket, alkalmazásunkat.

    Azért, hogy elsőre ne bonyolítsuk a dolgokat, nézzük meg a legegyszerűbbet: Basic Authentication Scheme

    [ íme egy ismertető ]

    Most, hogy már mindent tudunk (kérés --> hát te ki vagy --> én vagyok!), lássuk, mit tudunk kihozni, hogy egyszerű legyen használnunk:

    <?php

    /* namespace játék */

    class SvcController extends WebService {

    public static function __static() {
    typeof(__CLASS__)->Attributes()->MethodAttributes()->Add("Method1", new Operation(typeof(new InPut()), "method1 leírása"))->Add("VoidMethod", new Operation());
    }

    protected function _authenticateBy() {
    return new BasicServiceAuthenticator();
    }

    protected function _onAuthenticating(AuthenticationRequest $authRequest) {

    Folytatás...

    Peter Kiss 8 éve 2

  • PHP Web service

    Szerintem aki kicsit is foglalkozik a PHP-val, már látta, hogyan lehet egy SOAP web service-t létrehozni vele, ott van a beépített SoapServer megoldás, a közkedvelt nuSOAP, de nagyobb keretrendszerek is adnak rá támogatást.
    Ami közös mindben, hogy nyűg meghegeszteni ezeket, mindnek megvan a maga problémája, vagy csak egyszerű ocsmány lesz az eredmény.

    A napokban a PHP topikban is előjött egy ilyen témájú probléma, ezért megfordult a fejemben, hogy megpróbálom belefűzni a meglévő MVC-s keretembe azt, hogy létre tudjunk hozni egyszerűen web service-t PHP-val.

    Ami alapból kikötés volt:
    - nincs kézi WSDL irkálás
    - nincs annotálás
    - metódus paramétere csak complex type lehet (vagy void nyilván)

    Amit el kell fogadni, hogy fosch lesz: osztályok kidekorálása service infókkal

    Eredmény, egy service osztály:

    <?php

    /* namespace játék */

    class SvcController extends WebService {

    public static function __static() {
    typeof(__CLASS__)->Attributes()->MethodAttributes()->Add("Method1", new Operation(typeof(new InPut()), "method1 leírása"))->Add("VoidMethod", new Operation());
    }

    public function Method1(InPut $in) {
    /* ... */
    return $out;
    }

    public function VoidMethod() {
    /* ... */

    Folytatás...

    Peter Kiss 8 éve 1

  • PHP: interface implementálás trait-tel

    NEM LEHETSÉGES

    Mégis kiválóan használható! :)

    Tételezzük fel, hogy van egy ilyesmi interface-ünk:

    <?php

    namespace System\Collections;

    interface IEnumerable {

    function Avg($callback = NULL);

    function Count($callback = NULL);

    function Contains($item, $comparer = NULL);

    function FirstOrDefault($callback = NULL);

    function GroupBy(\Closure $callback);

    function OrderBy(\Closure $callback);

    function Sum($callback = NULL);

    function ToArray();

    function ToList();

    function ToLookup(\Closure $keyMaker);

    function Where(\Closure $callback);

    function Any($callback = NULL);

    function Union($enumerable);

    function UnionAll($enumerable);

    function Take($take);

    function SelectMany(\Closure $func);

    function Zip($other, \Closure $func);
    }

    Interface-nek nem kicsi, sőt, az igaziban ennél több is van, .NET programozók már észlelhetik, miről van szó.

    Folytatás...

    Peter Kiss 8 éve 6

  • PHP függőségek: web szerver

    PHP-nak vannak függőségei, bár nem egészen olyanok, mint egy embernek. Közvetlenül a webszerver felé vannak elvárásai, kicsivel közvetettebben pedig az operációs rendszer felé (gondoljunk csak a fájlrendszerek különbségeire például).

    Ezeknek a függőségeknek a kiiktatása lehetetlen (persze, ha a PHP-t nem weben keresztül használjuk, nyilván nincs webszerveres függősége), viszont megpróbálhatjuk kisimítani, vagy legalább elrejteni a rendszerek közötti különbségeket. A kettő közül igazán okos megoldások az elsőre vannak, utóbbi esetében pedig fokozottan oda kell figyelni, hogyan is használjuk az erőforrásokat, most az elsőre adok egy ötletet.

    Mikor PHP-s alkalmazásokat fejlesztünk, elsőnek mindig szükségünk van egy vázra, amibe a konkrét alkalmazást pakoljuk, ez lehet általunk készített vagy már kész keretrendszer is. Több példát is lehet látni arra, hogy bizonyos metódusok belsejében hatalmas if-else block-ok vannak arra vonatkozóan, hogy az adott környezet épp mit támogat az adott funkcionalitás elérése érdekében. Szerencsések vagyunk, mert a PHP objektum orientáltsága mindent megad nekünk, hogy ekkora hülyeségeket ne kövessünk el. Ami miatt még örülhetünk, hogy az idő előrehaladtával a különbségeket maga a PHP fogja lekezelni, ha nem is teljesen.

    Folytatás...

    Peter Kiss 8 éve 1

  • PHP telepítése Windows 7, 8-ra (Vista-ra is szerintem)

    Nem, Apache-ot nem telepítünk. Pfuj.

    Windows-on a web server szerepét az Internet Information Services (IIS) fogja betölteni, ami amellett, hogy rendelkezik egy normális grafikus kezelőkonzollal, remekül tudja futtatni a PHP-t Windows-on egy pár kattintásos telepítés után, sőt, akár több verziót is fenn tudunk tartani vele könnyen.

    PHP telepítését semmi esetre sem kézzel fogjuk végezni, a Microsoft ehhez is ad nekünk nem kis segítség a Microsoft Web Platform Installer személyében, amivel PHP mellet IIS modulokat telepíthetünk (fogunk is), de van itt ASP.NET-hez cucc, alkalmazások is megtalálható, szóval minden, ami webfejlesztéshez kellhet.

    Első lépésként telepítsük fel a WPI-t a fenti linkről, a picike exe-t simán futtassuk böngészőből, kis szöszmötölés után meg fog jelenni egy katalógus keresővel a jobb felső sarkában, beállításokkal a jobb alsó részén.

    Először a beállítások fognak kelleni, itt megadjuk, hogy nem Express IIS-t akarunk használni, hanem rendeset.

    Keresőbe véssük be a "php" kulcsszót, majd [enter]

    Folytatás...

    Peter Kiss 8 éve 8

  • Motorola

    A Motorola-tól ocsmányabb céget még nem láttam, moslék népség.

    Cégnél vannak (eredetileg Symbol) Motorla barcode reader-ek, amelyek össze vannak építve egy PDA-val, amin többnyire Windows CE fut. Erre kellett fejleszteni alkalmazást, és emiatt kerültem közelebbi kapcsolatba velük.

    Az oldalukon semmit nem lehet megtalálni, ha egyáltalán működik, volt, hogy egy napon keresztül minden 404-et dobott, illetve még a keresőjük is visszahozta a saját 404-es hibaoldalukat.
    A PDA-khoz való SDK megtalálása sem egyszerű, futott összesen három név alatt, és kb. csak a 2. napon sikerült megtalálnom a legfrissebb EMDK-t. Miután sikerült letöltenem, a következő probléma a feltelepítéssel volt, ugyanis képtelen volt felmászni Windows 7 + Visual Studio 2008 kombóra, szerezni kellett egy XP-s gépet hozzá, erről átmásolva a DLL-eket már ment a dolog.

    Problémánk van a PDA-k WiFi-jével is, igyekeztem ezt is frissíteni (Fusion, ha mond valakinek valamit), csakhogy már nekünk nincs támogatásunk a PDA-k, mert X éevesek, ezért le sem tölthetem az újabb szoftvert, pedig a Motorola is nagyon jól tudja, hogy egy rakás sz.r azegész, olyan hosszú a change log. Kerülővel végül sikerült beszereznem a CAB fájlt, az oldal leírása szerint csak fel kell másolni az eszközre majd telepíteni. Aha, majdnem.

    Folytatás...

    Peter Kiss 8 éve 9

  • WCF dependency injection

    A dependency injection-t remélhetőleg már nem kell bemutatni, mi is lenne, ám azt úgy gondolom, kevesebben tudják, amibe sikeürlt belefutnom.

    Történt ugyanis, hogy hősünk egy faék WCF service-t szeretett volna készíteni, amit sikerült is megépíteni, hasznos unit test-ekkel körülbástyázni, remekül működött.
    A probléma akkor kezdődött, mikor tényleges service-ként kellett volna működésbe hozni, tesztelés alatt ugyanis nem történik nagy varázslat, simán példányosítással történik a működés ellenőrzés.

    IIS-en host-olt WCF service-ek aktivációját mindig egy factory végzi, amit mi magunk is beállíthatunk, ha megnézzük a *.svc fájlunk markup-ját, abba az egyetlen direktívába kell felvennünk a Factory-nkat:

    <%@ ServiceHost Language="C#" Debug="true" Service="SmartcardService.Authentication"
    CodeBehind="Authentication.svc.cs" Factory="SmartcardService.Factory.ServiceFactory" %>

    Ennek a service-nek nincs paraméter nélküli konstruktora (hogy lenne?), így érdemes egy DI framework-öt választani, aminek van WCF-es támogatása (van neki WCF factory-ja) is, nekem a Ninject-re esett a választásom, factory-ja: NinjectServiceHostFactory

    Folytatás...

    Peter Kiss 8 éve 1

  • MVC

    "A modell-nézet-vezérlő (MNV; angolul model-view-controller) a szoftvertervezésben használatos szerkezeti minta. Összetett, sok adatot a felhasználó elé táró számítógépes alkalmazásokban gyakori fejlesztői kívánalom az adathoz (modell) és a felhasználói felülethez (nézet) tartozó dolgok szétválasztása, hogy a felhasználói felület ne befolyásolja az adatkezelést, és az adatok átszervezhetők legyenek a felhasználói felület változtatása nélkül. A modell-nézet-vezérlő ezt úgy éri el, hogy elkülöníti az adatok elérését és az üzleti logikát az adatok megjelenítésétől és a felhasználói interakciótól egy közbülső összetevő, a vezérlő bevezetésével." - Wikipédia

    Ezek után találkoztam egy ilyen osztállyal a codereview-on:

    class mvc {

    /* view-ok keresése, controller-ek (több vagy egy?) keresés, némi routing, minden végrehajtása, kacifántos kód */

    }

    Nem jött át. :DDD Van még egy router fájlja is, csak egy script, de hogy a $_SESSION miért van benne használva, rejtély.

    Nálam az MVC névtér áll most 40+ osztályból és interface-ből, ha hozzárakom a Web-et is mindennel, 80-nál tartunk, és ezt bárki el tudja olvasni. (Egyszercsak. :DDD )

    Peter Kiss 8 éve 1

  • ASP.NET MVC ClientDataTypeModelValidatorProvider

    Az ASP.NET MVC-t nehéz nem szeretni, kimondottan jól össze van rakva, jó használni, és ugye alatta van a teljes .NET Framework minden jósággal (pl. Entity Framework). A .NET jellemzően jól felépített cucc, bárhonnan is nézzük, nehéz rajta fogást találni.

    A héten sikerült egy olyan dologgal találkoznom, amit nehezen hittem el, gyakorlatilag rosszul (vagy legalábbis hülye módon) implementáltak az ASP.NET MVC-ben egy igen fontos dolgot: attribútum nélküli kliensoldali típusvalidációt.

    Ha valaki már használta az MVC keretet, akkor tudhatja, hogy minden különösebb erőfeszítés nélkül reklamál kliensoldalon azért, ha egy numeric típus helyett szöveget írunk egy input-ba, majd el szeretnénk küldeni az adatokat. Ezt a varázslatot végzi nekünk a ClientDataTypeModelValidatorProvider, ami alapból regisztrálva van a ModelValidatorProviders-ben. Ez nagyon klassz, teljesen jól működik, a gond akkor adódott, mikor lokalizálni szerettem volna a validációs üzenetet.

    Folytatás...

    Peter Kiss 9 éve 1

  • PHP PDOStatement::getColumnMeta

    A PHP-ról senki sem mondaná, hogy egy jól kivitelezett nyelv, inkább arra hajaz, hogy mindent a lehető leggyorsabban egy húzással megcsináljunk, az nem számít, hogyan.
    Ékes példája ennek a PDOStatement::getColumnMeta, ahol mindennel megpróbálnak bennünket eltántorítani attól, hogy használjuk ahelyett, hogy értelmesen megépítették volna ezt a részét a PDO-nak. Mire is gondolok?

    Az rendben van, hogy nem minden driver támogatja (igazából ezért van kint a figyelmeztetés is), akkor adjon vissza NULL (de ne FALSE-t :U ), és kész.
    Azokban az esetekben, mikor a driver támogatja ezt a dolgot, nem sima array()-t kellene megadniuk, hogy "hát, valami ilyesmi jön vissza", hanem készíteni kellett volna egy egyszerű interface-t, ami összefog mindent. A PDO eleve arra lenne, hogy egy könnyen átjárható interfészt adjon a különböző adatbázisok felé, ehelyett meg itt hülyéskednek. :N

    Nagyjából egy ilyet kellett volna összehozni, ha maradunk a PHP elnevezéseinél:

    Folytatás...

    Peter Kiss 9 éve 12

  • PHP dependency injection container

    A dependency injection (függőségbefecskedzés, DI) lehetőséget ad arra, hogy megválasszuk és egyértelműsítsük, hogyan és miből akarjuk létrehozni alkalmazásaink egyes részeit. Kicsit hülyén hangzik, de erről van szó.

    Fabian Potencier példájánál maradva (nagyvonalakban), ha van egy User osztályunk, aminek szüksége van valamilyen tárolóra, amiben ténylegesen lesznek a User property-ei, akkor azt ne a User ctor-ában példányosítsuk, hanem adjunk lehetőséget arra, hogy mindenki megválassza a saját módszerét.

    Első:
    class User {

    protected $_storage;

    public function __construct() {
    $this->_storage= new SessionStorage();
    }
    }

    Második:
    class User {

    protected $_storage;

    public function __construct(IStorage $storage) {
    $this->_storage= $storage;
    }
    }

    Ugye az elsőt sokkal könnyebb használni (biztosan így van ez? :N ), ellenben lehetetlen testreszabni, hogy nekem konkrétan milyen tárolóm is van, itt csak egyfélére vagyok korlátozva. A második esetében a kód mindenképp hosszabb lesz, hiszen meg kell írnunk egy interface-t, majd ezt implementálva tudunk csak különféle storage megoldásokat szállítani a User-nek példányosításkor.

    Folytatás...

    Peter Kiss 9 éve 7

  • PHP ViewEngine

    Van egy php template inheritance nevű projekt, ami kiválóan használható arra, hogy egy ASPX/Razor-szerű renderelési technikát alkalmazzunk alkalmazásainkban: készíthetünk olyan oldalakat, amelyek gyakorlatilag csak a szerkezetét adják mindennek, majd az egyes valódi tartalmat megjelenítő oldalakon (view) rakhatjuk be különböző szekciókba az egyes elemeket akár egymásba ágyazva is.

    Ami mindenképp rossz ebben a projectben az a nem OO megközelítés, illetve a debug_backtrace() használata. Az első gondon viszonylag gyorsan lehetett segíteni, a másikon már nem annyira (a legtöbb, amit hirtelen lehetett csinálni: debug_backtrace(defined('DEBUG_BACKTRACE_IGNORE_ARGS') ? DEBUG_BACKTRACE_IGNORE_ARGS : false);), így aztán hegesztettem egy teljesen sajátot, és összevetettem őket.

    Sebességben a debug_backtrace() kikönnyítése nem sokat dobott (memóriahasználat biztosan csökkent), legrosszabb esetben (a PHPTI leggyorsabb futási ideje szemben az enyém leglassabb futási idejével) is a sajátom 25-30%-kal gyorsabb, míg egyéb helyzetekben néha 5-6-7-szer gyorsabb. :) Amin meglepődtam az az volt, hogy a PHPTI nem működött megfelelően, hibázott az egyes elemek összepakolásánál, ugyanis nem megfelelő sorrendben jelentek meg az elemek.

    Csinált valaki már hasonlót?

    Peter Kiss 9 éve 1

  • PHP iteráció

    PHP-val képesek vagyunk megoldani azt, hogy egy-egy objektumunk iterálható legyen foreach-csel, avagy kompletten tömbként működjön. Most vegyük az egyszerűbbet, és nézzük meg, hogyan kell iterálható osztályt írnunk:

    http://php.net/manual/en/class.iterator.php

    Készen is vagyunk, örülünk.

    De.

    A PHP SPL könyvtárában akad egy olyan varázslat, amit IteratorAggregate-nek hívunk. Ez szintén segít megoldani a problémánkat, csak sokkal egyszerűbben. Itt csak egy metódust kell implementálnunk, ami visszaad egy ArrayIterator-t. Ugye, hogy sokkal szebb?!

    De.

    Van egy másik hatalmas előnye a második verziónak: gyorsabb.
    Készítettem egy házitesztet, aminek az eredménye ez lett:
    IteratorAggregate: 12,5+ másodperc
    Iterator: Fatal error: Maximum execution time of 200 seconds exceeded in D:\xampp\htdocs\ref\index.php on line 26

    Nem tudom, hogy vagytok vele, de én frissítem a kódjaimat.

    Peter Kiss 9 éve 38

  • PHP 5.4 - trait

    A PHP 5.4-es verziója még nincs készen, de már most érdeme foglalkozni az újításokkal, hiszen a szokásos hibajavítások, teljesítményfokozások mellett nyelvi újdonságokat is fog hozni magával.

    A címből villámgyorsan kiderül, mivel is szeretnék most foglalkozni: trait. PHP-ban ez egy új kód-újrahasználati lehetőséget biztosít számunkra, osztályainkat tudjuk bővíteni trait-ek használatával, de nem olyan módon, ahogyan azt öröklésnél megszokhattuk. Ha egy új osztályt származtatunk egy meglévőből, akkor tulajdonképpen a szülőt vertikálisan bővítjük, ezzel szemben a trait-ek ezt horizontálisan tudják megtenni.

    Miért is jó ez nekünk? Szerintem mindenkivel előfordult már, hogy 2 osztályban hasonló dolgot szeretett volna megvalósítani, de örökléssel nem igazán azt érte volna el, amit szeretne, mert a két osztálynak egyébként semmi köze egymáshoz. Kézenfekvő példa a Singleton minta. Ezt magam is sokszor eljátszottam, eljátszom, hogy az osztályaim megírását azzal kezdem, hogy belezongorázom mindbe a Singleton-hoz szükséges elemeket, amelyek gyakorlatilag minden egyes osztálynál megegyeznek, ami hatalmas pazarlást jelenthet.

    Folytatás...

    Peter Kiss 9 éve 4

  • NetBeans, Xdebug, Chrome és a fejlesztő

    A három testőr és D'Artagnan a web világában

    Sokan fejlesztenek PHP alapú dolgokat, kicsivel kevesebben tolják igazán a szekeret és használnak IDE-t hozzá, és ebből a kicsi halmazból is csak kevesen tudják, hogy lehet a PHP-t normálisan is debuggolni. Magam sem használtam eddig semmilyen különleges debug megoldást, de most már eljutottam odaig, hogy a szakdolgozatomat úgysem tudom időre leadni, így adtam magamnak lehetőséget beizzítani az Xdebug-ot.
    Ahhoz, hogy használni tudjuk mindenképpen szükség van a három testőrre vagy valamelyik hasonmásukra.

    Elsőnek az Xdebug-ot kell beépítenünk a PHP-ba. Legegyszerűbb ide kattintani, és megadni a phpinfo() kimenetünket, ami alapján segítséget kaphatunk abban, hogy melyik binary kell nekünk, és hová, hogyan kell pakolnunk. Nagyon fontos, hogy nem a HTML forrását, hanem szimplán a generált lap szövegét kell kimásolnunk a textarea-ba.

    Nálam ezt dobta:

    Download php_xdebug-2.1.2-5.3-vc6.dll
    Move the downloaded file to \xampp\php\ext
    Update D:\xampp\php\php.ini and change the line
    zend_extension = \xampp\php\ext\php_xdebug-2.1.2-5.3-vc6.dll
    Restart the webserver

    Ez helyes is, csak a php.ini-ben mást is be kellene lőni az XDebug szekcióban:

    Folytatás...

    Peter Kiss 10 éve 3

  • HP EliteBook 8540p

    Tegnap megjött az EliteBook-om, kicsit örültem. :DDD Acer TravelMate 5530g-t vált, valahogy nem érzem egy kategóriának a kettőt.

    Hihetetlen jó anyagból van (a HP :D ), masszív minden porcikája. 15.6"-os notikat otrombának tartottam eddig, de ez a gép egész másnak tűnik, talán a vastagabb káva miatt a kijelző tetején és alján, kimondottan jó ránézni.

    TN panellel van szerelve, amiről megvan a véleményem az IPS paneles monitorom után, de notebookviszonylatban teljesen korrekt, az 1600x900-as felbontás nagyon passzol ehhez a mérethez, mindenkinek ajánlom. :K A kijelzőbe van egy lámpa építve, ami a billentyűzetre világít, egyesek szerint használhatatlan, de a saját, tegnap esti tesztelésem azt mutatta, hogy pontosan elég fényt ad.

    A billentyűzet alátámasztása kiváló, nem süllyed úgy, mint az Acer-é, nem lötyög, nyomáspontja is el van találva, a gombok is masszívan ülnek a helyükön (TravelMate-em 'Z' gombja magától pattant fel egyszer, úgyis maradt). A billentyűzet felett van pár LED+gomb kombó, amelyek leszállópályákat megszégyenítve tudnak tündökölni, kicsit bazári hangulatot keltve, de ami fontos, hogy sötétben is megtaláljuk az a gombot, amit keresünk. Nem hiányozhat a touchpad sem (multitouch), használata kényelmes, a gombok simán járnak, ezekhez képest az Acer gombjait ütni kell.

    Folytatás...

    Peter Kiss 10 éve 3

  • Elrontott frissítés

    VBIOS helyreállítása ATI és NVIDIA kártyák esetén

    Tovább a teljes címlapos íráshoz...

    Tudástár 12 éve 54

Hirdetés

Copyright © 2000-2021 PROHARDVER Informatikai Kft.