Beadtam a bicót szervizbe. Vajon érdemes még egy ilyen régi bringát szervizeltetni vagy totál el kéne felejteni és irány az újabb hajtások[1] felé? Nos, anno ugye full rá voltam kattanva a témára, sok kellemes percet szerzett az öreg, megnézem most mit tud, aztán majd lesz valami. Kipróbáltam egy új gépet egyébként a szervizben mert a tulaj szívesen kölcsönadta egy körre, elég meggyőző volt, de igazából a sajátom is elég meggyőző volt anno, szóval who knows. Két hét mire elkészül.
[1] nagyobb kerék, más váz, neadjisten elektromos... who knows? az elektromosat most ne keverjük ide [2], maga a nagyobb kerék logikus előrelépés lenne, a vázat önmagában passzolom, amit kipróbáltam az még csak nem is össztelós volt de ennek ellenére nagyon kellemes élmény volt. Hát majd kiderül hogy jó döntés volt-e ez vagy sem, a lényeg úgyis az hogy használom-e v sem.
Néha meglepődök dolgok kapcsán, hogy beruházok vmire amiből nem is gondolnám h mi sül ki, aztán évekig az lesz a fő hobbim. Többmindennel is így volt ez, bringa, fotózás, blog, cég, meg ki tudja mi, jópár dolog azért eléggé pörgött, miközben előre totál nem gondoltam volna.
"Dark code" is behavior in production that nobody can explain end-to-end. Not just unreviewed code, but systems whose behavior emerges from interactions between components—often at runtime—without anyone ever holding a complete mental model of what the system actually does
So.. basically.. ai generated code that nobody understood ever.
Btw one of my thoughts was last year that we should indicate if some code was made by ai. But since then, depending on the project, sometimes all [or huge part of] the code is generated by ai.
Still, I think, it should be marked. Maybe not even with a binary true/false, but some estimation of level of human understanding. Similarly to code coverage.
Érdemes lenne ezeket a cikkeket valami módon megpörgetni vagy kommentálni mert ezekre tényleg betévednek kintről. Van más statisztikám is arról hogy miket érdemes pörgetni, de nem nagyon jön az ihlet hogy mégis mit kezdhetnék vele. Lehet hogy a tök elhanyagolt cuccokat meg kéne spékelni egy kis chatgpt-vel. Meglátjuk.
ápr. 19. 08:21 és ha már ott voltam akkor csináltam egy kis életkönnyítő shell scriptet is mert már fájt az ujjam a sok utilgépelgetéstől.
És lett végre képfeltöltés is webről, egyelőre adminoknak, de hamarosan kiterjesztem userekre is, ahogy az időm engedi. (Profilképcsere pl.)
Vicces módon időközben ez a hook/script sokkal advancedebb lett, ahogy arról a post queue rendszer miatt jó fél hónapja be is számoltam. Csak kb. 20 post van a queue-ban és nem időrendben jelennek meg.
A blog is 2003-ban indult, ez véletlen már nem lehet.
2003 jó év volt.
Tegnap együtt sírtunk, együtt nevettünk, olyan ötletek voltak a bloggal hogy szakadtunk a röhögéstől.
Kiderült számomra - már elfelejtettem - hogy admin vagyok Mainframe überblogján IS. Mainframe's Happy Place És beszarok ott is van trusted content, de milyen ám.
Vajon hány olvasóm lehet aki egyszerűen nem emlékszik rá hogy trusted vagy akármilyen jogokat kapott nálam, vagy hogy egyáltalán van ide accountja? Sokat gondolkodtam rajta hogy meg kéne keresnem a régi olvasóimat de privacy irgum-burgum 2024, no-spam policy, expliciten megígértem a profilban hogy nem keresek meg senkit hiába adja meg az email címét. LOL a saját barátaimra nem merek ráírni (hiába vagyunk messengeren ismerősök és együtt lógtunk egymásnál 10 évig ), jesz, welcome to 2024.
Hallgattunk Belgát mert kurvarég nem hallgattam, elcsodálkoztam hogy mik vannak.
Mf megkomolyodott, de az meg privacy power hogy leírjam hogy mi van vele.
Szóval miről lehet írni? Help. Semmiről. Arról hogy Orbán meg Gyurcsány. Talán. Vagy ki az épp aktuális bábmegváltó főpap jelölt antikrisztus. Na erről már nem beszéltünk, ezt csak én teszem hozzá, mert arra jutottunk hogy populáris tartalom kell, és az Mf által "code dump"-nak nevezett kódrészek triviálisan nem azok. Ellenben ugye niche market, ami szerintem ugyanolyan jó. Mindegy is. Long tail! Rájöttünk-e 20 év alatt hogy kit parodizál a Belga?
Múltkor publikáltam egy elég beteg táblázatot az "időbeosztásomról" (ADHD Podi), az nem időbeosztás volt nyilván, hanem egy vizuális formája egy teendőlistának, helyette csináltam egy "épeszűbb" letisztázást.
A Linkbár checkerben áttértem GuzzleHttp-re, de miket lehetne még ellenőrizni?
- that's a tough one
Ezek mondjuk mind elég bonyik, mármint a lekezelésük, hogy na akkor mi legyen. A lejárt linkeket általában manuálisan szoktam deprekálni a bejegyzésekben egy olyan két hónapja. Természetesen írni akarok erre egy automatizmust.
[...] na, meghallgattam az adhd podcastot amit küldtél, az eleje felé valószínű kevésbé tudtam figyelni, a végére eléggé belelendültek, az már le tudott kötni, vagy nagyon keményen dolgoztam h figyeljek rá, nem tudom. igen, masszívan érintett vagyok ezekben, a tünetegyüttesekben, a társbetegségekben, stb. [...]
Barcelonát szeretjük. Pénteken megyek és rá egy hétre csütörtökön jövök. Most bookoltam. Tali Passzal. Elvileg kicsit elmegyünk bulizni is (Dubfire). Gondolom dolgozni is fogunk.
Gondolkodtam hogy bemenjek a MasterCard lounge-ba de úgy tűnik sima gold kártyát már adnak minden hajléktalannak, ez látszik is, Golddal 4000 Ft a belépő. Gondolkodtam, hogy mi legyen, bebasszak mielőtt felszállok a gépre, vagy mi. Végül az image uploader fejlesztése mellett döntöttem a friss levegőn - a dohányzó szekcióban, úgyhogy a levegő az inkább valami más volt. Örültem hogy hoztam magammal kardigánt és mellényt mert kb szétfagytam volna. Viszont haladt az image upload. Négy verziót készít a feltölöttt képekből (orig, big, medium, small). Egyelőre bejegyzésekhez múködik, de még nincs kellően összeintegrálva, utána a user avatarok jönnek, aztán ha marad energiám, akkor a kommentek.
Előtte levő napon kicserlétettem a telóm (S20) akksiját, meg vittem mobiltöltőt is, 95%-on voltam a fejlesztés befejezésekor, megnyugtató. Ha teló van, minden van.
Azt hittem a gépen fogok laptopozni vagy remarkable-özni de valszeg instant sleepbe kerültem.
Reptér előtt kicsit majréztam hogy minden oké lesz-e. A gépet 1,5 órával későbbre tolták de a fejlesztés teljesen jó elfoglaltságnak bizonyult.
Barcelonában nem éreztem a chi-t tömegközlekedéshez úgyhogy a reptéren fogtak nekem gyorsan egy taxit. Kb 35-40 EUR volt.
Pásszal benéztünk a mekibe, az első kört én fizettem, kb. 20 EUR volt.
Barcelona gyönyörű, imádom az utcáit, nagyon szép építészetileg az egész. Utoljára asszem 2019-ben voltam itt.
(.)
Day 2 - Fejlesztés
Pas elugrott kicsit, nekem meg van lehetőségem fejleszteni. Barcelonában sokat voltam már és főleg Pas meg buli miatt jöttem (ld korábbi postok).
Szóval ma "itthon" fejlesztek. De felrakok pár képet. Kaptam egy 4K monitort kölcsön. Meg kell mondjam tényleg nagyon szépek a betűk rajta, és egy élmény dolgozni vele.
Eszterrel vacsiztunk a Grosso Napoletanoban. Ez nem igaz, mert szerdára eltoltuk.
Helyette hegyeken-dombokon voltunk és fotóztunk egy kicsit.
Otthon találtunk pár napszemcsit úgyhogy hatalmas szemüvegparty kezdődött.
Kurvára vennék én is egy MILC-et (körbe is néztem dehát ugye horror árakon vannak a csúcsmodellek - persze nem kell a csúcsmodellt venni), meg nagyon menő ez a hordozható hangfal és bakelit is.
Eredetileg btw betettem a bőröndömbe a Canon 70D-met dehát obikkal együtt 3 kilót nyomott, és nem is biztos h felengedték volna a gépre, mert épp határon voltam vele. Aztán rájöttem hogy a franc akarja ezt cipelgetni. Szóval itthon maradt. Lehet ezt is el kéne adni.
Day 6 - The last full day
Vacsiztunk egy gluten-mentes pizzeriaban Esztuval, aztan kiultunk a rooftop teraszra dumalni egy kicsit Pasnál. Egesz jo este volt.
Itt enekelnek a metrokon is, mikrofonnal, kihangositassal. Na az sulyos volt, en biztosan letiltanam ezeket a pics*ba. Bar allitolag igy is vmi "jogsihoz" (cert-hez} van kotve a szereplesuk. De kb az a kategória mintha agyimplantban reklámokat vetítenének neked és nem tudnád kikapcsolni.
Mindenesetre akarhogy is legyen, q irritalo egy jelenseg a metron.
Köszönöm a meghallgatást, kérem kapcsojjaki.
Day 7
Uccsó day, reptér, utazás, Pas interjú
Jönni kell mihamarabb újra.
Talán júniusban.
Nagyon kurvajó volt az egész, ezúton is köszönöm a vendéglátást Pas.
<?php
namespace Uberblog\Text;
use Uberblog\System\DI;
class PreSaveFormatterChains
{
public function formatPreSaveUserTextarea(string $text,
string $inputType): string
{
return $this->apply($text, $inputType,
DI::MarkDownPresaveFormatter(),
DI::BbcodePreSaveFormatter(),
DI::TextPreSaveFormatter(),
DI::CommentPreSaveFormatter()
);
}
private function apply(string $string,
string $inputType,
PresaveFormatterInterface ...$formatters): string
{
foreach ($formatters as $formatter) {
$string = $formatter->doThePresaveFormatting($string, $inputType);
}
return $string;
}
public function formatPreSaveEditableTextarea(string $text,
string $inputType): string
{
return $this->apply($text, $inputType,
DI::PostPreSaveFormatter(),
DI::TextPreSaveFormatter()
);
}
public function formatPreSaveGeneratedTextarea(string $text,
string $inputType): string
{
return $this->apply($text, $inputType,
DI::PostPreSaveFormatter(),
DI::MarkDownPresaveFormatter(),
DI::TextPreSaveFormatter()
);
}
public function formatPreSavePostTitle(string $text,
string $inputType): string
{
return $this->apply($text, $inputType,
DI::PostPreSaveTitleFormatter()
);
}
}
Like? Dislike? Ötlet? Javaslat?
(7.2-es PHP-re be vagyok korlátozva, másképp mondjuk minimum enumok lennének az $inputType-ok, most máson nem gondolkodtam, hogy mi lenne frissebb PHP-vel.)
21:09 elvileg hamarosan lesz 8.2-es PHP-nk, yeaaah
Értelemszerűen nem sorról sorra de van ezekben pár sor ami érdekes számomra. Az AWS könyvből főképp az ECS/EC2 pl. Bár kicsit más jellegű írás, mint amit kerestem (nagyon high level). Mindegy, kezdetnek egynek nem rossz.
Mivel az utóbbi időben 1-2 code sample-t is tettem az oldalra, syntax highlighthoz berántottam a prism js-t.
Közben lehet, hogy a Torchlight jobb lenne syntax highlightra, de első körben nem láttam plain php támogatást.
Amúgy én Parsedownt használok .md parsingra (ami elvileg a leggyorsabb markdown parser). The struggle is real. Mondjuk a prism se rossz, de ha lehet elkerülném a kliens oldali js bütykölést, performance okokból.
CommonMark - A strongly defined, highly compatible specification of Markdown
Hát ez ugye semmi extra, aki használ bármilyen épkézláb autoloadert (pl a Composert), az tudja hogy mi az elnevezési konvenció. \Namespace\Subnamespaces\Classname, és a Classname megfeleltethető egy .php fájlnak ugyanezen a néven. Case sensitive (miután a fájlrendszer amire mappelődik a namespace, többnyire case sensitive az adott OS-en). Ennyike.
Na ez már combosabb, nem volt türelmem/időm normálisan végigolvasni, kigyűjtöttem belőle pár core gondolatot/buzzwordöt.
StreamInterface
UriInterface
ServerRequestInterface, UploadedFileInterface <-- itt eléggé megbirizgálták a PHP default $_FILES tömbjét fájlfeltöltések esetére egy logikusabb struktúrával, aminek a használata kb ez:
Upload an avatar: <input type="file" name="my-form[details][avatars][]" />
Ahol az 1 egy többfájlos feltöltés esetén az 1-es indexű (0-tól kezdődő) feltöltött fájlt jelenti.
Másik példa:
$file0 = $request->getUploadedFiles()['files'][0];
$file1 = $request->getUploadedFiles()['files'][1];
printf(
"Received the files %s and %s",
$file0->getClientFilename(),
$file1->getClientFilename()
);
// "Received the files file0.txt and file1.html"
move_uploaded_file() helyett érdemes a moveTo($targetPath)-t használni.
MessageInterface: immutable, "módosító" függvények új példányt adnak vissza belőle. RequestInterface és ResponseInterface szülője.
UploadedFileInterface-re visszatérve
getStream()
moveTo($targetPath)
getSize()
getError()
getClientFileName()
getClientMediaType()
nekem egyértelműen úgy tűnik, hogy erre kivételesen érdemes egy libraryt berántani, nem magamnak leimplementálni. A blogon egyébként van egy Request classom ami sztem ügyes meg szép, de köze nincs ahhoz amit ez csinál. Lehet hogy ez egy réteg lehetne alatta, maybe. Nem tudom eldönteni. Response-t nem csináltam, de igény az volna rá.
Btw egy rakás PSR-7 implementáció van, ld. packagist.org
Guzzle
laminas-diactoros
slim/slim
slim/psr7
Guzzlehttp/psr7-nek 700 millió letöltése van a packagist-en. "Packagist is the main Composer repository". A laminas a zend-framework utódja. Abban írt anno Fater valamit egy ügyféljelöltünknek, akiből végül cégátszervezés miatt nem lett ügyfél.
"Common interface for dependency injection containers"
public methods:
public function get(string $className);
public function has(string $className);
A $className-et a PSR $id-ként említi, de szvsz nyilvánvalóan ClassName-ről van szó. (Right?)
"Users SHOULD NOT pass a container into an object so that the object can retrieve its own dependencies. This means the container is used as a Service Locator which is a pattern that is generally discouraged."
Ezen az egészen el lehet vitatkozni, lesz egy írásom majd a PHP-DI-ról, vagy ki tudja, lehet hogy már megjelenik mire ez megjelenik :Đ
Hogy csöndben legyen, meg hogy ne pazaroljunk el rá egy külön nyitva tartandó ablakot.
Nekem most momentán azért kell egy projekthez, mert fel akartam rakni a PHPStant, és a natív Windowsos PHP-mmel valahogy akadt, és úgy gondoltam, hogy nem arra fordítom az energiámat, hogy a Windowsos PHP problémámat próbálom megoldani, hanem inkább felteszem a Sailt, mert abban úgyis van egy csomó dolog amire szükségem lenne egyébként is.
Amíg ezt leírtam, a Sail nagyjából fel is rakta magát.
Alapból egy nagyon kellemes hibaoldallal fogad, mert még nem futtattuk a migrációt.
Vettem egy ilyet még kb. 2019-ben de sose írtam róla.
Az a roppant kellemes meglepetés ért egyik nap, mikor előszedtem (már jóideje a szekrényben porosodott), hogy a legrégebbi customereknek a cég úgy döntött, hogy ingyen adja végtelenül (ha jól értettem) a Google Drive, Dropbox, One Drive integrációt. Kurvajó, be is lőttem, végre zökkenőmentesen olvasgathatok ebookokat mondjuk a Dropboxomról. Ehhez korábban egy kis sync eszköz kellett, a Remarkable saját programja, elég körülményes volt kiszemelgetni hogy mi az amit át akarok vinni rá.
Jeah.
Habár amúgy a legjobb az lenne ha ki lehetne jelölni egy mappát és azt tényleg full automatikusan leszippantaná (jelenleg úgy van, hogy bemész mondjuk a Dropboxra az eszközről és kijelölgeted h mi kell onnan neked).
Eredetileg egyébként azért vettem, hogy különböző körülmények között jegyzetelgethessek rajta, ahol mondjuk nem szereti valaki ha laptopot nyomkodok miközben vele beszélek, és nekem is elvonná a figyelmemet a sok ikon. Ez meg tök nyugis, nem fut rajta kb semmi, full jó. Könnyű, végtelen akkuidő, stb. A képen épp 6%-on áll az akksi de meg nem mondom mióta a szekrényben hevert. (Az eredeti jegyzetelgetős use-case mára kevésbé aktuális.)
Nagyon hirdetik egyébként a 2-es verzióját, amin van böngésző meg minden, de szerintem azzal pont elveszíti az interrupt-mentes "kényszerfókuszált" olvasgatás lehetőségét. (Ingyen kéne persze.)
Régen dolgoztam egy DDD-s projekten az EPAM-ban egyébként.
A lényeg kb annyi volt hogy van egy rakat réteg és abba is beleszakad a team hogy egy táblát létrehozzon. De komolyan. Scala projekt volt és két nap volt egy kurva táblán a CRUD műveleteket lefejleszteni. Legalábbis a backend teamnek.
Mi frontenden angularban olyan építőkockákat hoztunk létre hogy egy pár soros konfig alapján megvolt az egész CRUD funkcionalitás. (AngularJS volt akkor még, és nagyon imádtam.)
Na de ugye nem sztorizgatni kéne az elmúlt régi szép időkről, hanem olvasni a DDD-ről. Meg írni róla, gyakorlás/elmélyítés gyanánt.
So, what is DDD?
Ubiquitous language
Model-Driven Design
Layered Architecture
User interface (Presentation Layer)
Application Layer (thin, doesn't contain business logic)
Domain Layer: main layer
Infrastructure Layer: persistence, supporting libraries for the UI, etc
Services
Entities
Value Objects
Repositories
Aggregates
Factories
Domain Events
Bounded Context
Anti-Corruption Layer
Does the translation between Domains
Tactical Design
Continuous Refactoring
Continuous Integration
Context Map
Könyvek
Domain-Driven Design by Eric Evans, 2003, 25e Ft, nice
InfoQ: Domain-Driven Design Quickly - ezt csak gyorsan átlapoztam. Letöltöttem Remarkable-re.
Van egy endpointom a blogon, amin a TODO itemeket csekkolgatom ki-be (/my/todo/toggle/{id}). Ez nem Laravelben van, hanem a jó öreg saját blogengine-ben, és most a laraveles felületre nem akarok semmi JS-t tenni. Az endpoint egy JSON-t ad vissza:
{ "checked": true }
vagy
{ "checked": false }
Annak függvényében nyilván hogy a TODO done lett-e vagy .. todo.
Igazából sosem használtam a Guzzle-t. Nem nagyon akarok sokmindent változtatni, annyit akarok, hogy az endpointomat meg tudjam hívni, amihez szükségem van arra, hogy bejelentkezett adminnak lásson a blog. Ehhez át kell küldenem a vid, uid, sid cookie-kat.
A Guzzle http kliensét akartam kipróbálni, ez a lényege a feladatomnak.
Következőt sikerült produkálni, ez egy Laravel kontrollerben van:
A fenti kódban a DI nevű class egy saját dependency injection megoldás (használhatnám a PHP-DI-t pl, de minek, ugye, itt minden saját). (Egyik nap ami azt illeti be is rántottam a PHP-DI-t a blog alá, aztán kitöröltem. Teljesen működőképes volt stb, de ... akartam írni egy postot a PHP-DI-ról hogy miért nem azt használom... majd egyszer talán. Közben létrehoztam a postot hogy nyomasszon, benne van a queue-ban, mire megjelenik, szeretnék írni bele valamit. :Đ )
Na de a lényeg: létrehozzuk a Guzzle Client-et, simán küldünk vele egy POST requestet, belesütjük a Cookiekat, json_decode-oljuk a választ az endpointról, és átirányítjuk a usert (magamat) az új Laraveles TODO admin oldalra, becsűrve az URL-be hogy done lett-e az item vagy todo (checked=0 v checked=1).
A Guzzle ->post() helyett tudna ->postAsync() -et is, az elég fontos funkció lenne, de akkor nem kapnám meg, hogy mi lett az endpoint válasza, és így nem tudnám belesütni az URL-be.
Amúgy az URL-be belesütés nyilván nem annyira hatékony módja a kommunikációnak, de leszarom, egyszerűen csak ismerkedek libekkel.
Van amikor hasznos, pl. egy sima URL logból látom, hogy mondjuk valaki hozzászólt egy topikhoz, mert az URL-ben benne van hogy &thx4=cmnt (aki nézi az URL-t, biztos találkozott már ilyennel a blogon, miután hozzászólt valami témához). Kiszedhetném belőle, a blogon van egy kellemes kis értesítős megoldás (most már azzal is találkozhattok pl. ha beléptek vagy kiléptek, vagy módosítjátok a profilotokat).
Mi ez a function toggle(HbTodo $todo)?
Éleslátók észrevehetik, hogy a Laravel tök faszán URL-ből felpéldányosít nekem egy HbTodo objektumot. Ez szerintem kurvajó. Itt a példában tök fölösleges, mert csak az ID-jára van szükségem. De annyiból mégis jó, hogy ha rossz ID lenne, akkor már eleve a Controller végrehajtása előtt kapna a user egy HTTP 404 not found hibát. Így az ID-t nem kell manuálisan validálni, hogy létezik-e. Szóval annyira mégse fölösleges. Good.
Miért nem JS-ben írom?
Mert perpill a Laravel dolgaira akarok fókuszálni, épp egy backend developer role-ra pályázok, és nem akarok JS-sel foglalkozni most, így is végeláthatatlan dolognak kell utánanézzek. Egyébként természetesen JS-ben lenne logikus, pláne ha már ilyen nice endpointom van ami JSON-t ad vissza.
Másfelől perpill nem tenném le a voksomat semmilyen JS lib mellett, a Reactot évente újra kell írni (nekem nem lesz ennyi kapacitásom a blogra, most épp van, de tudom hogy nem lesz), jQuery-t minek gyakoroljak 2024-ben, stb.
Legfőképp meg azért mert a Laravel admin felületemre egyelőre semmi JS nincs bevezetve. Pedig fájóan kéne egyébként. Fel is jegyzem:
Megvettem a Typorát (nem volt különösebben drága szvsz, ~7000 Ft), ami egy - szerintem - kurvajó markdown editor.
WYSIWYN - What you see is what you need. Nem a forráskódot szerkeszted hanem a vizuális végeredményt. Vagy írod be a kódokat és rögtön konvertálja át a megjelenésre, vagy vannak shortcutok és azokat használod (pl. H1 = Ctrl + 1, stb, tök kényelmes.)
Atom kellemes UI
Jó shortcutok
Simply awesome
Te mit használsz Markdown szerkesztésre?
(Itt a blogon egyébként egyszerűen markdown "forráskódot" írok, egyelőre csak az adminban elérhető, később lehet hogy bevezetem a kommentek közé is, de még tesztelgetem. A Parsedown-t használom rá egyébként.)
Vannak egyébként bugjai, de így is simán megérte.
Elgondolkodtam azon, hogy mi lenne ha a blogpostokat gitben (is?) tárolnám (DB helyett / mellett). A mass replace dolgokat eléggé megkönnyítené. Persze elég sokat kéne kódolni hozzá (importálni folyton a változásokat markdownból vagy pláne oda-vissza syncelni - itt mindig szem előtt kell tartani hogy ez nem egy ezer fős projekt, szóval mennyi időm van magyarán).
tiktokon meglepő módon csomó érdekes főképp css/frontend tartalom jön szembe, de vannak keményebb fejlesztői témák is, pl. van egy csávó aki a GitHubnál dolgozik és szokott gondolatokat megosztani
podcastok nem annyira, de hallgattam Python podcastot pl.
freecodecamp
GitHub projektem van arról hogy miket akarok tanulni
a blogomba is gyűjtök listákat hogy miket akarok csinálni/tanulni
idén kipróbáltam a React Native-et, a Vercelt, a Laravelt, az Android Studiot, egy rakat CSS újdonságot aktívan használok, lokálban kipróbáltam a PHP8 újdonságait
ChatGPT-vel / Geminivel generáltattam egy rakás kártyát és betettem Ankiba aztán végigmentem rajtuk / egy részükön
néha megnézek interjú kérdéssorokat, volt h ebből is csináltam Anki kártyákat
még 2019-ben vettem egy Remarkable-t, időnként elolvasok 1-2 könyvet rajta
ja és vannak mindenféle audio anyagok is, én pl. sokáig subscriber voltam (vagyok? ) Headwayre, úton valamerre vagy kondi közben kiváló
A locale('hu_HU') nem szükséges, ha a config/app.php-ben be van állítva, hogy
'timezone' => 'Europe/Budapest',
És akkor említettem hogy "ha a meződ nem lenne alapból Carbon". A Laravel ugye egy inserted_at és egy created_at mezőt használ a db-ben a rekord beszúrási/frissítési időpontjaira. Ezeket a mezőket a Laravel alapból castolja Carbon példányokra, így alapból hívható rajtuk a diffForHumans metódus, illetve amúgy bootolhatod úgy is az appot hogy bizonyos mezőket alapból castoljon Carbonra.
Személy szerint nem ezeket a mezőneveket használom a DB-ben a blogon, de a Laravel modelljeit lehet instruálni, hogy más mezőneveket használjon, így azokat is Carbonná konvertálja by default, megkönnyítve a template-ben a dolgunkat, nem kell a Carbont külön injektálni. A Laravel setupolása igazából eredetileg nem volt a célom ebben a postban, úgyhogy nem is megyek bele jobban. :)
Az a gyanúm, hogy frissebb Laravelekben lehetne csinálni egy ilyet, de a blog momentán 7.2-es php-n fut (ami 7-es laravelt jelent), úgyhogy itt ezt nem tudom kipróbálni. Az AppServiceProvider.php-ben van egy boot metódus:
public function boot()
{
// ...
Blade::stringable(function (Carbon $date) {
return $date->diffForHumans();
});
}
Ezzel elvileg az összes dátumot így lehetne kiíratni. Idő hiányában ezt most nem tudom kipróbálni 11-es laravel projektben, mert mozdulnom kell a köv témára. :) Next time maybe.
Valami kurvalassú benne de most már lehet (nekem) a bejegyzésekben a checkboxokat UI-ról kipipálni és megjegyzi veeheheh. Kibaszott egy monstrum megoldás, mert amellett h felveszi DB-be, átírja a szerkeszthető szövegmezőt is (ami nemrég került bevezetésre), meg a legenerált köztes HTML mezőt is. Gyakorlatilag újragenerálja a bejegyzést. Mivel ez nem lesz egy túl gyakori művelet így 0.1-nek bőven megteszi. Szerintem ez lesz az első feature amitől megválok a jövőben, nem nevezném elegánsnak.
Ehun egy-két példa:
ápr. 08. 19:45 sose válok meg tőle, imádom, eddig kb. 100 létrehozott todonál tartok
(Ezt a parancsot így wsl-ben kell kiadni ha épp Windowson vagyunk.)
Milyen csomagjaink vannak most?
Csomi
Miez
User reg, login, pwchange, pw confirm, pwreset, simple profile page + opcionálisan Livewire, Inertia + opcionálisan Vue/React. Pretty much out of box if you ask me.
A Laravel saját Docker wrappere, felhúz neked egy PHP containert, MySQL containert, Redis containert, látok itt még valami test, mailpit és selenium konténereket. Aham a mailpitet eléred a 8025-ös porton, ahol ül egy lokál inbox a rendszerből kiküldött emailekkel (standard thing)
"authentication system for SPAs (single page applications), mobile applications, and simple, token based APIs"
it's like Tailwind CSS, but for the PHP command-line applications
"beautiful error page for Laravel apps" - hozzáteszem tényleg kurvajól néz ki, ez volt az első dolog amivel találkoztam a Laravel felrakása után (írási jogosultság-para miatt), szép, true.
Aham, a feléről nemtom micsoda, a Breeze-t most ismertetem, a Sail egy Docker-compose wrapper a Laraveltől, a Tinker öö passz, a Carbon ha az amire gondolok akkor valami időkezelés, Collision az valami hibakezelő cucc commandline-ban, Termwind passz, Ignition mintha az is valami hibakezelés lenne. ápr. 07. 19:35, közben utánanéztem a dolgoknak, be is írtam a táblázatba
Breeze
Laravel Breeze is a minimal, simple implementation of all of Laravel's authentication features, including login, registration, password reset, email verification, and password confirmation. In addition, Breeze includes a simple "profile" page where the user may update their name, email address, and password.
Okés.
Laravel Breeze's default view layer is made up of simple Blade templates styled with Tailwind CSS. Additionally, Breeze provides scaffolding options based on Livewire or Inertia, with the choice of using Vue or React for the Inertia-based scaffolding.
Értem.
Igazából Nekem egy loginra (screenre) volt szükségem, mert eggyel korábban, amikor még aludtatok, a
$ ./sail artisan install:api
eredményeképp azt kaptam, hogy
Route [login] not defined.
Szóval gondoltam mi lenne ha kivételesen ezt nem írnám meg magamnak manuálban, hanem megnézném, hogy mit ad a Laravel. Hát itt tartunk. Azaz már nem egészen itt, mert a composer require laravel/breeze után ez volt a javasolt köv lépés:
$ ./sail artisan breeze:install
Itt felajánlott amolyan ASCII UI-on egy pár választási lehetőséget, én a következő szavazatokat adtam le:
Kérdés
Válasz
Which Breeze stack would you like to install?
React with Inertia Az inertiáról egyelőre nem tudom hogy micsoda, de a React az azért jó, mert a csőben levő ügyfelünk Reactozik.
Would you like any optional features?
Dark mode & TypeScript Ezeknek meg Pas fog örülni
Which testing framework do you prefer?
Pest Itt fel volt kínálva a PHPUnit is de azt ismerjük és véletlen túl hatékonyak lennénk benne.
Bennem most felmerult h esetleg ujrairhatnank a site-ot (cchu) ebben
...
Aztán belenéztem a cchu-ba hogy milyen feature-ök vannak benne, hát good luck hogy ezt szó szerint újraírja valaki. Nyilván mást lehet írni helyette. De elég.. brutál dolgokat tud. Nem is értem, hogy a francban volt erre energiám anno. (nem a publikus felületre gondolok annyira hanem a 'members area'-ra.)
Raktam be a blog alá laravelt jól. Egyelőre - és várhatóan a jövőben is - kizárólag admin funkciókhoz. Nem rossz az ha 20 év múlva is megy valami.
Vicces, 2 hónapja még minden dependenciámat ki akartam vakarni a blog alól, most meg épp abban vagyok h berántsak ezt-azt.
Szerintem ezt a site-ot amúgy úgy érdemes csinálni - és nagyjából így is van -, hogy a "mainstream" oldalhoz nem nagyon használok külső dolgokat, az adminisztrációhoz, fejlesztéshez, meg igen.
DE MIÉÉÉÉRT
Mert előfordulnak röpke 10 évek az életemben amikor mondjuk nem annyira foglalkozom a bloggal, és utána kb lehetetlen a régi dependenciákkal mit kezdeni, meg ugye nem is szereti az ember annyira a lejárt dolgokat, de nehéz upgrade-elni, kivakarni, stb. Ez nem egy 200 fős projekt, érted. Nincs folyamatosan up-to-date tartva. Tökjó ha olyan dolgokból épül, ami menni fog az unokáimnak is.
Most idén amikor elkezdtem foglalkozni vele újból, konkrétan taskokat hoztam létre arra, hogy pár dependenciától nézzem már meg hogy miként tudnék megszabadulni. Hát sejthető hogy mennyire sikerült. (Semennyire.)
Ugyanakkor ami mondjuk csak lokál fejlesztéshez volt használva - vagrant - azt nyilván 0 sec alatt kivágtam.
Mondjuk most már kezdek úgy behúzni ezt-azt hogy kb feature switchelhető hogy van-e vagy nincs, azt' max nincs használva az adott funkcionalitás. Dehát ezt nyilván nem lehet mindennel megcsinálni.
Voltak itt Meliek. Elmentek. Altalaban nem erzem magam olyan egyedul, mint most. Csak most eros a kontraszt.
Konkretan ram tort a panik.
Idokozben vege lett.
Beszeltem anyammal ahol a "true self"-em elojohet. Elegge elveztem, alig tudtam abahagyni, vegul azert ejjel 2.30kor lekorlatoztam magam.
Ezeket at kell nezzem a keddi interjuig
Es tok jo lenne ha el tudnek . De lathatoan nehezen menedzselem a prios dolgokat. Anyam tanacsa: mi hataridos. Nos egyedul a keddi meeting hataridos, a tobbi a kutyat nem erdekli (magamon kivul) hogy elkeszul-e v mikor
Meliek behuztak a , lol
De a true selfet egyebkent szivesen megmutatnam masoknak is, de valszeg korlatozottabb lenne ra az erdeklodes.
, ami valszeg senkit se erdekel egyebkent, de engem annal inkabb
Felraktam a Laravelt, kapásból egy hibaüzenettel indított, de kurvára tetszett hogy hogy néz ki. Regisztráltam magam a -on is, itt lehet szervert bérelni 12 USD/hótól.
Ma derült ki számomra hogy az új ügyfelünk már múlt héten visszajelzett hogy lesz meeting, de csak Past címezték be... én meg teljesen magam alatt voltam, hogy még csak válaszolni se válaszoltak...
Noh a bejegyzéskategóriáknál csináltam egy nagyrendrakást, be lett állítva h melyik mászhat fel automatikusan és melyik nem, volt egy rakat amiket visszamenőleg leszedtem a bejegyzésekről.
Akik végigküzdötték velem a BME-s vizsgaidőszakokat, talán emlékezhetnek, hogy volt egy commentdelay mód a blogon, amit ha bekapcsoltam, akkor az aznapi kommentek nem jelentek meg, csak éjféltől. Így redukáltam a site-ra fordított függőségi időt. Mert ugye akkoriban rengeteg komment jött (asszem 169 komment volt egy nap a csúcs), egész nap volt mit olvasgatni, meg mire válaszolgatni.
(A második kép valójában nem kattintható de már a fülemen jön ki a CSS hegesztés, sry.)
Még gondolkodom rajta hogy automatizáljam-e az ilyen orphanok törlését. Bizonyos esetekben mehet, de mondjuk találtam értékes adatokat is a múltból amiket restauráltam. (Pl. egy rakás kommentet egy törölt bejegyzéshez.)
Oké sikeresen áttértünk utf8mb4-re. Ofkorsz élesen kellett kipróbálni. Ofkorsz elhasalt a felénél. De most már lehet smiley-kat írni a szövegbe. Mármint igazi smiley karaktereket. Mind blown.
Erre azért volt szükség mert kimásoltam ide egy chatrészletet és elveszett a bejegyzésem smiley-tól hátralevő része. Elsőre nem vágtam hogy mi van.
A dolog mindenesetre elég könnyen ment. Nem is vártam mást, annak ellenére hogy egy encoding váltás anno micsoda KŐKEMÉNY SZOPÁS volt.
Helyreállítottam ezt a funky feature-t és így sokkal nyugodtabban írkálok mindenféle fasságról. Mint pl arról hogy helyreállítottam ezt a feature-t.
Talán valahogy még rankelnem kellene a várakozó bejegyzéseket, hogy a legvégére maradjanak a futottak még kategóriájúak, de nem tudtam kitalálni jól automatizálható metrikát. Illetve ki tudja lehet hogy a legjobbakat érdemes a végére hagyni (feltételezve hogy lesz olyan pont amikor egy darabig nem lesz a várólistában semmi, akkor tökjó ha a legjobb post a legújabb).
Csak csendben elég brutál képessége lett az archívumnak. Mondjuk nem csoda, beletoltam pár nap fejlesztést. Gyakorlatilag akárhova lehet kattintgatni és mindenre jön elő értelmes kontent. Nincs üres oldal. És nem duplicate content, hanem szépen egy rakat redirekt/logika.
Miért: seo miatt. Brutális mennyiségű nemlétező (tartalomtalan) oldalt indexelnek a blogon. Ezt igyekeztem megszűntetni, megtartva az archívum elég combos funkcionalitását.
Fuh kiganéztam a linkbárt a kis kezemmel. Írtam ugyan egy toolt ami rendszeresen fel fogja annotálni a halottgyanús linkeket, de nem 100% megbízható h egy oldal vajon tényleg nem létezik-e. Unfortunately.
Mindegy, dobtam a lejárt linkeket, ez is rontotta a seo-t.
Ja így is maradhattak még, főleg azokat néztem meg amik halottgyanúsnak voltak jelölve
Ez a teljesen custom szűrhető archívum egy viszonylag bonyi de kurvajó feature.
Egész addig, amíg nem gondolsz bele, hogy a keresőbotok (hello SEO) mit kezdenek vele.
Szerencsétlen bot idejön, és azt találja, hogy millió féle archívum oldal elérhető, a fele duplicate kontent, a fele üres. Emberi user szerintem könnyen átlátja hogy mire érdemes szűkíteni, de a logból tűnt fel hogy értelmetlen oldalakat indexelnek ezerrel a botok. Ideiglenesen kikapcsoltam pár dolgot szegények miatt. Hamarosan érkezik egy jobb megoldás. (Amin még kénytelen vagyok gondolkodni előtte )
Lesz ma egy javascript conf, illetve 3 napos. Kíváncsi vagyok.
feb. 22. 13:12 hát, a day 1-2 nem mondhatnám h lekötött, a day 2-t már teljesen háttérben néztem, még ma benézek talán a day3-re, de sok elvárásom már nincs, valszeg fejleszteni fogok közben.
Muszáj vagyok tovább menni az automata refaktorálás "csapdáin".
Valamiért a PHPStorm is nagyon kínálgatja hogy egy függvényből való visszatérés előtt az utolsó változót inline-oljam, és a Rector is simán automatán kiirtja a fölöslegesnek vélt utolsó változókat return előtt, tehát:
$x = something(..);
return $x;
Helyett használjam ezt:
return something(...);
De vaffankúló (amúgy ezt nem szoktam használni, de ide illik), komolyan, miért?! Mi ez a trend? Rájöttünk ezer éve, hogy a függvénynevek és változónevek ugye milyen fontosak hogy jól legyenek elnevezve, erre jön valaki (egy egész trend), és azt mondja, hogy szerinte spóroljunk meg egy változónevet.
Ami azt jelenti, hogy elveszítesz egy tök fontos információt, hogy mi történt az utolsó lépésben.
Csak a példa kedvéért:
function foo($pattern) {
// ... some other logic here ...
return preg_replace('{^(([^.+*?\[^\]$(){}=!<>|:\\\\#-]+|\\\\[.+*?\[^\]$(){}=!<>|:#-])*).*}', '$1', $pattern);
}
A fenti kódot a Composer Autoloaderéből szedtem, szóval teljesen real world, és biztosan nem a saját hülyeségem (ott fel van kommentezve* amúgy, és nem ennyiből áll a függvény, de ettől még tök jó példa). Tegye fel a kezét, aki szerint tök fasza, ha nincs elnevezve, hogy mit is kapunk ebből a preg_replace-ből. :Đ
* arról nem is beszéltem h van aki szerint a kommentek is hülyeségek :D Egy időben amúgy totál ezt vallottam én is, most szopok rendesen ahogy refaktorálom a blogot :D Kommentezek "mindent". (És nem azért mert nem használtam jó változóneveket/függvényneveket.)
Most hogy csak egy példát mondjak a Rectorból, de eddig amúgy 6 konkrét rule-t tiltottam le belőle és 2 setet egyszerűen használhatatlannak ítéltem (a DEAD_CODE-ot és a CODE_QUALITY-t)
Legyen két példa:
settype($x["hello"], "string");
Szerinte lecserélhető erre (le is cseréli szorgalmasan):
$x["hello"] = (string)$x["hello"];
Ez tökjó de ugye undefined index error kapásból ha az adott index nem létezik, és azért idegesít ez engem, mert sztem tök nyilvánvaló, szóval nem értem hogy hogy hozhatnak létre ilyen rule-t.
Másik:
private static foo($unusedVariable) {
// some code that doesn't use $unusedVariable
}
Szerinte lecserélhető arra hogy
private static foo() {
// some code
}
Ezt bőszen meg is teszi. Oké. És mi van azokkal a függvényhívásokkal, amik átadják ezt a változót? Azokhoz nem nyúl hozzá. ¯_ (ツ) _ / ¯ Gyanítom akkor se, ha mondjuk nem az utolsó hanem egy közbülső unused variable-t töröl ki a függvény szignatúrájából. Ami ugye nyilvánvalóan konkrét bugot eredményez, hiszen elcsúszik a paraméterátadás.
Igazából végül annyi ilyen szart kellett letiltanom hogy nem maradt javaslata a kódra nézve Eh. Na majd futok vele talán még köröket.
Tegnap vettem egy új monitort másodlagosnak, aminek elég hosszú históriája van. Röviden, elpattant a régi 24-esem ami 1920x1200-as volt, lett helyette egy HP E24q G5 23,8" 6N4F1E9.
Elképesztően elégedett vagyok vele, gyönyörű képe van.
Egyébként React Native-vel szórakoztam ma egy kicsit.
Kellemes. Korábban Reactoztam (Reacteztem) már, úgyhogy ez a rész sok újdonságot nem hozott. A JSX-et asszem kifejezetten szeretem. Pár óra alatt sikerült összerakni egy gagyi kis mobil appot úgy, hogy korábban mobilfejlesztéssel viszont nem foglalkoztam (igazából elvből távol akartam tartani magam ettől a témától, mondván hogy úgyse lehet mindenhez érteni).
Na jó, hétvégén kipróbáltam az Android Studiót is Kotlinnal, 40 percben. Ott egy Hello Worldig jutottam, utána kilőtte a gépemet az ütemezett gépkilövő, amit múlt héten üzemeltem be újra az addikció uralása végett.
Mostanság eléggé rákattantam a fejlesztéssel kapcsolatos ismereteim aktív szélesítésére.
A többi képet is megpróbáltam átkonvertálni, 1-2 kivétellel 100%-os minőséget választva is komoly látványos veszteséget szenvedtek, úgyhogy javarészt meghagytam jpg/png-ben. De a logó mondjuk pont nem, big win.
Gallery got better a bit on mobile. Planning to improve further. It doesn't handle touch gestures yet. I start to feel like I should continue developing this site every year at least a bit. It's still fun as a hobby project.
Mint kiderült, többek között el volt törve a blogon a regisztráció. Oops.
Ciki vagy sem, ha esetleg akarsz regelni, most már tudsz. Azt hittem egy ideje senki se akar. Persze ettől még lehet h senki se akar.
Meg még egy pár egyéb dolog is el volt törve, javítás folyamatban...
Ps. A Playwright tests for the blog c. bejegyzéshez egy automata fazon kommentálgatja a git commitok szövegeit. Majd lehet h változtatok rajta, mert kicsit spam jellegű.
Na ha már törünk mindent, akkor legyenek end-to-end / UI tesztek. Az utóbbi években történt a szerveren egy PHP verziófrissítés, aminek a változásait csak ímmel-ámmal követtem le (nem volt fókuszban a blog, de ezt nyilván észlelték akik követnek valamennyire). Most ránéztem újra alaposabban a site-ra, mert növelni akartam kicsit a reszponzivitást, és rájöttem, hogy egy csomó feature el van törve, meg én is eltörtem ezt-azt miközben ezt lefejlesztettem. Meg arra is ráeszméltem így sok év szünet után, hogy atyaúristen mennyi minden funkciót csináltam itt Ami mókás és örömteli felismerés volt. Úgyhogy elkezdtem playwright teszteket írni. Még nincs sok, mivel tegnap álltam neki.
Egyelőre egy külön privát github repóba tettem, szépen CI-ban futtatva, kapok emailt ha hasal meg minden. Később valószínűleg jobb lenne beletenni a blog főrepójába.
Van pár known issue, és azokat már úgy akarom meghegeszteni, hogy teszt is legyen rá.
Hát, nemtom meddig lesz erre időm, de most épp van.
Amikor először hallottam a PUA táborról, nem igazán tudtam, mire számítsak. A kíváncsiságom azonban erősebb volt a kételyeimnél, így jelentkeztem, és elmentem a táborba, amely egy eldugott, festői szépségű helyen került megrendezésre. Most megosztom veletek az élményeimet, amelyek egyaránt voltak tanulságosak és meghökkentőek.
Az érkezés
Ahogy megérkeztem, azonnal észrevettem a különféle résztvevők sokszínűségét. Voltak itt fiatalok és idősebbek, introvertáltak és extrovertáltak, mindannyian egy közös céllal: fejleszteni a nőkkel való kommunikációjukat. A tábor szervezői barátságosan fogadtak, és gyorsan megtaláltam a helyemet a csoportban.
A tréningek
A napok intenzív tréningekkel teltek. Reggelente meditációval és légzési gyakorlatokkal kezdtük, amelyek célja az önbizalom növelése és a mentális fókusz erősítése volt. Ezt követték a szemináriumok, ahol különböző stratégiákat és technikákat tanultunk. Az egyik legemlékezetesebb előadás a testbeszédről szólt, amely rávilágított arra, hogy mennyire fontos a nonverbális kommunikáció az ismerkedés során.
A gyakorlati részek
Délutánonként gyakorlati feladatok következtek. Egyik nap például egy közeli városba mentünk, hogy a valós életben is kipróbálhassuk a tanultakat. Eleinte furcsa és kényelmetlen volt idegen nőkkel beszélgetést kezdeményezni, de a tréningek során szerzett önbizalom sokat segített. Az egyik tréner mindig a közelben volt, és szükség esetén tanácsokkal látott el minket.
Az esti programok
Esténként közös programokkal zártuk a napot. Ezek gyakran beszélgetésekből és tapasztalatcseréből álltak, ahol megosztottuk egymással az élményeinket és tanulságainkat. Ezek a beszélgetések különösen értékesek voltak, hiszen mindenki más szemszögből közelítette meg az ismerkedést, és sok hasznos ötletet merítettem a többiek tapasztalataiból.
Összegzés
A PUA tábor számomra nem csak egy intenzív tréning volt, hanem egy önismereti utazás is. Sok mindent tanultam az ismerkedésről és a kommunikációról, de talán ami a legfontosabb, az az önbizalom növelése és a saját korlátaim átlépése volt. Ha nyitott vagy az új élményekre és szeretnéd fejleszteni a szociális készségeidet, egy ilyen tábor remek lehetőség lehet számodra is.
Ezekkel az élményekkel gazdagodva hagytam el a tábort, és úgy érzem, sokkal magabiztosabb és felkészültebb vagyok a jövőbeli ismerkedési helyzetekre. A PUA tábor több volt, mint egy egyszerű tréning – egy életre szóló élményt nyújtott.
"Ha azt tapasztaljuk, hogy bunkó egy eladó, akkor fogjuk magunkat, és távozunk a boltból. Így egyrészt jobb lesz a hangulat az otthonunkban, mert csak olyan tárgyat viszünk be a lakásba, ami pozitív élményeket juttat eszünkbe, másrészt nem támogatjuk a kritikán aluli szereplők helyzetét a versenyszférában. "
Bérfejlesztést vállalunk egy kis csapattal. Ha kell neked szoftver, weblap, dobj rám egy üzit vagy hagyj egy kontaktot. PHP, Python, Nodejs, Angular 1-2-4, Scala, ilyesmi tech stack játszik. Meg persze db-ként mysql, mssql, oracle, mongodb. Vagy bármi egyéb. Érdeklődj itt, vagy a haszprus@gmail.com-on, vagy facebookon.
FUCKING PHPSTORM REFORMATTED array() to [] at commit time, which is not interpreted by the live - old php version - server. of course, my bad, btw. i just didn't notice this.
Mostanában elég sok időm van, és sokmindent egyszerűen nem csinálhatok, pl nem sportolhatok. Meg minden. Meg egyébként is újra php-zek (vagy hackezek, ld. hhvm*) backenden, úgyhogy ezen apropóból nekikezdtem egy ideje a blog modernizálásának, és tervezem hogy kisebb-nagyobb időszeleteket erre fogok allokálni. Igazából új feature-öket nem tudom mennyire várhatok, először szeretném a meglehetősen legacy kódbázist egy picit modernizálni. Nem egyszerű feladat egyébként, és felmerülhet a but why kérdés is. Hiszen pl nem több értelme lenne-e valami másik nyelven írni egy új motort, vagy valami egészen új dologba kezdeni. Igen, ezek a kérdések validak, a válaszom pedig az hogy most erre van lehetőségem így hosting terén, és egyébként sem akarom veszni hagyni a blogot. 2003 óta létezik, az annyit tesz hogy idén lesz 14 éves (nem semmi azért), és még él, lélegzik, és ezt meg is akarom tartani még egy darabig. Modernizációkra szükség van.
* HHVM is an open-source virtual machine designed for executing programs written in Hack and PHP. HHVM uses a just-in-time (JIT) compilation approach to achieve superior performance while maintaining the development flexibility that PHP provides. HHVM is developed by Facebook.
Úgyhogy ma:
Meghegesztettem a szóismétlésekre figyelmemet felhívó cuccot az admin felületen
Kiveszi a vízbűl bejegyzésből a szavakat és ha talál olyan címkéket a db-ben akkor ráaggatja őket
Ha a bejegyzés címe egy duplikátum lenne akkor hozzáhegeszt valami egyedi azonosítót hogy ne legyenek már duplikátumok (igen, a bejegyzéscím azért nem unique key a db-ben, nyilván, mert miért ne lehetne két bejegyzésnek az a címe hogy Sun is shining)
Egyéb refaktor dolgok
Egyébként elgondolkodtam persze azon is - már egy ideje - hogy nem kéne-e valami pluszmelóba tolnom a szabadidőmet, pénzért. Well, it can happen on some day, addig meg igazából ennek is van értelme. Például tök jól flowba kerülök tőle.
Nem tudom használ-e még valaki régi RSS url-eket a blogról (ahol a címekben nincs benne az rss mappa, vagy rss_* a feedek címe), mindenesetre kipurgáltam őket. Ha szeretnéd frissíteni a feedjeidet, a https://blog.haszprus.hu/rss/ címen megteheted. Az rss/bejegyzesek, rss/kommentek, meg ilyesmi című feedek működnek a továbbiakban. (Ezek a címek már évek óta léteznek, az ennél régebbi feedcímeket dobtam ki.)
Egyébként nekimentem a motorháztető alatt egy masszív takarításnak ill. újrastrukturálásnak.
Azért elég jófejek voltak velünk, jól éreztük magunkat.
Kérdeztük mit érdemes megnézni a városban, de a leggyakoribb válaszok a pub, kocsma és söröző voltak.
Ennek megfelelően alakult a hetünk.
Milyen Boston? Nos kisebb a különbség, mint gondoltam. Az épített dolgok nagyok, nagyok az épületek, nagyok az ajtók, szélesek a terek, alapvetően minden oversized.
A szállodai szobáink nagyon szépek voltak, ez elsőre nem tűnt fel, alapvetően mindenre rá kellett éreznem kicsit. Ahogy a cég kinti irodáját is elsőre a semmi különös kategóriába tettem, majd ahogy jártuk végig a szinteket, tereket, úgy derült ki hogy vannak nagyon kellemes meglepetések, és így utólag ha visszanézem a képeket, azért eléggé rendben vannak a dolgok.
Én a magam részérl egy dimenziónyi különbségre készültem, de visszafogottabb dolgokat találtam. Bár azt mondják a tapasztaltak, hogy Boston nagyon európai, és Amerika jellege más helyeken jön elő igazán. Majd igyekszem még menni erre-arra, merítettem egy kis erőt ebből a tripből, 2017-ben igyekszem többfelé utazni.
A cég. Adnak a terekre, hogy megtaláld magadnak azt a helyet ahol szívesen vagy. Mivel úgyis laptopod van, ezért dolgozhatsz akárhonnan. Szerintem nagyon rendben van.
Na az elmúlt 1 hétben kicsit vacakolt a blog, így lemaradtunk pár posztról, de remélem most már oké lesz. Hamarosan írok majd összefoglalót 2016-ról, meg terveket idénre, meg mindent.
hive: A Hive egy adattárház infrastruktúra Hadoop alapokon. A HiveQL egy SQL szerű absztrakciós réteg a Hadoop fölé. Eredetileg a fb fejlesztette. Az Apache csinált belőle egy forkot, az Apache Hive-ot.
sqoop
hadoop
pig
hdfs
flume
mapreduce
impala
solr
spark
sentry.
BigQuery
DataFlow
Google Pub/Sub
BigTable
ETL
Gobblin
Unified ingestion for hadoop
Kafka
Espresso Kafka
Samza
Presto
Scalding
WhereHows built by linkedin, where is the data and how did it get there.
A héten bejött hozzánk VDavid és megírtuk az első kis Angular 2 projektemet (TypeScriptben), persze csak kis kód, tutorial alapján, de nem is ez a lényeg, hanem hogy végre van egy Angular 2-es code base-em. Juhu!
Well, orulok ha elvezed. Nekem eletem legjobb valtasa volt. Bocsi nagyon elszoktam mar a levelezgetestol, vicces de ossze kell gyujteni az erot arra h egy egysorosnal hosszabb valamit irjak v olvassak. Penzben nekem szemely szerint jobb mint az epam, vez fejleszto poziban vok itt, amiota itt vagyok reszlegesen bevezetesre kerult a typescript, a jshint tslint, a scrum, heti sprintekkel (azon meg dolgozok h igyekezzunk realisabban tervezni oket), redminerol attertunk taigara, vettunk fel manual teszteloket, lettek processek, bevezettuk a feature brancheket frontenden is (eddig ment minden a masterbe), code review lett, amibol refaktoraltattam 10 controllert angularban es tovabbi 20 varat magara, vegigprobaltuk a protractort, a nightmare-t, es a nightwatchot, ezek end to end ui test frameworkok, vegul a nightwatchra esett a valasztasom es abban elkezdtem irni e2e teszteket (cucumbert szerettem volna eredetileg de vegulis ez lett), amiket az infras srac mar be is tett h fussanak automatikusan a dev szerveren commitra. Eleg porgos itt az elet. most epp itthon vok es tanulok a szombati vizsgamra. Van backendunk is python + mongoban, de arra egyelore keves ralatasom van. Majd idovel, egyelore orulok ha a rendszert megismerem. Ami a legjobb h a hangulat maximalisan jo es laza az epam utan. Amugy egy masik epamos csapatomban az is jo volt, a legutobbiban ez kevesbe sikerult, ahogy te is irtad kicsit kevesbe lazak az emberek ott. Az ot evvel ezelotti arcokkal viszont pont nemreg voltam sorozniz es azert remelem h a mostaniakkal is leszek meg vmikor.
We started to use Nightwatch js a few days ago and I'm totally satisfied with it, even if I have some smaller questions that need to be answered.
The progress is that I could easily create screenshots with it, it can run selenium automatically, the documentation has a clever way about how to create page object models, which are actually super lightweightly implemented in Nightwatch and they are very easy to use. The tests become easily clear and clean, I think they are very readable (I've seen some tests in the last few years so trust me on this one).
Nagyon érdekes megfigyeléseket tettem a projektünkön az API-val, a UI tesztjeinkkel kapcsolatban. Az API backendünk ugye Scala, találtam benne egy csomó refaktorálni való dolgot, Scalatrát használunk egyébként frameworkként, és természetesen nem mondhatom el a pontos refaktorálnivaló dolgot, de nagyon izginek ígérkezik, már elkezdtem dolgozni rajta illetve a többieket is bevontam, konzultáltam velük hogy szerintük miképp lehetne megoldani, hiszen én alapvetően eddig a UI-on tevékenykedtem, a Scalaban nem mélyültem el. Viszont most el akarok. Nem triviális a dolog, az ügyfél is kell hozzá egy kicsit, de bízom benne hogy tudunk alkotni valamit.
A másik rész ahol észrevettem dolgokat, azok a UI unit tesztjeink, úgy látom hogy ott is lenne mit megmódosítani, ez is izgalmasnak ígérkezik, vagy ha nem is izgalmasnak, de legalábbis nagy munkának.
Volt egy angular migráció is a hétvégén az amcsiknál, kíváncsian várom mit kapunk az új verziótól.
Itt megjegyezném hogy az angular 2.0 még sehol, de amúgy nagyon várom azt is, örülnék ha megjelenne, kíváncsi vagyok miket hoz magával, a már ismert részleteken kívül, a gyakorlatban is örömmel látnám.
A harmadik a Cucumber UI integration tesztek, na ezek végképp kívül esnek a hatókörömön, de lett a projekten egy új kollegina pár hónapja, aki nagyon jó észrevételeket tett, itt számos performance gaint könyvelhettünk el a tevékenysége során, és egy-két hiányosságra is fény derült a tesztlefedettséggel kapcsolatban.
Kezd sokkal izgalmasabbá válni ez a projekt, mint amilyen eddig volt, főleg hogy a csapatvezető 3,5 év után lekérte magát és helyette most új emberünk van. Van más új emberünk is, egész konkrétan két fejlesztő, akiknek az egyike ráadásul angol anyanyelvű, ami az angol jóval nagyobb fokú napközbeni folyamatos használatát követeli meg. Sokkal többet pair programmingolok az utóbbi időben, a projekten úgy általánosságban is megnőtt az együttműködés (pénteken négyen pörögtünk egy abszolúte brainfuck problémán és estére sikerült valamennyire megoldani legalább egy workarounddal, és kurva happy voltam). Úgy látom most mindenki bizonyítani akar, és megindult a projekten az eddigieknél egy jóval nagyobb mozgolódás, jobban élvezem mint eddig bármikor, és ennek nagyon örülök.
Hamarosan töltünk egymásról negyedéves értékeléseket, kíváncsian várom a feedbackeket a kollégáktól, és egyben örülök hogy én is írhatok, mert van mit.
Orca megkérdezte reggel hogy mizú, és egyszerűen fülig ért a szám miközben válaszoltam: minden cool, és most tényleg, minden cool A dolgok nagyon jó irányba haladnak.
Volt nálam egy kolléga meg én is voltam valakinél az utóbbi 1-2 hétben és egyszerűen maximálisan pörgök szakmai dolgokon, néztünk kódot, tanultunk dolgokat, kurvajó volt.
Itthon a whiteboardomra felraktam egy csomó taskot magamnak erre a hétre is és jövő hétre is, és egyszerűen öröm ránézni, egy csomó mindenhez van kedvem, tanulni, és alig várom azt is hogy dolgozhassak (tudniillik hétvége van, és bár beremote-oltam péntek este kivételesen, de a hétvége azért mégse munkára van ), az EPAM-os projekten is, meg más projekteken is. Terveim is vannak, mindenféle. Örülnék, ha a nap nem 24 órából állna, vagy ha a hét nem hét napból. Jóval több dolgot van kedvem csinálni, mint amennyire időm jut. Happy times
Ma este úgy érzem hogy újra beleestem a programozásba (Scala, Angular, JS, Django, PHP, so many tech stuff & so many possibilities)
Közben ez szólt és betoltam egy m&m's-es karamellás mcflurryt
Annyira kurvajó idő van... És az új monitoromnak olyan gyönyörű színei vannak. Ahh, istenem
Tervek vannak.
Holnap amúgy vizsgám van de ez annyival érdekesebb
Client-side JavaScript App built using AngularJS wrote in CoffeeScript, served from the Play 2 Framework and using document persistence with Reactive Mongo a non-blocking Scala client for MongoDB.
Úgy érzem, mintha a lehetőségeim végtelenek lennének
rengeteg interjú év elején, 8 helyről kaptam ajánlatot, 5 helyről itt Bp-n, 3 helyről külföldön, itt kiemelném hogy voltam Bécsben és Gibraltárban is ennek kapcsán (oda is, nagyon jó ajánlattal, ámde)
végül az EPAM-ot választottam itthon, számos okból
év eleje felé megpróbáltunk összehozni egy kis cégszerűséget (it was fun!)
kineveltem egy programozó-palántát
megkezdtem egy MBA képzést a BME-n (ez egy vezetői képzés, menedzsment, ha esetleg céget csinálnék valamikor, úgy gondolom jól jönne, illetve valszeg egy multinál is kamatoztatható, amilyen az EPAM is)
volt egy szakasz sok csajjal ki hosszabb, ki rövidebb ideig, természetesen továbbra is egy stabil kapcsolat esne a legjobban
nyugalom, stabilitás
voltam just for fun Lengyelországban és Barcelonában (hello Mf! )
rengeteget haverokkal, barátokkal, bulikban, sörözni, meg mindenfelé
kicsit előszedtem a fotózást mint hobbit
vettem egy mazda 6-ot, ami állat
fejlesztettem egy csomót hobbiból, just for fun, elkezdtem scalazni, de főleg angularozni, a blogra is készült pár új feature, mint pl. az istenes youlog (naptár és kiadás-nyilvántartó), amibe kb. fél éve egy csomó kis csinosítgatást teszek, habár nem a nagyközönségnek készül a cucc, de mégis élvezem fejleszteni
epamban elkezdtem interjúztatni
epamban megérett egy előléptetés
All of us were impressed with your skills and experience! Everything went excellent. After the session one guy from committee told: That’s a pity this guy is not in my team =)
Your subordinate Oliver shown impressive knowledge and experience. We are very happy to recommend him to D3 position.
Oliver did an excellent job during the interviews we had together. I think Oliver's soft skills are way above average and it is obvious he has significant tech interview experience, this showed through all the interviews. I was very glad to have him participate in our PHP interviews, I think his contribution raised the quality of these considerably.
egyéb fejlesztői projektek is voltak/vannak kapcsolatot szándékozom tartani a php világgal meg egyéb kihívásokkal
Ilyesmi. Hát ez így akár egész jónak is tűnhet. És remélem hogy 2015 még jobb lesz.
Ami még kéne: több idő. Még több idő. Korlátlan idő. 40 órás napok. Egyszerűen nem férek a napjaimba. Szeretnék a telekkel többet foglalkozni, megtanulni barkácsolni, építgetni, ilyesmi, rendbe rakni pár dolgot, fejleszteni a fizikai világban. Jó lenne ismét sportolni is, a tanulásra több időt szánni, tök jó lenne még többet programozni, még többet... többet mindenből.
Most épp vizsgaidőszak van mba-n, hát meg kell mondjam hogy rendesen szívás, itt helyt kell most állnom, és valami módon több szabadságot kell szereznem mert ez a meló + mba bedarál. A saját ütemezésemen változtatva is mondjuk sokat tudok itt nyerni egyébként, ezt be kell látnom hogy csinálhattam volna előrelátóbban.
Na, szóval a dolgok jó irányba mennek, így kell nyomni őket tovább.
Tegnap ötödölőzni akartunk, úgyhogy gyorsan le is programoztunk egyet angularban. (Meg lehet nézni! ) Asszem életem kb első játéka. A kódot senki ne nézze, csak gyorsan összedobtam a kiscsajnak egy játékot.
Kedd megnéztük a leendő autómat szervizben, körbevezettem Petyát az EPAM-ban
Szerda egy ajánlat, lefoglalóztam a leendő autómat, este Zolival sör
Csütörtök Márk Levi Black-cab hambi, írtam a PHPStorm Cookbook könyv első fejezetéről egy reviewt a kiadónak (tervezett megjelenés decemberben), este Orca Bea sör @ Shakesbeer, eredményhirdetés, felvettek MBA-re, utána még Grundon sör
Szombat sütögetés & sör @ Kismaros Dunapart, este bográcsozás & sör @ Molnár sziget, majdnem spontán lementünk a balcsira de végül csak csónakáztunk egyet a Dunán
Vasárnap Pas meet, PHPStorm Cookbook chapter 2 review, telek (Új bluetooth hangfalakkal )
Lecseréltem a version historyt a blogon, statikus html-ből egy angularos kis oldal lett, filterezési lehetőséggel.
Sokminden történik újabban, lehet hogy lenne érdemes írnom egy bejegyzést - ne adj isten cikksorozatot - a blogon történő újabb fejlesztésekről, az architektúráról, a fejlesztési módszerről. Nyilván aki nem hardcore törzsolvasó és pláne nem regisztrált user, vagy nem trusted, az ezeknek jórészéről lemarad egyébként, és valszeg kérdőjel rajzolódik ki a homlokára, hogy ugyan miről, de a helyzet az hogy a blog azért egy elég nagy cucc ahhoz képest hogy csak egy blog.
A Batarang nevű chrome extensionnel tudod debugolni és sebesség-optimalizálni az angularjs oldaladat. Sebesség-optimalizáció címszó alatt nagyjából hasonló feature-t kapsz mint amit php-ben az xhprof vagy xdebug adna, megláthatod hogy mely function hívásokkal telik el az oldalad legnagyobb időhányada. Állat.
Például a YOULOG-ban észrevehető volt már szemmel is, hogy beszaggatott, amikor begépelt valami keresőszót az ember. Nem tudtam igazából, hogy vajon melyik rész lehet a lassú, meg amúgy ez az első angular cuccom amit valaha írtam. Na nézzük Batarangben:
Mint látható, az oldalon töltött idő 66%-a, azaz 763 msec azzal telt, hogy a fejlesztes keresőszó begépelésének hatására lefutott ez a pár kis redundáns filter. Nosza optimalizáljunk valamit rajta:
Miután a userFilter futtatásának számát redukáltam 2-re, már csak 393 msec telik a filterrel, így az oldal 66%-a helyett már csak 44%-át töltjük itt, nyertünk közel 400 msecet (!!!!!), ami bőven érzékelhető is, mert ez a lag a gépeléskor a karakterek megjelenését is késleltette.
Emeletes csúcskirály!
Ps. a dolgot a userFilter memoizációjával tovább lehetne gyorsítani, nem beszélve arról ha minden adatműveletet átemelnék a controllerbe.
Két könyvet tudok most megemlíteni Angular JS témában, az egyik az O'Reilly féle 200 oldalas AngularJS címre hallgató. Ezt úgy gondolom hogy 200 oldalon át semmi olyat nem mond szinte amit 1-2 hét minimális gyakorlati kódbökdöséssel ne tudna meg az ember, ez ilyen dummies könyv, tényleg pár perc alatt átpörgethető és érzed hogy nem mond semmit. A másik a 600 oldalas ng-book Ari Lernertől, na ez faszának tűnik, és többek közt az optimalizációra is kitér, mégha 10 oldalnál nem is szán rá többet, de a memoizációt is innen szedtem egyébként, és ez látványosan egy mélyebb könyv.
Tegnap sorozes közben ahogy jöttek a kocka témák a build futasidejerol, kornyezetekrol, unit testekrol, azt vettem észre magamon hogy ismét kurvara érdekel ez az egész és ennek nagyon örülök alig várom hogy fel birjak kelni és folytathassam a saját kis blog projektemet
Na jó, az lesz, hogy összehozok egy local environmentet mégiscsak a blognak. Erre az alapkésztetés az, hogy nagyobb feature-ök lefejlesztésére nagyobb hajlandóságot éreznék, ha nem lenne folyton a nyakamban az, hogy elcseszek valamit productionben.
A második nagy késztetés, hogy előbb-utóbb portolni kell újabb php verzióra a blog motorját, és ez nem annyira frankó élőben.
Amúgy a dolog marha izgalmas, csomó deprecated dolog időközben kivezetésre került, úgyhogy jönnek a factoryk és a különféle elágazások környezet mentén.
Muy excitement, mucho power! Sose gondoltam volna, hogy egyszer lesz ez még ennyire izgalmas.
Most jöttem Open Academyről, ahol volt pár kurvajó előadás, mint pl. a legjobb nec előadása volt a ustreamtől a Javascript Module Serverről (javascript fájlok kiszolgálása dependencia gráfoknak megfelelően, csomagolva, de csak azt ami éppen kell még a kliensnek), illetve nem volt rossz a Functional Reactive Programming sem, amit egy prezis arc tartott, 40 percben leprogramozott egy kis animált Mario játékot. Nice.
Mint tudjuk régóta csinálok fancy naptárat magamnak arról, hogy miket csináltam. Most egyelőre az van hogy fel tudom címkézni a blogon a napjaimat faszán.
Aztán hosszú távon szeretném megcsinálni vele ugyanazt, amit most excelben tudok:
A cucc egyelőre a saját useremre van limitálva, de lehet hogy felkínálom még valakinek érdeklődés esetén.
Ami nagyon fontos, és ami a fő motiváció, hogy motiválni akarom magam, hogy csináljak dolgokat. Pl. kondizzak, fejlesszek, ilyesmi.
A háttérben meg mellesleg csináltam hozzá egy kis ActiveRecord implementációt szórakozásból.
/**
* Class Diary
* @property int id
* @property string date
*/
class Diary extends HfModel
{
protected $table = "hb_diary";
protected $fieldsPrefix = "d";
/**
* @var array
*/
public $fields = array(
"id",
"date",
);
?>
A fenti kód már önmagában validálja az id és a date mezőket, dob kivételt ha nem jók, stb. Nyilván a HfModelben van a lényeg, csak megmutattam hogy ilyen kis lightweight cuccka lett, a használata pedig:
Mai productivity eredmény: melóban egyértelműen jobban haladtam fb nélkül, itthon pedig leporoltam a januárban félbehagyott scala play blogengine projektemet (Elavultak a cuccok alatta, már nem fordult IntelliJ-ben (ez nem egészen tudom hogy hogy lehet, habár gondolom úgy, hogy a play konzol valamit update-elt magán, az IntelliJ meg nem követte), rendbe kellett rakni. Ráment kb. 2 óra, de megérte. )
A miranda ng-t pedig még tovább customizáltam, egész barátságos lett. (Atom minimál.)
23:02 Na még egy gyors bejegyzéslájkolós feature lefejlesztése belefért. 0.1-es verzió, egyelőre lehet lájkot leadni, és kiírja hogy hányan lájkolták eddig a bejegyzést. Oje! Majd lesz fullosabb később. (Ja és csak ha belépett user vagy.) Igen, igen, tudom hogy volt már hasonló, de ez kicsit másmilyen lesz, meg jobbabb is lesz.
Mai fejlesztéssel töltött idő itthon: 3-4 óra. Roxx! Istenem, végre.
(Mert persze be kellett tolni egyből egy új 0-ról írt frameworköt is az új feature alá, nem lehet csak úgy. Rég nyúltam a blog kódjához na, és már mások az elképzeléseim.)
Ja és itt kikúrt continuous delivery van ám, annyira hogy nincs localhoston meg sehol tesztszerverem, a blog úgy jó egyből ahogy megírom.
Machete dont text test.
Nem tesztelni kell, hanem jó kódot írni, basszátok meg.*
* A szerző a pókerarcos humor hazai élharcosa. Ismeri és gyakorolja a TDD-t, de ez itt most nem az a projekt, itt tényleg izgibb egyből productionön futó kódot írni. Ennek is megvan a szépsége, ha valaki nem hiszi, próbálja ki dev/test környezetek nélkül fejlesztenie az akármilyen rendszerét.
Egyelőre az van hogy van egy Scalás MVC keretrendszer feltéve, ő a Play ugye, és már tudok vele MySQL kapcsolatot létrehozni, adatokat lekérdezni, van szép layout, ilyesmi. Power Katt a képre.
Sose jártam nyelvi magántanárhoz, vagy nyelvtanfolyamra, de hosszú évek óta tervben van, hogy majd egyszer, és most végre létrejött, egy arccal beszélgettem Skype-on, aki NY-ban született, és jelenleg is Amerikában lakik, és kifejezetten foglalkozik ilyesmivel. Ennél bár nem tudok konkrétabbat, de a csávóval tényleg jól el lehet dumálgatni, javasol nyelvi fordulatokat stb, korrigál, én meg nagyjából pont ezt kerestem, illetve nem tudtam hogy mit keresek, de most ez tökéletes. Jepp. Amúgy szerintem fogok keresni még további arcokat, rá akarok feküdni önmagam képzésére keményen. Ma vettem két angol nyelvkönyvet is, Scalaztam is (Play frameworköt feltettem, mysql-hez kapcsolódtam, lekérdeztem, csináltam benne routolást, új controllert, új actionnel, új template-tel), eredményes napot tudhatok magam mögött. Valahogy így képzelem a közeljövőt is. Power
Mint azt egy korábbi bejegyzésben említettem, a tudásom valahol felsőfok környékén van egy szintmérő teszt szerint (melóhoz napi szinten kellett is beszélnem angolul), a célom nem az hogy megtanuljam a nyelvet, hanem hogy tovább finomítsam és tökéletesítsem. Régen kifejezetten informatikai angolt szerettem volna tanulni, mostanra úgy gondolom, hogy azzal semmiféle problémám nincs, úgyhogy inkább az általános angol felé fordult az érdeklődésem, informatikára gyakorlatilag elég nehéz találni bárkit is, mert aki tud fejleszteni az aligha angolórákkal fog foglalkozni. A fejlesztés jobban fizet.
Egyébként ami a nyelveket illeti, 3+4 évet tanultam németül, ezzel párhuzamosan 4 évet latinul, később 4 évet középhaladóval kezdve angolul és 4 évet spanyolul. Angolból eredetileg a felsőfokot szerettem volna kapásból letenni, de beparáztattak hogy ott atomerőművek belsejéről kell beszélni meg ilyenek, úgyhogy középfokkal megelégedtem 12. osztályban. Később belekóstoltam még a franciába mp3-ak formájában, de pár lecke után elmúlt az érdeklődésem. Néha gondolok rá, hogy a többi nyelvemet is fel kéne eleveníteni, mármint a németet és/vagy a spanyolt. Bár mivel ezeken a nyelveken nem jön szembe semmi (se meló, se film, se slágerek, se semmi), így ezek aktívan tartása elég nagy kihívás lehet mind időben, mind pénzben, ami erőforrásokat lehet hogy jobban megtérülő dolgokba is be lehet fektetni.
Csináltam egy új kis gyors-posztolási lehetőséget adminoknak - így magamnak is - a blogra, úgyhogy a továbbiakban előfordulhat hogy több kontent várható.
Amúgy kéne írnom egy überblog android appot, legalábbis az admin dolgoknak. Csak azért ennyire fb-központú vagyok, mert ott könnyebb megszerkeszteni a dolgokat. Mind mobilról, mind innen netről.
Mondjuk hozzáteszem, hogy nagyobb közönséget is érek el vele, legalábbis jelenleg. (Ha akarják, ha nem, ahah!)
Mindenesetre az Android app helyett most egyelőre elscalazgatok, azzal is elkezdtem játszani. Kellemes, szimpatikus.
I've released on github a simple contact management concept based on mongodb. The goal was to write as little code as possible and still give the user an amount of functionality.
Later I'll try to create a longer description about the project. Until then, if you are interested, please look at how lightweight the models and the controllers are, and still how much functionality they give to the user.
A TDD-ről (Test Driven Development) még a BME-n írtam Szoftverminőség és menedzsment tárgy kereteiben, és bár tetszett az ötlet, de nem igazán tudtam elképzelni öt éve, hogy hogy lehetne egy alkalmazást fullosan tesztelhetővé tenni, vagy úgy megírni.
2010-ben egy korábbi munkahelyemen, ahol azért elég pro arcokat válogattak össze, még mindig ott tartottunk, hogy invesztigálni kellene a TDD-t, hogy mire jutnánk vele.
2011-ben amikor a Sanoma Mediánál voltam a PPCS (Product Price Comparison System) / Olcsóbbat / Kirakat projekten, egy több hetes hibakeresésre sikerült pontot tenni azzal hogy - az amúgy korábbról teljesen teszteletlen kódhoz - felraktam egy PHPUnitot és írtam pár unit tesztet, egyből (egy napon belül) kibuktak a bugok. Ekkor kezdtem ténylegesen hinni a unit tesztelésben.
2012-ben alkalmam nyílt részt venni az Emarsysnál egy igen nagy folyamatos fejlesztő / refaktor projektben, ami teljesen megváltoztatta a Test Driven Developmentről kialakult képet a fejemben, mivel végre láttam hogy hogy is lehet ezt fulltime alkalmazni, hogy lehet valamit 100% TDD-vel megírni.
A módszernek láttam előnyeit és hátrányait, és biztos vagyok benne, hogy vannak helyzetek, amikor alkalmaznám. Alapvetően feladatfüggőnek gondolom. Ha sok pénz múlik azon, hogy a kiadott termék hibamentes legyen (pl. mert egy olyan piaci szegmensben játszol, ahol a bugok egyszerűen nem tolerálhatóak, a vevők odébb mennek), akkor mindenképp érdemes lehet használni.
This way you can set the window.location to your custom new url without reloading the page (or even without any communication with the server), but creating an entry in the browser's history (so the user can go back and forward between the saved states), and saving any custom state data as the first attribute of pushState().
With onpopstate you can catch the browser's navigation events and load the previously saved state to your page (eg. fill forms, request ajax page elements etc).
PHP 5.4 language features support
Code coverage for PHPUnit
Drupal coding style support
ECMAScript Harmony support
PHP code sniffer integration
New PHP code inspections
Smarter JavaScript completion
<?= is now always available, regardless of the short_open_tag php.ini option.
How hard they were fighting against short open tags… I think this is similar to HTML 5 where you don't have to close your tags despite the whole community was forcing strict XHTML for years because it's better.
Hétvégén alapoztunk, voltunk Morri Ligetben és Coronitában, hajnalban csatlakozott egy kedves régi ismerős is, közben befoglaltam megint a szekusok székét , hétfőn éjfélig dolgoztunk, este hívnak telefonon bocs dolgozom, írnak skype-on bocs dolgozom, taxi haza és még tovább, power, kedden pedig alvásmennyiség alapján kipihenetlenül, gyakorlatilag mégis úgy pörögve, mint még soha folytattam (boss meg is kérdezte, mit tolok). Vuttu-tuttu vuttu-tuttu. Red Bull Hell C Vitamin Béres csepp Ginseng ampulla kávé, szóval mindent, de ami leginkább pörget az az ha valamit lerakok és azt elismerik. (Másik boss másnap külön odajött mosolyogva gratulálni, apróság, de mégsem.) Nap végén hazaindulás előtti percekben beesik egy task amit csináljunk meg még ma, nyilván. Safranek, jöjjön közelebb... Itthon megnyitom a shellt, majd telefont emelek az ágyban hogy felhívjam akivel nem lehetek, helyben elalszom ruhában, égő lámpával, ahogy kell, de ezúttal legalább cipő nincs rajtam. Éjfélkor felébredek, kipihent vagyok, emaileket írok meg ticketeket kezelek 3 órán keresztül, elolvasom amire napközben nem volt időm, megírok pár irányelvet és kitűzök pár célt a karbantarthatóbb folyamatok érdekében, aztán ráébredek, hogy nem is tudok már aludni, no meg hogy hajnal 5 múlt.
Ami most jó:
Yves Larock - The Zoo (Muzzaik Remix)
Jó még:
Djuma Soundsystem - Les Djinns (Trentemoller remix)
SELECT webshop_id,
w.name,
w.hidden,
(SELECT count(*) FROM prices
WHERE webshop_id=w.webshop_id)
AS prices_count,
(SELECT count(*) FROM prices
WHERE webshop_id=w.webshop_id and deleted=1)
AS deleted_count,
(SELECT count(*) FROM prices
WHERE webshop_id=w.webshop_id and product_id>0
and skipped=0 and deleted=0)
AS paired_count,
(SELECT count(*) FROM prices
WHERE webshop_id=w.webshop_id and skipped=1 and deleted=0)
AS skipped_count,
(SELECT count(*) FROM prices
WHERE webshop_id=w.webshop_id and skipped=0
and product_id=0 and deleted=0)
AS waiting_count
FROM webshops w
WHERE w.book_shop = 0
HAVING prices_count>0
ORDER BY w.name
6 másodperces query:
SELECT w.webshop_id, w.name, w.hidden,
x.prices_count, x.deleted_count, x.paired_count,
x.skipped_count, x.waiting_count
FROM webshops w
JOIN (
select p.webshop_id,
count(*) AS prices_count,
sum(deleted)
AS deleted_count,
sum(if(product_id > 0 and skipped = 0 and deleted = 0, 1, 0))
AS paired_count,
sum(if(skipped = 1 and deleted = 0, 1,0))
AS skipped_count,
sum(if(skipped = 0 and product_id = 0 and deleted = 0, 1, 0))
AS waiting_count
from prices p
group BY webshop_id
HAVING prices_count > 0
ORDER BY webshop_id
) AS x
ON x.webshop_id = w.webshop_id
WHERE w.book_shop = 0
ORDER BY w.name
Note: ez a bejegyzés évekkel azután lett publikus hogy a rendszert lecserélték egy másikra.
Pár napja megbeszéltünk egy feladatot az Atyaúristennel és a juniorommal. Az atya elment szabira. A juniorom előadta a dolgot a technikai pm-nek, aki egy iszonyat optimizer csávó, komolyan fekete mágia amit sql query optimalizálásban lenyom, közölte, hogy ezt a dolgot nem lehet megoldani, mert van benne egy akkora descartes szorzat amit a világegyetem összes szerverével se fogunk tudni kiszolgálni. Persze égett a képem, de nem volt semmi az ügyből. Ma este ahogy hazamentek már a népek és csillapodott a nyüzsi a Sanomában, eszembe jutott egy remek ötlet amivel szerintem lineárisan halál lazán végigmászhatunk a db-n, baromira nem lesz descartes szorzat, kb. a tábla mérete lesz 2-vel szorozva a szükséges lépések száma, és annyira jó érzéssel jöttem el 19-kor (még maradtam volna, csak időre mentem), hogy ihaj. Remélem meg tudjuk oldani így.
Na ez például egy remek szakmai fejlődési program.
Igazából nem kéne meglepődnöm. Abban a szobában kb. 40 projektnek a fejlesztése zajlik, rengeteg külsős cégnek adnak ki megbízásokat a senior fejlesztőink. Csupa ilyen arccal vagyok körülvéve, juniorok nem nagyon dolgoznak a Sanomában, mert a legtöbb projektet kizárólag külső erőforrásokkal fejlesztik, plusz a hotfixeket belül, meg a deploy, üzemeltetés, ilyesmi. A lényeg hogy rengeteg tudás koncentrálódik körülöttem, és ha jól csinálom akkor rengeteget profitálhatok az itt eltöltött időből. Sajnos ebből a szobából hamarosan ki leszünk emelve egy kevésbé szakmai közegbe, de lobbizni fogok hogy tarthassam minél jobban a DPO-s kapcsolataimat.
Nu, Gábortól megint tanultam egy kis Zend Frameworköt, de igazából az eddigi rátekintéseim eddig mindig hiányérzettel zárultak, nem igazán érzem hogy ez miért jó, valahogy a Symfony úgy jobban egyben van…