This repository was archived by the owner on Jun 2, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfeed.xml
More file actions
2 lines (2 loc) · 46.9 KB
/
feed.xml
File metadata and controls
2 lines (2 loc) · 46.9 KB
1
2
<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><atom:link href="http://practical.li/" rel="self" type="application/rss+xml"/><title>Practicalli</title><link>http://practical.li/</link><description>Discovering the fun in Functional Programming with Clojure</description><lastBuildDate>Mon, 20 Nov 2023 23:37:11 +0000</lastBuildDate><generator>clj-rss</generator><item><guid>http://practical.li/blog-staging/posts/practicalli-clojure-in-2024/</guid><link>http://practical.li/blog-staging/posts/practicalli-clojure-in-2024/</link><title>Practicalli plans for 2024</title><description>I'm seeking feedback work by Practicalli that would be considered valuable to the Clojure community in 2024Most Practicalli work is created from my own commercial experiences with Clojure. I also include aspects I've learned for my own interest and to answer some questions posed by the community (e.g. Slack, Clojureverse, etc.)Practicalli GitHub project visualises current work progress and lists many ideas for more work to come. Please comment on specific tickets, raise new ones or chat to me on #practicalli channel of Clojurians Slack Community.</description><pubDate>Fri, 17 Nov 2023 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/expose-local-clojure-service-with-ngrok/</guid><link>http://practical.li/blog-staging/posts/expose-local-clojure-service-with-ngrok/</link><title>Expose Clojure Service using Ngrok</title><description>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 ngrok agent to create a secure tunnel. Or add an SSH public key to use SSH reverse tunnel with the ngrok service.</description><pubDate>Thu, 24 Aug 2023 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/pin-emacs-package-to-manage-issues/</guid><link>http://practical.li/blog-staging/posts/pin-emacs-package-to-manage-issues/</link><title>Pin Emacs packages to manage issues</title><description>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 package.A custom recipe can be used to control which version of a package is used with the Emacs configuration, to work around issues or changes to a package.</description><pubDate>Tue, 15 Aug 2023 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/access-aws-with-clojure-from-scratch/</guid><link>http://practical.li/blog-staging/posts/access-aws-with-clojure-from-scratch/</link><title>Accessing AWS with Clojure from scratch - simple approach</title><description>Cognitect Labs AWS API is an excellent data driven Clojure library for interacting with AWS from code. Essentially a client for an AWS Service is created which operations are invoked. The project includes working code examples (once a working AWS account is configured).The hardest is configuring suitable AWS accounts, programmatic access and service permissions, especially when new to AWS. This article starts with nothing and steps through the simplest and quickest AWS account and permission setup, using the "AWS Free Tier". Note: every service has quota limits and some services are only free for a period of time (free trials & 12 months free).The approach outlined is not intended for commercial work, only the bare essentials to start exploring what is possible with the Cognitect Labs library. (Or you could try out LocalStack if you have docker installed locally).</description><pubDate>Wed, 17 May 2023 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/docker-desktop-on-ubuntu-linux/</guid><link>http://practical.li/blog-staging/posts/docker-desktop-on-ubuntu-linux/</link><title>Docker Desktop on Ubuntu Linux</title><description>Docker can support local development and provide an effective workflow for system integration before changes are pushed to a remote continuous integration service. Docker can be used to spin up local databases and persist data in a volume, helping keep a separation between applications and supporting test of schema changes, migrations and data loading.Docker desktop simplifies the install and provides a desktop client to manage docker images, containers, volumes and the new dev environments. Extensions Marketplace for Docker Desktop provides tooling to unify logging, manage local resources and many moreThe Docker install instructions are more of a reference of information than a simple tutorial. Essential Docker Community Edition is installed via the Docker package archive and Docker Desktop is installed from a manually downloaded DEB file.</description><pubDate>Mon, 15 May 2023 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/docker-a-simple-workflow-for-clojure/</guid><link>http://practical.li/blog-staging/posts/docker-a-simple-workflow-for-clojure/</link><title>Docker: a simple workflow for Clojure</title><description>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 order.Running Docker is relatively fast once image overlays (layers) are cached on their first run, so its a viable approach for local system integration testing and acceptance testing, before pushing changes to a remote Continuous Integration service.A Docker workflow complements a REPL Driven Development workflow, it does not replace it. The main development effort should be more effective via a REPL connected editor with Docker Compose focused on orchestration of services.</description><pubDate>Mon, 15 May 2023 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/docker-compose-for-clojure-development/</guid><link>http://practical.li/blog-staging/posts/docker-compose-for-clojure-development/</link><title>Docker Compose for Clojure Development</title><description>Docker Compose provides a declarative configuration for orchestrating services locally, providing a simple way to spin up services to try them out or orchestrate a whole system from numerous dependent services.Compose can build images for Clojure projects and conditionally run based on the health check of other supporting services, e.g. Postgres Database.Now that Compose is part of docker, more features such as build on change are being added.</description><pubDate>Sun, 07 May 2023 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/practicalli-plans-2023/</guid><link>http://practical.li/blog-staging/posts/practicalli-plans-2023/</link><title>Practicalli future plans</title><description>The plan of work for Practicalli during 2023 focuses on improving the developer experience for Clojure curious and experienced developers alike. A slow start to the year has changed into very good pace, especially after updating the tooling and theme for all the Practicalli books. My health is much improved and motivation is very high (although still working on my fitness).New work will follow the Practicalli REPL Reloaded workflow and will include videos showing how I work, based on my commercial experiences with Clojure. I am also keen to start a regular live broadcast of Hacking Clojure, these will be live and unscripted, allowing for an experimental experience and an opportunity to understand what information would be useful to create in the more polished Practicalli books and videos.UPDATE: Practicalli was not selected for Clojurists Together for funding this time around, so the planned work will take more time as I look for commercial work.</description><pubDate>Mon, 24 Apr 2023 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/create-deps-new-template-for-clojure-cli-projects/</guid><link>http://practical.li/blog-staging/posts/create-deps-new-template-for-clojure-cli-projects/</link><title>Create deps-new templates for Clojure CLI projects</title><description>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.seancorfield/deps-new provides a simple to understand approach to defining templates. Declarative rules express how file templates are copied to create a new project. Substitution values are passed to {{unique-key}} placeholders in template files creating a specific project each time. Programmatic transformation is also supported for significant customisation, e.g. adding options to templates.practicalli/project-templates is a new project to provide comprehensive templates to support production level workflows, including Dockerfile configuration, GitHub continuous integration workflows, etc . Read on to see how the first template was built and learn tips to building your own templates.</description><pubDate>Thu, 30 Mar 2023 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/build-emacs-from-source-on-ubuntu-linux/</guid><link>http://practical.li/blog-staging/posts/build-emacs-from-source-on-ubuntu-linux/</link><title>Build Emacs from source on Ubuntu Linux</title><description>Emacs 29 will be the next stable release later in 2023 adding major features: Eglot LSP client, Tree-Sitter language parser and package.el package install from Git repositories. more features to enhance and improved every day use of Emacs.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.Emacs 29 - what to expect - a brief summary of the major features</description><pubDate>Sat, 11 Mar 2023 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/london-clojurians-community-a-brief-history/</guid><link>http://practical.li/blog-staging/posts/london-clojurians-community-a-brief-history/</link><title>London Clojurians Community - a relatively brief history</title><description>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 hard work of a great many people and this article probably misses out on a lot of activities (especially in the early years). I would like to thank everyone involved in organising events, hosting events and attending events. Without you there would not be a community.I steped down as one of the main organisers having delegated all of the work to many other people. The last decade of community work has been very rewarding, but its time for other to continue the work. I now focus on the Practicalli websites for learning and using Clojure effectively.</description><pubDate>Fri, 10 Mar 2023 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/build-and-run-clojure-with-multistage-dockerfile/</guid><link>http://practical.li/blog-staging/posts/build-and-run-clojure-with-multistage-dockerfile/</link><title>Build and run Clojure with Multi-stage Dockerfile</title><description>Deployment of Clojure is very simple, only an Uberjar archive file (Clojure Project and Clojure run-time) and the Java Run-time Environment (JRE) are required.A Clojure service rarely works in isolation and although many services are access via a network connection (defined in Environment Variables), provisioning containers to build and run Clojure along with any other services can be valuable as complexity of the architecture grows.A Multi-stage Dockerfile is an effective way to build and run Clojure projects in continuous integration pipelines and during local development where multiple services are required for testing.</description><pubDate>Sun, 30 Oct 2022 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/make-clojure-tasks-simple-and-consistent/</guid><link>http://practical.li/blog-staging/posts/make-clojure-tasks-simple-and-consistent/</link><title>Make Clojure development tasks simple and consistent</title><description>GNU Make provide a simple and consistent way to run any development task for Clojure & ClojureScript projects (or any other languages).Wrap any combination of tools (building, linting, formatting, testing) with make targets for a simple command line interface, with automatically tab completion, making any Clojure project really easy to work with. Practicalli also uses make to manage docker images and containers to support Clojure development.All that is required is a Makefile in the root of the project</description><pubDate>Sun, 23 Oct 2022 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/clojurescript-workflow-with-clojure-cli-tools-and-figwheel-main/</guid><link>http://practical.li/blog-staging/posts/clojurescript-workflow-with-clojure-cli-tools-and-figwheel-main/</link><title>ClojureScript workflow with Clojure CLI tools and Figwheel-main</title><description>Getting started with ClojureScript development by creating a new project, using Figwheel-main build tool and Rebel rich terminal UI.The figwheel-main template creates a project with Clojure CLI configuration, providing example code and build configurations for development, testing and deployment workflows which are explored in some detail.Updated from an article first written in 2019 and originally covered in Practicalli Clojure study group #38 video</description><pubDate>Thu, 04 Aug 2022 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/build-emacs-28-on-ubuntu/</guid><link>http://practical.li/blog-staging/posts/build-emacs-28-on-ubuntu/</link><title>Building Emacs 28 on Ubuntu Linux</title><description>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 yourself.</description><pubDate>Mon, 16 May 2022 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/adopt-FreeDesktop.org-XDG-standard-for-configuration-files/</guid><link>http://practical.li/blog-staging/posts/adopt-FreeDesktop.org-XDG-standard-for-configuration-files/</link><title>Adopting FreeDesktop.org XDG standard for development tools</title><description>Managing your personal configuration for development tools and applications is much more effective when adopting the XDG basedir standard, which defines separate locations to store user configurations, 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.Development tools such as NeoVim, Emacs, Clojure CLI and Clojure LSP support the XDG specification, although some tools like Leiningen required a little help. There are simple approaches to work-around the limitations of tools that don't conform.</description><pubDate>Mon, 16 May 2022 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/practicalli-plans-for-spring-2022/</guid><link>http://practical.li/blog-staging/posts/practicalli-plans-for-spring-2022/</link><title>Practicalli content plans for Spring 2022</title><description>Much more content is coming in the Spring of 2022, thanks to Clojurists Together funding. To ensure the most useful content is provides, Practicalli would value feedback on the planned topics.The submitted plan to Clojurists Together is to extend existing guides and code examples, as well as adding new content to the existing Practicalli books. Additional video content will be added across the Practicall Books, updating existing video content where it has become dated.Due to continued Covid symptoms, work is being done over 2022 and 2023 as health conditions allow</description><pubDate>Fri, 18 Feb 2022 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/java-17-lts-for-clojure-development/</guid><link>http://practical.li/blog-staging/posts/java-17-lts-for-clojure-development/</link><title>Java 17 JDK for Clojure development</title><description>Java JDK 17 is the latest Long Term Support version and ideally should be the default JVM for developing and deploying new Clojure projects (and existing projects after testing). There should be little risk upgrading, especially from Java 11 onward. The 17.0.2 version has just been release, so has been tested by many development teams already.Although the language features are of less interest, the security and performance improvements over the last 3 years (since Java 11) or 6 years (since Java 8) are valuable to Clojure development.Oracle JDK 17 is free again for use in production and to redistribute, under the No-Fee Terms and Conditions License. However, Practicalli recommends using OpenJDK anyway.</description><pubDate>Mon, 31 Jan 2022 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/code-snippets-for-clojure-lsp/</guid><link>http://practical.li/blog-staging/posts/code-snippets-for-clojure-lsp/</link><title>Code Snippets for Clojure LSP</title><description>Clojure LSP snippets are an editor agnostic approach to expanding common code forms from snippet names, saving typing and acting as a guide to the syntax of a Clojure form. Practicalli also uses snippets for rich comments, documentation and highlighting logical sections of code in a namespace.Clojure LSP snippets are defined using the EDN syntax and have the same tab stop syntax as Yasnippets and other snippet tools.Clojure LSP snippets are covered in Practiclli Spacemacs, including a large number of examples of custom snippets. Install practicalli/clojure-lsp-config for additions to the built-in snippets.</description><pubDate>Fri, 28 Jan 2022 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/emacs-cider-removing-old-cider-compat/</guid><link>http://practical.li/blog-staging/posts/emacs-cider-removing-old-cider-compat/</link><title>Emacs CIDER removing old cider-compat namespace</title><description>The latest snapshot of CIDER includes some welcome tidy up of the code. One notable removal is cider-compat which was added to support Emacs versions previous to 25. As most of the Emacs world is on version 27 (or 28 / 29) then there is no need to include cider-compat any more.However, some Emacs packages that haven't change in a while may still used cider-compat, although the only one to date that has been found is helm-cider. Unfortunately is causing Clojure file to fail to load when used with the latest CIDER snapshot.When helm-cider is enabled, Emacs is unable to load Clojure files. The error reported is:</description><pubDate>Sun, 02 Jan 2022 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/clojure-which-execution-option-to-use/</guid><link>http://practical.li/blog-staging/posts/clojure-which-execution-option-to-use/</link><title>Clojure CLI - which execution option to use</title><description>Execution options (-A -M -T -X) define how aliases are used with the Clojure CLI. Aliases are included via one of these execution options and each option can affect how the alias is used.Since the first documented released which exclusively used the -A execution option to include aliases, the design has evolved to provide specific execution options to run code via clojure.main (-M) and clojure.exec (-X). In July 2021, the ability to run tools (-T) independent from the Clojure project classpath was also introduced.The exec-opts command line flags have evolved to enable these features, so lets explore those flags and show how each flag is typically used.</description><pubDate>Fri, 24 Dec 2021 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/clojure-cli-tools-understanding-aliases/</guid><link>http://practical.li/blog-staging/posts/clojure-cli-tools-understanding-aliases/</link><title>Clojure CLI - understanding aliases</title><description>Clojure CLI provide a very flexible way to run Clojure and uses aliases in a deps.edn configuration file to optionally include execution options, code paths and library dependencies (Maven & Git). Aliases can be used with any of the Clojure CLI execution options that run with either clojure.main or clojure.exec.Aliases provide a simple way to optionally include community libraries and tools for working with Clojure projects (e.g test runner, built tools, etc.). Community tools can be added to each Clojure project deps.edn configuration, or preferably to a user level deps.edn file for use with any Clojure project (easier to maintain as there is a central alias)Understanding what an alias is and how to define them ensures an effective use of Clojure CLI and a smooth workflow.</description><pubDate>Sun, 19 Dec 2021 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/automate-cryogen-clojure-blog-with-github-actions/</guid><link>http://practical.li/blog-staging/posts/automate-cryogen-clojure-blog-with-github-actions/</link><title>Automate Cryogen Clojure blog with GitHub Actions</title><description>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 when Pull Requests are merged to the specified branch (or on direct commits to that branch).</description><pubDate>Sat, 28 Aug 2021 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/overview-of-language-server-protocol-lsp-for-clojure-development/</guid><link>http://practical.li/blog-staging/posts/overview-of-language-server-protocol-lsp-for-clojure-development/</link><title>Overview of Language Server Protocol LSP for Clojure development</title><description>Microsoft Language Server Protocol, LSP, is exactly what the name says it is. Its a (JSON RPC) protocol. Its no more and no less than that. LSP is however a big strategy peace for Mircrosoft to encourage developers to adopt VS Code, which naturally provides support for the LSP protocol. The implementation of tooling that uses LSP is left to companies and communities that develop editor and related tools.Standards can be an opportunity to focus development work and provide a rich set of tools that are far easier to integrate. There are many examples of where a protocol has provided a huge amount of diversity, such as TCP/IP, DNS, HTTP and HTML protocols that drove the creation of the web we know today. Standard protocols in themselves did not make the web, but allowed developers to build on top of them and create the rich and diverse experience on the web that we see today.LSP is no different. By itself LSP provides no benefit. However, when adopted as a standard by tooling developers it has the potential to help grow an even richer experience for the whole developer community.</description><pubDate>Sat, 20 Mar 2021 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/brave-clojure-redux-part01-the-repl/</guid><link>http://practical.li/blog-staging/posts/brave-clojure-redux-part01-the-repl/</link><title>Brave Clojure redux - part 1 - the REPL</title><description>Brave Clojure redux is series that revisits the code examples and tooling covered in the book: "Clojure for the Brave and the True". The good news is you do not need to be brave or true to read the book or learn Clojure either. It does help if you have some time and motivation though.Brave Clojure redux uses Clojure CLI tools rather than Leiningen as used in Brave Clojure. Code examples will be used from the book, complemented with additional examples where relevant.Part 1 covers the Clojure REPL process, a vital part of Clojure development. The basics of building and running a project are also included.</description><pubDate>Tue, 16 Feb 2021 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/clojure-repl-jack-in-or-connect/</guid><link>http://practical.li/blog-staging/posts/clojure-repl-jack-in-or-connect/</link><title>Clojure CLI tools - To jack-in or connect, that is the question</title><description>To jack-in or connect, that is the question.
Whether it is more effective to relying on the editor to auto-inject the required dependencies for every workflow, or assemble your own aliases them include any editor - William "Hacker" ShakespearA REPL is the central part of Clojure development. For the full workflow, an editor connects to the REPL to evaluate code and show instant results.The developer can be in control of how the REPL starts, managing libraries and tools used alongside the REPL. Or the editor can automate the process and control how the REPL is started.</description><pubDate>Thu, 31 Dec 2020 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/clojure-cli-aliases-deserve-designing-too/</guid><link>http://practical.li/blog-staging/posts/clojure-cli-aliases-deserve-designing-too/</link><title>Clojure CLI tools aliases deserve good design too</title><description>Aliases in Clojure CLI tools are an important way to configure how to work with a Clojure project effectively, so they deserve the same attention and clean design applied to source code, test code and other configuration.practicalli/clojure-deps-edn provides examples of over 50 aliases crafted to use over multiple projects and providing access to a wide range of Clojure CLI community tools.One way to kill the excellent experience that Clojure CLI tools bring is to write aliases that conflate concepts and are just a catch all for loosely related configuration. Without applying a little thought and design to aliases it just makes more work later on.</description><pubDate>Fri, 11 Dec 2020 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/cloure-community-getting-help/</guid><link>http://practical.li/blog-staging/posts/cloure-community-getting-help/</link><title>Clojure community - getting help</title><description>A guide to getting help from the Clojure community. There are several ways you can get help so you can use which you find more valuable and rewarding. The most active tools include:General website such as redit/clojure are useful ways for the Clojure community to reach out to the more general development community.</description><pubDate>Wed, 15 Jul 2020 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/web-scraping-with-clojure-hacking-hacker-news/</guid><link>http://practical.li/blog-staging/posts/web-scraping-with-clojure-hacking-hacker-news/</link><title>Web Scraping with Clojure - Scraping Hacker News</title><description>Enlive 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.</description><pubDate>Fri, 13 Mar 2020 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/raising-spacemacs-issues-and-pull-requests/</guid><link>http://practical.li/blog-staging/posts/raising-spacemacs-issues-and-pull-requests/</link><title>Spacemacs - raising issues and pull requests</title><description>Contributing to Spacemacs is very much a community activity and we can all help the maintainers continue to make Spacemacs an excellent experience for everyone.With a few simple tips, its easy to report issues and create pull requests that are ready to merge into Spacemacs develop.</description><pubDate>Fri, 14 Feb 2020 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/lenovo-x1-extreme-gen2-ubuntu-install/</guid><link>http://practical.li/blog-staging/posts/lenovo-x1-extreme-gen2-ubuntu-install/</link><title>Ubuntu install on Lenovo X1 Extreme 2nd Gen with RAID</title><description>A successful installation of Ubuntu 19.10 on the Lenovo X1 Extreme (gen2) laptop, configured with 2 solid state hard drives configured for RAID-0 with LLVM encrypted partitions. , along with The laptop is configured with 32Gb memory and 2 SSDs in RAID-0 configuration for speedThis laptop will be used for real-time video encoding for the Practicalli broadcasts via YouTube as well as doing some data science in Clojure.This was a very smooth installation and all the hardware works correctly. The nVidia open source drivers and WiFi adaptor did cause a little extra work, so I have included tips and troubleshooting guides to help you resolve these issues quickly.</description><pubDate>Sun, 15 Dec 2019 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/practicalli-youtube-website/</guid><link>http://practical.li/blog-staging/posts/practicalli-youtube-website/</link><title>Practicalli YouTube Website</title><description>YouTube is great service for sharing your video content across the world. However, the user experience is highly focused on discovering lots of different content in an adhoc manner. The user experience is not so great when you wish to curate a series of videos.YouTube has a very detailed API which can be used to create a website to provide your own user experience, so lets start building a website with Clojure.All code is available on the practicalli/youtube-website repository.</description><pubDate>Sat, 07 Dec 2019 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/reclojure-the-community-conference-for-all/</guid><link>http://practical.li/blog-staging/posts/reclojure-the-community-conference-for-all/</link><title>re:Clojure - the Clojure community conference for all</title><description>re:Clojure was a rapidly assembled conference created by several of the London Clojurian community members, after the closing of SkillsMatter who for 8 years ran an a Clojure conference in London. Luckily many of the speakers were available to talk at the this new conference and several members of the community made it all happen, with the help of lots of wonderful sponsorsAll the talks were recorded and videos will be published soon, so subscribe to the re:Cojure YouTube channel and be notified when they are available.Here are some of my highlights from the re:Clojure conference.</description><pubDate>Tue, 03 Dec 2019 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/clojure-advent-of-code-2019/</guid><link>http://practical.li/blog-staging/posts/clojure-advent-of-code-2019/</link><title>Clojure Advent Of Code - a fun way to learn</title><description>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 requires regular practice to maintain your skills. A full time developer role gives you lots of opportunities to practice every day, however, its often focused in around solving problems within a specific business domain, with little time to explore others. The Advent of Code puts you in a different domain, so its great for extending your coding experiences.Solving challenges in a different language is another great way to extend your experiences, so here are some tips and examples for solving the advent of code in Clojure.</description><pubDate>Mon, 02 Dec 2019 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/advent-of-parens-2019/</guid><link>http://practical.li/blog-staging/posts/advent-of-parens-2019/</link><title>Advent Of Parens 2019 - feast on Clojure this holiday season</title><description>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 :)</description><pubDate>Sun, 01 Dec 2019 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/consuming-apis-with-clojure/</guid><link>http://practical.li/blog-staging/posts/consuming-apis-with-clojure/</link><title>Consuming APIs from Clojure</title><description>When getting results from API calls, its very common to receive data in JavaScript Object Notation (JSON).Once we have the JSON data, it is converted to a Clojure data structure to use the hundreds of functions in clojure.core that can readily transform the shape of that data.We can process this with the clojure.data.json library and community projects including cheshire and transit.</description><pubDate>Sat, 30 Nov 2019 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/webapp-routes-with-json/</guid><link>http://practical.li/blog-staging/posts/webapp-routes-with-json/</link><title>Clojure Webapp routing and APIs with JSON</title><description>Defining routes for a Clojure webapps is easy with the Compojure library and we can also serve JSON to create a simple API. All this is built on the Clojure webserver we built in the previous article.Compojure has a defroutes macro that provides a simple way to define routes and there are other convienience functions that make routing very straight forward.We can also add transit and other libraries to help manage JSON.</description><pubDate>Sat, 23 Nov 2019 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/clojure-web-server-cli-tools-deps-edn/</guid><link>http://practical.li/blog-staging/posts/clojure-web-server-cli-tools-deps-edn/</link><title>Clojure web server from scratch with deps.edn</title><description>Discover how to build a Clojure web server from the ground up using Clojure CLI tools to create and run the project and deps.edn to manage the dependencies.Update: Practicalli Clojure WebApps has newer versions of this guide. Take a look at the Status Monitor and Banking on Clojure projectsThis project will be used to build a web server that will serve our API, which we will build in future posts and study group broadcasts.</description><pubDate>Fri, 15 Nov 2019 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/streamline-contributions-with-github-pull-request-templates/</guid><link>http://practical.li/blog-staging/posts/streamline-contributions-with-github-pull-request-templates/</link><title>Streamline Contributions with GitHub Pull Request Templates</title><description>Pull requests are very valuable to project maintainers, especially if they follow guidelines for the project. Using a pull request template allows project maintainers to define the most effective way to contribute right inside the contribution projects.Project maintainers, especially on very active projects, rarely have time to spend on triage of pull requests. Generally the simpler a pull request the easier it is for a maintainer to review it and accept it.Previously we created GitHub issue templates, for which their can be many. one pull request template as all pull requests are the same type.</description><pubDate>Tue, 05 Nov 2019 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/improving-communication-with-github-issue-templates/</guid><link>http://practical.li/blog-staging/posts/improving-communication-with-github-issue-templates/</link><title>Improving communication with GitHub issue templates</title><description>Create templates for issues and pull requests can greatly improve feedback and contributions, especially as an open source project maintainer. We will look specifically at issue templates.Templates can ask people to provide specific information, or request use of a tool for generating system information (e.g. Spacemacs). Automatic assignment and labelling saves time on issue triage by the project maintainers.Templates can be created for most shared Git repository services, i.e GitHub, GitLab, BitBucket, etc.</description><pubDate>Mon, 04 Nov 2019 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/clojure-powered-blogging-with-cryogen/</guid><link>http://practical.li/blog-staging/posts/clojure-powered-blogging-with-cryogen/</link><title>Clojure powered blogging with Cryogen</title><description>A website for blogging doesn't need to be a complex content management system, a simple and lightweight static website generator can create engaging websites that are easy 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 to manage the meta-data and layout information for each, including .Cryogen seems very quick to generate a site and a local server can be run to automatically generate an updated website when changes to posts and pages are saved.</description><pubDate>Sun, 20 Oct 2019 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/journey-to-the-edge-of-clojure/</guid><link>http://practical.li/blog-staging/posts/journey-to-the-edge-of-clojure/</link><title>journey to the edge of clojure</title><description>This article is a work in progressClojure CLI tools is a relatively new approach to creating an managing projects. The Edge project from JUXT takes the approach and extends it with its own features, such as being able to update projects created from the edge configuration.Unlike Leiningen and Boot templates which are one of tasks, you can update a project you created a while ago with Edge and bring it up to date. It will be interesting to try this out in future articles.</description><pubDate>Fri, 09 Aug 2019 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/community-tools-for-clojure-cli/</guid><link>http://practical.li/blog-staging/posts/community-tools-for-clojure-cli/</link><title>Community projects for Clojure CLI tools</title><description>There are a number of tools from the Clojure community which add build tool features to the Clojure CLI tools. This enables developers to have a very lightweight and customisable set of tools that just do what they need.This article just covers the very basics of each tool, see each projects documentation to get the full benefit of each tool.</description><pubDate>Fri, 09 Aug 2019 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/gaining-confidence-with-Clojure-CLI-tools/</guid><link>http://practical.li/blog-staging/posts/gaining-confidence-with-Clojure-CLI-tools/</link><title>Gaining confidence with Clojure CLI tools</title><description>We are going to try out the different command line options available as we continue our journey into the Clojure CLI tools..We explore the different ways to running Clojure code, from a single expression to a full project. We include examples of aliases for optional configuration and combining aliases to create specific configurations when running a project. Finally we will see how to diagnose a project and understand potential sources of conflicts.Newer content can be found in Using Clojure tools section of Practicalli Clojure</description><pubDate>Fri, 26 Jul 2019 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/a-deeper-understanding-of-clojure-cli-tools/</guid><link>http://practical.li/blog-staging/posts/a-deeper-understanding-of-clojure-cli-tools/</link><title>A deeper understanding of Clojure CLI tools</title><description>CLI tools make Clojure very accessible and simple to install as they are a essentially a wrapper for running Clojure code using the java command and use additional libraries to manage dependencies, class paths, create projects and build java archive (jar) files.Newer content can be found in Using Clojure tools section of Practicalli ClojureIts quite common to use the java command to run your code in production, usually defined in a shell script. Leiningen can be used to run your application in production too, however, because Leiningen creates 2 JVM instances (one for itself and one for the application), its more efficient to just use the java command.</description><pubDate>Sun, 21 Jul 2019 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/cider-jack-in-to-clojure-cli-projects-from-spacemacs/</guid><link>http://practical.li/blog-staging/posts/cider-jack-in-to-clojure-cli-projects-from-spacemacs/</link><title>CIDER jack-in to Clojure CLI projects from Spacemacs</title><description>Running a Clojure project created with CLI tools or clj-new may require you to pass in an alias for the REPL to pick up the right libraries.A few days ago I created a new ClojureScript and reagent project, using the Clojure CLI tools and clj-new project creation tool, which converts Leiningen and Boot templates into a deps.edn based project. Unfortunately when I created a project from the fighwheel-main template the REPL failed to run from CIDER using cider-jack-in-cljs, saying that figwheel-main was not found. All that was required was to specify the :fig alias when running a REPL.This article covers two approaches to running Clojure CLI projects from CIDER jack-in that require setting of an alias or multiple aliases e.g. -A:fig:build:party:hammock</description><pubDate>Tue, 16 Jul 2019 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/clojure-cli-and-tools-deps/</guid><link>http://practical.li/blog-staging/posts/clojure-cli-and-tools-deps/</link><title>Clojure CLI and tools.deps</title><description>Clojure Command Line Interface (CLI) tools provide a fast way for developers to get started with Clojure and simplify an already pretty simple experience. With tools.deps it also provides a more flexible approach to including libraries, including the use of code from a specific commit in a Git repository.Newer content can be found in Using Clojure tools section of Practicalli ClojurePracticalli Clojure 35 - Clojure CLI tools - an introduction is a video of a live broadcast of this content (inclucing typos)</description><pubDate>Sat, 13 Jul 2019 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/testing-live-coding/</guid><link>http://practical.li/blog-staging/posts/testing-live-coding/</link><title>Testing Klipse Integration</title><description>A simple article to test the klipse integrationLets do some simple Clojure code</description><pubDate>Mon, 17 Oct 2016 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/yasnippets-for-faster-clojure-development/</guid><link>http://practical.li/blog-staging/posts/yasnippets-for-faster-clojure-development/</link><title>YASnippets for faster clojure coding</title><description>Yasnippets minimise typing for commonly used Clojure forms and documentation structures, or any other text regularly created. Yasnippets have placeholders that allow jumping (tabbing) to points in the snippet, so specific text can be added to the more generic text of the snippet.Emacs YASnippet package uses mode-specific snippets that expand to anything from a simple text replacement to an intricate code block structure using placeholders to add specific values to the general form.See YASnippet in action in this Emacs Yasnippet video.</description><pubDate>Sat, 23 Jul 2016 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/writing-custom-snippets-for-yasnippets/</guid><link>http://practical.li/blog-staging/posts/writing-custom-snippets-for-yasnippets/</link><title>Writing custom snippets for yasnippet</title><description>Snippets are names that expand to code or documentation, to minimise typing commonly used code pattern and can serve as a reminder of common Clojure forms.YASnippets templates are defined in plain text, so are very easy to learn and write.The content of a snippet can be anything, from a simple piece of text or a more involved code structure with placeholders for tab stops. Snippets can even include Emacs lisp (elisp) code which is evaluated, allowing the snippet to tap into all the features of Emacs.</description><pubDate>Sat, 23 Jul 2016 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/transducers-in-clojure-getting-started/</guid><link>http://practical.li/blog-staging/posts/transducers-in-clojure-getting-started/</link><title>Clojure Transducers - Getting Started</title><description>Transducers are built upon the design principle in Clojure of composing functions together, allowing you to elegantly abstract functional composition and create a workflow that will transform data without being tied to a specific context. So what does that actually mean and what does the code look like? Is there a transducer function or is it just extensions to existing functions. These are the questions we will explore and answer.A good understanding of functions such as map & reduce and composing functions with the threading macros is recommended before writing code with Transducers.This is my interpretation of the really great introduction to Transducers from Clojurescript Unraveled, expanded with additional code and my own comments.</description><pubDate>Wed, 15 Jun 2016 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/spacemacs-share-buffers-as-github-gists/</guid><link>http://practical.li/blog-staging/posts/spacemacs-share-buffers-as-github-gists/</link><title>Spacemacs - Share Buffers via Github Gists</title><description>The Spacemacs github layer has been deprecated and gist.el is longer a reliable tool to work with GitHub gists unfortunatelyGithub Gists proved a simple way to share a piece of code, configuration or documentation without setting up a full version control project. Rather than use copy & paste, a Gist can be created from any Spacemacs buffer or region with a single command.Add the github layer to the ~/.spacemacs configuration file and reload your configuration, SPC f e R, or restart Spacemacs SPC q r. Lets see just how easy it is to use Gists with Spacemacs.</description><pubDate>Sun, 13 Mar 2016 00:00:00 +0000</pubDate></item><item><guid>http://practical.li/blog-staging/posts/2014-11-04-second-post/</guid><link>http://practical.li/blog-staging/posts/2014-11-04-second-post/</link><title>Yet Another Post</title><description>This Post So Fetchsome more stuff happened</description><pubDate>Tue, 04 Nov 2014 00:00:00 +0000</pubDate></item></channel></rss>