February 2007 - Posts

Algorythmus Guru

As you may heard and agreed, the main challenge in local software development in Indonesia is coming from the fact that we have "very limited number of high skilled developers". Let me explain first what I mean with high skilled developer before you argue me. They are, people who are continuously educate them self on programming mental tools (mathematic and algorithm), improve their skills (like construction, debugging and design skills) and pragmatic enough in adopting technology. I personally know some gentlemens who are qualified as this kind of species (I want to be this kind of species) but ironically, some of them are trapped in environments that probably can transform them as other mutants (like enterpriseshit and HPBSC) and also, some of them still survive by isolating their brain with anti virus. You can ask Mr. Norman or Mr. Dondy about enterpriseshit and HPBSC viruses.

Note : I wrote this while watching Metro TV, Uji Nyali Open Source. My Godness, this is really ridiculous!!! Forget it.

Conceptually, Algorythmus is designed to be a factory for skilled developers. This can be achieved by assemblying good people and good knowledge within an good environment. Algorythmus is an ecosystem for "a type of mutant called geek". Imagine a LAB where developers can "really learn", not only memorizing something. A LAB where you can choose to be a Guru (lecturer) or to be a student or both. Where you can have "full duplex inductive and deductive" way of learning. Where you can stay a long nite with your species. That is Algorythmus!

We have defined at broad range of topics that will be served by Algorythmus Gurus, and this time, I want to define the Guru's culture and profile.  

No one can expert in every topics and no one can learn everything deeply. At Algorythmus, a Guru is:

- Asset and Owner. Gurus are main asset of Algorythmus. They are Algorythmus!! They can open new LAB and also produce Algorythmus books or recorded tutorials based on expertise.
- Owner and Creator of a lecture. He is responsible to learn, explore and practice more. Algorythmus will NOT provide lecturer guides! Gurus own topic and teaching method.
Some one who will sign certificate. He has authority and power to sign (or not) students certificate.

A Guru must provides the following items before conducting his course:
- Student pre-requisites or recommended readings
- An essay about why his course is important (posted on Algorythmus blog)
- Detail training agenda with short summary for each session

After conducting his course, a Guru must post:
- Key points of his course
- Take home problems or projects for his students
- Downloadable materials (can be codes, slides, hand written notes, or maybe his picture)

Algorythmus will have a website that can support the Guru-Students online interaction like forum, picture gallery, and download. We will publish student feedback for each topic to make it more transparent.  Stay tuned and give us your input!.

Ciao - R.A.M

Share this post: | | | |

System.Transactions

You can use this namespace explicitly using Transaction class or implicitly using TransactionScope class. This namespace (packaged in System.Transactions.dll) provides us new unified programming model for working with transacted resources, regardless of their type or location. If you are serious .NET developer, soon or later you this namespace will be your best friend.

Why transaction is so important? Because its ACID properties (Atomicity, Consistency, Isolation, Durability) bring us some promises to handle concurrency problem. I found that the framework design of System.Transactions was very good. Very Intuitive once you have good understanding on transaction concept. If you work for enterprise like Mr. Dondy, you can start read Fowler's enterprise architecture book to figure out the importances of transaction in "enterprise" case and how people work on it (patterns). Perhaps Fowler is great person to explain some complex thing, but, he has limited space to make you at the same level of understanding with him. It is hard to find "why and what" aspects only from one book.  

System.Transactions provides types for us to implement a Resource Manager (RM) who can manage durable or volatile data used in a transaction (I hope you have the same understanding with me around what is transaction really is). RM works in cooperation with the Transaction Manager (TM) to provide the application with a guarantee of atomicity and isolation. TM works to ensure that any failures result in rolling back all intermediary steps to the previous valid system state that existed before the transaction began. And if the transaction manipulates more than one resource, each could be protected by its own RM, which participates in the commit/rollback protocol of the TM. Such an RM would know how to perform deferred activities and/or compensation in a way that coordinates nicely with the TM, giving us semantics that we desire. Many things left to be explored more than TM and RM. Distributed transaction and dynamic escalation, security of transactions, etc. Some (but limited) sample at MSDN library can be helpful. You can find a reflector tool, see what inside this great assembly and then play with it as I did. I never found good (complete) books around transaction until I got further reading advice from uncle Joe Duffy's book. Here they are:

Transactional Information Systems: Theory, Algorithms, and the Practice of Concurrency Control; ISBN 1-558-60508-8 (I currently read this) 
Transaction Processing: Concepts and Techniques; ISBN 1-558-60190-2.   
Principals of Transaction Processing; ISBN 1-558-60415-4.

I hope those books could valued my next project at one of big insurance company.


Ciao - R.A.M

Share this post: | | | |

Two Interesting Projects

Take a look now :

DinnerNow .NET : http://www.codeplex.com/DinnerNow

VisualWebGUI : http://www.visualwebgui.com or http://samples.visualwebgui.com/MainForm.wgx

 

Interesting ! :).

 

Ciao - R.A.M

Share this post: | | | |

Embedded Systems

You can imagine it as embedded OS in microwave oven, diswasher, radio, elevator, camera and MP3 player. This system also presents in automobile or airplane. Yesterday PK showed me an embedded OS in his new switch device with built-in HTTP Server and runs CGI quite well. He said, there is also in some routers. Whhhhaattt ???!!! Usually I dont put too much attention to the presence of this system. But "it is there even not be apparent". Perhaps, thats why it being called "embedded system".

How to make computing system in such small device? I believe we can make smaller CPU and memory to put in Dondy's Zune, but where its data, address and control buses?  The only way is if CPU, memory, USB ports are all in single integrated circuit. People said System on Very Small Chip (SOvsC), no buses at all. But what about memory management unit (MMU) ? Does it has virtual memory? How to reduce the size and features of Windows Kernel to make it embeddable in my MP3 player? How small a kernel can be reduced to microkernel? What is the minimal features for a kernel? Is there any customizable and extensible microkernels? Can it run Windows PE? Can it has IPC? Hmmm, sooo many question in my head that critically need to be answered. The first one I want to know is how make custom microkernel. I found in internet some stuffs like Amoeba, RTLinux, LynxOS, OnCoreSystems, VxWorks with Wind microkernel, Pak Tahir's old friend QNX, etc etc. All of those stuffs are economically promising and interesting research topics in which my ASM and C# knowledge could be applicable realistically. Let see... 


Ciao - R.A.M

Share this post: | | | |

Vista SUA | Subsystem for Unix-based Applications

This is another thing I got from hacker PK. UNIX/LINUX in Windows. People know it as Interix sub system. It is mentioned before in many web forums, silberschatz (dinosaurus) and Windows Internals books. It is Unix subsystem in Windows (starting from XP to Vista). PK taught me how to install and explore it on Vista. His promises were:
- I can compile and run many POSIX based software on Windows.
- UNIX subsystem on top of Vista kernel means that we can have UNIX functionalities without any emulation
- SUA supports KSH (Korn Shell) and CSH (C Shell). Those shells are available in start menu simply by typing csh-l or ksh-l.
- SUA can run Windows commands. It was amazing for me to see Notepad.exe called by SUA.
- SUA contains X11R5 and X11R6 libs, header files, and some tools to build X Windows applications. WOW !!!

I am exploring it now. Many thanks for PK.

Ciao - R.A.M

Share this post: | | | |

Algorythmus Dream

Perhaps not surprisingly, Indonesia’s software industry is having so many trouble meeting expectations. One of the most visible manifestations is the acute shortage of qualified developers. Most of professional in local industries are not skilled to construct good quality software even if they have computer science background. This bottleneck has led to rapidly escalating costs, time to market delays, trial-and-error products, and widespread internal quality problems like security, reliability, and performance. Software development has always been a challenging endeavor, and the fundamental forces that make it so remain the same until now are people and how they solve complexity.

On other side, higher IT educations in Indonesia produce around 130,000 graduates every year since 2004. A research showed that only around 1000 new developers can enter the profession each year. From these figures it’s a short hop to the conclusion that many IT graduated students are un-employed or took another career instead of being software developer (sales or non-engineering disciplines). It is not make sense for a potential market like Indonesia in which hundreds of local ISVs struggling to find good developers. In addition, IDC has projected that Indonesia needs 50,000 new developers in period of 2005-2010 to serve its local market.

There is nothing mysterious to become qualified developer !!. I am not an idealistic person, but I can say that what people need is a good education to make them skilled enough. How you can trust self-taught developers working on enterprise projects? or let say, how you can trust developer to implement what Fowler means with architecure? I believe that many people in Indonesia may have difficulties finding good source of programming information even though they have access to Internet world. One possible cause is they don’t know what they have to know. Someone must tell them “why they need to learn something, what to learn and how to learn”. Our primary dream for Algorythmus is to narrow the knowledge gap of “why, what and how stuffs” related to software construction. Algorythmus is a bridge for academic and industry. In such a way, in a long future, I hope Algorythmus becomes a knowledge based community who produces qualified developers for its partners. From now, just think and remember Algorythmus as community based software developer factory :).

Take a look what we (AK and me) have defined as draft for Algorythmus curriculum. First, we agreed with two type of courses:

- Regular    (R) : Monday to Friday (09.00 - 17.00)
- Weekend (W): Saturday and Sunday (09.00 - 17.00)

I dont publish any design skill courses yet. AK will publish it soon once it is ready.

Note : 4 sessions per day. Red color is mandatory regular course and the rest are optional weekend course.

I. Algorythmus Foundation Courses

Code Course Title Duration Prerequisites Level
RB00 Becoming a Professional Pragmatic Developer  High School Mathematic 100
WB01 Concrete Mathematic Foundation for Developer High School Mathematic 200
RB02 Operating System Concept and Windows Internal 5 RB01, RC01/RC03 200
WB03 Data Structure and Algorithm in C/C++ 5 RB01, RC01/RC03300
RB04 Introduction to TCP/IP and NetworkingHigh School Mathematic 200

II. Algorythmus Hacking Courses

Code Course Title Duration Prerequisites Level
RMASM01  Computer Architecture and Basic Assembly Language  RB01, RB02 300
WMASM02 Windows Kernel Debugging (W2K3, XP, and Vista) RB02, RMASM01 200
WMASM03 Disassembling and Reverse Engineering RB02, RMASM01 200
RMASM04 Compiler Theory and Code Optimization RB02, RMASM01, RC01/RC03 300
WMASM05 Exploiting Software and Creating RootkitsRB02, RMASM01, RC01/RC03 200
WMASM06 Mastering MASM for Intel Based ComputerRMASM01 300

III. Algorythmus C/C++ Courses

Code Course Title Duration Prerequisites Level
RC01  Mastering ANSI C and Basic Windows System Call  RB02 200
RC02Mastering C++ Programming Language RC01 200
RC03Object Oriented Programming with C++RC02200
RC04 C++ Template Programming RC03300
RC05 Mastering COM for C++ DeveloperRC04 300
WC06 Mastering Multicore Programming with C/C++RC01/RC03 200
WC07  Programming C++ with STL  RC04 300
WC08Programming C++ with Boost Library RC04 300
WC09Secure Coding in C/C++ RC01, RC03 300
WC10 Debugging C/C++ Windows Application RC01, RC03 300
WC11 Developing Components with Windows APIRB02, RC01, RC03 300
WC12 Multithreaded Programming with C/C++ and Windows API  RB02, RC01, RC03 300
WC13  Network Programming with C++ and Windows Socket  RB02, RC01, RC03 300
WC14Programming Desktop Application with MFC RB02, RC05 200
WC15Advanced Windows System Programming with C/C++ RB02, RC04 300
WC16 Memory as Programming Concept in C/C++ RB02, RC01/RC03 300
WC17 Mastering ATL Server Programming with C++RC05 300

IV. Algorythmus .NET Courses

Code Course Title Duration Prerequisites Level
RCS01  Beginning CLI and CLR with C#RB02, RC01/RC05 200
RCS02Mastering C# Programming Language RB02, RC01/RC05 200
RCS03Object Oriented Programming with C#RCS01, RCS02200
RCS04 Essential of C# 2.0 Generic and Transaction RCS03200
RCS05 Advanced IL Assemblies and CLIRCS03 300
RCS06 Programming with CLR Shared APIRCS01, RB02, RC01/RC05 300
RCS07  CLR Security and Securing .NET AssembliesRCS01, RCS02 200
RCS08Debugging .NET Application RCS04 300
WCS09Mastering .NET Compact Framework 2.0RCS04 200
WCS10 Mastering ASP.NET 2.0 HTPP Processing Framework RCS04 200
WCS11 Advanced ASP.NET 2.0 ProgrammingRCS04 300
WCS12 ASP.NET AJAX Deep DiveRCS04 200
WCS13  Mastering Windows Forms 2.0RCS03200
WCS14Advanced Windows Forms 2.0 Programming RCS04 300
WCS15Mastering Data Access with ADO.NET 2.0RCS04 200
WCS16 Mastering .NET Web Services and WSE 3.0RCS04300
WCS17 Mastering Network Programming with C#RCS03 300
WCS18 Mastering Multithreaded Programming with C#RCS03 300
WCS19 Mastering COM and .NET InteroperabilityRCS03 300
WCS20 Mastering Windows Presentation Foundation via C#RCS03 300
WCS21 Mastering Windows Presentation Foundation via XAMLRCS03 300
WCS22 Mastering Windows Communication Foundation via C#RCS04 300
WCS23 Mastering Windows Workflow via C#RCS04 300


Special notes:
Anyone can choose to be a lecturer or student at certain costs. Being a lecturer doesnt mean to know everything or smarter than students. For Algorythmus, being a lecturer means you have strong passion in exploring specific technology. Investing time and energy to learn more than students. Willing to share your knowledge by teaching and writing books. Until now, we dont know who are lecturers and students. Our focus is to define "why" and "what" first.

AK has a very good input around Algorythmus Foundation Publishing to publish our own books. I always welcome to any comments and ideas to make this dream really happen.

Ciao - R.A.M

Share this post: | | | |

Phinisi Blogs - Incoming Project with MIC-UGM

I hope you know what Phinisi is or at least have heard about it. It is a traditional and proven boat that can surf around the world since hundred years ago. I chosed that codename with three reasons:
Personal : To remind me to Jim Gray, great computer scientist who taught me transaction. He lost in the sea (without Phinisi).
- Philosophical : to remind me what architecture really means to me. In term of architecture (in which I believe it was iteratively defined), Phinisi is mysteriously proven (effnectively well performed).
- Historical : to remind me to my home land, Makassar, where Phinisi was created.

Let me explain you what I mean with Phinisi Blogs. Below is my memo to Ridi and Beni who will incharge as core developers.

Phinisi Blogs Vision:
- A blogs engine with maximum three steps installation
- A blogs engine with the same functionalities comparing to WordPress (www.wordpress.org) and Community Server (www.communityserver.org)
- Phinisi will has template parser to reuse a lot of free blogs skins. Start with WordPress templates then move to others. 
- Phinisi will has Mobile version for RSS reader and live writer.


I will update you once we can define the initial requirements. This project will be posted on CodePlex. Stay tuned !


Note : I wrote this post with Raffy at 10.45 PM. He also wrote his first blogs like this:

dufiogbudjzi   iZdidjifdkmvm m  mdfkdpwerfei8eijkjfcknk,ioj ,mkeei virffr.h jmmmmmmc tgbrfeb vvvvvvvvvvvvvvvvvvrrrrrrrrrrrrrrrrrrrrr5 v  vvvvvvvvvvvvvvvvvvvr5444  sxnnnnggggggggt        zzzzzzzzzzzzzzzz    zzzzzzzzz  zzzzzzzzzz  zzzzzzzzzz zzzzzzzzzzzzz          zzzzzzzzzzzz          zzzzzzzzzzzzzzz   zzzzzzzzzzzzzzzsm     uyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy 

 
I didnt know what inside his mind when wrote those words while enjoying Radja music :).

 

Thx - R.A.M

Share this post: | | | |

INDC LAB - Algorythmus

I work with AK to define curriculum for our developer community training center at Depok, codename Algorythmus. Yes, from its codename, you can think it as:

- Algorythmus = Algorithmus in German
- Algorythmus = Algorithm Always With Us
- Algorythmus = All Go Rhytm Us
- Algorythmus = Algo Rhytm Us

Actually, it is not easy to define curriculum for professionals or students. But for sure, we will not creating something like MOC materials. Algorythmus has its own approach and culture not like common training centers all around.

Stay tuned ! I will publish Algorythmus's curriculum once it ready.

Share this post: | | | |

Free Book Project Part 1: Common Language Infrastructure and Runtime

I am trying to construct the structure of C# Books part 1 that I have planned to write. What I have in mind for C# developers is they must be able to understand some low level conceptual knowledge before going into CLR managed environment. As the knowledge gap between computer architecture to CLR is quite big for Indonesian developer, the part 1 of my C# book is dedicated to provide a bridge for them. I assumed that the readers is already have little knowledge on the following topics:

- Computer Architecture and Operating System
- ANSI C Programming Language and Windows System Call

Note : Let me know if you need some recommended readings for above topics.

And finally today I have decided to have these seven sections. Can you see the correlation of what I will present in those seven sections?

Section 1 - From Machine Code to High Level Language
Section 2 - Native Compilation Model and Executable
Section 3 - Virtualization of Execution Environtment
Section 4 - Inside Common Language Infrastructure
Section 5 - Inside Common Language Runtime
Section 6 - Programming with CLR Shared API
Section 7 - Programming with IL Assembler

I decided not to translate book's section titles I really dont know how to find suitable replacement for some idioms. I hope all titles are intuitive enough for you.

Each section will contain maximum 5 chapters and minimum 3 chapters. Means that this book will has 21-35 chapters. If each chapter ranging from 20-50 pages, means that we will have at least a 420 pages book. I know how and when to start but I really dont know when it will be finished. An interesting journey isn't it? Let see how deep we can go with the book !!! For volunteer who want to join the project, please put your comment.

Stay Tuned !

Thx - R.A.M

Share this post: | | | |

C# Book Structure

Below is the list of some important spec documents that are now exist in my laptop. You can download it for free in many websites or from original publishers.

Microsoft Assembly:
- Intel® 64 and IA-32 Architectures : Software Developer’s Manual Vol. 1-3

C and C++:
- ISO/IEC 9899:1990, Programming languages — C
- ISO/IEC 14882:2003, Programming languages — C++

C# and CLI:
- ECMA 334 : C# Language Specification
- ECMA 335 : Common Language Infrastructure

As you possibly read in my previous posting, I have set my vision for our incoming C# language book. Currently I can only update you that the structure of that book is as following:

Part 1 : Common Language Infrastructure and Runtime  (Pengenalan CLR dan .NET Framework)
Part 2 : C# Programming Language                              (Bahasa Pemrograman C#)
Part 3 : Programming CLR and Assemblies                   (Pemrograman CLR and Assembly) 


I am still trying to "figure out" the high level goals of each part and how many chapters needed to achieve it. I need time to evaluate a lot of MASM, C/C++C# and CLR books in market to make a good benchmark of what we will have. I also expect your feedback once I published the chapter titles. Stay tuned!!

Ciao - R.A.M

Share this post: | | | |

Rob Short Advices

I watched Rob Short (ex Dave Cutler team) interview with Channel9 last nite and I got some key points from him that I want to share with you. Its not only about codes, but about how we manage technical people and how to choose technical job.

How technical should a manager be? Rob said, its depends to how technical the staffs you try to manages. The most important thing that a technical managers can have is "an understanding about who knows what they're doing". We need to know who the people are and we need to be technical enough to know if somebody knows what they're doing. Most people believe they understand something but they dont understand all of the complexities. As a manager you need to understand who understand the complexities and who doesnt. Now, please review your own manager !! Do you have that kind of manager ?

What is the architecture means for you when you said that? For Rob, architecture is the top level design. It is a overall form of pieces and how those pieces are fit together. And make sure that when you add a new piece that piece will fit too. Now, think about your high level architecture diagram or logical diagram, can they fit together?

What advice do you have to someone who work on this field (developer). Rob said, different people will have different interest. But all of us how work on operating system should understand the basic computer architecture. Rob tought everybody should have basic compiler class, learn the low level things before work on high level stuffs. I love his advice and I am at the right track. What about you?

The most important thing from Rob is his advice for our career. He said, FIND RIGHT PEOPLE to work with. We need to work with really really good people. DONT MAKE DECISION BASED ON TECHNOLOGY unless you will totally addicted to something. If you want to work for video game for example, find the best people who can challenge you and push you to do something big in that field. If you have good people, good project will happen!. Do we have good people in our team as peer or manager?

Thanks Rob, you have given me very good advices !!!.

Ciao - Risman Adnan

Share this post: | | | |