Skip to content

Instantly share code, notes, and snippets.

View deejayy's full-sized avatar

deejayy (hu) deejayy

View GitHub Profile

.gitattributes

valahol/valami-falj.md filter=szuroneve

.git/config (persze lehet parancssorból is ezeket hozzáadni: git config --local filter.szuroneve.clean/smudge/required ...)

[filter "szuroneve"]
	clean = sed -E 's/mit csereljunk/mire csereljuk/ig'

TrackerControl – amikor végre látod, ki kukucskál a zsebedben

Az Android-felhasználók többsége ma már megszokta, hogy minden app valamilyen engedélyt kér: hely, mikrofon, értesítések, háttéradatok. Csakhogy ezek az engedélyek gyakran nem is az alkalmazás működéséhez kellenek, hanem a mögötte bujkáló harmadik feleknek – a trackereknek. A TrackerControl nevű app pont erre a problémára született: láthatóvá teszi, hogy kinek szivárognak az adataid.


Mire jó ez az egész?

A TrackerControl lényegében egy tűzfal, de nem a klasszikus értelemben. Ahelyett, hogy portokat vagy IP-címeket blokkolna, alkalmazás-szinten mutatja meg, melyik app milyen külső címekkel kommunikál – és miért. Azt is megmondja, hogy az adott kapcsolat reklám-, analitikai- vagy közösségi célú adatgyűjtéshez tartozik. Magyarán: kiderül, ha a kedvenc időjárás-alkalmazásod a fél marketingipart tájékoztatja arról, merre jársz éppen.

A hibrid munkavégzés rejtett nehézségei - és hogyan lehetne jobban csinálni

A pandémia után szinte mindenki újra kitalálta, mit is jelent "bent lenni". Az irodák megnyíltak, de a dolgozók nem ugyanúgy tértek vissza, mint ahogy elmentek. Az új egyensúly neve: hibrid működés. Papíron ez az arany középút - egyensúly a személyes jelenlét és az otthoni koncentráció között. A gyakorlatban viszont sok szervezetnél derült ki, hogy ez az "ideális közép" bizony nehezen működik, ha a kultúra, a kommunikáció és a vezetés nem fejlődik vele együtt.

Az információ csendben megoszlik

Egy csapatnál, ahol félig otthonról, félig irodából dolgoznak, az információ nem egyenletesen áramlik. Aki bent ül, az hallja a félmondatokat, látja a gesztusokat, megérzi a hangulatot. Aki otthon van, az ebből semmit.

A komplexitásnak legyen meg a helye

A szoftverben a "komplex" nem objektív szó. Mindig fel kell tenni: kinek komplex? A felhasználónak, az API-fogyasztónak, a karbantartónak, vagy a jövőbeli fejlesztőnek, aki fél év múlva először nyitja meg a repót?

Nem egyféle komplexitás létezik

Két fajtával élünk együtt:

  • Lényegi (essential): a domain hozza be. Adózási szabályok, üzleti logika, időzónák kezelése - nem tüntetheted el anélkül, hogy a lényeget is kidobnád. Itt a feladat: kerítsd körbe, legyen jól kijelölt helye és szűk interfésze.
  • Véletlen (accidental): amit mi termelünk. Előre gyártott absztrakciók, overengineered architektúra, "hátha kell" rétegek, fölöslegesen behúzott library-k. Ezt egyértelműen vissza kell vágni.

Reakció erre: https://medium.com/better-programming/data-engineering-is-not-software-engineering-af81eb8d3949

A data engineer is szoftvermérnök

Csak épp nem vallja be magának, hogy az.

Előrebocsátom: szeretem, amikor valaki megpróbál rendet vágni a szakmában, de a "data engineering nem software engineering" kijelentés annyira önellentmondásos, hogy az ember nem tudja, nevetni vagy jegyzetelni kezdjen. A data engineer kódot ír, tesztel, debugol, verziókezel, CI/CD-zik, logol, dokumentál és deployol - de nem szoftvermérnök? Persze. Mint amikor a pék azt mondja, ő nem süt kenyeret, csak lisztet formáz melegebb környezetben.

A "nem alkalmazás" érv

Küzdelem a Windows konzollal – avagy hogyan nem rajzolunk betűket 2025-ben

Amikor elkezdtem betűket és karaktereket kirakni a Windows konzolra, az volt a célom, hogy egy gyors, alacsony szintű „renderer”-t készítsek. Valami olyasmit, mint a régi DOS-os, karakteres felületű játékok vagy demók, csak modern megközelítéssel: Unicode, színek, akár 144 Hz fölötti frissítés. A konzolnak elvileg alkalmasnak kellene lennie erre – hiszen képes szöveget és színeket kezelni –, de a gyakorlatban kiderült, hogy a Windows konzol mélyen a múltban ragadt.

Először a klasszikus WriteConsoleOutputW API-t próbáltam, ami egy nagy sebességű, rácsos memóriaművelet: egyetlen hívással akár több ezer karaktert és színt is ki lehet írni. A teljesítmény kiváló volt, de gyorsan kiderült, hogy az API nem támogatja a modern Unicode-karaktereket, például az emojikat. A karakterrács ugyanis fixen egyetlen UTF-16 kódot tárol cellánként, így minden, ami surrogate-párt igényel, egyszerűen szétesik.

Ezután jött a WriteConsoleW, ami már

@deejayy
deejayy / adminnak-jelentkezok.txt
Created October 6, 2025 19:43
adminnak-jelentkezok
Anno 2014.
A C4nn0N szerverekre adminnak jelentkező játékosoknak egy kérdőívet kell kitölteniük, ami alapján elbírálom, hogy alkalmasnak tartom-e őket arra, hogy betöltsenek egy ilyen pozíciót.
A kérdések nagyon egyszerűek azoknak, akik komolyan veszik ezt, mégis többször van olyan, hogy fogalmatlan kezdők próbálnak szerencsét.
Az elkövetkező napokban 20 kérdésre adott válaszokat teszem közzé, nyilván név nélkül, mert megsérteni személyesen senkit nem akarok :)
Olyan gyöngyszemekre lehet számítani, akik szerint a WH "Egy helyben áll és közben megy és lő", vagy az FPS "a golyónak az erősége", a Rate pedig a "fényerő beállítása".
(a helyesírási hibák a jelentkezők művei, azoktól elhatárolódom :)
Íme az első 6 kérdés!
javascript:(() => { const ignoredWords = /Formula.?1|%C3%81zsia Expressz|Boyard|X-Faktor|Sztarbox|MotoGP|Sztarban.sztar|Megasztar|Kisertes|ValoVilag|Azsia.express|Az.arulok|orokosok|House.of.the.Dragon/i; const weigths = { xvid_hun: 500, xvid: 500, dvd_hun: 500, dvd: 500, dvd9_hun: 500, dvd9: 500, hd_hun: 500, hd: 500, xvidser_hun: 300, xvidser: 300, dvdser_hun: 300, dvdser: 300, hdser_hun: 300, hdser: 300, }; document.querySelectorAll('.box_torrent').forEach((box) => { box.removeAttribute('hidden'); const category = box.querySelector('.box_alap_img a').getAttribute('href').match(/tipus=(.*)?/)[1]; const title = box.querySelector('.torrent_txt a')?.getAttribute('title'); const popularity = box.querySelector('.box_d2').innerText.length; const uploadDate = box.querySelector('.box_feltoltve2').innerText; const seeders = parseInt(box.querySelector('.box_s2').innerText, 10) + Math.log2((new Date() - new Date(uploadDate).getTime
@deejayy
deejayy / fileContainsPhrase-stream.js
Created July 22, 2024 11:51
fileContainsPhrase-stream.js
const fs = require("fs");
console.log(Object.keys(process.memoryUsage()).join("\t"));
console.log(
Object.values(process.memoryUsage())
.map((value) => Math.round(value / 1e4) / 100)
.join("\t")
);
@deejayy
deejayy / howto.txt
Created November 17, 2022 23:24
Add exceptions to Windows firewall based on blocked connections
Get-EventLog -Log Security -Newest 100 -InstanceId 5152 -Message "*%%14593*" | Sort-Object -Property TimeGenerated | Select-Object -ExpandProperty Message | ? { $_ -notlike "*svchost*" } | % { $_ -split "\r\n" } | ? { $_ -like "*Application Name*" -or $_ -like "*Destination*" } | % { $_ -replace "\\device\\harddiskvolume.",":" }
$path = Read-Host 'Path: '
$appName = Read-Host 'App name: '
$date = Get-Date -Format "yyyy-MM-dd"
Write-Output "XX $appName / $date"
New-NetFirewallRule -DisplayName "XX $appName / $date" -Direction Outbound -Program $path -Action Allow