[{"data":1,"prerenderedAt":103},["ShallowReactive",2],{"posts:en":3},[4,17,31,42,52,61,72,83,91],{"path":5,"title":6,"description":7,"date":8,"image":9,"tags":10,"author":14,"draft":15,"series":16,"part":16},"\u002Fposts\u002Fcode_n_shit\u002Ffare_enough","I made a taxi meter for my iPhone. For fun.","Fare Enough turns an iPhone into a taxi meter: real city tariffs, a glowing old-school meter when you turn the phone on its side, and receipts that print on a pocket thermal printer. Here is what building it taught me about Skip, background location and Bluetooth printers.","2026-09-25","\u002Fimages\u002Ffare_enough\u002Fcover.jpg",[11,12,13],"code","swift","ios","slnt_opp",false,null,{"path":18,"title":19,"description":20,"date":21,"image":22,"tags":23,"author":14,"draft":15,"series":24,"part":27,"seriesPart":28},"\u002Fposts\u002Fcode_n_shit\u002Fcuando_vector","Fifty-eight megabytes","Eighteen months of drawing our map as pictures, and why Cuando is moving to vector: one 58.67 MB file instead of 15 GB per theme, a Flutter renderer that crashed, and three map engines behind one view in the new apps.","2026-08-15","\u002Fimages\u002Fcuando_vector\u002Fcover.jpg",[11,24,25,26],"cuando","maps","cloudflare","3",{"slug":24,"title":29,"path":30,"n":27},"Building Cuando","\u002Fseries\u002Fcuando",{"path":32,"title":33,"description":34,"date":35,"image":36,"tags":37,"author":14,"draft":15,"series":24,"part":40,"seriesPart":41},"\u002Fposts\u002Fcode_n_shit\u002Fcuando_valhalla","Every light was green","Today, bus routes in Cuando started coming from Valhalla, fed with a GTFS timetable we generate ourselves. We have been publishing it, or trying to, every weekday since March, and until today nothing asked it for a bus. How to make GTFS when nobody publishes one, and how Valhalla loses every bus while every check stays green.","2026-08-04","\u002Fimages\u002Fcuando_valhalla\u002Fcover.jpg",[11,24,38,39,26],"valhalla","gtfs","5",{"slug":24,"title":29,"path":30,"n":40},{"path":43,"title":44,"description":45,"date":46,"image":47,"tags":48,"author":14,"draft":15,"series":24,"part":50,"seriesPart":51},"\u002Fposts\u002Fcode_n_shit\u002Fcuando_routing_sql","The query that ate the database","For a year, route search in Cuando was one recursive SQL query. This autumn the app started calling it, and it started running out of memory. How route search in SQL works, why it blows up, and why, as of today, it runs in the Worker instead.","2025-12-04","\u002Fimages\u002Fcuando_routing_sql\u002Fcover.jpg",[11,24,49,26],"sqlite","4",{"slug":24,"title":29,"path":30,"n":50},{"path":53,"title":54,"description":55,"date":56,"image":57,"tags":58,"author":14,"draft":15,"series":24,"part":59,"seriesPart":60},"\u002Fposts\u002Fcode_n_shit\u002Fcuando_tiles","Paying per tile","Every map decision in Cuando so far followed from how the map was billed. Six months of Mapbox, one week of vector tiles, a heatmap that decides how far you may zoom in, and, as of this week, a map we draw ourselves.","2025-02-22","\u002Fimages\u002Fcuando_tiles\u002Fcover.jpg",[11,24,25,26],"2",{"slug":24,"title":29,"path":30,"n":59},{"path":62,"title":63,"description":64,"date":65,"image":66,"tags":67,"author":14,"draft":15,"series":24,"part":70,"seriesPart":71},"\u002Fposts\u002Fcode_n_shit\u002Fcuando_bus_app","We made a bus app for Torrevieja. It asks one question","Cuando is a bus app for Torrevieja, now on Google Play and the App Store. There was no data to start from, so we drew the network by hand: 163 stops, 16 lines, a stopwatch app and a lot of YAML. Here is how it works, and why a graph database lasted eight weeks.","2025-01-24","\u002Fimages\u002Fcuando_bus_app\u002Fcover.jpg",[11,24,68,69],"flutter","pocketbase","1",{"slug":24,"title":29,"path":30,"n":70},{"path":73,"title":74,"description":75,"date":76,"image":77,"tags":78,"author":14,"draft":15,"series":16,"part":16},"\u002Fposts\u002Fcode_n_shit\u002Flinguo_firebase","Duolingo-clone within 2 evenings via Firebase","Once upon a time i had an idea: make a database and authentication gateway - service, which would be accessible as API only, to make it possible to create dynamic web-apps without backend. This idea has been bought by Google, not from me ofcourse, cause i haven't done anything :). But let's talk about this another time, today let's try to get little but into Firebase and find out how to use it and should you use it.","2020-09-04","\u002Fimages\u002Fdeutsch_vue_firebase.png",[79,80,81,11,82],"blog","frameworks","services","vue",{"path":84,"title":85,"description":86,"date":87,"image":88,"tags":89,"author":16,"draft":15,"series":16,"part":16},"\u002Fposts\u002Fblog\u002Fraw_html","HUGO 0.60 Update bug","Just realized that my blog had no raw HTML last month.","2020-01-22","\u002Fimages\u002Frawhtml.png",[79,80,90],"hugo",{"path":92,"title":93,"description":94,"date":95,"image":96,"tags":97,"author":102,"draft":15,"series":16,"part":16},"\u002Fposts\u002Fuseful\u002Fukmail_n_dhl","UKMail and DHL","Hi Friend, maybe you found this, because fraud took a place and you can not cancel your shipment before it will reach the scammer. Or maybe you just trying to reach a human at UKMail. So, your luck, i've accidentally found a number: ​02477711904","2019-06-28","\u002Fimages\u002Fukmail_n_dhl.jpg",[98,99,100,101],"ukmail","dhl","fraud","contact","idiot",1790951509512]