Here's a summary I wrote in a citizen journalism website about Bill Gates' lecture this morning.
This is not my first Bill G meeting experience, met him couple of times in US, but this is my first President SBY meeting experience. 
Baru aja deliver talk di seminar sehari di Universitas Pakuan, Bogor. Memenuhi undangan dari Himpunan Mahasiswa Ilmu Koputer-nya. Sesuai permintaan, saya membawakan topik "From C++ to C#". Intinya adalah belajar C# bagi mereka yang punya C++ background. Jd, learn C# thru C++. By comparing the two, looking at the differences and similarities. Some comparison with Java was also shown.
Saya juga mengajak Basir untuk share tentang BIND-C-nya, community .NET di Bogor.
Pembicara lainnya adalah orang dari LAPAN, yang membawakan materi tentang "Role of Computer Science in Aerospace", interesting talk kayaknya. Tapi saya gak bisa ikutan. Mesti ke kampus. 
If you have checked out my paper about the using of Feed-Forward Backpropagation Neural Networks, here's another approach that I used. It is called the Probabilistic Neural Networks. This approach can forecast the onset of Diabetes Mellitus with 100% accuracy. Compared to the Feed-Forward Backpropagation approach that could give no more than 93%.
Probabilistic Neural Networks was actually designed for such classification problems. No wonder.
I'd like to sparks and encourage scientific culture in our community. So, I created a new folder called "papers" in our geeks site download section. Here, you can upload (and download) papers, writings that have a more academia style (for more relaxed content, you still can find them in geeks blog). So, I welcome you all to upload your academic works to share your knowledge in the "papers" section, also welcome you to download whatever in there.
To begin the initiative, I uploaded the papers I wrote so far. Note that this is not a research/thesis level papers. They are merely my classes assignments from two classes: Algorithm Design & Analysis and Computational Intelligence. So, don't expect (yet) cooler/bigger stuff.
You are welcome to download them (they're in Word 2007), provide comment/feedback, etc. Here they are:
So, what are you waiting for?
. Upload/share your academic work.
Tahun ini, Imagine Cup utk Software Design utk Indonesia kembali dijuarai team dari ITB, dengan solusi-nya Butterfly (someone else will post what this is all about
). So, July yang akan datang mereka akan berangkat ke Paris untuk final tingkat dunia. Good luck! At least 6 besar deh!
Juara 2 di tahun ini dari IT Telkom (was STT Telkom), sedangkan juara 3 dari ITB juga.
Komposisi top 10 adalah 3 team dari ITB, 3 dari IT Telkom, 3 dari UI dan 1 dari ITS. Komposisi yang saya lihat tidak banyak berubah sejak menjadi juri Imagine Cup 5 tahun terakhir ini. Kampus-kampus lain kemana ya? Computer Science IPB juga
.. hello! Where are you guys?!
Anyway, again congrats untuk adik2-nya Ronald!
There's an old saying: "You don't know what you have until it's gone.".
No, I don't talk about this, but I am talking about Visual Studio.
For more than half a year now I've been doing more coding in MATLAB and in Mathematica compared to coding in Visual Studio (and C#). In terms of library/built in functions, nothing can beat the comprehensiveness of MATLAB for doing scientific/engineering computing. It has them all, numerical computation, linear algebra, etc up to toolboxes for Fuzzy Logic, Neural Network, Signal Processing, etc. No C# library is (or will ever) close to this. In terms of language, even if with Lambda Expression, there is no way C#/.NET can be compared with Mathematica to do Algebraic Computing or even its higher order functional style.
Yeah, it is not fair to compare the C# (.NET) with MATLAB and Mathematica as C# (.NET) is a general purpose language/library, while MATLAB & Mathematica were by design made to do scientific/engineering/mathematics computing.
But, in terms of IDE, I can say MATLAB sucks big time!
The m-file editor of MATLAB (IDE) just so "old fashioned" compared to the sophisticated-sate-of-the-art IDE like Visual Studio. I've never used Wolfram Workbench to do Mathematica programming (I just use the standard editor within Mathematica IDE), but I feel Visual Studio is still a more superior IDE.
Not just the IDE, the MATLAB has another limitation that I hate. All functions there are global! There's no sense of packaging or namespace. If you've been doing Component Oriented and Object Oriented stuff you will look at MATLAB with strange look, "everything is global?". Well, they say the newer MATLAB has OO capability, but I haven't look into that.
But, again, what I really miss is the VS IDE. When coding in MATLAB or in Mathematica, I do miss things I took for granted in Visual Studio like Intellisense, Debugging Tool, and other IDE features. In VS, when I type a function name, the IDE will autocomplete the function name, will show the parameter list and the overloads as well as the description and the types of the arguments and the return value. In MATLAB, I feel like I'm blind. You have to memorize all these stuff.
Man, I do miss my Visual Studio IDE.
.
O, I don't mean I don't code in C#/Visual Studio anymore. I still do. But when I code in MATLAB and Mathematica I wish they have as cool as VS Intellisense & Debugging capabilities. Now I appreciate VS IDE more! Intellisense does ease your life.
In my earlier post, I've summarized what is Scientific Computing, area where I spent many hours these days, that I may become a distracted husband, dad and boyfriend. 
Here, I'd like to highlight the "content" of my reference. Materials that I've been digging. Here you go:
-
Systems of Linear Equations
-
Linear Least Squares
-
Eigenvalues and Singular Values
-
Nonlinear Equations
-
Optimization
-
Interpolation
-
Numerical Integration and Differentiation
-
Ordinary Differential Equations
-
Partial Differential Equations
-
Fast Fourier Transform
-
Random Numbers and Stochastic Simulation
I remedy these materials with two different views:
-
First view, mastering these known techniques/numerical algorithms so that I can solve problems in various domains that need numerical solutions (the domain can be Physics, Engineering, Biology, Economics, etc). Here, I learn the "tools" so that I can use them to solve other problems.
-
Second view, looking for intrinsic issues within the techniques/numerical algorithm so that I can improve the techniques/numerical algorithms. Here, a domain problem is not necessarily needed. Here, I learn the "tools" so that I can make better "tools".
I haven't decided my thesis would be from which view of the two above. I would need to consult my mentor. The second view might be harder, I think. But then, if I have to focus on the first view, I still have no idea to solve problems in what domain. Physics/Engineering or Computer Science as I have background on it? Biology? Economics? or.... Mathematics itself!
That sounds interesting, using computing to solve problems within Math! I got the idea after I got these two books:
From the two books I was introduced to a re-emerge discipline now called Experimental Mathematics. Hmm, something to discuss with my mentor.
Btw, is there any of you familiar with Experimental Mathematics or someone doing it?
Phew! I really need to get title for my thesis.
In addition to .NET and programming in general, I will also write about the area of my upcoming thesis: Scientific Computing.
I will start easy. As always.
First, by defining what is Scientific Computing.
Traditionally, it is called Numerical Analysis. It is concerned with the design and analysis of algorithms for solving mathematical problems that arise in science and in engineering. These studies usually exist in Mathematics departments and not in Computer Science departments. This is because Numerical Analysis deals with quantities that are continuous, as opposed to discrete that is the main focus of most Computer Science studies. However, I believe anyone in either background would have enough fundamentals to explore these studies. When studying Numerical Analysis, both aiming at the same converge direction, the two are only begin with different starts. (Myself, I am a Comp Sci major, but now a Teaching Assistant in Numerical Analysis class in the Grad School in the Department of Mathematics at IPB).
From the definition above, it is clear that the important keywords are:
-
Design & Analysis
-
Algorithm
-
Mathematical
-
Science / Engineering
So, it's crazy delicious! 
Scientific Computing is at the heart of the bigger scheme called Computational Science. This discipline sees Computing as the third approach to Science, in addition to the traditional approaches: Theoretical and Experimental. Modern day science cannot afford to just rely on Theories and Experiments. But also relies to Computing. I will address this in more details later. Now I will go back to put in perspective, where does Numerical Analysis belong in the Computational Science.
Computational Science is relatively a new mode of scientific investigation that includes these phases:
-
Development of a mathematical model - often expressed as some type of equation - of physical phenomenon or system of interest (Physics, Engineering, Biology, Economics, Psychology, Life Sciences, Management, etc).
-
Development of an algorithm to solve the equation numerically.
-
Implementation of the algorithm in computer software.
-
Numerical Simulation of the physical phenomenon using the computer software.
-
Representation of the computed results in some comprehensible form, often through graphical visualization.
-
Interpretation and validation of the computed results, which may lead to correction or further refinement of the original mathematical model and repetition of the cycle, if necessary.
Scientific Computing is primarily concerned with phases 2-4: Developing numerical algorithm, software implementation/programming, running the numerical simulation.
Phase 1 is a very important phase. However, it is dealt with within the studies of the domain problem / system of interest. One need to really understand the domain problem / system of interest (Physics for example) as well as understanding Mathematics. Once a Mathemetical model is derived, then phase 1 is over. Phase 2 assumes the model is valid and correct.
To excel in Phase 2-4, one has to have a Mathematical maturity and strong programming skill. In phase 2, to be able to develop a numerical algorithm for a mathematical model, one needs to really understand the Mahematics: the definitions, the theorems and the proofs as necessary. Next, in phase 3 & 4, the algorithm must be implemented as software, so one needs to master programming, understand software design principles, data structure, non-numerical algorithms, performance evaluation and tuning, graphics/visualization, software tools, libraries/frameworks and off course, programming languages. Yes, there are mathematician/scientist friendly tools/languages/libraries such as MATLAB & Mathematica, but these tools are merely for prototyping only. Used in labs/research. Tools that help us elaborate algorithms productively. In real implementation in production runtime, the algorithms are usually need to be rewritten using languages such as C/C++. Yes, C/C++ never die! 
The last two phases (5 and 6) would also need understanding of the domain problem or system of interest.
So, a great modern day scientists are scientists that are:
However, one does not necessarily master all these three. We can always collaborate. For example, to solve a Computational Biology problems, the team may consists of a Biologist, a Mathematician and a Computer Scientist (or Software Engineer). Off course, it is great if one can be like Richard Feynmann, Physicist that did his own Mathematics. 
I think Numerical Analysis would work for me as I think I am (or will be) well rounded in the subject. My background is Engineering Physics (Bachelor Degree - domain problem/system of interest) and Computer Science (Master Degree in progress - algorithms). I also spent the last decade designing algorithms and writing codes (Skill, as well as exposures on other domains). So, my next aim is to further study Applied Mathematics for Ph.D (so help me, God!
) to be able to understand Math deeper and be able to model phenomenas better.
Now, as promised above, I am back to the Computing as the third pillar of science. I will explain thru example of Computational Sciences:
-
Computational Cosmology: we can test competing theories of the universe's origin by computationally evolving cosmological models. We are unable to conduct cosmological experiments, we cannot create variants of the current universe and observe its evolution. Computational simulation is the only feasible way to conduct experiments.
-
Computational Meteorology: To study climate shange, which simulate thousands of earth years, are only feasible if the simulation time for a year of a climate is a few hours. Moreover, conducting parameter studies (e.g., to assess sensitivity to different conditions, such as the rate of fluorocarbon or CO2 emissions) is possible only if the time required for each simulation is small.
-
Interdisciplinary: To understand the environmental and biological bases of respiratory system or biological atack requires coupling of fluid dynamics models of airflow and inhalants (whether smoke allergens, or pathogens), material models of surface properties and interactions, biophysics models of cilia and their movements for ejecting foregin materials, and deep biological models of the genetic susceptibility to disease. The complexity of these interdisciplibary models is such that they can only be evaluated via computers. Most often very high-perormance computers.
Powerful new telescopes advance Astronomy. Powerful new particle acceleratos advance High-Energy Physics. Computing & Computational Models... advance ALL Science and Engineering. All Science and Engineering benefits from high-resolution model predictions, theoretical validations and experimental data analysis.
O, remember Parallel Computing? It is Computational Science that pushes the capabilities of computing machines/techniques. It is Computational Science that pushes hardware engineers, computer scientists and software engineers to come up with Parallel Computing.
So, got the idea where I spent my hours lately? Anyone has similiar interest? Let's talk... and hopefully... Let's collaborate! (
I haven't got title for my Thesis!)
References:
-
Heath, Michael T., "Scientific Computing: An Introductory Survery", McGraw-Hill, 1997.
-
Reed, Daniel, "Science and Industry Advance with Computational Modeling", SIAM News-Newsjournal of the Society for Industrial and Applied Mathematics, Volume 41/Number 2, March 2008.
-
Various other sources (I read things here andf there and everywhere, forgot the details, but the points are in my head already)

It was started somewhere in December 07.
It was ended last night, one night in April 08.
I had to spawn a new thread to made it run.
It could not run in the main thread cos everything will crash.
It's a thread where I lost the sense of gravity,
where my view and balance were challenged.
A thread where my Math failed.
A thread where Boolean Algebra has no meaning,
cos even 'true' and 'false' do not exist.
A thread that ran with large Big-O, and whatever the meanings of Big-O...
It was just huge.
It's a thread that was so damn beautiful,
that I even wish space and time is jammed so that I stuck there forever.
And it was real too. It was not something like The Matrix.
It was real...
Anyway, the thread had to end last night.
In order to continue running, the thread needs to run as the main thread...
I am so sorry that I could not grant that.
At the very moment...
So... the threat decided to kill itself... it had to become the main thread, or else it would not run
I'm going to miss this thread big time...
Now, this thread may no longer running, but it has stored something deep in a global variable in my memory.
And it is permanent.
Today is a new day... I'm back to the main thread.
(Written somewhere in south of Jakarta, April 08.)
Be able to use Parallel API such as ParallelFX is just the tip of understanding of Parallel Computing. O, and that concurrency/multithreading programming you've used to (let say using System.Threading stuff) is even smaller.
. Here I'd like to start to share a more computer sciency stuff about Parallel Computing in a very relaxed manner. The goal is to bring parallelism to the people.
There will be future posts on this matter, off course. On this first post, I'd like to highlights several kind of parallelism. Understand of the kind of parallelism is a good start.
Parallel Computing & Distributed Computing
First, we need to understand the difference between:
- Parallel Computing
- Distributed Computing
The two are about solving single problem faster using multiple CPUs.
The difference is:
- In Parallel Computing, Memory is shared among all CPUs.
- In Distributed Computing, each CPU has local memory.
Seeking Concurrency
There are four kind of parallelism:
1. Data Parallelism
2. Functional Parallelism
3. Task Parallelism
4. Pipeline Parallelism
1. Data Parallelism
This is the kind of parallelism where independent task can apply the same operation to different elements of the data set at the same time.
Example:
for (int i = 0; i < 99; i++)
{
a[ i ] = b[ i ] + c[ i ];
}
One can see that the operation in the loop can actually be done concurrently. No need to do it sequentially. Each iteration can actually run simultaneously. That's Data Parallelism.
2. Functional Parallelism
This is the kind of parallelism where independent task can apply different operations to different data elements at the same time.
Example:
a = 2;
b = 3;
m = (a + b) / 2;
s = (a * a + b * b) / 2;
v = s - m * m;
One can see that the first and second statements can be run in parallel. So do the third and fourth statements.
Another example:
for (int i = 0; i < 10; i++)
{
c[ i ] = a[ i ] + b[ i ];
}
for (int i = 0; i < 10; i++)
{
d[ i ] = a[ i ] * b[ i ];
}
for (int i = 0; i < 10; i++)
{
e[ i ] = d[ i ] - c[ i ];
}
The first two loops can run in parallel (by Functional Parallelism, while each operation in the loop is actually Data Parallelism). However, the third loop can't. Because it depends on the result of the first and second loops.
3. Task Parallelism
This is the kind of parallelism where independent task perform functions but do not communicate with each other, only with a "Master" process. These are often called as "Embarassingly Parallel". 
Example:
- Transactions on each ATM machine. One ATM machine run in parallel from another ATM machine, but they are all communicate with the "Master" (Core Bnking System).
- Independent Monte Carlo Simulations (well, okay, many would not get this example
)
4. Pipeline Parallelism
Here, a process is divided into stages, output of one stage becomes input to next stage, products are created simultaneously. It would be best if each stage take the same time to complete. Think of it like an assembly line in a car factory. Several cars are processes simultaneusly, the first car maybe is being processed at stage "n", the second car is processed simultaneously at stage "n-1", the third car is processed simultaneously in stage "n-2", and so on.
// Process 0 sends a & b to Process 1
// Process 1 receives a & b from Process 0
b[1] = b[0] + a[1];
// Process 1 sends a & b to Process 2
// Process 2 receives a & b from Process 1
b[2] = b[1] + a[2];
// Process 2 sends a & b to Process 3
// Process 3 receives a & b from Process 2
b[3] = b[2] + a[3];
So, your homework now is to check how ParallelFX (or any of your favourite Parallel API & Programming Model) supports:
- Data Parallelism
- Functional Parallelism
- Task Parallelism
- Pipeline Parallelism
I also hope you get it that Parallelism does not equal multithreading.
Note: Summarized from Yeni Herdiyeni's material in Parallel Computing.
Whatever makes you happy
Whatever you want
You're so f_____ special
I wish I was special
But I'm a creep
I'm a weirdo
What the hell am I doing here?
I don't belong here
I don't belong here
Finally, I & my mentor has decided to narrow my research area for my thesis in Scientific Computing/Computational Mathematics and not into the Theoretical Computer Science. The two are actually at the different ends of the spectrum of the blending of Math & Comp Sci.
Scientific Computing/Computational Mathematics is the use of computing to solve Mathematical problems (or science/engineering problems that can be modeled mathematically). So, here, computing is the tool, while math is the main idea.
Theoretical Computer Science is the use of Mathematics to solve Computing problems. So, here, math is the tool, while computing is the main idea.
We decided to do the former for various reasons:
- My mentor specialty is on Scientific Computing/Computational Mathematics and not on Theoretical Computer Science. This is the major reason. Besides, no one in IPB (perhaps in Indonesia) has the specialty in Theoretical Comp Sci, while in IPB there are a number of lecturers that master scientific computing. So, I can get a second mentor to consult to more easily.
- Scientific Computing has more practical use, which lead to make it easier to get research funding, get jobs (research and industrial), etc compared to Theoretical Comp Sci.
- The field is more related to my background in Engineering Physics, and my plan to pursue Ph.D in Mathematics (Applied Math). Mathematical modeling and computing of physical phenomena and system dynamics is at the heart of what I learned in my old days in Engineering Physics. So, it is more like I build up things on top of that foundations and it will be the base for my next studies. Isn't cool that you can be a Mathematician, Computer Scientist, Physicist, Software Engineer, all at once? 
Btw, I am not that lucky ones who already has thesis idea before coming into grad school. So, I must find ways to find problems worthy to be solved as thesis. One way is to become Teaching Assistant or Research Assistant. Luckily, I was very honored when my mentor accept me to become her TA, and it will be in Numerical Analysis class in the Department of Mathematics. Yes, Math Dept. Not Comp Sci Dept.
. You will find open problems in one area only if you immerse yourself into it. Being a TA is one way to immerse yourself into something. More than TA, I hope I can join research too. So that I can publish as well.
So, my next days will be filled with a lot of reading of Numerical Analysis stuff and Scientific Computing/Computational Math in general. That includes refreshing and brushing up my MATLAB skill, which the last time I used it was about ten years ago. You know, I've been using C# A LOT lately, and some Mathematica for the fun of it.
. I hope I can already find a title for my thesis by the end of this semester. So that next semester I can already start the writing and the research. I hope I can finish my master study on time.
But then, it all doesn't mean I don't dig Theoretical Comp Sci anymore. It's just for the thesis for my master degree. I don't know, if God allows me, I may have 30+ years ahead to be active in research/work, which some outputs may fall into the Theoretical Comp Sci category. Who knows...
In the time being, I will start to fuse all my energy and effort in mastering Scientific Computing/Computational Mathematics... and it will start with Numerical Analysis.
So, my loved ones (you know who you are!), I am sorry in advance if I may be a bit distracted in the days to come... (distracted, as I've always been (?)). 
Dr. Sri, thanks!
Got it from Basir, here's some pics of my mentor: http://www.pbase.com/endrayanto/nung
"Do you love your math more than me?"
"Of course not, dear - I love you much more."
"Then prove it!"
"OK... Let R be the set of all lovable objects..."
Visual Studio 2008, Windows Server 2008, SQL Server 2008. All have been launched. .NET 3.5, C# 3.0, VB 9.0, LINQ, etc are no more "Cutting Edge". It's all "released" stuff. So, no more excitement for geeks in Microsoft club?
As per what I've heard, there will be no more major release until after 2010. So, what is it out there for you cutting edge geeks?
Well, there are some:
-
VSTS "Rosario" - however, maybe not to excting for those whose not using VSTS/TFS.
-
LINQ to Entities - cool stuff. Breakthru approach for Data Mapping. Works with all RDBMS not just SQL Server as its older brother LINQ to SQL. However, you've heard about this LINQ to Entities a lot. It's just a matter of release date now.
-
Silverlight 2.0 - Exciting, for those whose onto the web. For those who love C# but hate JavaScript. But still, it's "only" Silverlight in C#.

-
Astoria
-
Acropolis
-
etc (Please add to this collection)
What I think is the most exciting thing and at the same time the most relevant for ALL developers are... Parallel Computing.
Parallel Computing, not a very new idea. However, this is the time that it will go to the masses. Concepts, library, tools, programming model, etc that were once only approachable to very few developers will now be available to every developers. Microsoft is now working on initiatives to provide a more approachable programming model, library, tools, etc to exploit the new family of multicore processors. So, if you're into cutting edge stuff that will have big impact, go dig these concepts & technologies.
Here are some resources where I think you can start:
My point is, have a look at Parallel Computing as today multicore processors have become the norm. You can only exploit its power if you know how. That is thru Parallel Computing.
Btw, in this second semester of my study at CompSci IPB, I will have a course (class) on Parallel Computing. However, what I'll learn there will be more into the computer sciency stuff. The formal Mathematics of it and all that jazz.
But then I believe it will provide me with stronger foundations. So that language, programming model, tools, library/API will be just another JIT learning stuff.
Let's go parallel!
More Posts
Next page »