2024. április 18., csütörtök

Gyorskeresés

Blog

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

  • Let's Encrypt otthonra

    Apró hálózatom kozmetikázásának következő állomása az, hogy ellátom a különböző szervereket, szolgáltatásokat saját domain névvel, hogy úgy nézzen ki, olyan csinálta, aki ért hozzá. Persze önmagában egy alias még nem kihívás, használjunk SSL/TLS hitelesítést is, ahol csak lehet.

    Első lépésben vettem magamnak saját publikus domain nevet, ezt több módon is megtehetjük, én a GoDaddy-nél vettem, mert szeretem a kihívásokat:
    - a kosár funkcionalitás nem működik vásárláskor
    - vagy mégis, csak nem látszik, mert fizetéskor a fizetendő összeg többszörösét kellett volna hirtelen leszurkolni
    - aminek az az oka, hogy érdemesebb előbb a profilban kitölteni a lakcímedet, mert bizonyos domain nevek (.eu és társai) csak korlátozásokkal vehetőek igénybe

    Amire még szükségünk lesz, az egy API hozzáférés, hogy tudjuk babrálni a DNS bejegyzéseinket is, ezt a GoDaddy-nél pár kattintásból megoldhatjuk, végén kapunk egy secret-et és egy key-t, ezekre a certificate beszerzésénél lesz szükségünk.

    Ha valakinek van bevált alternatívája, írja meg kommentben.

    Nginx Proxy Manager a http(s) szolgáltatásokhoz

    Folytatás...

    Peter Kiss 1 hónapja 3

  • Cockpit

    Már jó pár hete vettem egy HP T640-es vékonyklienst, amivel az volt az elképzelés, hogy DSM-et telepítek rá, de ez sehogyan sem akart működni, mást kellett kitalálni.

    A szerencse gondos tervezés úgy hozta, hogy közben újítottam kicsit a hálózaton egy Mikrotik router-rel, ami átvette a VPN kliens/tunner szerepét (WireGuard-ot nem is támogatta, csak OpenVPN-t), emellett a reklámblokkolás is ide került át AdGuard-dal, így igazából a betöltendő szerep is kisebb lett, mert maradt a letöltős gép felelősség open source operációs rendszerek megosztására.

    Csavar a történetben, hogy nem szerettem volna teljesen pacskerosan belakni a gépet, így szétnéztem, milyen kerek-egész rendszerek vannak, amelyek adnak pl. web-es kezelést valamilyen fokon, az mindig jól jön.

    Folytatás...

    Peter Kiss 2 hónapja 2

  • Mikrotik hAP ax³

    Hálózati fejlesztésként beruháztam egy lentebb látható Mikrotik hAP ax³-ra kíváncsiságból, mivel pár érdekeset tartogat szerintem mindenki számára a szolgáltatásai listája a Mikrotik eszközöknek, számomra a legvonzóbbak a container futtatás illetve a WireGuard támogatás volt.

    Fizikai mivoltát tekintve minőségi érzés fogja el az embert, mert nem egy recsegős műanyag dobozt kap a kezébe az ember, formás is, hogy ne kelljen elrejteni, illetve talán praktikus is a perforáció rajta alul-felül, amin keresztül tud szellőzni, mert azért fog termelni némi hőt (nem vészes).
    Ami a leggagyibb érzetet az antennák adják, kicsit olyan, mintha bármelyik pillanatban képesek lennének porrá törni.

    Az alapokra nem szeretnék kitérni (egyébként is mi vagyunk a legnagyobb technikusok, akik valaha éltek), talán csak arra hívnám fel mindenki figyelmét, hogy:

    Folytatás...

    Peter Kiss 3 hónapja 3

  • Lenovo TinyStation M710q

    Már van itthon egy Synology DSM-mel szoftverezett masina Linux ISO-k terjesztésére, de megnéztem, tudok-e valami jobbat összehozni,szóval belevágtam az újabb tiny gépbe, illetve annak DSM 7-esezésébe.

    Lenovo M710q az alap (Intel® Pentium® Processor G4400T 3M Cache, 2.90 GHz)
    2x4 GiB memória
    1 TB Samsung 870 QVO
    Intel Optane 16 GB
    És az elengedhetetlen USB boot drive

    Folytatás...

    Peter Kiss 1 éve 6

  • Somogyi internet rádió INR 5000/BK

    Szülői házban már vagy 20 éve üzemelt egy Philips mini Hi-Fi többnyire csak rádióként használva, kazettát már rég nem látott, CD-t sem nagyon, cserébe néha már nem akart működni rendesen a kezelőpanelja, emellett érdekes módon az egyik világítótest a konyhában zavarta az FM vételt, szóval jött a vad ötlet: mi lenne, ha internetrádióra váltanánk?

    Nedis RDIN5005BK

    Az első kiszemelt ez a Nedis készülék lett, nem ismertem a gyártót, de tegyünk egy próbát. Első mozdulatok kicsit érdekesek voltak a kezelőfelület miatt, de alapvetően rendben volt, tette a dolgát, szuper. A gond akkor kezdődött, mikor a szolgálati helyére került; képtelen volt csatlakozni a WiFi-hez. Jelerősség rendben van nálunk, a rádió környezetében is minden rendben volt, ha pl. a mobilommal ellenőriztem. A probléma valószínűleg abból eredt, hogy mesh hálózat van kiépítve, és nem volt képes kezelni a helyzetet; már az első lépéseknél érdekes volt, hogy a hálózatot kétszer listázza, két AP-t látott beállíás közben.
    A helyzet megoldása az lett, hogy visszavittem a készüléket, az Aqua is rugalmasan kezelte a helyzetet, valószínűleg segített az is, hogy nem amortizáltam le semmit a rádión, dobozán, fólia is maradt még a helyén.

    Sharp DR-I470 PRO

    Folytatás...

    Peter Kiss 1 éve 15

  • HP T610 DiskStation

    Egy ideje már DSM fut a vékonykliensemen, mert szexi, de nem csináltam meg rendesen, ugyanis egy hatalmas pendrive jelentette a boot drive-ot, nagyon kilógott a gépből, illetve egy öreg 500 GB-os HDD jelentette az összes disk-et benne, ami nem sok, cserébe hangos.

    Ma fejlesztést eszközöltem a gépen:
    - kapott egy 1 TB-os Samsung QVO SSD a HDD helyett
    - 2x4 GiB memória helyett most már 2x8 GiB lesz benne
    - a boot meghajtó szerepét átveszi egy mini Verbatim pendrive

    XPEnology telepítésbe nem mennék bele, szokásos:
    - kell egy boot loader, nekem a DS3617xs 6.1 Jun's Mod V1.02b működött ezzel a géppel
    - módosítani kell a PID/VID értékeket a grub config-ban a használt pendrive számaira (OSFMount)
    - MAC address-t át kell írni a gép sajátjára (enélkül a lépés nélkül is megleszünk)
    - pendrive-ra írás (Win32DiskImager)
    - boot után sima kézi telepítés, az általam használt verzió a DSM 6.1.7-15284 Update 3

    A telepítésnek különösebb kalamajka nélkül le kell mennie, de utána van pár apróság, amit érdemes lehet átállítani.

    Folytatás...

    Peter Kiss 2 éve 4

  • Dell Premier KM7321W

    Valószínűleg nem vagyok egyedül azzal a problémával, hogy több gépet kell használnom napi rendszerességgel, és ezt szeretném a lehető legkevesebb bazárral megoldani. Megoldások után keresve találtam pár lehetőséget, amelyekkel ugyanazt a billentyűzetet és egeret tudom használni gombnyomással váltva az eszközök között.

    - klasszikus KVM switch-ek
    - Logitech MK850
    - Rapoo 9900M
    - stb.

    Ezek közül egyik sem jött be, vagy sok a kábel, vagy sok a baj az eszközökkel, esetleg beszerezhetetlen. További keresgélés után találtam rá a Dell egészen friss megoldására: Dell Premier Multi-Device Wireless Keyboard and Mouse – KM7321W

    Folytatás...

    Peter Kiss 3 éve 21

  • 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 3 éve 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 4 éve 0

  • 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 4 é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 4 éve 2

  • 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 5 é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 6 é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 7 é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 7 é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 10 é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 10 é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 10 é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 11 é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 11 é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 11 é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 11 é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 11 é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 11 é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 12 é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 12 é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 12 é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 12 é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 12 é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 12 éve 4

Hirdetés

Copyright © 2000-2024 PROHARDVER Informatikai Kft.