Practical software engineering guides, including Lean and Agile principles and practices, with a focus on Clojure programming language and Clojure REPL driven development
{align=right loading=lazy style='width:240px'} I use Debian Linux as it provides a stable and low maintenance operating system, enabling me to focus on getting valuable tasks done. Package updates are well tested and the deb package management system avoid incompatible versions between dependent packages. The small amount of maintenance is done via the Advance Packaging Tool (Apt), which has a…
{align=right loading=lazy style='width:240px'} A blog website shouldnt need a complex content management system. A simple and lightweight static website generator can create engaging websites that are simple to manage with Git. Cryogen is a static site generator written in Clojure, allowing content to be written in either markdown or asciidoc. Posts and pages are configured with Clojure hash-maps…
Code that executes correctly and provides only limited value to the business can still be a huge maintenance burden. Code is very rarely written to include why is was added, what is the purpose of this code. Dismiss the value of adding documentation that describes the why of the code significantly increases the cost of maintaining and extending that code. Skipping documentation adds to the…
{align=right loading=lazy style='width:240px'} Templates are great way to learn how to assemble Clojure libraries into a working project and can save considerable time when creating new projects by providing common configuration, development tools, dependencies and code used by the engineering team. :fontawesome-brands-github: seancorfield/deps-new provides a simple to understand approach to…
{align=right loading=lazy style='width:240px'} Deployment of a Clojure service is very simple, requiring only an Uberjar (archive file containing the Clojure Project and Clojure run-time) and the Java Run-time Environment (JRE). A Clojure service rarely works in isolation and although many services are access via a network connection (defined in Environment Variables), provisioning containers to…
{align=right loading=lazy style='width:240px'} The London Clojurian community started in 2009 when Robert Rees tricked Bruce Durling into organsing monthly events. From those humble beginnings the community has grown close to 4,000 members with several monthly events taking place fairly consistently over the last 14 years (5 events in 1 month was the record). The community has thrived due to the…
{align=right loading=lazy style='width:240px'} Clojure development benefits from great tooling focused around an editor. Autocomplete, refactor tools, diagnostics feedback and syntax highlighting enhance the creation and modification of code. Evaluating in source code and using data inspectors for the results provides an effective interaction with the REPL. Practicalli encourages editors that…
{align=right loading=lazy style='width:240px'} Practicalli uses Cryogen static site generator for its blog website . Cryogen is fast and simple to use thanks to the Clojure EDN file used for configuration. Cryogen documentation shows how to publish a Cryogen blog to GitHub pages using Git command. The deployment can be automated using GitHub actions, so that a new version of the site is deployed…
{align=right loading=lazy style='width:240px'} The holiday season is know for over indulge, so why not stuff your head full of Clojure and functional programming. Its far healthier than the alternatives :) To help you indulge, Arne from LambdaIsland {target=_blank}, Bobby Towers {target=_blank}, Alexander Oloo {target=_blank} and I are writing a blog post each day as part of the Advent Of Parens…
{align=right loading=lazy style='width:240px'} The :globe_with_meridians: FreeDesktop.org XDG basedir standard {target=_blank} defines specific locations to store all user configuration, data files and caches. Without the XDG standard, these files and directories are often mixed together and stored in the $HOME of the users account, making it more challenging to backup or version control.…
{align=right loading=lazy style='width:240px'} :fontawesome-brands-github: Cognitect Labs AWS API {target=_blank} is an excellent data driven Clojure library for interacting with AWS from code. The project includes working code examples. The biggest challenge for those new to AWS is to configuring suitable AWS accounts, programmatic access and service permissions. This article starts with nothing…
{align=right loading=lazy style='width:240px'} Emacs 28.1 is a feature packed release and includes native compilation to significantly increase the speed of all Emacs software packages installed. This is a very noticeable difference, especially when Emacs is at the center of your developer workflow. Ubuntu hasn't packaged Emacs 28.1 yet, although its usually straight forward to build Emacs…
{align=right loading=lazy style='width:240px'} Emacs 29 is the current stable release, adding major features: Eglot LSP client, Tree-Sitter language parser and package.el package install from Git repositories. Building from source is a convenient way to try Emacs features in advance, especially useful for those maintaining or developing new tools on top of Emacs. ??? INFO 'Emacs 29 Features' Emacs…
{align=right loading=lazy style='width:240px'} Advent of Code is the annual coding challenge with a festive theme. Each day there is a new challenge in two parts, the first fairly easy the second a little more involved. The challenges are an investment of your time to complete them all, although even trying just a few is enough to help you think in different ways. Every programming language…
{align=right loading=lazy style='width:240px'} Docker enables a consistent approach to building and running Clojure projects along with a range of other services locally (database, cache, streams, etc.), The Clojure project is built from source when starting services (a watch feature can rebuild on code changes). Heath checks and conditions are set to ensure dependant services start in the correct…
{align=right loading=lazy style='width:240px'} Exposing a local running services can be valuable when writing apps and web-hooks for Cloud API products, e.g. Slack, Atlassian Confluence, Hasura, Salesforce, etc. ngrok exposes local networked services behinds NATs and firewalls to the public internet over a secure tunnel. Create a free ngrok account to get an authorisation token for use with the…
{align=right loading=lazy style='width:240px'} Git Commit Spoofing is where a person uses the Git identity of another person to modify commits pushed to GitHub, assuming they can obtain write permission to a branch or via a PR. Signing is especially useful for those contributing changes via a pull request. Signing provides greater confidence that the contribution is from a verifyable account.…
{align=right loading=lazy style='width:240px'} Emacs provides a huge amount of features via packages. Community configurations like Spacmacs orchestrate packages so they work seemlessly together. It is rare, but sometimes a package will have a breaking issue. Melpa provides (5,544) up-to-date packages automatically built from each projects Git repository. Builds are defined by a recipe for each…
{align=right loading=lazy style='width:240px'} Enlive {target=_blank} is a Clojure library that can be used for generating dynamic server-side content as well as scraping websites. Scraping websites is sometimes required when they do not provide an API. Although Hacker News does have an API, will show how to scrape its website using Enlive's selectors.