Angel \”Java\” Lopez on Blog

February 12, 2014

End Of Iteration 2014w06

Previous Post 
Next Post

More deliberate TDD practice in my open source projects

AjErl

My Erlang-like interpreter in C#:

https://github.com/ajlopez/AjErl

I added selective receive to process mailboxes. It was an interesting implementation, where each mailboxes has a save queue to keep the rejected messages. Once a message is accepted, the save queue is put again as a message queue, ready to be consumed again.

ScalaSharp

My Scala interpreter in C#:

https://github.com/ajlopez/ScalaSharp

I added binary expressions. I started to think about type check implementation. This next week I will add an explicit AST (Abstract Syntax Tree) to be used for type checking. Not all Scala expression can be type checked at parser time, because possible not-resolved cross references.

ScaScript

My Scala interpreter in JavaScript:

https://github.com/ajlopez/ScaScript

Minor additions: parse class with body, parse a suite of statement (a list of statement). One thing to review in this project and the previous one: Scala new line in lexer/parser. The language has special rules to skip or not a new line, depending on the context. I should add type checkting to this JavaScript project.

ClojSharp

My Clojure interpreter in C#:

https://github.com/ajlopez/ClojSharp

I applied a surgical refactor: internal reimplementation of top level context to save internally clojure vars. In this way, the top level definitions are saved not as name/value but as named var/value. The rest of the context are simple name/value dictionaries (like the context created by the special form let).

SimpleScraper

I created a new JavaScript/Node.js package:

https://github.com/ajlopez/SimpleScraper

a simple web scraper in JavaScript/Node.js. The initial commits only process HTML in text, iterating over tag items. Light weight, no dependencies needed yet.

Others

I added minor changes to:

https://github.com/ajlopez/AjSharp
https://github.com/ajlopez/AjScript
https://github.com/ajlopez/RubySharp
https://github.com/ajlopez/RuScript

I worked on three non-public projects, too.

More fun is coming.

Keep tuned!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

January 15, 2014

End Of Iteration 2014w02

Filed under: .NET, Akka, C Sharp, Iteration, JavaScript, Lambda Calculus, NodeJs — ajlopez @ 6:58 pm

Previous Post
Next Post

A lot of work at the second iteration of the year:

More Code Generation with AjGenesis

I created

https://github.com/ajlopez/AjGenesisNode-Sinatra

with a simple Sinatra site generated using AjGenesis for Node. I should add the entity support (list, persistence, view, edit, new) but it was created in two hours. Nice experience adapting templates

Aktores

An Akka-like actor model implemented in C#. It was born on Sunday:

https://github.com/ajlopez/Aktores

I’m using TDD, as usual. My ideas are implemented using baby steps, make it works, make it right, and in the future, make it fast. I’m not concerned with performance yet, but to have all the pieces in place for local run. Then, I will add distributed processing. One of the key things is the message mailbox management. By now, I have only one by actor system, implemented using a concurrent queue. I planned to add a queue by actor, if specified at creation of the actor.

Scala in JavaScript

The project

https://github.com/ajlopez/ScaScript

An interpreter, not a “transpiler” to JavaScript. I want to do dog fooding of my SimpleGrammar project, and learn a bit about Scala language.

Lambda Calculus

Implemented in JavaScript, a Saturday code kata:

https://github.com/ajlopez/SimpleLambda

Next steps: add named functions.

DylanSharp

More work in my Dylan-like language implemented as an interpreter over C#:

https://github.com/ajlopez/DylanSharp

Others

I added minor functionality to ClojSharp (Clojure-like in C#) https://github.com/ajlopez/ClojSharp/commits/master. I worked on two non-public projects.

More fun is coming

Keep tuned!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

September 23, 2013

End Of Iteration 2013w38

Filed under: .NET, C Sharp, JavaScript, NodeJs, Open Source Projects, PHP — ajlopez @ 10:34 am

Previous Post
Next Post

I started to prepare new talks, for October, November (PHP, ASP.NET MVC, Python, Smalltalk, Ruby).

PhpSamples

I have a new project:

https://github.com/ajlopez/PhpSamples

with simple PHP pages, and one server with interaction with Node:

PageJs

I have a simple compiler for PHP to JavaScript

https://github.com/ajlopez/PageJs

A running page using Node.js

SimpleGrammar

The parser for PageJs is based on SimpleGrammar

https://github.com/ajlopez/SimpleGrammar

I published version 0.0.2, with some internal refactoring. It was very easy to extend PageJs parser with new expressions and commands. Good dog fooding!

Others

SimpleProlog: parse queries and rules.
AjTalkJs: better compilation of variables.
RubySharp: new class diagram to be used in a post.
SharpMongo: count() in collections
SimpleLisp: refactor tests to use simpleunit
SharpStorm: adding IBolt

I worked on two non-public projects, too.

Keep tuned!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

August 18, 2013

TDD Kata (7): Manage your Energy

Previous Post

This is a problem that I found in my Google Code Jam. This time, it is a problem where we should put a lot of neuron work in the resolution of algorithm. Apparently, there is no obvious solution. The problem is:

https://code.google.com/codejam/contest/2418487/dashboard#s=p1

You can check my solution at:

https://github.com/ajlopez/TddRocks/tree/master/Energy

And my commit history at:

https://github.com/ajlopez/TddRocks/commits/master/Energy

I was with few left time, so I only wrote some tests, and run the Google initial example. But I could not solve the “small set”. Some days ago, I tried again, but the result I got is not the correct, according Google.

So, some day I could take the problem again. It should be tricky how to decide the energy to put on each activity, knowing the future.

Let’s got, try to solve it!

Keep tuned!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

August 4, 2013

New Month’s Resolutions: August 2013

Time to review my July’s resolutions:

- Update Memolap [complete] see repo
- Update GrammGen [complete] see repo
- Update SimpleGrammar [complete] see repo
- Prepare a talk: Intro to Smalltalk [complete] see talk
- Start PHP compiler to JavaScript [complete] see repo
- Write PHP example with Node.js [pending]
- Update AjLispJs [[pending]
- Create a web site sample using AjLisp and Node.js [pending]

Instead of updating AjLispJs, I started another project:

- Start SimpleLisp, Lisp compiler to JavaScript [complete] see repo

Additionally, I worked on:

- Start SimpleContext, associate arbitrary data to simple JavaScript objects [complete] see repo
- Start SimpleProlog, Prolog language interpreter in JavaScript/Node.js [complete] see repo
- First version of KodeTokenizer [complete] see repo
- First version of KodeMutator [complete] see repo
- Publish Obops on Nuget [complete] see repo
- Publish my first Smalltalk samples [complete] see repo
- Create and pubish first version of Plagre, programming language recognizer [complete] see repo see demo
- Updated my TDD Rocks samples [complete] see repo
- Start SharpBase C# in-memory database [complete] see repo
- Start AjForce, applications in Node.js a la Force.com [complete] see repo
- Start OStore, in-memory JavaScript object store [complete] see repo
- Added Rack samples to my Learning Ruby [complete] see repo
- Write SimpleMule, simple Mule-like in JavaScript/Node.js [complete] see repo

Also, I published Google hangouts:

- TDD Rocks (1) Playing with Ruby
- TDD Rocks! (2) OStore with JavaScript/Node.js
- Exploring Smalltalk (1) (Spanish)
- TDD Rocks! (3) SharpBase in C#
- TDD Rocks! (4) SharpBase in C#

My new month’s resolutions, August 2013:

- Update SimpleProlog
- Update Mass
- Update AjTalkJs
- Update AjTalk
- Update SimpleLisp
- SimpleLisp web server sample
- New Google Hangout using Ruby and TDD
- New Google Hangout using C# and TDD

Lot of fun is coming ;-)

Keep tuned!

Angel “Java” Lopez
http://www.ajlopez.com
@ajlopez

July 29, 2013

End Of Iteration 2013w30

Previous Post
Next Post

A summary of the past week:

Smalltalk Intro

A work in progress presentation at:

https://github.com/ajlopez/Talks/tree/master/SmalltalkIntro

KodeMutator

First version, it can mutate a source code file, and then run any command (usually the tests)

https://github.com/ajlopez/KodeMutator

All written using TDD

Obops

Object operations (add, subtract, etc..) a la Visual Basic.NET. I published it at Nuget:

https://github.com/ajlopez/Obops

Smalltalk Samples

My first published code, as fileouts and as a FileTree repository:

https://github.com/ajlopez/SmalltalkSamples

I also published on http://smalltalkhub.com/ see http://smalltalkhub.com/#!/~ajlopez. For using Git/GitHub and FileTree, see:

http://www.stic.st/wp-content/conferences/2012/Wednesday/1415-Practical_Git_for_Smalltalk-Henrichs.pdf

http://www.jarober.com/blog/blogView?showComments=true&title=Practical+Git+for+Smalltalk&entry=3509797949

SimpleProlog

A Prolog interpreter in JavaScript/Node.js. I have atom, variable, facts, base, partial unification. I should work on rules, parser (Edinburg syntax) and full unification algorithm:

https://github.com/ajlopez/SimpleProlog

Again, all written using TDD.

TDD Rocks!

I published a new video:

TDD Rocks! SharpBase in C#

showing my TDD workflow building a simple in-memory database.

Private Projects

I worked on two private projects: one having an in-memory OLAP cube, and the other was a simple but powerful use case implementation, involving a Single Page Application (all model at browser).

More fun is coming!

Angel “Java” Lopez
http://www.ajlopez.com
@ajlopez

July 14, 2013

TDD Kata (6): Bulleyes

Previous Post
Next Post

At Google Code Jam, Round 1A, I found this problem:

https://code.google.com/codejam/contest/2418487/dashboard

The bull eyes problem: Mary should paint a series of concentric circle, given a radius and an initial amount of paint. The problem is: given r and t (the radius and the amount of paint) how many circles of width 1cm Mary can pain?

I wrote my solution using TDD, but after a first thoughts, I coded a solution using a formula, see:

https://github.com/ajlopez/TddOnTheRocks/tree/master/Bulleyes

The commit history at:

https://github.com/ajlopez/TddOnTheRocks/commits/master/Bulleyes

At the beginning, I had an algorithm that depended on a function that calculates the amount of paint needed to paint a circle of radius r. But then, I replaced it by other algorithm, that directly returns the count of circles that Mary can pain, given an initial radius and paint quantity. All my tests continued to be in green.

As in other Google Code Jam problems, I didn’t write the console program using TDD. I put my focus on the right algorithm. In this case, it was enough to have a general formula that solves the problem.

Keep tuned!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

July 1, 2013

End Of Iteration 2013w26

Filed under: .NET, C Sharp, JavaScript, Open Source Projects, Programming Languages, Python — ajlopez @ 9:03 am

Previous Post
Next Post

These were my activities in my open source projects, 2013 week 26th:

Talk: Intro to Python

https://github.com/ajlopez/TalkPythonIntro

I’m completing my presentation, using reveal.js

Python Programming Samples

https://github.com/ajlopez/ProgrammingLanguagesSamples/tree/master/Python

I added minimal programs, a la Hello, World, a Flask sample, and a Django sample

TRun

https://github.com/ajlopez/TRun

I started a task runner, in C#. I want to automate some steps in a simple way. As usual, it is being written using TDD:

Learning Python

https://github.com/ajlopez/AprendiendoPython

I did minimal changes to my Spanish page tutorial

GrammGen

https://github.com/ajlopez/GrammGen

I updated the grammar/parser generator, to have a parser that pursues the reduction of a term.

AjLisp in JavaScript

https://github.com/ajlopez/AjLispJs

I fix a test, minor change. I want to use it in the development of a Node.js/(Express maybe) dynamic site, using Lisp

Most of the week was dedicated to prepare my Python intro talk. I guess I will have more time for programming in the next week. I should to prepare a talk Intro to Smalltalk, for July 1st, Buenos Aires.

Keep tuned!

Angel “Java” Lopez
http://www.ajlopez.com
@ajlopez

June 30, 2013

TDD Kata (5): Tree Search

Filed under: .NET, Agile Software Devevelopment, C Sharp, Test-Driven Development — ajlopez @ 3:28 pm

Previous Post
Next Post

Some months ago, I read this message in a TDD list:

Implementation of game tree search using TDD
http://tech.groups.yahoo.com/group/testdrivendevelopment/message/35419

I read:

I am trying to use TDD to implement game tree searching but I am running
into some issues.Using C#, MS Test and Rhino Mocks.
My requirement is to traverse a tree to a specified depth and find the
maximum value of the nodes at this depth. If a path ends before the
specified depth then the value of the last node in the path should be
considered.
Sample usage looks like this:
var depth = 5;
var tree = new GameTree();
var treeSearch = new TreeSearch();var maxValue =
treeSearch.FindMaxValue(tree, depth);

The first tests to implement:

* A search to depth zero should return the value of the root node
* A search to depth one with no children should return the value of
the root node
* A search to depth one with one child should return the value of the
child
* A search to depth one with two children should return the highest
value of the two children
* A search to depth one of a tree with depth two should return the
maximum value at depth one

All right, but:

Up to this point the tests are simple enough and mocking of the tree is
simple. The last test starts driving towards a depth first tree
traversal.Now I start on depth 2 tests which should drive the rest of
the tree traversal algorithm:
* A search to depth two should return the maximum value at depth two
I decided to mock a complete binary tree with depth 2

The problem is the use of mocks: it complicates the solution. So, I started to solve the problem, without mocks, simply using a tree implementation to use as a base for other tests:

https://github.com/ajlopez/TddOnTheRocks/tree/master/GameTreeSearch

The solution is simple:

You can see the history of development at:

https://github.com/ajlopez/TddOnTheRocks/commits/master/GameTreeSearch

All tests are green:

Lesson learnt: some times (many times ;-) is easier to implement something concrete than build a mock. The tree I implemented could be refined, could be the base for an interface extraction, or could be implemented in other ways. But it served as a base for our search algorithm, using TDD.

Keep tuned!

Angel “Java” Lopez
http://www.ajlopez.com
@ajlopez

June 23, 2013

End Of Iteration 2013w25

It’s the end of my personal weekly iteration on programming. Today, I started to write down an “end of iteration” post. My public work:

ExpressSamples

https://github.com/ajlopez/ExpressSamples

I updated the samples, and started to write some test, to learn how it could be tested. For me, it is an exploration spike, but it’s time to learn how to write Express applications using TDD. The below example uses MongoDB:

Learning Java

https://github.com/ajlopez/AprendiendoJava

My GitHub pages in Spanish. I updated the intro page:

SimpleForth

https://github.com/ajlopez/SimpleForth

I updated my Forth-like compiler to JavaScript. It’s in a good state, written using TDD. Inspired by project fjs, it’s an idea I had for years: write a Forth intepreter. Now, this project is a compiler. After writing CobolScript compiler, I have the resources to write a Forth one. The primitives are not the same, i.e., the operators are the JavaScript ones. I hope to add interaction with host language (JavaScript, Node.js) and async call support.

ObOps

https://github.com/ajlopez/Obops

Operators for .NET objects. I had to write this project to give support of arbitrary objects operators. In other projects, I use Microsoft.VisualBasic.CompilerServices, but apparently there is no support in Mono for such methods. For now, I have binary arithmetic and compare operators implemented. It is used in Mass programming language. I relies on code generation via AjGenesis, to avoid to write all the type combinations.

Mass

https://github.com/ajlopez/Mass

I added the new operators from ObOps, and now the project should compile in Mono. I did a big refactor: change the scope rules, to adopt a JavaScript-way using var and function hoisting. Thanks to TDD, the refactor ran smoothly.

There is an assert module, to start writing Mass using TDD:

https://github.com/ajlopez/Mass/blob/master/Src/Mass.Core/modules/assert.ms

First tests:

https://github.com/ajlopez/Mass/blob/master/Src/Mass.Core.Tests/MachineFiles/Assert.ms

Additional modules will be hosted in NPM.

Talk Intro to Python

I started to write my next talk presentation:

https://github.com/ajlopez/TalkPythonIntro

Only two slides ;-). But it was a good user experience, my first time using Reveal.js. Good support for markdown and code highlighting. No preprocessor needed, simply write the HTML file.

SimpleGrammar

https://github.com/ajlopez/SimpleGrammar

I had the idea of write a PEG (Parsing Expression Grammars) in JavaScript, see https://github.com/ajlopez/SimpleParser (there are links). But I started this new project, realizing that my previous lexers and parsers are faces of the same coin. Now, I have a generic parser, based on rules that detect parts of the code (integers, string, names, etc…)

GrammGen

https://github.com/ajlopez/GrammGen

Before SimpleGrammar, I started a C# project, having a generic lexer/tokenizer and a generic parser. But after my experience with SimpleGrammar, I refactored the code to have a generic parser with detection rules.

TDD in Python

https://github.com/ajlopez/TddOnTheRocks/tree/master/Python/Calculator

My first Python experiment using TDD, using simple import unittest.

AjLisp in Python

https://github.com/ajlopez/AjLispPython

After my first experience with unittest and Python, I started to write a new version of AjLisp, this time in Python. It is WIP, you can see my commit by test at:

https://github.com/ajlopez/AjLispPython/commits/master

I’m using Python 3.3 on a Windows 8 machine.

A lot of fun ;-)

Keep tuned!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

« Newer PostsOlder Posts »

The Shocking Blue Green Theme. Blog at WordPress.com.

Follow

Get every new post delivered to your Inbox.

Join 66 other followers