============== Useless code ============== Generally I am happy with my work codebase: it is just a few KLOC, including inline documentation and comments, to work with a dozen of awkward specialised (and often unspecified) network protocols and file formats (using separate unixy programs for each), and with a few databases. This is after about 7 years of development, constantly trying to keep the bloat away, following the DRY principle, and with all that code currently being in Haskell. More than a year ago development of a new project started: a standalone version of a part of the system that is normally provided as a service. It didn't seem like much work at first: my regular programs are easily reusable, front end was outsourced to be made in JS, and I only had to prepare a database and a basic bridge between that database and HTTP. Access control was implemented using PostgreSQL row-level security policies, custom aggregate functions were used for data aggregation (the database is mostly for time series data), so the web back end was indeed supposed to be trivial. By now that bridge is about 40% of my whole codebase, even after refactoring with multiple attempts to get rid of the boilerplate, and while trying to keep the API simple and consistent. The code itself is also awkward, and keeps growing as new endpoints or their parameters get requested. I kept wondering what can be done about it, and tried to introduce restricted SQL queries, but that didn't take off, since most of the front end was implemented already. Recently I learned about PostgREST, which could have replaced most of the custom web back end, if not all of it, but now is not the time to change the API. Not that I am happy with this HTTP-based API business in general, and the front end in this case is semi-broken at this stage, but shall I have to do something similar in the future, most likely I will use either PostgREST or (restricted) SQL: mapping queries and structures between HTTP and SQL is pretty dull on its own, and can be quite a pain if you do custom mappings. That is one way to get a pile of useless code that should still be maintained. (Update: as described in latter posts, eventually I replaced most of the endpoints with PostgREST, and happy with it.) Phlog cleanup ============= Not quite related to the primary topic, but I decided to truncate the phlog directory; there is quite a lot of mostly useless information already, and I am trying to turn the relatively useful bits into properly organised notes on my web homepage, so keeping old posts seems to just clutter it. ---- :Date: 2018-12-26