Angel \”Java\” Lopez on Blog

July 22, 2014

ClojSharp Implementing Clojure In C# (1) The Project

Since the past decade I’m interested on Clojure. It’s a return to Lisp, but in modern times.. Clojure is implemented on the Java virtual machine, but is also implemented on. NET (AFAIK, using Dynamic Language Runtime). The version of Java compiles to Java bytecodes. There is also a version of JavaScript, called ClojureScript. The community is very active, and has brought an air of renewal within Java. It has features like immutability of his work-oriented structures in multithreading, avoiding concurrency problems. It supports Software Transactional Memory, but has been less used by what I see. Web frameworks have emerged, and has a project and dependencies manager called Leiningen. Some links in my Clojure posts.

To deliberate practice TDD (Test-Driven Development) and C#, I was building an interpreter (not a compiler to bytecodes, yet). The project:

Current status:

It has a class library project, and a test project. There is also a REPL (Read Eval Print Loop) simple console application.

In Lisp, an expressions is composed by a verb and arguments, written in a list enclosed by parenthesis. For example, a list that at evaluation returns the sum of 1, 2 and 3:

(+ 1 2 3)

Here, the plus + sign is a symbol that in Lisp/Clojure refers to a form. A form receives arguments, operates on them, and returns a result. A typical form receives its arguments as evaluated expressions: the expressions are evaluated BEFORE the evaluation of the form:

(+ 1 (- 3 4) 3)

In the above example, the first argument to plus is a constant 1, and the second argument is an expression that is evaluated to –1 before the evaluation of the outer list.

But there are forms that not need evaluated arguments. They receive the arguments without evaluation. They are called special forms. I have implemented:

And I have implemented some (non special) forms as primitives in C#. Most of them could be implemented in Lisp itself, but being so basic that I preferred to implement them directly in C#, using TDD as usual:

Next topics: the Machine implementation, Context, how to use Parser and Lexer, more about expression evaluation, macros, tail recursion, etc.

Stay tuned!

Angel “Java” Lopez

April 1, 2014

End Of Iteration 2014w13

Previous Post
Next Post

AjGenesis Agents

I started to add agents support to AjGenesis for Node, Express tasks:

The idea of agents is: instead of having code to render or produce page, code, classes, the agents are queried to solve problems: render this field, render this input, create the validation code, etc. Each agent could accept or not the problem: if an agent specialized in Angular detects that Angular is not being used in the application, then it is not loaded. Work in progress.

Ruby in C#

I updated:

My Ruby interpreter in C#. I added local variables detection. Ruby is a language where the local variables used in an scope can be listed. I wrote code to retrieve the name of local variables from expressions.

Clojure in C#

I worked on:

There are a few new primitived forms and special form, and more parser/lexer support.

Scala in C#

I started to add dynamic object support to

The idea is to have objects with defined methods. Maybe, I will re-implement the object without dynamic methods: these should be defined at compile time, instead of runtime. I’m thinking about the definition of classes for many objects, and singleton classes for only one object.

Rust in JavaScript

I updated my Rust interpreter in JavaScript:

with the support of modules, and public functions exposed in modules. I should add the references to them, using double colon operator.

AjLisp in Scala

To practice TDD and the use of SBT (Simple Build Tool), I started:

Where I’m reimplemented AjLisp ideas in Scala, using scalatest library for TDD

JavaScript Samples

To explore WebGL, canvas, and implement some code katas, I created:

WebGL is not easy: lot of details to setup an scene. Canvas examples were borrowed from other of my projects. To practice TDD, I started to wrote simple code katas, using SimpleUnit and Node.js

I was working on two non-public projects, too. More fun is coming.

Keep tuned!

Angel “Java” Lopez

March 8, 2014

New Month’s Resolutions: March 2014

Filed under: AjErl, C Sharp, ClojSharp, Clojure, Erlang, Open Source Projects, Scala, ScalaSharp — ajlopez @ 7:27 pm

Review of my February’s Resolutions:

- Complete distributed messaging in AjErl [partial] see repo
- Complete dot notation in AjLisp [pending]
- Improve ClojSharp [complete] see repo
- Work on ScaScript [partial] see repo
- Work on ScalaSharp [complete] see repo
- Add variable scope to Mass [pending]
- Complete first version Aktores actor model in C# [pending]
- More code generation tasks, templates, models in AjGenesis for Node, generating Express, Meteor, Sinatra applications [partial] see repo

To compensate missing coding, I worked on:

- Create Annalisa [complete] see repo with online web services and demo
- Start SimpleAsync [complete] see repo
- Create my first Meteor samples [complete] see repo
- Start Templie, a simple template engine in Java [complete] see repo
- Start SimpleScraper, a simple scraper in JavaScript/Node.js [complete] see repo

And I made minor improvements on DylanSharp

New month’s resolution:

- Work on DictSharp
- Give talk about Node.js Distributed Applications
- Improve SimpleGammon
- Improve Annalisa
- Add @for to Templie
- Work on PreciosaAnnalisa online web services
- Improve my Node.js Distributes Applications samples
- Work on ScalaSharp
- Improve ClojSharp
- Improve SimpleAsync, do operation (functions in parallel)
- Improve Aktores
- Distributed messages in AjErl
- Add variable scope to Mass language
- Start code generation as a service

More fun is coming.

Keep tuned!

Angel “Java” Lopez

February 7, 2014

New Month’s Resolutions: February 2014

Review of my January’s Resolutions:

- Start to implement Akka-like actor model in C# [complete] see repo
- Start to implement Scala interpreter in JavaScript [complete] see repo
- Work on AjErl [complete] see repo
- Work on Mass (I have many ideas to implement as module pattern and variable scope access) [pending]
- Work on DylanSharp [complete] see repo
- Start an implementation of ML (JavaScript? C#?) [pending]

I also worked on:

- Improving Scala interpreter in C# [complete] see repo
- Adding dot notation to Lisp interpreter in C# [complete] see repo
- Improving Ruby interpreter in JavaScript [complete] see repo
- Improving Clojure-like interpreter in C# [complete] see repo
- First templates, tasks generating Sinatra application in AjGenesis for Node [complete] see repo

My new month’s resolutions:

- Complete distributed messaging in AjErl
- Complete dot notation in AjLisp
- Improve ClojSharp
- Work on ScaScript
- Work on ScalaSharp
- Add variable scope to Mass
- Complete first version Aktores actor model in C#
- More code generation tasks, templates, models in AjGenesis for Node, generating Express, Meteor, Sinatra applications

More fun is coming

Keep tuned!

Angel “Java” Lopez

December 30, 2013

Clojure: Links, News And Resources (11)

Filed under: Clojure, Functional Programming, Links, Lisp, Programming Languages — ajlopez @ 4:43 pm

Previous Post

I have ten additional posts in my Clojure queue. A new one:

Clojure and the future for programmers like me
Attitudes common in the Clojure community are making that community increasingly unappealing to people like me. They may also be leading to a language less appealing to people like me than a Lisp should be.

A world in a ref

A tour of the Clojure landscape

Introduction to Clojure
by @stuartsierra at #strangeloop

Writing CouchDB Views using ClojureScript

Clojure Lisp Programming

frenchy64 / typed-clojure
Gradual typing for Clojure

Browser the open-source Clojure ecosystem

A TDD library for Clojure that supports top-down (‘mockish’) TDD, encourages readable tests, provides a smooth migration path from clojure.test, balances abstraction and concreteness, and strives for graciousness.

Laziness: the Good, the Bad, and the Ugly

The London Clojure Community:Persistent Data Structures in Clojure

Learning Clojure: Leiningen

The Curious Clojurist with Neal Ford

The Value of Values – Rich Hickey

Clojure Programming

Prismatic’s "Graph" at Strange Loop

Ruby + Clojure = Rouge

Clojure Tetris


Macros are Hard!

Writing Datomic in Clojure

Why Clojure?

My Links

Keep tuned!

Angel “Java” Lopez

August 22, 2013

Clojure: Links, News And Resources (10)

Filed under: Clojure, Functional Programming, Links, Lisp, Programming Languages — ajlopez @ 5:32 pm

Previous Post
Next Post

nchurch / go
Game of Go evaluation

jimpil / enclog
Clojure wrapper for Encog (v3) (Machine-Learning framework that specialises in neural-nets)

macourtney / Conjure
A Rails like framework for Clojure

ClojureScript Anatomy
Michael Fogus discusses the internal workings of ClojureScript, how it analyzes and compiles Clojure code to JavaScript.

With Liberator it is easy to create RESTful web services in Clojure.

Bootstrapping Clojure at Groupon
Tyler Jennings presents how he ended up choosing Clojure, how he is using a Ruby tool-chain in Clojure, plus advice on introducing Clojure to a team.

DSLs in Clojure
Jim Duey advises on solving a problem by dividing it in smaller requirements that are dealt with, then using DSLs to compose results into one big solution. Code samples in Clojure.

Pluralsight Course Library
Now with Clojure courses

An Apology Of Sorts: Functional Languages Are (Still) Overrated

Rich Hickey on Datomic, Data Storage, Functional Programming and Immutability
Rich Hickey explains how immutability enables Datomic’s features and facilitates programming (not just in functional languages). Also: Datomic and other NoSQL stores, Clojure Reducers and much more.

Extensible Data Notation

Clojure, Leiningen 2 and Heroku: AOT Compilation Gotchas

When Things Go Wrong: Clojure’s Exceptional Handling of Exceptions

Joxa is a small semantically clean, functional lisp. It is a general-purpose language encouraging interactive development and a functional programming style. Joxa runs on the Erlang Virtual Machine. Like other Lisps, Joxa treats code as data and has a full (unhygienic) macro system.

Particle System in Clojure with Quil

meteorfox / newtonian
Particle System in Clojure

Getting started querying an Eclipse workspace using Ekeko
Applicative logic meta-programming using Clojure’s core.logic against an Eclipse workspace.

cderoove / damp.ekeko
Applicative logic meta-programming using Clojure’s core.logic against an Eclipse workspace.

Keynote: The Value of Values
Rich Hickey compares value-oriented programming with place-oriented programming concluding that the time of imperative languages has passed and it is the time of functional programming.

Distilling Java Libraries
Zach Tellman provides advice on calling Java libraries from Clojure, exemplifying with Clojure code drawing graphics on the screen using the Java2D library.

SOLID Clojure
Colin Jones discusses applying the SOLID OOP principles to Clojure programming in order to create systems that are easy to change.

nbeloglazov / clojure-interactive-tasks
Set of interactive tasks to be solved using clojure

2012 State of Clojure survey

TodoMVC with ClojureScriptOne MVC and Enfocus

Functional Programming for the Object-Oriented Programmer

Rich Hickey – Podcast Episode 014

Real World Clojure – Doing Boring Stuff With An Exciting Language
Sean Corfield shows how to use Clojure as a general purpose scripting language for building web applications, tackling persistence, email, internationalization, configuration and environment issues.

Reactive Programming for Clojure(Script) UIs!topic/clojure-dev/LzVu4dIvOrg/discussion

My Links

Keep tuned!

Angel “Java” Lopez

August 18, 2013

Clojure: Links, News And Resources (9)

Filed under: Clojure, Links, Lisp, Programming Languages — ajlopez @ 6:17 pm

Previous Post
Next Post

Datomic Free Edition

Talking to Machines

Light Table Playground Levels Up

schani / clojurec
A Clojure implementation on top of C

Shall we use Clojure – my presentation

clojure @ runa :: dynamic pricing through DSLs

ztellman / lamina

Programming with Values in Clojure

Thrush in Clojure – Redux

Literate Programming Example with Clojure

Compile Clojure online

Why Prismatic Goes Faster With Clojure

ptaoussanis / timbre
Simple, flexible, all-Clojure logging. No XML!

The Clojure Library Ecosystem

ptaoussanis / carmine
Simple, high-performance Redis (2.0+) client for Clojure

Why is a Monad Like a Writing Desk?

amuller / checkero
Similar clojure code searcher

cgrand / parsley
a DSL for creating total and truly incremental parsers in Clojure

joshua-choi / fnparse
A library for creating functional parsers in Clojure

In this UnConj talk, Dan Friedman and William Byrd demonstrate the miniKanren logic programming system for Scheme.

Against the Grain: How We Built the Next Generation Online Travel Agency using Amazon, Clojure, and a Comically Small Team

Home at Last, or, The Last Programming Language I Will Ever Learn: LISP (Clojure)

My Links

Keep tuned!

Angel “Java” Lopez

August 6, 2013

Clojure: Links, News And Resources (8)

Filed under: Clojure, Links, Lisp, Programming Languages — ajlopez @ 4:03 pm

Previous Post 
Next Post

Anatomy of a Reducer

TheClimateCorporation / lemur
Lemur is a tool to launch hadoop jobs locally or on EMR, based on a configuration file, referred to as a jobdef.

Lemur: Declarative launching of Hadoop jobs on Elastic-Mapreduce

swannodette / mori
ClojureScript’s persistent data structures and supporting API from the comfort of vanilla JavaScript

Factual Releases Drivers that Matter: Python, Clojure, Haskell

Reducers – A Library and Model for Collection Processing

wtetzner / exploding-fish
A URI library for Clojure

andrewvc / clj-automata
Simple elementary automata sim. `lein run 110` to run rule 110 for example

A Brief Beginner’s Guide To Clojure

Clojure for Lisp Programmers Part 1

straszheimjeffrey / The-Kiln
The Kiln is designed to make large complex functions easier to maintain. By “large and complex,” I mean things such as web applications, where you do not compute a single, simple result for a well-defined input, but instead a very complex set of outputs along with side-effects.

Coding a transactional database using Clojure’s ‘reader literals’.

Getting Started with Eclipse and Counterclockwise

How F# helped me to appreciate Clojure’s reduce to traverse data structures (XMLs)

Live-Debugging Remote Clojure apps with Drawbridge

A Simple Clojure IRC Client

Improving Constant-space Tail Call Support in Clojure

The ClojureScript Compilation Pipeline

Dsl Intro

Translations from Javascript

Light Table

Distributed state in Clojure
Avout brings Clojure’s in-memory model of state to distributed application development by providing a distributed implementation of Clojure’s Multiversion Concurrency Control (MVCC) STM along with distributable, durable, and extendable versions of Clojure’s Atom and Ref concurrency primitives.

(take 5 daniel-spiewak)

Distributed concurrent applications in Clojure? Options

Can’t dynamically bind non-dynamic var in Clojure 1.3 and on

My links

Keep tuned!

Angel “Java” Lopez

July 31, 2013

Clojure: Links, News And Resources (7)

Filed under: Clojure, Links, Lisp, Programming Languages — ajlopez @ 5:33 pm

Previous Post
Next Post

ibdknox / live-cljs
a clojurescript version of bret victor’s editable game

First hundred days of Clojure

Racket vs. Clojure
I’ve been asked by several people to explain why I use Clojure for my professional work rather than Racket.

Splitting a Clojure namespace over multiple files

The Naming of Namespaces


Light Table’s numbers

Light Table – a new IDE concept—a-new-ide-concept/

Rich Hickey, the inventor of Clojure, discusses pods and other in-progress Clojure design work.

Rich Hickey on Clojure 1.4’s Extensible Reader, ClojureScript

A Dive Into Clojure

Rich Hickey on Datomic: Datalog, Databases, Persistent Data Structures

strangeloop / clojurewest2012-slides
Slides from Clojure/West 2012


aaronc /
Tasty SQL for ClojureCLR

rplevy / swiss-arrows
a collection of arrow macros

jclouds is an open source library that helps you get started in the cloud and reuse your java and clojure development skills.
Our api allows you freedom to use portable abstractions or cloud-specific features. We test support of 30 cloud providers and cloud software stacks, including Amazon, GoGrid, Ninefold, vCloud, OpenStack, and Azure.
We offer several API abstractions as java and clojure libraries.

Thought Provokers From Python’s Guido Van Rossum and Clojure’s Rich Hickey

Aprende Clojure

The Newbie’s Guide to Learning Clojure

Compiling Clojure to JavaScript, pt. 3 – The Himera Model

Clojure Cheatsheet

The Clojure Language
Youtube playlist

stathissideris / javamatic
Extremely simple but practical templating engine for writing tedious Java code

Clojure inventor Hickey now aims for Android
In an interview, Clojure founder Rich Hickey discusses future of the functional JVM language, including his mobile aspirations

This post explains how to write and deploy a Clojure application with Eclipse and Maven, the build automation tool for Java that is bundled in the Eclipse package “Eclipse IDE for Java”.

My Links

Keep tuned!

Angel “Java” Lopez

May 5, 2012

Clojure: Links, News And Resources (6)

Filed under: Clojure, Links, Lisp, Programming Languages — ajlopez @ 4:47 pm

Previous Post
Next Post

More links about Clojure:

Clojure and me » A poor man’s interval tree

C2: Clojure(Script) data visualization

cljs-template with Clojure/ClojureScript REPLs from Emacs

A Brief Beginner’s Guide To Clojure

A Core.logic Primer · clojure/core.logic Wiki

Clojure to Scheme to C to the bare metal.

Clojure – splice and easy – sw1nn

a lein-newnew template for clojurescript projects

Clojure in Python

[Clojure] Clojure list syntax sugar: f(x) notation – Grokbase

(mix Processing Clojure)

Connect With Your Creation Through a Real-Time Editor

fogus: Datomic
Rich Hickey, Stuart Halloway, and others at Relevance, Inc. have announced Datomic — a new kind of database.

The Big Three – Scala, Clojure and Groovy | The Code General

Loading Data with Clojure | Brad Lucas | Beacon Hill

Implement A Dsl ← – Web Application Development with Clojure – Part 1

Dancing monkey gibbers on about macros and such…

InfoQ: Clojure: Towards The Essence Of Programming

InfoQ: Event-Driven Programming in Clojure

Overtone and ClojureScript

Sam Aaron: “Programming Music with Overtone” | Clojure on Blip

binomial coefficients « Clojure Companion Cube

Fusion Programming: From Python to Clojure and Back | cassiel

CodeLesson – Introduction To Clojure

My Links

Keep tuned!

Angel “Java” Lopez

Older Posts »

The Shocking Blue Green Theme. Blog at


Get every new post delivered to your Inbox.

Join 65 other followers