Angel \”Java\” Lopez on Blog

October 7, 2014

New Month’s Resolutions: October 2014

Filed under: .NET, C Sharp, JavaScript, NodeJs, Open Source Projects — ajlopez @ 5:50 pm

Time to write my technical new month’s resolutions. But first, review of past month’s ones:

– Distributed Aktores [complete] see repo
– Distributed AjErl [pending]
– Web support and example for RuScript [partial] see repo
– Complete Mochy [partial] see repo
– Improve RSharp [complete] see repo
– Work with NodeJs on Deep Learning, Internet of Things, Artificial Intelligence [pending]
– Work on Code Generation using AjGenesis for Node [complete] see main repo see Express repo see Sinatra repo see Laravel repo
– Work on Liqueed Project [complete] see repo

Additional, I worked on

– Improve AjScript [complete] see repo
– Refactor BasicScript tests to use SimpleUnit [complete] see repo
– Create SimpleColls, simple collection functions in JavaScript, alone or a la Linq [complete] see repo
– Refactor SimpleStore tests to use SimpleUnit [complete] see repo
– Improve AjTalkJs, Smalltalk in JavaScript, support for super, Express 4 first sample [complete] see repo
– Refactor MProc tests to use SimpleUnit [complete] see repo
– Refactor AjLogoJs tests to use SimpleUnit [complete] see repo
– Refactor SimpleKeeper tests to use SimpleUnit [complete] see repo
– Refactor SimpleTags tests to use SimpleUnit [complete] see repo
– Improve SimpleUnit, publish new version [complete] see repo
– Refactor SimplePipes tests to use SimpleUnit, and publish new version [complete] see repo

My new month’s resolutions:

– Give a talk Aktores intro
– Distributed AjErl
– More Express samples in AjTalkJs
– Explore neural networks in JavaScript
– Explore genetic algorithms in JavaScript
– Explore other artificial intelligence topics in JavaScript
– More Distributed Aktores
– Start Distributed Smalltalk in AjTalkJs

Stay tuned!

Angel “Java” Lopez

September 13, 2014

New Month’s Resolutions: September 2014

Filed under: .NET, C Sharp, JavaScript, NodeJs, Open Source Projects — ajlopez @ 5:34 pm

A bit late, time to review my August’s Resolutions:

– Write jQuery mock to be used in console tests/Node.js [complete] see repo
– Write simple functions in JavaScript for array manipulation [complete] see repo
– Continue with Liqueed project [complete] see repo
– Start with Distributed Aktores [partial] see repo
– Startwith Distributed AjErl [pending]

Additionally, I worked on:

– Give an intro talk about Express [complete] see repo see presentation see samples
– Improve AjScript [complete] see repo
– Improve RuScript, Ruby interpreter in JavaScript [complete] see repo
– Refactor SimplePipes [complete] see repo
– Generate Node.js/Express server code from RAML [complete] see repo
– Create Dynamic Site from JSON to Express [complete] see repo
– Improve RustScript, Rust interpreter in JavaScript [complete] see repo
– Create Mochy, test framework a la Mocha [complete] see repo
– Create RSharp, R language interpreter in C# [complete] see repo
– Refactor (and simplify) SimpleRules, rule engine in JavaScript [complete] see repo
– First samples for SimpleMule [complete] see repo
– Improve output for SimpleUnit [complete] see repo

My new month’s resolutions:

– Distributed Aktores
– Distributed AjErl
– Web support and example for RuScript
– Complete Mochy
– Improve RSharp
– Work with NodeJs on Deep Learning, Internet of Things, Artificial Intelligence
– Work on Code Generation using AjGenesis for Node
– Work on Liqueed Project

Stay tuned!

Angel “Java” Lopez

August 10, 2014

New Month’s Resolutions: August 2014

Filed under: .NET, C Sharp, JavaScript, Open Source Projects — ajlopez @ 5:59 pm

Time to write new resolutions, and to review July 2014 ones:

– Improve AjGenesisNode code generation for Express [complete] see repo
– Improve AjGenesisNode code generation for Sinatra [partial] see repo
– First AjGenesisNode code generation for Laravel [pending]
– Module loading, export review in Mass Language [pending]
– Continue with SharpBus [complete] see repo
– Continue with Dynamic Site [pending]
– Give a talk about Node.js/Express [complete]
– Improve my personal site code [complete] see repo
– Write TDD Post [pending]
– Write C# Posts [complete] see posts
– Distributed use using Aktores [pending]
– Review, refactor and continue RustScript implementation [complete] see repo

Additionally, I worked on:

– Started SimpleList [complete] see repo
– Started SimpleJQuery [complete] see repo
– Improve SimpleMule [complete] see repo
– Started SharpGD, Graph Database in C# [complete] see repo
– Improve SimpleBus [complete] see repo
– Improve SharpGo [complete] see repo
– Improve ExpressSamples [complete] see repo
– Minor improvements in ScaScript [complete] see repo
– Improve ScalaSharp [complete] see repo
– Write Friends sample for JavaScriptSamples [complete] see repo
– Write Angular examples [complete] see repo
– Add remove method to OStore [complete] see repo
– Collaborate with Liqueed project [complete] see repo

New resolutons for August 2014:

– Write jQuery mock to be used in console tests/Node.js
– Write simple functions in JavaScript for array manipulation
– Continue with Liqueed project
– Start with Distributed Aktores
– Startwith Distributed AjErl

Also, I worked for thread count is 3.

Keep tuned!

Angel “Java” Lopez

July 29, 2014

SharpStorm Implementing Storm in C# (1) Initial Project

Filed under: .NET, C Sharp, Open Source Projects, SharpStorm, Storm — ajlopez @ 12:44 pm

In the last two years I was exploring the ideas of Storm (see, implementing a local topology Node.js. It’s time to practice more C # and TDD (Test-Driven Development), with:

Current status of the project:

The idea is to implement Bolt, Spout and a TopologyBilder. See

There are just three abstractions in Storm: spouts, bolts, and topologies. A spout is a source of streams in a computation. Typically a spout reads from a queueing broker such as Kestrel, RabbitMQ, or Kafka, but a spout can also generate its own stream or read from somewhere like the Twitter streaming API. Spout implementations already exist for most queueing systems.

A bolt processes any number of input streams and produces any number of new output streams. Most of the logic of a computation goes into bolts, such as functions, filters, streaming joins, streaming aggregations, talking to databases, and so on.

A topology is a network of spouts and bolts, with each edge in the network representing a bolt subscribing to the output stream of some other spout or bolt. A topology is an arbitrarily complex multi-stage stream computation. Topologies run indefinitely when deployed.

In the project are now defined interfaces, to have bolts and spouts, and topology builder to build a topology. For now, I want a local implementation (without distributed processing). Then, I hope to implement ACK algorithm that has original Storm, which lets you know when an incoming message was completely processed (including processes messages that occurred in the middle of the process).

Upcoming topics: discuss ISpout, iBOLT, and topology implementation.

Stay tuned

Angel “Java” Lopez

July 28, 2014

SharpDoop Implementing Map Reduce in C# (1) The Project

Filed under: .NET, C Sharp, MapReduce, Open Source Projects, SharpDoop — ajlopez @ 4:51 pm

I was experimenting with map-reduce in Node.js / JavaScript. But it is also something interesting to implement the algorithm in C #, to practice TDD (Test-Driven Development) and to learn more about what it takes to implement the algorithm. The project that I started is:

The current status:

It has a class library project and the test project. I came to think of something not yet distributed. All I want for now is to specify the map/reduce algorithm map, and run it in the same process.

See that there is then a MapReduceJob. The base class that is responsible for running a map (lambda function) and reduce (takes a key,  a list of values for that key, and output the result). With C #, these two operations can be expressed as lambdas or delegate methods inside a more complex object. For now, I pose the simple cases in the tests, and all them are running.

I also put together a MapProcessJob, which is a variant of map / reduce to discuss. Instead of processing all keys first, then roll them into the reduce phase, try to do everything together. In some use cases it may be more efficient, but is an issue to discuss in more detail.

Upcoming topics: more in-depth review and implementation ideas, such as map / process.

Stay tuned!

Angel “Java” Lopez

July 27, 2014

AjTalk Implementing Smalltalk In C# (4) The Project

Filed under: .NET, AjTalk, C Sharp, Programming Languages, Smalltalk — ajlopez @ 5:48 pm

Previous Post

Year and a half since I didn’t write about this project in C #, but I was working on it, and the parallel implementation I have in JavaScript (in fact, I introduced some concepts of both the Smalltalks 2013 conference, Rosario, Argentina).

The project is at:

Current structure:

The projects are:

AjTalk: class library, with a compiler to bytecodes implementation. There is a compiler to JavaScript too. There is an interpreter of those bytecodes.

AjTalk.Compiler: a console project that uses the compiler to JavaScript.

AjTalk.Console: a simple REPL (Read Eval Print Loop)

AjTalk.Gui: a work-in-progress example using windows

AjTalk.Tests: the test I wrote, followin TDD (Test-Driven Development) flow.

I guess now I don’t need the compiler to JavaScript, because I have a native JavaScript implementation at:

It can compile to bytecodes or to JavaScript. The project is written in JavaScript.

The window implementation is very primitive. I plan to replace it for direct AjTalk program using .NET types and object.

One point that I find very interesting (in both projects, C # and JavaScript) is to have a modular implementation: instead of loading an image yet defined, my plan is to define modules to load, as happens in the Node.js environment . The modules would be published in the NPM (Node Package Manager’s), and each could indicate which modules need in your program instead of lifting all Smalltalk.

Another topic in this C # project I have implemented that can run more than one AjTalk machine at the same time. And I can even make a machine “help” to the other. For example, if the machine does not have to compile methods to new methods, machine B can go to his aid. Thus, A machine (and his image, I’m already recording binary image) can be kept small.

Another feature that I have implemented: the ability to send a message to an object, without waiting for a response, a “fire and forget”. And that the target object can attend ONE OF those messages as models of actors.

I have to review the implementation of remote objects (now based on the old Remoting. NET). But I think it is an important feature to maintain and explore.

Well, you see, many issues remain for other posts, such as implementation details Smalltalk concepts such as Object, Class, ClassDescription, Behavior, MetaClass, etc..

Nos leemos!

Angel “Java” Lopez

July 26, 2014

AjKeyvs Implementing Key-Value Store in C# (1) The Project

Filed under: .NET, AjKeyvs, C Sharp, No, NoSQL, Open Source Projects, Test-Driven Development — ajlopez @ 6:40 pm

I want to implement a key-value store (as Redis) in C#, play with data structures, and practice TDD (Test-Driven Development). I started:

The current structure:

There is a class library project, AjKeyvs, that contains the collections in an in-memory repository. The interesting part of this projects is to implement arrays and sets that can be sparse, having different keys. Example, having a key 1 (one) and a key 1000000 (one million) does not imply to have an array with one million positions. At the same, I want to have a good access and update time. In other use cases, I will have string keys, like “user”, “user:1”, “user:1:email”, etc. There are use cases that need the use of sets, with union, intersection, difference, etc… For integer keys, I jave a set where a could turn a bit on or off, for the presence or absense of an element. More implementation details in upcoming post.

The library can be used in-process, but I added a server and a client program. The server listen commands sent by the clientes. All collections reside in memory. Persistence is something orthogonal to the implemented use cases. I should decide if add the persistence into the command processing, or is something to be implemented outside the project.

As usual, I followed TDD workflow.

Next topics: data structures, collections, commands, concurrency, etc.

Stay tuned!

Angel “Java” Lopez

July 24, 2014

DylanSharp Implementing Dylan in C# (1) The Project

Filed under: .NET, C Sharp, DylanSharp, Functional Programming, Open Source Projects — ajlopez @ 4:30 pm

A few months ago I started to implement an interpreter of Dylan language, to practice TDD in C #, and learn some functional programming. I read:

Dylan is a multi-paradigm functional and object-oriented programming language. It is dynamic while providing a programming model designed to support efficient machine code generation, including fine-grained control over dynamic and static behaviors.

The interesting thing about Dylan is that it incorporates types and objects. For now I do not intend to generate machine code, but, following "baby steps" to implement the main concepts of language as an interpreter. I would like to add access to the libraries. NET, which I find interesting to extend the reach of language. You can learn more of the language in:

The project I am writing in C # is:

Its current structure:

It consists of a class library, and a draft tests. So far there are some simple expressions implemented a Parser a Lexer and implemented as a concept of class C # language: List, which lists as implemented in Lisp. As in other projects, I Context to maintain the values ​​of variables, and recall by name. Notably, in Dylan variables have type, but I’m not controlling the types, just evaluating any expressions. I’ll have to decide at some point to control the types at the time of compiling / processing program. According:

Type mismatch errors should be caught at compile time.

But the time will come. Advancing TDD, I am confident that if necessary I can make a “surgical” refactor / redesign, without a lot of pain. I could do this in the next iteration or later. I did something similar during the coding of ScalaSharp.

Next steps: continue implemented expressions, definitions of classes, modules, commands, anonymous functions. And control the types.

Stay tuned!

Angel “Java” Lopez

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

July 21, 2014

Aktores Implementing Actor Model in C# (1) The Project

Filed under: .NET, Akka, Aktores, C Sharp, Open Source Projects — ajlopez @ 4:11 pm

Next Post

It’s time to write about the project:

I’m implementing the first steps towards an actor model, message passing, taking ideas from Akka. I had worked something in Node.js, and C#, having actors sending messages to each other, but this time I want to follow the path of Akka, step by step, for example, have names of actors, in a tree, distributed system of actors, and monitoring agents.

The status of the project today:

The current actor implementation:

First, an Actor is an abstract class, to be implemented in each use case. The rest of the system would not talk to an actor directly, but through a ActorRef. For example, to send a message, there is a method Tell in ActorRef. Internally, no process sends messages to the actor directly, but each actor has a Mailbox. And the mailbox is used by ActorRef to send a message to the final Actor. The Actor object is a passive object: it not manage the Mailbox directly, but there are threads that will take pending tasks, get message from Actor mailbox, and send it to the Actor. The system internally ensures that the actor receives and processes messages one by one. The actor does not have to worry about competition from multiple threads. Notably, the Actor has no direct reference to the Mailbox. More details in upcoming posts.

Stay tuned!

Angel “Java” Lopez

« Newer PostsOlder Posts »

The Shocking Blue Green Theme. Create a free website or blog at


Get every new post delivered to your Inbox.

Join 69 other followers