RSSAmplifier

Blog

thegeez blog

thegeez.netRSS feed ↗51 posts

Latest posts

A bird video poker game with PicoLisp prototype for the Sensor Watch

A bird video poker game with PicoLisp prototype for the Sensor Watch The Sensor Watch is an ARM microcontroller board replacement for the Casio F-91W wristwatch. Which is the first watch I ever had. The Sensor Watch is named for the possibility to add a temperature or accelerometer sensor. I have no need for either of those, but I do want to program a game to create a smart, but not too smart,…

fecs: a lisp interpreter running in wasm

fecs: a lisp interpreter running in wasm fecs is a lisp interpreter in the style of PicoLisp running in wasm. Fecs was made as an exploration of the PicoLisp system and as an attempt to make a programming language that runs on WebAssembly (wasm). It is implemented in C, and compiled to wasm with clang/LLVM . WebAssembly can run on many platforms, including browsers. A nice advantage of running…

Pinball with Scittle/ClojureScript

Pinball with Scittle/ClojureScript The past few months I have been on some longer train rides. These rides had plenty of time to look outside the window to the nice scenery between Dresden and Prague. Other routes were more suitable for programming. To program on my Android phone I installed the UserLAnd app, which can run a full Ubuntu environment (or other Linux variants), without special…

SpotlightBoard.com: Calendar for standup and improv

SpotlightBoard.com: Calendar for standup and improv My latest programming project is spotlightboard.com . This is a website to aggregate all the standup and improv events happening in Amsterdam. Users can add their own events and find events based on the calendar and filtering by tags. There's also a comment section for every event and a forum for discussions. For this project I tried something…

Serverless search on AWS Lambda with Janet and SQLite

Serverless search on AWS Lambda with Janet and SQLite Recently I have been porting a simple app on AWS Lambda for posts and comments to use the Janet programming language. A previous post describes how Janet is a great fit to use with AWS Lambda. The web app now also supports search through the search bar in the header. An earlier version of the postings app was written in Clojure and had a search…

Web app on AWS Lambda with Janet

Web app on AWS Lambda with Janet Janet is a small functional and imperative programming language. The language has some similarities to Clojure with its Lispy syntax, its data notation, and with its proper REPL for dynamic developing within a running system. Janet also compiles its runtime and VM to C and can therefore run almost anywhere. All of Janet's features make it a good candidate to make…

Rofolia: a self-hosted collaborative database/spreadsheet hybrid

Rofolia: a self-hosted collaborative database/spreadsheet hybrid My latest Clojure project is now available! Rofolia is a self-hosted collaborative database/spreadsheet hybrid. It is similar to Airtable and Google Sheets and supports links between tables, lookups, formula's and API access. Try the demo at demo.rofolia.com and check out the documentation at Rofolia.com . Read more

Walkthrough of a spreadsheet/database-hybrid with Clojure(Script)

Walkthrough of a spreadsheet/database-hybrid with Clojure(Script) My latest project is a spreadsheet/database hybrid called mixgrid . Mixgrid is a record based database that is editable like a spreadsheet, similar to Airtable , Stackby , Google Tables and Microsoft Lists . While mixgrid is in its early stages it already supports some nice features: Real time collaboration Link records between…

Databrowser for Crux

Databrowser for Crux Databrowser is a web app to explore the data in a Crux database. It takes a lot of inspiration from the REBL tool, with added features for Crux documents, such as an easy way to enter time and dates and to view diffs. Here's a longer list of features: Write custom queries Add Clojure code to your queries to shape the data Support for collections of heterogeneous data Group and…

Collaborate serverless-ly on ClojureScript: crepl is back

Collaborate serverless-ly on ClojureScript: crepl is back crepl is a collaborative editor written in Clojure and ClojureScript. In the editor you can write and evaluate ClojureScript code. And you can work on the same code together, similar to Google Docs. crepl has been offline for quite some time as I did not have a place to deploy it to. Recently, I have been playing around with compiling…

Serverless Clojure web app on AWS Lambda

Serverless Clojure web app on AWS Lambda The Postings app is a simple web application for posting text and comments. It is very old fashioned because it serves html pages from a server, instead of being a big ClojureScript or JavaScript application with Reagent or React. The web app does use a tiny bit of JavaScript to load certain html pages inline, following the ideas of turbolinks . Everything…

Serverless collaboration

Serverless collaboration Previously I've worked on a collaborative tool, which worked like Google Docs. This project was called crepl . Because I stopped paying for hosting of its server, that project is now offline. That made me consider: what if a collaborative editor wouldn't need a server? The server in crepl was needed to handle the connections between all the clients and the algorithm for…

Fly over Amsterdam with ClojureScript

Fly over Amsterdam with ClojureScript Read more

Probabilistic programming example with Anglican

Probabilistic programming example with Anglican At the last Amsterdam Clojure Meetup there was a great demostration by Zhenhao Li about Anglican . Anglican is a probabilistic programming language integrated with Clojure. I am a fan of the book Probabilistic Programming and Bayesian Methods for Hackers from which I solved a problem in Clojure, about which I wrote here: Bayesian Inference with…

ClojureConj 2017 Baltimore: Learning Clojure and ClojureScript by Playing a Card Game video

ClojureConj 2017 Baltimore: Learning Clojure and ClojureScript by Playing a Card Game video At ClojureConj 2017 I gave a talk titled: "Learning Clojure and ClojureScript by Playing a Card Game". The recording of the talk is now on youtube: ClojureTV/ClojureConj 2017: Learning Clojure and ClojureScript by Playing a Card Game More information for each of those Gin Rummy projects as mentioned in the…

EuroClojure 2017 Berlin: crepl talk video

EuroClojure 2017 Berlin: crepl talk video At EuroClojure 2017 I gave a talk titled: "Building a collaborative web app with ClojureScript". The recording of the talk is now on youtube: crepl at EuroClojure 2017 on ClojureTV For more background about crepl and c3e check out these blogposts: crepl blogpost c3e blogpost Read more

Data wrangling with transducers for a machine learning problem

Data wrangling with transducers for a machine learning problem The transducers from the net.cgrand.xforms library are great to transform and analyze data with in Clojure. This blogpost shows how the xforms transducers can be used to do data analysis for a machine learning problem from Kaggle, which is a data science competition platform. One of the competitions on Kaggle is the Titanic competition…

Dutch Clojure Days 2017: crepl demo

Dutch Clojure Days 2017: crepl demo At the Dutch Clojure Days 2017 in Amsterdam I gave a lightning talk about crepl . With crepl you can write and run ClojureScript code together. I also introduced c3e , which is a collaborative editor in the browser for full projects with multiple files. The video for the talk is below: Read more

crepl and c3e at Dutch Clojure Days 2017

crepl and c3e at Dutch Clojure Days 2017 Today was the 2017 edition of Dutch Clojure Days (DCD17) , the annual international gathering of Clojure enthusiasts and practitioners in the Netherlands. At DCD17 I presented a lightning talk about crepl. crepl is a collaborative editor written in Clojure and ClojureScript. It's like Google Docs where you can also run the ClojureScript you write in the…

Defn Podcast: Episode 18

Defn Podcast: Episode 18 Last week I joined Ray and Vijay on the Defn Podcast. We talked about Clojure as well as my latest project: crepl . I had a great time talking with them. You can listen to the episode below. Enjoy! Read more

crepl: Link to examples

crepl: Link to examples crepl is a collaborative editor where you can write and run ClojureScript together. You can now create links to new crepl pads that will be loaded with the code from an external source. Once you are in a crepl you can invite others to join you by sending them the url in the browser navigation bar. For instance try out these examples: Solve 4Clojure problems together:…

crepl: Atom sync, share code and state

crepl: Atom sync, share code and state With crepl you can write and run ClojureScript together. Any changes to the code are synced to everybody instantly. Something like Google Docs for ClojureScript. You can also use nice libraries such as Reagent to make your own UI. An example of making UI's in crepl is in this blog post . However, anything you do in the UI, such as clicking a button, would not…

crepl: Import code, solve 4Clojure problems and use reagent

crepl: Import code, solve 4Clojure problems and use reagent There have been some upgrades to crepl . It is now possible to import code, solve 4Clojure problems and create your own UI with Reagent. It was already possible to run your code continuously and see the result of your code update instantly. Configure crepl with code Read more

crepl: Run continuously

crepl: Run continuously With crepl you can write and run ClojureScript code together. Everybody always sees the same code, because all the changes are updated in everyones browser simultaneously. However, everybody can only run the code in their own browser. This is why the output of "Evaluate expression" is inserted in the code. This way everybody is guaranteed to see the same output. (+ 3 4 (do…

crepl: Write and run ClojureScript code together

crepl: Write and run ClojureScript code together crepl is a collaborative editor written in Clojure and ClojureScript. In the editor you can write and evaluate ClojureScript code. This is a fun and quick way to try out some ClojureScript code. The real fun begins when you get others to work on the same code with you by sending them the URL. When multiple people are working on the same code at the…

A wiki made with Clojure, yada and Datomic Client

A wiki made with Clojure, yada and Datomic Client At EuroClojure in Bratislava an unconference session was about Clojure and REST. At this session Liberator and yada were discussed by their authors. I have used Liberator previously, by not yada. A big difference between the two is that yada is asynchronous. This is useful when making calls to other services while handling a web request. Datomic…

Parsing with clojure.spec for the Advent of Code

Parsing with clojure.spec for the Advent of Code Advent of Code is a series of code challenges in the form of an advent calender, counting down to Christmas. The challenges have inputs in the form of strings. Clojure.spec can be used to parse those inputs and turn them into useful data. The gist below works through some examples:

Trello clone clone in Clojure

Trello clone clone in Clojure The Phoenix-Trello project is a Trello clone build with Elixir, Phoenix and React. I like the dragging cards interface in Trello, so I made a Trello clone clone in Clojure. The code for the Clojure version is on GitHub: thegeez/clj-board . The example is running on Heroku: https://clj-board.herokuapp.com Read more

Pedestal presentation and example app

Pedestal presentation and example app At the Dutch Clojure Days 2016 in Amsterdam I gave a presentation on building user facing web applications with Pedestal. The video for it is below: Read more

Pedestal and w3a walkthrough: Build a CRUD app with Clojure

Pedestal and w3a walkthrough: Build a CRUD app with Clojure This is a walkthrough on how to build a complete user facing web application with Clojure on top of Pedestal , with the help of the w3a library. I have made various attempts at building web applications with Pedestal and/or Clojure before. (such as here , here and here ) The current version is good and useful enough to make a guide for…

Gatherlist: combining Pedestal & OAuth

Gatherlist: combining Pedestal & OAuth Visiting conferences is nice. You'll find lots of new and old friends and will leave with a whole list of new interesting ideas to follow up on. It is also an opportunity to find out how much browsing websites on a mobile phone sucks. Want to find today's schedule on the conference mobile website? Sorry, the hamburger menu doesn't collapse and blocks the…

Web application with Pedestal

Web application with Pedestal As Frankie said, for web development in Clojure we should give Pedestal another chance . So I set out to build a user facing web application with Pedestal . To me a minimally useful user facing web application should have a database, templating, forms, authentication and authorization. And for development I like to get something I can click through as soon as…

Turned off gin.thegeez.net

Turned off gin.thegeez.net The server for Gin Rummy with Datomic has been shut down. Playing over the network against a human or AI opponent through the Datomic database is no longer available. See the blog post and code at github.com/thegeez/gin to run the code yourself. A ClojureScript-only version to play against the CLJS AI is available here: Gin Rummy

Gin Rummy with Datomic

Gin Rummy with Datomic When I began to learn Clojure I found the Gin Rummy game in the PLT Racket/Scheme programming environment. Gin is a simple card game and it includes a simple AI for an opponent. This game has been the basis for some previous hobby projects, specifically a ClojureScript implementation and a software robot to play the game. But the project I always wanted to make was a way to…

Datascript and Quiescent TodoMVC stand-alone

Datascript and Quiescent TodoMVC stand-alone Yesterday I wrote about clj-crud and its TodoMVC implementation with Datascript and React.js / Quiescent . Below is the same implementation, but this time in advanced compilation and without using a back-end. Now you don't have to log in to see the demo, but of course your todo list won't be saved in a database either. Read more

Datascript and React.js for a Clojure web app

Datascript and React.js for a Clojure web app When building a web application with Clojure there are a lot of building blocks to choose from. For ClojureScript there has been a particularly interesting new offer with the release of Datascript . Datascript is a way to manage application state in ClojureScript following the database properties of Datomic (although not related to that project in any…

Using SendGrid with Clojure in The Next Web HackBattle

Using SendGrid with Clojure in The Next Web HackBattle This week is The Next Web conference in Amsterdam, where I participated in the HackBattle . Like I did two years ago, I took a project I am currently working on and tried to use one of the HackBattle API partners. Last time I used BrowserChannel and the Rijksmuseum API . The current project I am working on is to complete the Clojure web…

Bayesian Inference with Markov Chain Monte Carlo in Clojure

Bayesian Inference with Markov Chain Monte Carlo in Clojure I've been working through the book Probabilistic Programming and Bayesian Methods for Hackers (ProbHack) by Cam Davidson-Pilon. This online book is an introduction to bayesian methods and probabilistic programming for programmers. Its main focus is Bayesian Inference with Markov Chain Monte Carlo (BI-MCMC). The ProbHack book uses Python…

Solving 4clojure problems in an editor

Solving 4clojure problems in an editor On Twitter xeqixeqi asked for a leiningen template to be able to solve to the problems from 4clojure in an editor rather than the browser. He then solved this problem himself by building a lein template for 4clojure . I did most of the problems in emacs by copy-pasting the test cases from each problem page. To turn the text on 4clojure into a runnable test I…

Vintage JavaScript game restoration

Vintage JavaScript game restoration At a recent Amsterdam Clojurians meetup the topic was game development. Some of the first code I played around with in high school were games in JavaScript. These games were great as an introduction to programming because all that is needed to play around with them is a browser, 'view source' and notepad. My favorite JavaScript games then were made by K.…

Testing RxJava with executable marble diagrams

Testing RxJava with executable marble diagrams Reactive Extensions (Rx) from the .Net world are observable sequences. In particular they are push based sequences, in contrast to the pull based seq api in Clojure. Furthermore you can subscribe to and unsubscribe from observable sequences. This also makes observable sequences a nice candidate to replace futures and callbacks in asynchronous code.…

Haskell Picnic

Haskell Picnic PicnicMob is a Haskell tutorial for beginners. It is different from many other introductory tutorials as it has an interesting, non-trivial algorithm as the subject and it produces pictures at every step. Also you can't go wrong by reading something by Conrad Barski, author of Land of Lisp . I worked through the tutorial when I was still at university. The picnic placement pictures…

October Amsterdam Clojure Presentation

October Amsterdam Clojure Presentation The slides from my presentation at #OctAmsClj are in the ams-clj repo: Simpler webapps with Clojure . The code for the example in the presentation is here: amscljoct-example .

Count aggregator in Cascalog

Count aggregator in Cascalog At my current job we use the excellent Cascalog library. Cascalog is a declarative query language for "Big Data" processing on top of Hadoop. Cascalog queries get compiled into MapReduce tasks (through the underlying Cascading library). This approach is a huge win over writing MapReduce tasks yourself. The "Hello World" of MapReduce tasks is the word-count example.…

Testing clj-browserchannel

Testing clj-browserchannel The clj-browserchannel project now also contains a test project. The test project contains a small executable test that tests the whole browserchannel stack, by using the chat-demo application. The test project is meant to test the server-side component of the BrowserChannel protocol in clj-browserchannel. Together with the client-side implementation as part of the…

My understanding of reducers after EuroClojure

My understanding of reducers after EuroClojure At EuroClojure Rich Hickey gave a second, unscheduled talk about the new reducers library. The talk clarified a few points for me, that I didn't initially get from the explaining blogposts on clojure.com/blog . For the Amsterdam Clojure Meetup I wrote down these notes: Reducers vs seq/lazy-seq api Read more

Playing "Racket Gin Rummy in ClojureScript" with Clojure

Playing "Racket Gin Rummy in ClojureScript" with Clojure In 2010 I built my first real Clojure application. It was a tool to execute semantic specifications of modeling languages and was part of my master thesis. Before I decided to use Clojure for this tool I built a little program to test the waters. This program was GinBot . Whilst dabbling with functional programming languages I tried PLT…

BrowserChannel and the Rijksmuseum API at The Next Web HackBattle

BrowserChannel and the Rijksmuseum API at The Next Web HackBattle The last The Next Web conference in Amsterdam on the 23rd to 25th of April 2012 included a two day HackBattle . During this HackBattle I built a website combining the API from the Rijksmuseum with my clj-browserchannel library. The Rijksmuseum API contains all the works from the museum in digital format, with loads of metadata. The…

Why BrowserChannel?

Why BrowserChannel? After the release of clj-browserchannel-demo , I have been asked what BrowserChannel is exactly. This post will hopefully clarify what BrowserChannel is and why it is a great fit for ClojureScript and Clojure web applications. BrowserChannel is a protocol developed by Google. It provides cross-browser compatible, real-time, bi-directional communication for various Google web…

Racket Gin Rummy in ClojureScript

Racket Gin Rummy in ClojureScript A ClojureScript implementation of a simple card game. The game can be played here . The Racket programming environment comes with a couple of example games written in Scheme. My favorite of these games is Gin Rummy. The object of this game is to make a hand of 10 cards, consisting of a set of four cards and two sets of three cards. A set of cards are cards of the…