Monthly Archives: June 2011

AjModel: Model by Code (Part 2) Models and Repositories

Previous Post

I was working on my AjModel project. You can download the source code from my AjCodeKatas Project under trunk/AjModel. I added a Model class, and enhanced Entity Model and Property Model:

The model refers all the entity models I want to have in the coded model. AjModel enrich the already coded classes of your model, adding information like human descriptions, legends, etc. The idea is to generate automatically a UI for the coded model, for different technologies. The enhanced model could have nothing new, and AjModel should generate the initial UI, at runtime. The enhanced model could be consumed from differents UI technologies: the “proof of concept” application is an ASP.NET MVC one.

There is a fluent interface for EntityModel, and PropertyModel. There are extension methods, and wrappers/builders, like:

Some usage examples, borrowed from my tests:

EntityModel<Customer> model = new EntityModel<Customer>();
FluentEntityModel<Customer> fluentModel = new FluentEntityModel<Customer>(model);
fluentModel.Name("BusinessCustomer")
    .SetName("BusinessCustomers")
    .Descriptor("Business Customer")
    .SetDescriptor("Business Customers");
//..
Model model = new Model();
var entityModel = model.ForEntity<Customer>();
entityModel.Descriptor("Business Customer")
    .SetDescriptor("Business Customers");
//..
Model model = new Model();
model.ForEntity<Customer>().Property(
    c => c.Name,
    pm => pm.Descriptor("Customer Name")
            .Description("The Customer Name")
);

Where pm is a FluentPropertyModel.

In the UI process, I want to retrieve an entity by its identity. Or I need to get a list of entities to build a grid. Then, I need something to manage the entities, as a list. I implemented repositories in a context, to be implemented by different technologies. The current implementation is an in-memory list:

I’m planning to write adapter examples to NHibernate, Entity Framework, but those ideas are still in blueprints 😉

Usage examples:

this.entityModel = new EntityModel<Customer>();
this.domain = new SimpleDomain();
this.repository = new Repository<Customer>(this.entityModel, this.domain.Customers);

Note that the repository is a typed one, using generics. And it needs an entity model, and (in the current implementation) an IList to manage. The context contains a list of repositories:

var entityModel = new EntityModel<Customer>();
var domain = new SimpleDomain();
var repository = new Repository<Customer>(entityModel, domain.Customers);
var context = new Context();
context.AddRepository(this.repository);
var repo = context.GetRepository("Customer");

SimpleDomain is a class I created for tests:

public class SimpleDomain
{
    public SimpleDomain()
    {
        this.Customers = new List<Customer>();
        for (int k = 1; k <= 10; k++)
        {
            Customer customer = new Customer()
            {
                Id = k,
                Name = string.Format("Customer {0}", k)
            };
            this.Customers.Add(customer);
        }
    }
    public IList<Customer> Customers { get; set; }
    public ProductList Products { get; set; }
}

A model can be created using a class like SimpleDomain. It discovers IList public properties:

var model = new Model(typeof(SimpleDomain));
var entityModel = model.GetEntityModel("Customer");
Assert.IsNotNull(entityModel);
entityModel = model.GetEntityModel("Product");
Assert.IsNotNull(entityModel);

I plan to add all types in an assembly that satisfied a predicate, like having “Entities” in their namespaces.

Entities can be added and retrieved to/from a repository:

Customer entity = new Customer() { Id = 1000 };
this.repository.AddEntity(entity);
Customer newEntity = this.repository.GetEntity(1000);

And they can be removed, too.

Entity model has the info to create new entities from values: a feature I will use in the UI:

EntityModel<Person> model = new EntityModel<Person>();
IDictionary<string, object> values = new Dictionary<string, object>()
{
    { "Id", 1 },
    { "FirstName", "Joe" },
    { "LastName", "Doe" },
    { "Age", "30" }
};
object entity = model.NewEntity(values);

In the next posts, I will discuss MVC UI implementation. All is work in progress, but the project is taking shape. And I having fun coding it 😉

Keep tuned!

Angel “Java” Lopez

http://www.ajlopez.com

http://twitter.com/ajlopez

Algorithms: Links, News, Resources (1)

Sometimes, I found an article or paper about an algorithm, or a class of algorithms. These are some my recent discoveries:

Texture synthesis
http://en.wikipedia.org/wiki/Texture_synthesis#Patch-based_texture_synthesis

First results from GHC’s new garbage collector – GHC
http://hackage.haskell.org/trac/ghc/blog/new-gc-preview

Superformula
http://en.wikipedia.org/wiki/Superformula

FunctionSource: Path finding with Canvas
http://functionsource.com/post/path-finding-with-canvas

F# Code: Hindley Milner Type Inference Sample Implementation
http://fsharpcode.blogspot.com/2010/08/hindley-milner-type-inference-sample.html

What is Hindley-Milner? (and why is it cool?) – Code Commit
http://www.codecommit.com/blog/scala/what-is-hindley-milner-and-why-is-it-cool

compiler – implementing type inference – Stack Overflow
http://stackoverflow.com/questions/415532/implementing-type-inference

LEGO Mindstorms Rubik’s Cube Solver
http://tiltedtwister.com/index.html

Algorithmic Game Theory and Artificial Intelligence
http://agtb.wordpress.com/2011/01/15/agt-and-ai/

Eternity II Solver
http://www.shortestpath.se/eii/index.html

the { buckblogs :here }: Maze Generation: Growing Tree algorithm
http://weblog.jamisbuck.org/2011/1/27/maze-generation-growing-tree-algorithm

Sorting Obsession
http://pepijndevos.nl/sorting-obsession/

Las máquinas poéticas de los libros imaginarios (i): Raimundo Lulio (Spanish)
http://laexcepciondelaregla.wordpress.com/2010/01/05/las-maquinas-poeticas-de-los-libros-imaginarios-i/

How many numbers are squares mod m
http://www.johndcook.com/blog/2008/11/19/how-many-numbers-are-squares-mod-m/

Maze Generation: Prim’s Algorithm
http://weblog.jamisbuck.org/2011/1/10/maze-generation-prim-s-algorithm

Maze Generation: Kruskal’s Algorithm
http://weblog.jamisbuck.org/2011/1/3/maze-generation-kruskal-s-algorithm

The Craig Web Experience: Understanding the Halting Problem
http://www.cgl.uwaterloo.ca/~csk/halt/

Amazon.com: Protein Structure Methods and Algorithms (Wiley Series in Bioinformatics) (9780470470596): Huzefa Rangwala, George Karypis: Books
http://www.amazon.com/Protein-Structure-Methods-Algorithms-Bioinformatics/dp/0470470593

Algorithmia
http://algorithmia.codeplex.com/
Algorithm and data-structure library for .NET 3.5 and up. Algorithmia contains sophisticated algorithms and data-structures like graphs, priority queues, command, undo-redo and more.

Azul’s Pauseless Garbage Collector
http://www.artima.com/lejava/articles/azul_pauseless_gc.html

Rete Algorithm
http://en.wikipedia.org/wiki/Rete_algorithm

Next generation of algorithms inspired by problem-solving ants
http://www.physorg.com/news/2010-12-algorithms-problem-solving-ants.html

Langton’s Ant
http://www.youtube.com/watch?v=1X-gtr4pEBU

An Events Based Algorithm for Distributing Concurrent Tasks on Multi-Core Architectures
http://geonumerics.mit.edu/publications/FinalReport01.pdf

YouTube – What different sorting algorithms sound like
http://www.youtube.com/watch?v=t8g-iYGHpEA

To Trie or not to Trie – a comparison of efficient data structures
http://bhavin.directi.com/to-trie-or-not-to-trie-a-comparison-of-efficient-data-structures/

How to differentiate a non-differentiable function — The Endeavour
http://bhavin.directi.com/to-trie-or-not-to-trie-a-comparison-of-efficient-data-structures/

The greatest program ever written
http://www.kuro5hin.org/story/2001/8/10/12620/2164
http://users.ox.ac.uk/~uzdm0006/scans/1kchess/

My links:
http://www.delicious.com/ajlopez/algorithm

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

Writing An Application Using TDD (Part 5) Adding Views

Previous Post
Next Post

Now I have some tests in place, I add some MVC views in this step. You can download the code from my AjCodeKatas Google Project, under trunk/AppTdd/Step04. So, this post has few new tests: it shows how we can build the interface AFTER the tests, and WITHOUT having a database or service layer, yet.

First, I added a new Site.master master page and style.css (borrowed from another ASP.NET MVC project)

I added a new Home controller:

Then, I added a view using the context menu over the Index method:

 

I modified the master page code, to have a new entry in its menu:

I added a new view associated to Index action in Subject controller:

I selected the “List” view content, and “Subject” as the type to use in the model.

But the controller method is:

public ActionResult Index()
{
    return View(subjects);
}

It uses a subject list, that is injected in the constructor by the tests:

public SubjectController(IList<Subject> subjects)
{
    this.subjects = subjects;
}

But wait! That list is injected by the tests. Now, I should inject in the normal process of the controller, in its parameter-less constructor:

public SubjectController()
    : this(Domain.Instance.Subjects)
{
}

I added a Domain.Instance to use as our in-memory domain:

public class Domain
{
    private static Domain instance = new Domain();
    private Domain()
    {
        this.Subjects = new List<Subject>()
        {
            new Subject() { Id = 1, Name = "Mathematics" },
            new Subject() { Id = 2, Name = "Physics" },
            new Subject() { Id = 3, Name = "Biology" },
            new Subject() { Id = 4, Name = "Literature" }
        };
    }
    public static Domain Instance { get { return instance; } }
    public IList<Subject> Subjects { get; set; }
}

I changed the links generated in the Index view from:

to use the Id property as primary key:

This is the result:

I created the other views using the Visual Studio “Add View…” wizard:

I had some missing actions, I wrote a new:

public ActionResult Edit(int id)
{
    var model = this.subjects.Where(s => s.Id == id).FirstOrDefault();
    return View(model);
}

With tests! 😉

[TestMethod]
public void GetSubjectForEdit()
{
    IList<Subject> subjects = GetSubjects();
    SubjectController controller = new SubjectController(subjects);
    ActionResult result = controller.Edit(1);
    Assert.IsNotNull(result);
    Assert.IsInstanceOfType(result, typeof(ViewResult));
    ViewResult viewResult = (ViewResult)result;
    Assert.IsInstanceOfType(viewResult.ViewData.Model, typeof(Subject));
    Subject model = (Subject)viewResult.ViewData.Model;
    Assert.AreEqual(1, model.Id);
    Assert.AreEqual("Mathematics", model.Name);
}

Curiously, I detected a “bad” test. I had written in my AddSubject test:

Assert.IsTrue(subjects.Any(s => s.Name == "Chemistry"));
Assert.AreEqual(4, subject.Id);

But the new id should be 5 (our testable list has 4 predefined subjects):

Assert.IsTrue(subjects.Any(s => s.Name == "Chemistry"));
Assert.AreEqual(5, subject.Id);

I fixed the code and the controller action, run the web application, and voila!

Main points:

– I am using an in-memory domain.

– The views run over the already tested actions

No service layer or persistence yet. Next steps: add more classes to domain (Books), service layer (using test), and some persistence.

Interesting related post about development with TDD without a database (or adding it after the tests) by @RonJeffries:

But We Need a Database … Don’t We? | xProgramming.com

See? We Don’t Need a Database … Yet | xProgramming.com

Keep tuned!

Angel “Java” Lopez

http://www.ajlopez.com

http://twitter.com/ajlopez

OAuth, OAuth2 and Azure Access Control Service (ACS): Links

The past two weeks I was working in a proof of concept application for a customer of mine, implementing OAuth2 using ACS (Azure Access Control Service). These are the principal links I used.

First, links about what is OAuth, its history, etc:

OAuth
http://en.wikipedia.org/wiki/OAuth
OAuth (Open Authorization) is an open standard for authorization. It allows users to share their private resources (e.g. photos, videos, contact lists) stored on one site with another site without having to hand out their credentials, typically username and password.

The Authoritative Guide to OAuth 1.0
http://hueniverse.com/oauth/guide/intro/
http://hueniverse.com/oauth/

http://oauth.net/core/1.0/

The new OAuth 2:

http://oauth.net/2/
http://hueniverse.com/2010/05/introducing-oauth-2-0/

OAuth in ACS and WCF:

Windows Azure AppFabric Access Control Service (ACS): WCF SWT/REST OAuth Scenario
http://blogs.msdn.com/b/alikl/archive/2011/06/02/windows-azure-appfabric-access-control-service-acs-wcf-swt-rest-oauth-scenario.aspx
Securing WCF Services with ACS
http://msdn.microsoft.com/en-us/library/gg185912.aspx

ACS (Azure Access Control Service) Added Support for OAuth 2.0 Protocol
http://www.ditii.com/2010/11/30/acs-azure-access-control-service-added-support-for-oauth-2-0-protocol/

This is the key web scenario example with code I studied [1]:
https://connect.microsoft.com/site1168/Downloads
It uses SWT (Simple Web Token) tokens to protect REST services. Read the setup to understand what it’s needed (Service Identity configuration) at Azure ACS.

The second key scenario example is desktop flow:

DataMarket OAuth Samples – Rich Client (2)
http://code.msdn.microsoft.com/DataMarket-OAuth-Samples-d7546d06
DataMarket OAuth Samples – Web Client
http://code.msdn.microsoft.com/DataMarket-OAuth-Samples-4c4e7c3a
Again, these examples uses SWT

I found these last two examples at:
http://code.msdn.microsoft.com/?f%5b0%5d.Type=SearchText&f%5b0%5d.Value=OAuth&x=0&y=0

I should review the code at:
Code Sample: OAuth 2.0 Certificate Authentication
http://msdn.microsoft.com/en-us/library/hh127795.aspx
contained in
Access Control Service Samples and Documentation
http://acs.codeplex.com/releases/view/57595

I could extend example [1] to support a WinForm client.

Keep tuned!

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

Links, News and Resources: Windows Azure (1)

Next Post

Some links I found interesting about Azure:

Inside Windows Azure, the Cloud Operating System with Mark Russinovich
http://channel9.msdn.com/Events/TechEd/NorthAmerica/2011/COS301

Introducing System.Web.Providers – ASP.NET Universal Providers for Session, Membership, Roles and User Profile on SQL Compact and SQL Azure – Scott Hanselman
http://www.hanselman.com/blog/IntroducingSystemWebProvidersASPNETUniversalProvidersForSessionMembershipRolesAndUserProfileOnSQLCompactAndSQLAzure.aspx

Is Apple iCloud Powered by Microsoft Windows Azure?
http://www.readwriteweb.com/cloud/2011/06/is-apple-icloud-powered-by-azure.php

Remote Desktop in Windows Azure–what’s it doing?
http://blogs.msdn.com/b/davidmcg/archive/2011/06/15/remote-desktop-in-windows-azure-what-s-it-doing.aspx

Node.js, Ruby, and Python in Windows Azure: A Look at What’s Possible
http://channel9.msdn.com/Events/MIX/MIX11/SVC04

Node.js, CoffeeScript, and the Windows Azure Service Management API — Gist
https://gist.github.com/1018127

Windows Azure Q&A with Roger Jennings — Visual Studio Magazine
http://visualstudiomagazine.com/blogs/desmond-file/2011/06/wbdes_qa-roger-jennings.aspx

Windows Azure Toolkit for Windows Phone 7
http://watoolkitwp7.codeplex.com/

Azure VM Assistant (AzureVMAssist) : Windows Azure VM Information, Investigation and Diagnostics Utility
http://blogs.msdn.com/b/avkashchauhan/archive/2011/06/05/azure-vm-assistant-azurevmassist-windows-azure-vm-information-investigation-and-diagnostics-utility.aspx

Edit and Apply New WIF’s Config Settings in Your Windows Azure WebRole… Without Redeploying!
http://blogs.msdn.com/b/vbertocci/archive/2011/05/31/edit-and-apply-new-wif-s-config-settings-in-your-windows-azure-webrole-without-redeploying.aspx

Getting started with SQL Azure Development
http://blogs.msdn.com/b/socaldevgal/archive/2011/05/29/getting-started-with-sql-azure-development.aspx

Windows Azure | Pricing Estimator | Cost Calculator | Pricing Calculator
http://www.microsoft.com/windowsazure/pricing-calculator/

How to Deploy a Hadoop Cluster on Windows Azure
http://blogs.msdn.com/b/windowsazure/archive/2011/05/17/how-to-deploy-a-hadoop-cluster-on-windows-azure.aspx

Scalable and Simple CQRS Views in the Cloud – Blog – CQRS and Cloud Computing
http://abdullin.com/journal/2011/1/19/scalable-and-simple-cqrs-views-in-the-cloud.html

Patterns: Windows Azure – Upgrading your table storage schema without disrupting your service
http://www.kefalidis.me/archive/2010/08/20/patterns-windows-azure-ndash-upgrading-your-table-storage-schema-without.aspx

My Azure Links:
http://www.delicious.com/ajlopez/azure

Keep tuned! More links coming soon 😉

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

AjModel, Model by Code (Part 1) Inception

Next Post

I’m a big proponent of raise the level of abstraction, separate problems from solutions. One of my project, AjGenesis, is dedicated to design free models that can produce (via code generation) applications in different platforms and technologies. Now, I want to explore another way: instead of code generation, I want to use simple runtime code to define and use an enhanced model.

First ideas

It’s natural to have a model (domain model, business model, you can name it):

You can have main classes (entities), associations, collection associations, services with methods, etc. And you can build all these artifacts using TDD, or not. But these artifacts ARE the system core. But you need to enhance the model, if you want to expose in a user interface. An example from AjGenesis:

<Entity>
    <Name>Customer</Name>
    <Description>Customer</Description>
    <SetName>Customers</SetName>
    <Descriptor>Customer</Descriptor>
    <SetDescriptor>Customers</SetDescriptor>
    <SqlTable>customers</SqlTable>
    <Properties>
	<Property>
	    <Name>Id</Name>
	    <Description>Id</Description>
	    <Type>Id</Type>
	    <SqlType>int</SqlType>
	</Property>
	<Property>
	    <Name>Name</Name>
	    <Description>Name</Description>
	    <Type>Text</Type>
	    <SqlType>varchar(200)</SqlType>
	    <Required>true</Required>
	</Property>
    </Properties>
</Entity>

This abstract model has attributes like Name, SetName to be uses as names in code generation, and Descriptor, Description to be used in interface (user communication) code generation. These additional attributes is part of I named “Enhanced Model”: a model with additional properties, information that help to describe the model in human terms. Maybe, I could add some additional data (SQL field lengths, etc), to be used in persistence, but it is not a target in my initial steps:

Interface models depend of the base technology to use. Once the enhanced model describe the entities and properties in user terms, view models can be built based on such information. And if the “human name” of an entity or property is missing, the code name can be used. There is “default” data and behavior in an enhanced model: use the model, Luke! In the following paragraphs are code that shows the way to enhance the model. But one key design decision is: if the model is not enhanced, I could generate all the interface from the plain model.

Some code

Then, I began to code AjModel. You can see my progress in my AjCodeKatas Project under trunk/AjModel. My first enhanced models are dedicated to Entities (main objects in the model) and their Properties:

This is a test model class, a simple Customer:

public class Customer
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Address { get; set; }
    public string Notes { get; set; }
}

Then, one test:

[TestMethod]
public void GetProperties()
{
    EntityModel model = new EntityModel(typeof(Customer));
    var properties = model.Properties;
    Assert.IsNotNull(properties);
    Assert.AreEqual(4, properties.Count);
    Assert.AreEqual("Id", properties.First().Name);
    Assert.AreEqual("Name", properties.Skip(1).First().Name);
    Assert.AreEqual("Address", properties.Skip(2).First().Name);
    Assert.AreEqual("Notes", properties.Skip(3).First().Name);
}

Upcoming: ServiceModel (describing services), and Model (containing the list of Entity and Service Models). More properties in EntityModel, like .Descriptor, .SetDescriptor, etc.

Each interface model depends of the final technology. As a proof of concept, I started to define an ASP.NET MVC interface model, in AjModel.WebMvc project. There is an EntityController, now dedicated to Customer:

public ActionResult Index()
{
    var model = new EntityListViewModel();
    model.Entities = Domain.Instance.Customers;
    model.EntityModel = new EntityModel(typeof(Customer));
    return View(model);
}

Domain.Instance.Customers is a in-memory list of customers. Some code in view:

<h2>
    <%= this.Model.Title %></h2>
<table>
    <tr>
        <% foreach (var property in this.Model.EntityModel.Properties)
           {
        %>
        <th>
            <%= Html.Encode(property.Name) %>
        </th>
        <%} %>
    </tr>
    <% foreach (var entity in this.Model.Entities)
       { %>
       <tr>
       <% foreach (var property in this.Model.EntityModel.Properties)
          { %>
          <td><%= property.GetValue(entity) %></td>
       <%} %>
       </tr>
    <%} %>
</table>

Next steps

I want to have a fluent interface like:

model.ForEntity<Customer>()
      .Descriptor("Customer")
      .SetDescriptor("Customers")

And I want to use Expression<Func…> to leverage code validation (define properties by code instead by name):

model.ForEntity<Customer>()
     .ForProperty(c => c.Name)
         .Description("Customer Name")
         .IsRequired()

Or something like:

model.ForEntity<Customer>()
     .Property(c => c.Name,
          pm => pm.Description("Customer Name")
                  .IsRequired()
        )
     .Property(c => c.Address,
          pm => pm.Description("Customer Address")
        )

where pm is a PropertyModel. .ForProperty returns a PropertyModel fluent interface. But .Property returns a fluent EntityModel builder, so it uses the second parameter to extended the selected property.

But no committed code in repo, yet. You know, I’m working in my free time, I’m still need to work, family fortune dissolved in Montecarlo tables 😉

Code Generation vs Runtime

I’m still prefer code generation from an free-defined model: it makes a clear distinction of the problem and the technological solution. And it can be easily adapted to the changes of technologies and language (Java vs Scala vs C# vs … whatever upcoming combination.. ;-). But most developers prefer to work with code. That’s the reason for this experiment. Since late nineties, I know morphic  in Smalltalk world (thanks to SUGAR Smalltalk User Group Argentina meetings, now defunct) See History of Morphic. And Naked Objects is another way to expose the model to the user/developer. See Naked Objects, Wikipedia. I read:

1. All business logic should be encapsulated onto the domain objects. This principle is not unique to naked objects: it is just a strong commitment to encapsulation.

2. The user interface should be a direct representation of the domain objects, with all user actions consisting, explicitly, of creating or retrieving domain objects and/or invoking methods on those objects. This principle is also not unique to naked objects: it is just a specific interpretation of an object-oriented user interface (OOUI).

The original idea in the naked objects pattern arises from the combination of these two, to form the third principle:

3. The user interface should be created 100% automatically from the definition of the domain objects. This may be done using several different technologies, including source code generation; implementations of the naked objects pattern to date have favoured the technology of reflection.

The naked objects pattern was first described formally in Richard Pawson’s PhD thesis[1] which includes a thorough investigation of various antecedents and inspirations for the pattern including, for example, the Morphic user interface.

This century, I found Magritte.

Now, it’s time to explore the runtime/reflection way in .NET. Pros: developers can enhanced the model using their IDEs and code; their can create new interface models. Cons: it’s limited to the underlying technology, in my case: .NET; new dynamic interface models can be hard to create; custom extension by manual code could be not easy.

Ok, enough for today, back to coding (and to work).

Keep tuned!

Angel “Java” Lopez

http://www.ajlopez.com

http://twitter.com/ajlopez

Links, news, Resources: Node.js (1)

Next Post

You know: I’m a link collector. This is a short selection of my Node.js links:

Node.js:
http://nodejs.org/
Evented I/O for V8 JavaScript.

An example of a web server written in Node which responds with "Hello World" for every request.

var http = require(‘http’);
http.createServer(function (req, res) {
  res.writeHead(200, {‘Content-Type’: ‘text/plain’});
  res.end(‘Hello World\n’);
}).listen(1337, "127.0.0.1");
console.log(‘Server running at
http://127.0.0.1:1337/’);

Modules <– Key feature
https://github.com/joyent/node/wiki/modules
See http://search.npmjs.org/

Mastering Node – Open Source Nodejs eBook
http://visionmedia.github.com/masteringnode/

CommonJs
http://www.commonjs.org/
The CommonJS API will fill that gap by defining APIs that handle many common application needs, ultimately providing a standard library as rich as those of Python, Ruby and Java.

CommonJS Modules implementation
http://www.davidflanagan.com/2009/11/commonjs-module.html
To understand modules in CommonJs

Learning Server-Side JavaScript with Node.js
http://net.tutsplus.com/tutorials/javascript-ajax/learning-serverside-javascript-with-node-js/

A package manager for node
https://github.com/isaacs/npm

Learning Server-Side Javascript with Node.js
http://net.tutsplus.com/tutorials/javascript-ajax/learning-serverside-javascript-with-node-js/

V8 JavaScript Engine
http://code.google.com/apis/v8/

Playing with Node.js, Ubuntu, Sqlite3 and node-Sqlite
https://ajlopez.wordpress.com/2011/01/31/playing-with-node-js-ubuntu-sqlite3-and-node-sqlite/

A geek with a hat » Comparing clojure and node.js for speed
http://swizec.com/blog/comparing-clojure-and-node-js-for-speed/swizec/1593

Felix’s Node.js Guide
http://nodeguide.com/

Why a JavaScript hater thinks everyone needs to learn JavaScript in the next year
http://radar.oreilly.com/2011/06/time-to-learn-javascript.html

Nave: version manager for node.js
https://github.com/isaacs/nave
It’s like rvm for ruby https://rvm.beginrescueend.com/

The Node Ahead: JavaScript leaps from browser into future
http://www.theregister.co.uk/2011/03/01/the_rise_and_rise_of_node_dot_js/

Up and Running with Node.js
http://ofps.oreilly.com/titles/9781449398583/

First Steps with Node.js: exciting stuff
http://www.robsearles.com/2009/11/29/first-steps-with-node-js-exciting-stuff/

NodeJS Tutorial with CouchDB and Haml – ErdNodeFlips
http://www.robsearles.com/2010/05/28/nodejs-tutorial-with-couchdb-and-haml-erdnodeflips/

Node Tutorial Part 2
http://dailyjs.com/2010/11/08/node-tutorial-2/

Deep inside Node.js with Ryan Dahl
http://www.infoq.com/interviews/node-ryan-dahl

JavaScript require in 100 lines of code
http://thetalecrafter.wordpress.com/2010/01/30/javascript-require-in-100-lines-of-code/
To understand scope and function of require() in Javascript

How to Install Node.JS on Windows – David Trejo’s Thoughts
http://blog.dtrejo.com/how-to-install-nodejs-on-windows

Node.js, CoffeeScript, and the Windows Azure Service Management API
https://gist.github.com/1018127

Node.js, Ruby, and Python in Windows Azure: MIX Talk
http://blog.smarx.com/posts/node-js-ruby-and-python-in-windows-azure-my-mix-talk

Node.js, Ruby, and Python in Windows Azure: A Look at What’s Possible | MIX11 | Channel 9
http://channel9.msdn.com/Events/MIX/MIX11

My links
http://www.delicious.com/ajlopez/nodejs

Keep tuned!

Angel "Java" Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez