Continuing Orchestra ERP

I am taking cue from Jeffrey Palermo’s Onion Architecture. It is designed with the premise that infrastructure changes over time and so should be external to the application’s core.

I may even organize my ProtoStack / Orchestra ERP namespaces into something like DomainModel, DomainServices, ApplicationServices.

Also, I am considering a process where data layer integration is developed later in the project. I’ll start with building the core, interfacing with a fake data layer (all in-memory typed collections) followed by the UI.

SDLC Board Game

I recently got interested in financial board games and saw how they can be very useful in educating children about certain concepts.

It got me thinking whether it was also possible to represent certain aspects of executing a software project via a boardgame and make it fun.

Here are a few things that I have come up so far:

• Human resources and tools / techniques are represented as cards.

• Requirements are also represented as cards, which are dealt equally to each player, and the objective is to move all requirement cards through an “SDLC” board (one per player) that represent a series of squares grouped according to phases (design all the way to deployment)

• The passage of time is represented in a main square board like monopoly, and completing a trip around the board (passing “Go”) allows the player to move each of the requirement cards a number of steps through the SDLC board depending on the capability of the resource cards (senior programmer allows one requirement to move two squares in the dev phase, junior programmer only one, etc.)

• Players will start with play money representing the project budget, and at every pass at “Go” is payday. The player is out of the game if he runs out of funds.

• The main board also has “chance” / “risk” cards, which represent things that can mess up a project. damage is applied at the roll of a die, and chance modifiers depend on whether the user has “bought” tools / techniques.

I haven’t implemented this idea yet as I’m still looking at more play elements that can make the game more engaging, as well as soliciting for more ideas.

I am planning to release this under Creative Commons license but haven’t decided on the exact license yet.

Any more game play suggestions are welcome.

UPDATE: There is now an active thread about this in BoardGameGeek. http://www.boardgamegeek.com/article/4448368

Creating Your Own ERP - Some Have Done It

Common sense advice from most people would be to just buy as there are quite a number of choices out there. Well, not everyone thought the same. These guys went and built their own ERP from scratch. I still believe there is much value for developers to go ahead and building your own (especially for a small business) as it is an invaluable enterprise development exercise, just as Linux geeks see it as a rite of passage to build their own distribution from scratch.

Rolling Your Own ERP by Dennis Howlett

Microsoft Blue / Purple Logos

Looks like blue / purple is the new rainbow. Microsoft ditches their multi-color logos for .Net and Visual Studio in favor for the new cool-blue feel.

silverlight msdn dotnet azure visualstudio

With all these color changes, I thought that my Innogetics logo was getting dated, so I gave it a color change as well.

new innogetics logo

Free Posters for Office Walls

If I had my own .Net development shop, I’ll probably have these free posters adorning our walls.

.Net Framework 4 Universe
http://blogs.msdn.com/ericnel/archive/2008/10/31/net-framework-3-5-sp1-and-4-0-poster-available.aspx

.Net 3.5 Framework Types and Namespaces
http://blogs.msdn.com/pandrew/archive/2007/11/02/announcing-the-net-framework-3-5-commonly-used-types-and-namespaces-poster.aspx

Application Architecture Guide 2.0
http://www.pnpguidance.net/post/DownloadApplicationArchitectureGuide2PosterPatternsPractices.aspx

The Infamous Project Cartoon
http://www.projectcartoon.com

Agile Development Poster
http://pm.versionone.com/AgilePoster.html

Mother Tongues of Computer Languages
http://www.digibarn.com/collections/posters/tongues/

UML 2.0 by Example
http://www.ss.com.au/articles/

Designing the User Experience UPA Poster
http://www.mprove.de/script/00/upa/_media/upaposter_11×17.pdf

 

Non-Free / Non-Technical Posters

For the heck of it, I’ll also buy these too:

Teaching OOP and C# to Kids

I’ve been reading about how kids these days can best learn programming. People may wonder if kids that learn programming will gain an advantage in life in the future, given that the software industry isn’t as hot as it used to be. Well, if kids are still being taught art and music for them to develop hobbies, why not a creative activity like programming?

When I was a kid, they had programming for kids courses during summer. I was introduced to programming at 11 years old with DR (Digital Research) Logo, which taught procedural graphical programming. I cut my teeth with programming with BASIC on the Apple II. A year later, it was Turbo Pascal 3.0.

It was simpler back then because programming languages like Logo and BASIC can give you results with just one line of code. Back then, most kids learned programming using BASIC. These days, with linear programming and procedural programming gone the way of the dinosaurs, kids have to start with Object Oriented Programming. These require some more introductory concepts to digest.

I think kids these days can start getting the OOP mindset even before writing a single line of code. There are many options for children’s programming environments, but these are my choices (with a slight bias towards Microsoft technologies):

8 years old and earlier: Kodu Game Lab – a game environment for the XBox where kids build their own worlds and define rules to create their own game.

8 to 11 years old: Scratch – An MIT project, Scratch is a free development program for creating interactive stories, animation, art and games. Users can upload their creation to the Scratch website and get feedback too.

11 years old onwards: C# for Sharp Kids – At this age, kids can start learning the real programming languages. This ebook is free and, if I’m not mistaken, may be reproduced. Bundled with a free Visual Studio 2008 Express Edition, it’s perfect for Philippine high schools.

NCommon

It appears that I do not have to implement multiple data options for my ProtoStack project as there’s another project out there that’s providing a DDD framework over various persistence implementations. It’s called NCommon.

It is a framework for implementing Unit of Work and Repository patterns over NHibernate, Linq-to-SQL and the Entity Framework.

Shifting Gears

After getting some work started on Orchestra and setting up the initial framework, I decided to step back and look at the possibility of developing the Windows and Web (ASP.NET MVC) versions of the application in parallel. It led me to look for frameworks that is best for this kind of development. With Prism and ASP.NET MVC both relatively new, I’m not surprised that there’s no such thing.

Someone posted a similar question in StackOverflow (”What’s the best way to target both WPF and web apps?“), and there’s no straight “look here!” answer.

After looking at many blog posts about MVVM, MVC, and other presentation patterns, I then thought that maybe I should set up an open-source project in Codeplex that provides a codebase for developers in a similar situation to explore various presentation layer options.

So, ProtoStack was born. I described it this way: “ProtoStack provides a prototype architecture that brings together various presentation patterns (MVVM, MVC, etc.). It is meant to be used in an architectural spike where developers can experiment and learn these patterns and build the foundation for their chosen framework.”

The project will begin with having various presentation layers talking to a common business and data layer, similar to Rockford Lhotka’s CSLA.NET reference implementation, ProjectTracker, except that it is lighter on the business layer side. I will be using the AdventureWorks sample database so that I don’t have to include SQL’s in the project.

The business and data layer will be using Fluent NHibernate, and, since its objective is to provide developers with architectural options, I will be adding other persistence methods to the mix, such as Entity Framework, Linq-to-SQL and even plain old ADO.NET.

Inevitably, there will be some development choices that will have to be made upfront, such as IOC container (Unity) and AOP framework (PostSharp). I might even toss in some Enterprise Library application blocks. The idea is to expose developers to these concepts, while allowing others who are well familiarized with them to make it easy to switch.

I hope that this project will invite peer reviews and generate discussion on which presentation strategy works best on which types of projects.

Orchestra ERP

The stock market was getting challenging for technical analysts so I lost motivation in developing the Euclid project (mentioned in the previous post.) Perhaps I will revisit it once the markets and trading get interesting again.

I have instead resumed developing my WPF ERP framework. I am currently using / planning to use the following free frameworks / tools available for my client layer:

This WPF ERP framework will start off as two-tier, consisting only of a client and a remote database, most probably SQL Express Edition.

The design, however, should be scaleable enough so that I can move the business layer to a server and put a service layer on top of it. When this happens, I will be using WCF, naturally.

UPDATE (Dec. 12, 2009)

I have decided to make the following changes:

Euclid's Libraries and Frameworks

I was starting to do coding on generating Simple Moving Averages of Yahoo! Finance quotes when I found out that there already is an extensive technical analysis function library called TA-Lib.

Making use of what’s out there instead of reinventing the wheel, I’m going to use the following libraries / frameworks for Euclid:

Depending on the need for data persistence, I might also consider tossing in db4o object database into the mix.