56,966 blogs · [ { "id": "01a0875c-c30c-7180-b13e-bf5ecf74835d", "title": "More Everything Forever vs The Master and His Emissary", "url": "https://carlo-hamalainen.net/2026/08/25/becker-vs-mcgilchrist/", "published_at": "2026-08-25T00:00:00+00:00" }, { "id": "01a0875c-c30c-7180-b13e-bf5ecf95f6bc", "title": "ghc-vis-ds, a modern port of ghc-vis with a Datastar frontend", "url": "https://carlo-hamalainen.net/2026/08/06/ghc-vis-ds/", "published_at": "2026-08-06T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151ccbc39b87", "title": "Go+Elm vs Datastar/Go", "url": "https://carlo-hamalainen.net/2026/06/16/go-elm-vs-datastar/", "published_at": "2026-06-16T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151ccbc5e457", "title": "sungrowd-go: bespoke battery management for the Sungrow SH5.0RS inverter", "url": "https://carlo-hamalainen.net/2026/06/12/sungrowd-go/", "published_at": "2026-06-12T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151ccbdf15b1", "title": "BFPG: DataStar, the Hypermedia Framework - Haskell SDK", "url": "https://carlo-hamalainen.net/2026/05/14/bfpg-datastar-haskell-sdk/", "published_at": "2026-05-14T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151ccc392fd6", "title": "Shared values in GHC", "url": "https://carlo-hamalainen.net/2025/10/20/shared-values-ghc/", "published_at": "2025-10-20T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cccb8578c", "title": "Performance Surprises", "url": "https://carlo-hamalainen.net/2025/05/23/performance-surprises/", "published_at": "2025-05-23T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151ccd3e7eb5", "title": "Outlandish Lamington", "url": "https://carlo-hamalainen.net/2025/05/05/outlandish-lamington/", "published_at": "2025-05-05T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cce13ed0c", "title": "DuckDB", "url": "https://carlo-hamalainen.net/2024/10/04/duckdb/", "published_at": "2024-10-04T11:17:59+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151ccec996a6", "title": "Caddy TLS Tailscale", "url": "https://carlo-hamalainen.net/2024/08/25/2024-08-25-caddy-tls-tailscale/", "published_at": "2024-08-25T00:16:02+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151ccf6a371f", "title": "Kubernetes TLS minimal configuration speedrun", "url": "https://carlo-hamalainen.net/2024/05/30/2024-05-30-kubernetes-tls-speedrun/", "published_at": "2024-05-30T02:06:56+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151ccf94ab9c", "title": "Jekyll to Hugo blog migration", "url": "https://carlo-hamalainen.net/2024/04/12/hugo/", "published_at": "2024-04-12T01:34:48+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cd0359a28", "title": "Grafana Heatmaps", "url": "https://carlo-hamalainen.net/2024/04/05/grafana-heatmaps/", "published_at": "2024-04-05T01:02:05+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cd1051477", "title": "Bits Between the Bits", "url": "https://carlo-hamalainen.net/2024/04/02/bits-between-the-bits/", "published_at": "2024-04-01T23:57:06+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cd18c8f74", "title": "How a Database Looks from a Disk’s Perspective", "url": "https://carlo-hamalainen.net/2024/03/31/database-from-disks-perspective/", "published_at": "2024-03-31T00:11:32+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cd23afe75", "title": "Autores de Hugo", "url": "https://carlo-hamalainen.net/autores/autores-de-hugo/", "published_at": "2023-01-05T00:15:52+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cd2b9671c", "title": "temas", "url": "https://carlo-hamalainen.net/categoria/temas/", "published_at": "2023-01-04T22:21:18+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cd3487350", "title": "sintaxe", "url": "https://carlo-hamalainen.net/categoria/sintaxe/", "published_at": "2023-01-04T22:21:06+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cd3d1d9a7", "title": "Códigos curtos", "url": "https://carlo-hamalainen.net/tags/shortcodes/_index.pt-br/", "published_at": "2023-01-04T10:51:36+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cd4b36730", "title": "Superset trie search", "url": "https://carlo-hamalainen.net/2021/07/17/superset-trie/", "published_at": "2021-07-17T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cd5870da6", "title": "Set AirPod volume on Linux", "url": "https://carlo-hamalainen.net/2021/05/20/airpods/", "published_at": "2021-05-20T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cd682288d", "title": "Fitting Schwalbe tyres to Bontrager Line 30 rims", "url": "https://carlo-hamalainen.net/2021/03/31/schwalbe/", "published_at": "2021-03-31T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cd6aeb7b9", "title": "Causal Profiling", "url": "https://carlo-hamalainen.net/2020/09/05/causal-profiling/", "published_at": "2020-09-05T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cd6b8c503", "title": "Unity3D setup on Debian 10 including Visual Studio Code Intellisense", "url": "https://carlo-hamalainen.net/2020/07/11/unity3d-setup-debian10-intellisense/", "published_at": "2020-07-11T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cd77e9232", "title": "Complex assignment in R", "url": "https://carlo-hamalainen.net/2020/06/14/complex-assignment-in-R/", "published_at": "2020-06-14T18:25:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cd7b8057a", "title": "PuTTY for netrw on Vim and Neovim on Windows 7", "url": "https://carlo-hamalainen.net/2020/04/25/vim-neovim/", "published_at": "2020-04-25T19:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cd7f853db", "title": "BeautifulSoup", "url": "https://carlo-hamalainen.net/2019/10/15/beautifulsoup/", "published_at": "2019-10-15T14:25:41+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cd819b51d", "title": "Knight on a chess board", "url": "https://carlo-hamalainen.net/2019/03/06/knight-on-a-chess-board/", "published_at": "2019-03-06T14:20:23+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cd828618a", "title": "Using Hypothesis to solve the farmer-chicken-fox puzzle", "url": "https://carlo-hamalainen.net/2019/02/10/using-hypothesis-to-solve-the-farmer-chicken-fox-puzzle/", "published_at": "2019-02-10T23:55:18+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cd8baaf19", "title": "An expression evaluator in CSV", "url": "https://carlo-hamalainen.net/2019/02/09/an-expression-evaluator-in-csv/", "published_at": "2019-02-09T12:44:45+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cd8c342a5", "title": "Optimising treehash calculations", "url": "https://carlo-hamalainen.net/2018/11/22/optimising-treehash-calculations/", "published_at": "2018-11-22T00:15:49+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cd8f2e1d9", "title": "webdl note to self", "url": "https://carlo-hamalainen.net/2018/09/24/webdl-note-to-self/", "published_at": "2018-09-24T02:52:06+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cd98473b2", "title": "Unbounded memory use with SciPy's hypergeom", "url": "https://carlo-hamalainen.net/2018/09/02/unbounded-memory-use-with-scipys-hypergeom/", "published_at": "2018-09-02T08:56:49+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cda3310ff", "title": "readFile :: String -> IO [Char]", "url": "https://carlo-hamalainen.net/2018/09/02/readfile-io-char/", "published_at": "2018-09-02T05:37:48+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cda8958d7", "title": "QuickCheck's CoArbitrary - generate random functions!", "url": "https://carlo-hamalainen.net/2018/01/30/quickchecks-coarbitrary-generate-random-functions/", "published_at": "2018-01-30T22:19:24+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cda8db161", "title": "Pricing an option on a cumulative sum.", "url": "https://carlo-hamalainen.net/2018/01/13/pricing-option-c3sum/", "published_at": "2018-01-13T01:37:39+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cdad1bfe3", "title": "Push to Amazon Glacier using amazonka", "url": "https://carlo-hamalainen.net/2017/08/31/push-to-amazon-glacier-using-amazonka/", "published_at": "2017-08-31T02:10:51+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cdb25cd83", "title": "FSA B3164 bottom bracket replacement", "url": "https://carlo-hamalainen.net/2017/08/22/fsa-b3164-bottom-bracket-replacement/", "published_at": "2017-08-22T03:44:16+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cdc0c892b", "title": "ghc-imported-from => ghc-mod (August 2017)", "url": "https://carlo-hamalainen.net/2017/08/17/ghc-imported-from-ghc-mod-august-2017/", "published_at": "2017-08-17T10:35:19+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cdca2300b", "title": "Ubuntu 17 -- device not managed", "url": "https://carlo-hamalainen.net/2017/08/17/ubuntu-17-device-not-managed/", "published_at": "2017-08-17T10:30:29+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cdd2c6469", "title": "Structured logging to AWS ElasticSearch", "url": "https://carlo-hamalainen.net/2017/08/09/881/", "published_at": "2017-08-09T03:21:53+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cdd3c89a0", "title": "Stripping html tags using TagSoup", "url": "https://carlo-hamalainen.net/2017/07/29/stripping-html-tags-using-tagsoup/", "published_at": "2017-07-29T09:32:47+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cddeb6012", "title": "Data.Proxy", "url": "https://carlo-hamalainen.net/2017/03/25/data-proxy/", "published_at": "2017-03-25T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cde388009", "title": "ghc-imported-from => ghc-mod (March 2017)", "url": "https://carlo-hamalainen.net/2017/03/19/ghc-imported-from-ghc-mod-march-2017/", "published_at": "2017-03-19T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cdede4a66", "title": "Raspbian with full disk encryption", "url": "https://carlo-hamalainen.net/2017/03/12/raspbian-with-full-disk-encryption/", "published_at": "2017-03-12T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cdf12b399", "title": "Foscam IP camera with Pi server", "url": "https://carlo-hamalainen.net/2016/12/31/foscam-ip-camera-with-pi-server/", "published_at": "2016-12-31T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cdf61db83", "title": "Subkeys in GPG for a YubiKey", "url": "https://carlo-hamalainen.net/2016/12/31/subkeys-in-gpg-for-a-yubikey/", "published_at": "2016-12-31T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cdfb2bc3a", "title": "Note on operational", "url": "https://carlo-hamalainen.net/2016/10/30/note-on-operational/", "published_at": "2016-10-30T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151ce00cd23a", "title": "Spectral graph partitioning in Haskell", "url": "https://carlo-hamalainen.net/2016/10/09/spectral-graph-partitioning-in-haskell/", "published_at": "2016-10-09T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151ce0daed6e", "title": "ghc-imported-from => ghc-mod", "url": "https://carlo-hamalainen.net/2016/09/25/ghc-imported-from-ghc-mod/", "published_at": "2016-09-25T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151ce0eac9b6", "title": "Reflex FRP gallery editor", "url": "https://carlo-hamalainen.net/2016/09/17/reflex-frp-gallery-editor/", "published_at": "2016-09-17T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151ce1308e72", "title": "Monadic Yesod form with ReCAPTCHA", "url": "https://carlo-hamalainen.net/2016/05/08/monadic-yesod-form-with-recaptcha/", "published_at": "2016-05-08T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151ce22efe02", "title": "Structured logging", "url": "https://carlo-hamalainen.net/2016/04/27/structured-logging/", "published_at": "2016-04-27T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151ce274610a", "title": "Zippers", "url": "https://carlo-hamalainen.net/2016/02/23/zippers/", "published_at": "2016-02-23T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151ce34d9196", "title": "MINC interfaces in Nipype", "url": "https://carlo-hamalainen.net/2016/01/16/minc-interfaces-in-nipype/", "published_at": "2016-01-16T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151ce3f6d3ac", "title": "Note to self: profunctors", "url": "https://carlo-hamalainen.net/2015/10/21/note-to-self-profunctors/", "published_at": "2015-10-21T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151ce45e7232", "title": "MVar note", "url": "https://carlo-hamalainen.net/2015/09/02/mvar-note/", "published_at": "2015-09-02T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151ce509b1b2", "title": "Yesod 1.1 to 1.4 notes", "url": "https://carlo-hamalainen.net/2015/08/16/yesod-1-1-to-1-4-notes/", "published_at": "2015-08-16T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151ce5c4faba", "title": "Yesod 1.4 cabal sandbox", "url": "https://carlo-hamalainen.net/2015/08/06/yesod-1-4-cabal-sandbox/", "published_at": "2015-08-06T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151ce6becd50", "title": "Bokeh slider for \"Phenology of two interdependent traits in migratory birds in response to climate change\"", "url": "https://carlo-hamalainen.net/2015/07/31/bokeh-slider-for-phenology-of-two-interdependent-traits-in-migratory-birds-in-response-to-climate-change/", "published_at": "2015-07-31T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151ce7b87638", "title": "Classy mtl", "url": "https://carlo-hamalainen.net/2015/07/20/classy-mtl/", "published_at": "2015-07-20T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151ce8194fe9", "title": "Lens Has/As for API changes", "url": "https://carlo-hamalainen.net/2015/06/30/lens-hasas-for-api-changes/", "published_at": "2015-06-30T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151ce8e7f86a", "title": "Update Github fork", "url": "https://carlo-hamalainen.net/2015/06/29/update-github-fork/", "published_at": "2015-06-29T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151ce997ad86", "title": "DCMTK: No presentation context for: (unknown SOP class) 1.3.12.2.1107.5.9.1", "url": "https://carlo-hamalainen.net/2015/06/03/dcmtk-no-presentation-context-for-unknown-sop-class-1-3-12-2-1107-5-9-1/", "published_at": "2015-06-03T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cea3547be", "title": "Note to self: exceptions in multithreaded Haskell", "url": "https://carlo-hamalainen.net/2015/05/25/note-to-self-exceptions-in-multithreaded-haskell/", "published_at": "2015-05-25T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cea510370", "title": "Note to self: parallel-io", "url": "https://carlo-hamalainen.net/2015/05/18/note-to-self-parallel-io/", "published_at": "2015-05-18T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cea6653e4", "title": "Heart MRI", "url": "https://carlo-hamalainen.net/2015/02/02/heart-mri/", "published_at": "2015-02-02T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151ceb0cef37", "title": "Nginx gateway time-out", "url": "https://carlo-hamalainen.net/2015/01/05/nginx-gateway-time-out/", "published_at": "2015-01-05T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cebd8887a", "title": "Circus problem", "url": "https://carlo-hamalainen.net/2015/01/04/circus-problem/", "published_at": "2015-01-04T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cec1fa576", "title": "Note on mapM", "url": "https://carlo-hamalainen.net/2014/10/01/note-on-mapm/", "published_at": "2014-10-01T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cec6c4e06", "title": "Free SSH daemon on Android", "url": "https://carlo-hamalainen.net/2014/09/14/free-ssh-daemon-on-android/", "published_at": "2014-09-14T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cecdf57de", "title": "Reading stdout and stderr of createProcess", "url": "https://carlo-hamalainen.net/2014/08/28/reading-stdout-and-stderr-of-createprocess/", "published_at": "2014-08-28T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151ced85f2d0", "title": "JWT verification using hs-jose and hs-jwt", "url": "https://carlo-hamalainen.net/2014/08/08/jwt-verification-using-hs-jose-and-hs-jwt/", "published_at": "2014-08-08T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cedf87c64", "title": "Haskell Yesod AAF Rapid Connect demo", "url": "https://carlo-hamalainen.net/2014/08/03/haskell-yesod-aaf-rapid-connect-demo/", "published_at": "2014-08-03T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cee7f06a4", "title": "Video: Jim Weirich: Adventures in Functional Programming", "url": "https://carlo-hamalainen.net/2014/06/17/video-jim-weirich-adventures-in-functional-programming/", "published_at": "2014-06-17T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151ceee7c74b", "title": "Notes on free monads", "url": "https://carlo-hamalainen.net/2014/06/07/notes-on-free-monads/", "published_at": "2014-06-07T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cefd77761", "title": "Microsoft \"blocked using Blocklist1\"", "url": "https://carlo-hamalainen.net/2014/05/26/microsoft-blocked-using-blocklist1/", "published_at": "2014-05-26T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cf03d54ec", "title": "Boy with cat 2", "url": "https://carlo-hamalainen.net/2014/05/07/boy-with-cat-2/", "published_at": "2014-05-07T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cf08eb673", "title": "Type-safe options in Idris", "url": "https://carlo-hamalainen.net/2014/05/06/type-safe-options-in-idris/", "published_at": "2014-05-06T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cf16af9c0", "title": "Defunctionalization", "url": "https://carlo-hamalainen.net/2014/04/24/defunctionalization/", "published_at": "2014-04-24T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cf1943bfa", "title": "FunctionalDependencies", "url": "https://carlo-hamalainen.net/2014/04/23/functionaldependencies/", "published_at": "2014-04-23T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cf2157ee2", "title": "Note to self: loeb and dynamic programming", "url": "https://carlo-hamalainen.net/2014/03/27/note-to-self-loeb-and-dynamic-programming/", "published_at": "2014-03-27T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cf2cafcb3", "title": "Fix crackling audio in Skype on Debian Jessie", "url": "https://carlo-hamalainen.net/2014/03/26/fix-crackling-audio-in-skype-on-debian-jessie/", "published_at": "2014-03-26T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cf2d4d796", "title": "Note to self: ffmpeg low quality.", "url": "https://carlo-hamalainen.net/2014/03/16/note-to-self-ffmpeg-low-quality/", "published_at": "2014-03-16T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cf2eac770", "title": "Note to self: reader monad transformer", "url": "https://carlo-hamalainen.net/2014/03/05/note-to-self-reader-monad-transformer/", "published_at": "2014-03-05T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cf37e0e57", "title": "Cabal hell workaround", "url": "https://carlo-hamalainen.net/2014/03/03/cabal-hell-workaround/", "published_at": "2014-03-03T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cf421db41", "title": "ipywidgets demo", "url": "https://carlo-hamalainen.net/2014/02/28/ipywidgets-demo/", "published_at": "2014-02-28T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cf4c1585d", "title": "volgenmodel-nipype v1.0", "url": "https://carlo-hamalainen.net/2014/02/26/volgenmodel-nipype-v1-0/", "published_at": "2014-02-26T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cf5141720", "title": "Improving the Haskell toolchain: jump to haddock", "url": "https://carlo-hamalainen.net/2014/01/09/improving-the-haskell-toolchain-jump-to-haddock/", "published_at": "2014-01-09T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cf5e31cc8", "title": "Applicatives compose, monads do not", "url": "https://carlo-hamalainen.net/2014/01/02/applicatives-compose-monads-do-not/", "published_at": "2014-01-02T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cf6e1bede", "title": "note to self: löb and möb", "url": "https://carlo-hamalainen.net/2013/11/28/note-to-self-lob-and-mob/", "published_at": "2013-11-28T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cf743c7db", "title": "Tic-tac-toe and Haskell type classes", "url": "https://carlo-hamalainen.net/2013/11/13/tic-tac-toe-and-haskell-type-classes/", "published_at": "2013-11-13T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cf78e40a0", "title": "Debian Wheezy on X1 Carbon", "url": "https://carlo-hamalainen.net/2013/11/02/debian-wheezy-on-x1-carbon/", "published_at": "2013-11-02T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cf88b5221", "title": "Cheap standing desk", "url": "https://carlo-hamalainen.net/2013/10/17/cheap-standing-desk/", "published_at": "2013-10-17T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cf893fa4d", "title": "Compiling pyinterval on Debian Wheezy", "url": "https://carlo-hamalainen.net/2013/09/26/compiling-pyinterval-on-debian-wheezy/", "published_at": "2013-09-26T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cf95edb4a", "title": "Disable X1 Carbon touchscreen", "url": "https://carlo-hamalainen.net/2013/09/25/disable-x1-carbon-touchscreen/", "published_at": "2013-09-25T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cfa2988a4", "title": "Strip Android Kindle DRM", "url": "https://carlo-hamalainen.net/2013/09/07/strip-android-kindle-drm/", "published_at": "2013-09-07T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cfa46c802", "title": "Access to water is a human right?", "url": "https://carlo-hamalainen.net/2013/09/05/access-to-water-is-a-human-right/", "published_at": "2013-09-05T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cfae5c2a9", "title": "Social feature creep", "url": "https://carlo-hamalainen.net/2013/08/20/social-feature-creep/", "published_at": "2013-08-20T00:00:00+00:00" }, { "id": "01a0875c-c30d-726c-b3cd-151cfb8d90f9", "title": "New Yesod blog", "url": "https://carlo-hamalainen.net/2013/08/08/new-yesod-blog/", "published_at": "2013-08-08T00:00:00+00:00" } ] posts Claim your blog
Back to carlo-hamalainen.net
Blog · corpus.blog/blogs/carlo-hamalainen.net/posts

carlo-hamalainen.net

carlo-hamalainen.net

2026

2025

2024

2023

2021

2020

2019

2018

2017

2016

2015

2014

2013