For years this blog ran on Bludit, a flat-file CMS written in PHP. It served me well: no database to manage, simple deployment, and a decent admin UI. However, my workflow has changed significantly over the last two years, and the time has come to move on.
I needed a stateless MCP server with dual-mode Excel file access: cell-level and SQL. Nothing quite fit my requirements. As I was forming the specification of what exactly I needed - the simplest path was to build one.
Mapu poštovních směrovacích čísel (PSČ) v České republice nelze jednoduše stáhnout. A platit v dnešní době paušální poplatky za něco, co pravděpodobně zvládnu automatizovat sám s trochou Vibe codingu, mi bylo nepříjemné. A tak vznikl tento jednodenní projekt.
We have recently encountered a creative way to hide exploits on WP sites by using plugins that provide custom PHP code snippets. This article should serve as a warning why such plugins are automatically a security risk and should be avoided on all Wordpress sites whenever possible.
Out of nowhere all of our Python projects that utilize selenium-wire suddenly stopped working when redeployed. It turns out that selenium-wire is no longer maintained as of January 2024 and the project depends on package blinker, specifically file blinker._saferef that is no longer available in latest blinker versions 1.8.0 and 1.8.1.
We have recently moved all Wordpress-based development in Triton IT to Bedrock by Roots.io. One of the perks of this system is the ability to manage all external code with PHP composer. What is the only caveat?
Dimension names are deceptive. Just because they have the same name both in GA4 and Ads, it does not mean they follow the same convention of data formatting. To blend successfully, you have to make sure both Dimensions have the same data format. Watch out for source data granularity.
There is an additional service named netplan.io that overrides it. If you get rid of it, systemd-networkd will function correctly, just as described in the documentation.
2023-09-08 UPDATE: It is no longer necessary to create custom Month of Year dimension. The new version of Google Data Studio (renamed to Looker Studio) now contains dimension called Year month. Additionally, my function is broken due to internal changes of Year dimension data formatting.
Recently, we’ve received a request from one of our clients to convert the built-in Description field from one of their taxonomies into a mandatory field. Sounds easy, right?
UPDATE: Some people have reached out to me that the guide does not work for them. I’ve decided to re-do the guide with a clean install of Debian 11 Bullseye (stable as of August 2021).
Rozhodl jsem se doma vybočit z cyklu vaření v karanténě. Už mi začaly docházet nápady, co dalšího si udělat a měli jsme chuť na něco, co jiné restaurace nerozváží. Oběd jsme si proto objednali z W Restaurant, což je nová restaurace v centru Prahy na Josefově.
S Novým rokem přichází také změna u nás ve WebMedea Services a Triton IT. Stěhujeme se z naší současné adresy ve Viktora Huga do větších prostor. Od ledna nás tak naleznete na Praze 1 v ulici Křemencova, hned vedle známé restaurace U Fleků.
The time has come for us in WebMedea to move away from the iptables firewall. While the software remains actively maintained by Netfilter, I’ve set my eyes upon the more recently developed nftables as it seems easier to administer and maintain rules. Nftables unifies all the separate utilities of arptables, ebtables, iptables and ip6tables into a single one. It has slightly different rule writing syntax, which can greatly shorten rules, but the principles of filtering practically remain the same.
Google poskytuje celou řadu online služeb, které mají svou vlastní správu uživatelů. Protože každá z těchto služeb také umožňuje, aby byl uživatel členem více účtů zároveň, je udržení plné kontroly nad oprávněními často až překvapivě časově náročná činnost, která při komunikaci s novými klienty může zabrat řádově i hodiny času.
Recent Debian (and Devuan) releases have disabled ssh and rsh protocols as possible transfer method of packages. The solution to permit them again is to re-enable them in apt configuration file.
Lukáš nám v Tritonu připravil checklist nejběžnějších chyb, které je překontrolovat před každým předáním nového webu. Protože se ale stále rozrůstáme a jednu větu v checklistu jde interpretovat různými způsoby, rozhodl jsem se vytvořit tento blogový zápisek, který to rozepisuje trochu podrobněji.
Aktualizace: Tento článek dnes již není zcela přesný. Důvodem jsou změny v propojení Facebook a Instagram účtů, zavedení prodeje produktů na Instagram a také plynulý přechod od rozhraní Facebook business na novou podobu Facebook business suite.
The problem
This has been bothering me for more than half of a year. You might be unable to automatically renew certificates if the following conditions are true:
You’re using the python-certbot-nginx plugin to install certificates and handle their renewal on your webserver.
You’re using different location for acme-challenge than the actual folder inside installation root - this is most likely if you’re using NGINX as a proxy for a different service.
S Facebookem obecně nerad sdílím jakékoliv informace v míře větší, než je minimum nutné pro fungování. Jednou z takových neposkytnutých informací bylo do nedávna moje telefonní číslo. Nicméně už objevili metodu, jak mě donutit prozradit jim ho:
Do WebMedea jsme letos zapojili nové datacentrum. Udržovat Cassandru synchronizovanou pro nás ale s jeho přidáním znamená lineární nárůst práce. Kontroly logů, zda některá tabulka či schéma neprošly opravou, už nejsou časově únosné. Opravy databáze jsme se proto rozhodli automatizovat. Při rešerši možných řešení Pepa objevil aplikaci Cassandra Reaper, jejíž popis nádherně plní všechny naše potřeby:
WebMedea již eviduje přes miliardu odkazů mezi weby. Tato data v naší Cassandra databázi zabírají již přes 110 GB. Společně s rostoucím množstvím dat jsme narazili na neustále se zvyšující vytížení RAM, CPU a diskové IO našich serverů právě od Cassandry. Její požadavky se zdá, že nejde ukojit. To nás přivedlo k zamyšlení se nad naším současným datovým modelem. Zhodnotili jsme, že nám nezbývá nic jiného než upravit způsob, jakým WebMedea ukládá odkazy mezi weby.
Bludit je super CMS systém pro blog, zápisník nebo i velmi jednoduché webové stránky. Nepotřebuje žádný databázový systém, vše ukládá do struktury textových souborů. Oslovil mě natolik, že jsem se stal sponzorem a vydávám pro něj sám grafickou šablonu, kterou jsem během pár posledních večerů opět aktualizoval. Ke stažení (a zkritizování) je dostupná (zatím ještě) na GitHub.
Protože jsem chtěl poznat Pražskou vinárnu Wine Bar i z druhé strany - jako zákazník, a porozumět tak více vínům, rozhodl jsem se navštívit degustaci vín, která se ve vinárně pravidelně koná.
Protože naše databáze se neustále rozšiřuje, a my k ní navíc přidáváme další funkce, museli jsme ve WebMedea Services rozšířit i náš hardware o další hlavní server. Server se bude starat o výpočty důležitosti domén na internetu a o aktuálnost odkazů mezi těmito doménami.
Do WebMedea nám už mnohokrát přišlo varování, že naše servery provádí něco podivného. V podobných případech se většinou ukáže, že si jen někdo špatně nastavil wildcard v robots.txt na doméně, a my pak vlezli někam, kde nás nechtěl. Jindy má oznamovatel příliš důvěřivě nastavený mail server, když mu pak přijde spam s falešnou doménou (naší) v odesílateli, jde nadávat nám místo spammerovi. Někdy zase uděláme chybu my a zkoušíme se na web podívat příliš rychle z více míst - to jsme pak obviněni z DDOS útoku.
Poslední dobou mě začal vadit CMS Nibbleblog běžící na mém blogu. Za asi největší nedostatek považuji neschopnost odebrat existující tagy. Jakmile tag jednou vytvoříte, už se ho nezbavíte a na blogu zůstane vidět, i když k němu nejsou přiřazeny žádné příspěvky. Protože jsem toho zatím až tak moc nenapsal, začal jsem hledat, jak by se dal Nibbleblog vylepšit nebo úplně nahradit.
Po zjištění z minulého dílu jsme se v Triton IT rozhodli nasadit vlastní mail server. Z běžně používaných řešení je ale pouze Microsoft Exchange Server dostupný jako kompetní balík všeho, co je potřeba. MS Exchange Server samozřejmě představuje nemalou investici a funguje jen na zařízeních s operačním systémem Windows Server. Vzhledem k našim požadavkům na nízkou cenu nezbývá, než ho přeskočit a podívat se na celé téma podrobněji.
Naše cesta k nasazení Cassandry byla poměrně rychlá: šli jsme rovnou do produkce a problémy se učili řešit až za běhu. Za rok, co ji provozujeme, jsme potkali už téměř všechny běžné scénáře:
Včera jsem navštívil veletrh For Arch. Moje první kroky vedly k velkému stánku našeho milovaného klienta. Opět jsem si s nimi příjemně popovídal, pořešil několik pracovních záležitostí a občerstvil se u jejich baru :)
Jako jedna z prvních věcí, které jsme řešili při zakládání Triton IT, byla schopnost odesílat a přijímat emaily na vlastních doménách. Malicherný problém, který lze většinou vyřešit v ceně domény nebo hostingu. U Tritonu se ale problém ukázal být mnohem větší. Naše definice pohodlného ovládání se také postupně vyvíjela, neboť že vám něco není pohodlné většinou zjistíte až po vyzkoušení. Po mnoha pokusech a změnách jsme zakotvili na následujících požadavcích:
Odladit produktový feed u zákazníka, který ho nasazuje poprvé, dá zabrat. Když je k nasazení změn nutno zákazníka pokaždé kontaktovat, nebo dokonce předat hlášení třetí straně, může se odladění feedu tak, aby ho Google Merchant Center přijal, natáhnout až na týdny. Vy ale potřebujete feed funkční ihned a produktovou kampaň spuštěnou ideálně včera.
Dynamický remarketing (DR) od Google vyžaduje, aby na e-shopu byl vložen kód obohacený o informace o právě prohlíženém produktu. Co ale dělat, když webmaster kód nenasadil a podle všech předpokladů v nejbližší době nenasadí? Vy ale potřebujete spustit kampaň co nejdříve. Pokud používáte Google Tag Manager (GTM), řešení existuje.