author: tacsiazuma

01Jun

Amit elronthatunk az adapter patternel

Nemrégiben volt egy podcast epizódunk a függőségekről és arról, hogy melyiket is tudjuk leválasztani a domain logikánkról és mindezt hogyan. Ekkor említettük meg az adapter patternt, mint ideális megoldás, hiszen két különböző interfészt házasítunk össze vele. Egy e-mail küldési példát hoztunk fel akkor, így a mostani példámban is ezt fogom használni. A fő előny, amit az epizódban említettünk az az volt, hogy nem kell semmit tudnunk arról, hogy melyik implementációt használjuk később az e-mail kiküldésre és ezzel tudjuk a leghatékonyabban elválasztani a domain logikánkat a konkrét mail küldési implementációtól.

Tovább »

28Oct

Inversion of layered architecture

Hosszú ideje nem volt már technikai jellegű bejegyzés a blogon, épp itt az ideje kicsit változtatni ezen. A cikket az egyik stackoverflow kérdésre adott válaszom ihlette, ahol megkaptam, hogy a kedvenc UML-emről igazán írhatnék valami cikket, ezt pedig megfogadom :) A legtöbben ismerjük az úgynevezett layered architektúrát, aminek a lényege az, hogy alkalmazásunkat több különböző rétegre bontjuk. Ezek a rétegek egymásra épülnek és a felhasználó, legyen az egy tényleges felhasználó vagy valami egyéb kliens, mindig a tetejével lép kapcsolatba. Na most a dependency inversion elve nem csak osztályokra értelmezhető, hanem ilyen modulokra is. Na de mégis hogyan?

Tovább »

15Oct

Hogy indult a podcastünk?

Párszor felmerült már bennünk, hogy azok a témák, amikről egymás között beszélgetünk, meg kellene osztani másokkal. Pásztor János barátom hónapokkal ezelőtt rámírt facebook-on, azonban akkor még nem volt az ismerőslistámon, viszont a webconfon és a refaktor.hu-n át ismertem már korábbról. Viszont így csak három hónapra rá vettem észre az engedélykérések között. Az üzenet ennyi volt:

Hello. Ha esetleg akarsz egy podcastet inditani, abban benne lennek, akar magyar nyelven is.
Mikor elfogadtam a felkérést persze rögtön megkaptam, hogy a reakcióidőmön még lehetne mit javítani :) Elkezdtünk beszélgetni, előhozakodtunk pár témával, amivel lehetne kezdeni és az én tanácsomra behívtuk a beszélgetésbe egy másik fejlesztőtársunkat, Turcsán Ádámot. Egy hétvégi napon leültünk mindannyian a gép elé és felvettük az első részt, hogy megnézzük, mennyire vevő rá a magyarországi programozó közösség. Meglepően sokaknak tetszett, mára már több, mint százan követtek minket Soundcloudon, úgyhogy sikerült validálni a kis ötletünket. Heti egy epizódban állapodtunk meg és remélhetőleg még jó sokáig el leszünk látva ötletekkel, hogy ezt tudjuk tartani is :) Akinek új lenne a podcast, az ezen a linken elérheti. Akinek viszont nem új, azok figyeljék az oldalunkat, a soundcloudot vagy az iTunes-t az új részekért! :)
Update: kértétek, hogy kerüljön fel az RSS link is, amit podcast playerben tudtok használni. Itt is van :)

27Jul

Videóportál készenlétben

Hosszú ideje már, hogy utoljára írtam a blogra, lassacskán el is felejtem, hogy is kell ezt :) Az elmúlt időszakban teljesen más volt fókuszban, mégpedig a https://app.letscode.hu cím alatt található, screencast videókat tartalmazó oldal. Még kell egy kis idő, hogy rendeződjenek a dolgok ott, utána ismét visszatérek a blogoláshoz is.    Aki elég szemfüles volt, az már korábban feliratkozott egy ingyenes próbaidőért, aki viszont nem így tett, az se keseredjen el, ugyanis nemsokára ismét lesz hasonló akció :) Addig is látogassatok el az oldalra, nézzetek szét és ha hiányzik valami a tartalomból, netán hibát találtok, akkor nyugodtan jelezzétek a fejlesztes@letscode.hu emailcímre!

13May

Logfájlok pokla 2. - MDC keretrendszer alatt

Az előző cikkben arról volt szó, hogy is tudjuk elszeparálni az egyes logbejegyzéseket az apache loggerével. Mint kiderült, van hasonló funkcionalitás a monologban is, csak ott még nem volt ekkora ráhatása Martin Fowlernek és társainak, mert nem MDC néven, hanem processor néven tudunk belenyúlni és plusz információkkal kiegészíteni az egyes bejegyzéseket. Első körben a Laravelt fogjuk megvizsgálni ezen szempontból, mégpedig az 5.4-es verzióját.

Tovább »

11May

Mit tegyünk ha már elvesztünk a logfájlokban?

Ismert a mondás, hogy a fejlesztők idejük 90%-ában debuggolnak, a másik 10%-ban pedig bugokat írnak. Ez utóbbi egy lokális/remote alkalmazás esetében még a nyelvspecifikus debuggerrel megoldható, lépegethetünk soronként, megnézhetjük hogy mi is történt pontosan egy/egy request/thread mentén. Viszont amikor mindez éles, netán tesztkörnyezetbe került, akkor ez az opció elveszett, így marad az, hogy a hibakeresés szempontjából lényeges információkról logbejegyzéseket hagyunk hátra és reménykedünk hogy sosem kell belenézzünk.

Tovább »

18Feb

Circuit breaker, avagy mi van akkor, ha nem megy?

Amikor szoftvert írunk, akkor törekszünk arra, hogy bolondbiztos legyen. Amikor webre fejlesztünk sem történik ez másként. Minden tőlünk telhetőt megteszünk annak érdekében, hogy bizony a felhasználó mindig megkapja, amit akar, hiszen nekünk közvetve belőlük van pénzünk. Azonban akadnak olyan esetek, mikor külső tényezők is befolyásolhatják a szolgáltatást, amit nyújtunk? Akkor bizony tudni kell esni. Ahogy manapság egyre nő a microservice hype, egyre gyakrabban fogunk találkozni azzal, hogy bizony, ki kell hívni egy külső service felé, ami nem mindig végződik egy boldog 200-as válasszal. Cikkünkben a Circuit breaker patternről lesz szó és arról, hogy is segíthet ez nekünk, ha külső szolgáltatásokra épül az oldalunk.

Tovább »

06Feb

Laravel dockerben

A korábbiakban már láthattuk, hogy is tudunk apache alapú webszervert futtatni, azonban akadnak esetek, főleg ha a Laravel eszközkészletét vesszük figyelembe, mikor egy szimpla webszervernél több kell, vegyük csak a workereket, scheduled jobokat. A docker alapvetően egy process-t (és azokat, amiket az spawnolt) tud futtatni és addig tart egy konténer futása, amíg a process tart, ennélfogva fontos, hogy az úgymond foreground fusson, tehát ne daemonként. Most nézzük meg, hogy is hívhatjuk segítségül a supervisord-t és indítsunk konténert cronnal workerekkel és futó apache-al! 

Tovább »

30Jan

Vissza a jövőbe - Legacy kódok

A mai nap az egyik facebook csoportban felröppent a kérdés, miszerint óhatatlanul is 'gány'-e minden kód, amit öröklünk. Az eddigi cikkekel ellentétben most nem fogunk hirtelen legacy kódot gyártani, tehát nem lesz semmiféle gyakorlati megvalósítás, így aki copy-paste ügyében jött, azt most el kell keserítsem. Akit viszont érdekel egy hosszabb vélemény a legacy kódokról, az a tovább gomb után megtalálja :)

Tovább »

23Jan

SOAP, avagy 'Run you fools!'

Az eddigi cikkekben főleg a RESTful irányába mentünk el, ami mostanában elterjedőben van, viszont óhatatlan, hogy az ember belefusson a jó öreg SOAP-ba. Már volt róla szó, hogy hogy is néz ki mindez, viszont az még nem derült ki, hogy is tudunk ilyet létrehozni, valamint egy kliens se ártana, mert "jó" esetben mi inkább használni fogjuk ezeket, nem pedig szervert írni rá PHP-ben. Mindenesetre mindkét opcióról szót ejtünk majd. Na de zuhanjunk is neki, mert semmi se lesz belőle!

Tovább »

21Jan

Ezeket a cikkeket olvastátok legtöbben 2016-ban

Köszönöm, hogy 2016-ban is követtétek és olvastátok a Letscode.hu-t, remélhetőleg 2017-ben sem döntötök másképp. De mi is történt az elmúlt évben? Sajnos közel sem akadt annyi időm, mint terveztem, ezért csupán 31 cikk született ez idő alatt, ellenben tartottunk meetupokat, előadtunk a webkonfon, az oldalt átemeltük Wordpress alól Laravel 5.3 alá, hírlevélben is értesítünk az új tartalmakról és még sok mást! 2017-ben pedig remélhetőleg sokkal sűrűbben hallhattok felőlem. Ha bármilyen téma ötletetek van, nyugodtan keressetek meg Facebook oldalunkon vagy ezen az e-mail címen. Végül pedig amiért midannyian jöttetek, alább azok a cikkek, amiket 2016-ban a legtöbben olvastatok:

Tovább »

31Dec

PHP Docker mögé bújva

Ígértem korábban a Passportos verzióját a REST API-nk authentikációjához és ennek az első lépése az, hogy 5.3-as Laravel kell hozzá, ahol bele is futottam a hibába, miszerint lokálisan csak 5.6.3-as PHP-m volt, neki pedig 5.6.4-es kellett volna. Persze mi sem egyszerűbb egy lokális környezetnél, updateljük és ennyi. Sajnos production környezetben nem így szokott mindez történni, no meg jó lenne, ha már a 7-est használnánk, így gondoltam mixelem a kellemest a hasznossal és megnézem mennyire bonyolult bepakolni ezeket dockerbe, úgy hogy működjenek is. A példák, habár Laravel alapúak, a legtöbb PHP keretrendszerre igazak lesznek, ahol a Document Root a public mappára mutat.

Tovább »

27Dec

Pushbreaker - Az élet CI szerver nélkül

Ha körbenézünk, hogy milyen/mekkora projekteken dolgozunk nap, mint nap (és itt főleg a kisebb projektekre gondolok), akkor számunkra is világos lesz, hogy bizony nem minden projekt érdemli meg azt, hogy pl. Jenkins job-ot rendeljünk hozzá és a .gitlab.yml fájl is hiánycikk, netán nem is bevált gyakorlat a CI szerver a cégnél, ahol dolgozunk, mert csak KKV-knek szórjuk ki az apróbb oldalakat. Ami viszont természetesen továbbra is fontos, az az hogy verziókövetve legyenek ezek a kódbázisok is, betartsunk bizonyos konvenciókat, ha írtunk teszteket, azokat ne törjük össze az egyes commitok során és lehetőleg a PHP mess detector se akadjon ki fájljaink láttán.  Mindezt azért, hogy a kódunk megbízható legyen, mások által átlátható és az esetleges utódunk se fakadjon sírva, ha megnyitja a projektet (ez utóbbit főleg akkor értékeljük majd, ha átvettünk egy rendesen karbantartott kódot a sok legacy borzalom után). A cikkünkben a git kliensoldali hookjait fogjuk igénybe venni és megnézzük, hogy is tudunk bizonyos teszteket és ellenőrzéseket automatizálni a gépünkön, hogy csak olyan kódot engedjünk ki a kezünk közül, amihez jó esetben bátran adjuk a nevünket is a commit authorban.

Tovább »

22Dec

OAuth 2.0 Apigility módra

Habár legutóbbi cikkemben a Laraveles Passportot ígértem, gondoltam teszek egy próbát az Apigility átlal biztosított OAuth2.0-ás authentikációval is, részben azért, mert a B. Shaffer féle Oauth2 csomagot használja, amivel már korábban volt dolgom. Akkor überszívás volt mindezt rendesen életre lehelni, vagy legalábbis a rendszer nem éppen illett bele az egészbe, sok helyen kellett átszabni a protokollt (sokan ezért is szidják az OAuth 2.0-t a SAML-al szemben, ugyanis nagyon sok lyuk van a specifikációban, ahol többféle implementáció fordulhat elő, ami miatt lehet, hogy két fél megfelel a protokoll minden követelményének, mégis inkompatibilisek lesznek), így hát kiváncsi voltam, lehetséges-e mindezt úgymond összekattintgatni. Előljáróban annyit, hogy azért nem volt olyan egyszerű, mint hittem :)

Tovább »

19Dec

Konstruáljunk web API-t - 2. felvonás

Amikor az ember webről beszél, a legtöbb esetben színes weboldalakat képzel el, ezerféle közösségi platform belépéssel, ahol az ember minden mozzanatát lépésen tudják követni különböző módszerekkel, hogy a leginkább testreszabott élményt kapja. Ha bejelentkezünk egy oldalra, akkor a következő oldalbetöltéskor már az üdvözlő képernyő fogad, azt a hamis érzést keltve, hogy a weboldal tudja, hogy pontosan kik is vagyunk. Ez persze közel sem igaz, csupán a böngészőnk által küldött sütiben szerepel egy session ID, amivel azonosítanak bennünket és ezáltal hozzánk igazíthatják az oldal tartalmát. Ehhez viszont az kell, hogy a böngésző süti ide-oda közlekedjen a kérésekben/válaszokban. Azt már tudjuk régről, hogy a HTTP az egy ún. stateless protokoll, vagyis a két egymást követő lekérés közt nincs semmiféle kapcsolat, állapotváltozás. Ezt hivatott áthidalni az imént említett sütis megoldás. Azonban amikor REST webservicekről beszélünk, ott ez a sütis módszer nincs jelen. A korábbi példákban ez nem is okozott gondot, hiszen még nem volt szó arról, hogy ki mit is csinálhat az adott REST erőforrásokkal. Viszont mi a helyzet akkor, ha bizonyos műveleteket csak adott jogosultság mellett szeretnénk megengedni? Valamilyen formában tudtára kell adjuk a szervernek, hogy mégis kik vagyunk, ami alapján ő vagy végrehajtja az említett műveletet, vagy egy jól irányzott 401-es válasszal finoman elutasít bennünket. Ilyen műveletek lehetnek pl. azok, amikor törölni akarunk egy elemet, hozzá akarunk adni, módosítani, netán valakinek a privát dolgaiba akarunk kutakodni. Cikkünkben belepillantást nyerünk abba, hogy mi is az OAuth2.0 protokoll és hogy segíthet nekünk a fentiekben, third party vagy épp a saját API-nk használatakor.

Tovább »

04Dec

Angular Typescript módra - 3. rész

Az előző cikkben összeraktunk egy igen egyszerű statikus adatokat használó listázást. Jelenleg kegyetlenül vacakul fest, no meg a lényeg még nincs benne, a routing, amivel bele tudnánk navigálni az egyes elemekbe. Nézzük, hogy mi is szükséges ahhoz, hogy mindez valahogy kinézzen, de először a routingot és az ahhoz szükséges dolgokat fogjuk bekötni!route66

Tovább »

08Nov

Angular 2 TypeScript módra - 2. rész

Most, hogy megvan az angularos appunk alapja, nem ártana, hogy építsünk is valami értelmeset belőle. A todoAppokkal immáron Dunát lehetne rekeszteni, ezért most valami más irányba kellene elmenni. Legyen ez az irány például egy bloghoz készült frontend, kommentelési lehetőséggel, hogy ne csak megjelenítsük a dolgokat.wordpress-logo-notext-rgb

Tovább »

10Oct

Angular 2 TypeScript módra - 1. rész

Az előző cikkben kitértünk arra, hogy mi is az a TypeScript és miért is lehet a hasznunkra és, hogy eggyel növelhessük végre a használt tool-ok és supersetek sokaságát, mert ettől JS a JS. A múltkori részekben egy szimpla todo appot gyártottunk, de most valami komolyabbra kellene lőnünk, hogy ne csak egy sima CRUD-ban teljesedjen ki a tudásunk. Mivel nem akarom kétszer leírni ugyanazt, ezért a komolyabb implementáció a következő cikkben lesz, Ionic 2 segítségével, ahol már a külseje is olyan lesz az appunknak, ahogy annak lennie kell és nem torkollunk CSS-be, úgyhogy most vessük magunkat bele a sürűjébe! angular2-825x510

Tovább »

25Sep

HypeScript

A múltkori mobilos cikkre megkaptam, hogy inkább az Ionic 2-re vagy React Native-ra kellene fókuszálnom. A dolgot megfogadom, ám ahhoz, hogy az Ionic 2-re rátérhessünk, nem ártana végigjárni az utat hozzá. Ehhez az első lépés a typescript lesz, utána jöhet az Angular2, majd az Ionic 2/Electron és/vagy a Unity-re is sor kerülhet, C# helyett typescript alapon. typescript-cover-image

Tovább »

2014-2018 © Letscode.hu. Minden jog fenntartva. Build verzió: