Thursday, April 18, 2013

My Indonesian KB article about Visual Studio 2012 Update 1 installation has been published for April 2013

Hi again, all!

Busy month again for March 2013! I have been contributing KB articles for you, my dear blog readers and my MUGI community readers!

Thanks to Min Seop, Clarisse Ng, now my KB articles in Indonesia has been published!

The topic is now “How to download and install Visual Studio 2012 Update 1 offline”. And the title in Indonesian is: “Bagaimana cara menginstal Visual Studio 2012 Update 1 secara offline”.

The URL is: http://support.microsoft.com/kb/2838372/id-id

Now, any updates to Visual Studio 2012 will be delivered as “Update” instead of Service Pack. These updates may contain new features, not just bug fixes.

The complete list and overview of Visual Studio 2012 Update 1 is available at: http://support.microsoft.com/kb/2797915

Friday, April 5, 2013

My Microsoft KnowledgeBase (KB) articles have been published for April 2013

Hi all!

March 2013 was quite a busy month. Not just continually writing my blog post on F# series, but I also have volunteered to contribute article for Microsoft Technet Knowledge Base.

Thanks to Lilian and Min Seop from Microsoft, my article is available to be read from April 1st, 2013.

Here’s the link:

  1. How to implement interface in F#
  2. Introduction to F#’s pattern matching

Please visit those links and read it. If you have suggestions and critics, write to me, guys!

Wednesday, March 6, 2013

Reasons to use F# from Brian Mc Namara and Eriawan

Hi there!

I found very precious blog entry of Brian Mc Namara, a team member of F# team at Microsoft.

His blog was originally located at Windows Live Spaces and then transferred to Wordpress.

Now the URL of his Wordpress blog is: http://lorgonblog.wordpress.com/

Brian’s blog is very inspirational, and it’s one of my source of knowledge about F#. One of my favorite entry is “Nine reasons to use F#”.

Here are his reasons:

  1. Units of measure.  If you’re working in domains that use numbers to represent physical quantities like kilograms, meters, and seconds (or pixels versus inches, or dollars versus euros, or …) you can use the F# type system to ensure that the dimensional analysis works out.  Nearly everyone who uses this feature has a “wow” experience where the compiler finds an unexpected bug (it happened for me when working on the 2008 ICFP programming contest).  In certain domains, this kind of static typechecking is a really killer feature. You can learn more about F# units here, here, or here.
  2. Functional programming with .NET.  If you need to author a component that’s especially amenable to functional programming techniques (like game AIs, statistical modeling, symbolic computing, …), and you need to interoperate with SQL, Excel, or XBox, or run in the browser with Silverlight, or run in the cloud with Azure, or do WCF, WPF, or WinForms, or easily talk to your existing C#/VB/C++/COM code, then F# is where it’s at. The .NET platform has great reach and integration with a variety of technologies, and F# extends the platform by providing a way to do first-class functional programming and get seamless integration with all these technologies.
  3. Explorative programming with the REPL.  The F# Interactive tool window makes it easy to execute small bits of code on the fly.  When working with large data sets or mathematical models, this makes it easy to explore the data, play “what-if” games, and directly interact with the data/models in a very “live” way.  When coupled with libraries for data visualization, this enables some really cool stuff.
  4. Asynchronous and parallel programming.  I’ve blogged recently about F#’s unique programming model for writing non-blocking code for asynchronous I/O.  The async programming model also extends to parallelizing CPU intensive work, and F#’s library also makes is straightforward to react to events, use lightweight agents, or run code on the GPU.  (There’s actually tons of content on the web on these topics; in the previous sentence, I just sprinkled in some links to Don’s blog.)  Multi-core is here, and F#’s language constructs and libraries are very well-suited to parallel programming (not to mention some intrinsic advantages of the functional programming style).
  5. Embedded domain-specific languages (EDSLs).  A variety of F# features (including ability to define new operators, currying and function application syntax, quotations, type inference and overall lightweight syntax) make F# a good language for creating EDSLs.  Some examples include FsUnit for unit testing, FAKE for authoring build scripts, FParsec for parsing, and WebSharper for web applications.
  6. Scripting.  Every so often, I need to write a script, but I use perl and batch files infrequently enough that I’m always forgetting the syntax of those.  Nowadays I use F# for a number of scripting tasks, both in the sense of “FSI is the new perl” and for tiny tasks (e.g. if I can’t recall the ascii value of character ‘A’, I just type “int ‘A’;;” into the F# Interactive window).  I know at least a couple folks using .fsx files where previously they would have used batch files or perl scripts.  For me, F# is the first “software engineering” language I know that’s also a good “scripting language”.
  7. A practical language for academia.  Back when I was a college undergrad, the first real programming language I learned in school was Pascal.  (Yes, this was back before C#, or even Java; I’m an old man.)  In university, it seems there’s been a tension between teaching more ‘pure’ and ‘CS-y’ languages and teaching more pragmatic languages (e.g. that you can likely use for gainful employment when you get out of school).  This is still a topic of much debate, but I think we’re in a much better state now, with languages including Java, C#, Scala, Python, and F#, then we were a decade or two ago; there are now a variety of languages that are decent both as “good introductory CS languages” and “useful real-world languages”.
  8. Expand your mind and career.  I think there are a fair number of folks that use C# or VB in their day job, who would like to learn more about functional programming, but find that diving head-first into Haskell is too difficult or time-consuming.  F# provides an avenue to go more gently into the waters of functional programming, leveraging one’s existing .NET and Visual Studio familiarity.  A lot of folks who are just trying F# as a hobby have reported that they’ve learned new strategies/algorithms that they can apply back in their day job (e.g. using C#), hurray.
  9. Fun!  I’m constantly hearing from people how much they enjoy using F#.  Who doesn’t love being able to get a job done and have fun doing it?

I also would like to have his reasons as mine. And I will add my own reasons:

  1. The most succinct programming language on .NET. Yes, anybody might argue F# is not the most succinct, but as far as I know no other programming languages on top of .NET has the succinctness of F#!
  2. Your code is less buggy thanks to the succinctness of F#.
  3. Train you to have functional mindset while not abandoning you OOP and imperative mindset. This is important, as F# is still compatible and interop well with C# and VB.

Any other reasons to add? I also welcome suggestions

Monday, January 28, 2013

Speaking for MUGI at STMIK Tangerang

Hi there!

It’s my nature to share knowledge especially sharing knowledge of my interest on software development, especially .NET. Also being part of MUGI, I enjoyed giving speech as much as I can in my spare time.

This time, I was invited by STMIK Tangerang as part of MUGI goes to campus program. It’s also my honor to represent MUGI, because I have had many knowledge outside my software development interest thanks to MUGI.

The schedule was on January 26, 2013. My topic was ASP.NET 4. I went there with Wakhid Nusa Bakti and Aji Prasetio Wibowo. Aji was giving speaking of Windows 8 topic.

POSTER1_speaking_stmik_21511AED

The audience at that time was quite enthusiastic, especially at Q & A sessions after I gave speaking!

speak_stmik1_7DD47687

And here, Aji, Wakhid and me sitting as speaker panels: (while I was giving demo)

speaking_aspnet_20490543

The presentation was full of coding demo, and I also gave copies of MSDN video tutorials for the audiences. There’s also demo in F#, not just in C# to show that F# can be used to code for ASP.NET as well.

See you at the next sharing!

Friday, December 28, 2012

Using Team Explorer Everywhere 2012 Update 1 in Eclipse 4.2 (a.k.a. Eclipse Juno)

Hi there!

In my everyday jobs doing software development tasks (including coding, testing and also managing software requirements), I often use tools to help me. The tools that involves software development teams doing their job to develop software from start to end and also developing future versions of it are often called ALM tools, or Application Lifecycle Management tools.

Before I get down to discussing Team Explorer Everywhere, let me bring you the ALM tools available currently.

These are mature ALM tools currently on market today: (starting from the order of release)

  1. IBM Rational Collaborative Lifecycle Management products (yes, they are more than one product under this name)
  2. Borland StarTeam for SCM and version control, Caliber for requirement management
  3. JIRA (for issue/bug tracking and work item management) and Confluence (for team collaboration) by Atlassian
  4. Microsoft Visual Studio Team Foundation Server 2012 with Visual Studio Team Foundation Server 2012 Test Agent

IBM Rational doesn’t have integrated version just like Microsoft has.

Also the offering from Atlassian doesn’t have version controls, although it can be connected to Git or Mercurial. For more info on Atlassian offering, visit this: http://www.atlassian.com/software

The ALM from IBM consists:

  1. Rational Requirement Composer (replaces Rational Requisite Pro)
  2. Rational Team Concert (will replace Rational ClearCase and ClearQuest)
  3. Rational Software Architect (to design business process diagram and other UML, will replace Rational Rose)
  4. Rational Quality Manager

For the latest update on IBM Rational ALM offering, visit http://www-142.ibm.com/software/products/us/en/category/SW860

Currently, Rational ClearCase has its own repository infrastructure, not just database. It’s different from Microsoft Visual Studio TFS approach, whereas you can backup the repository by backing up database and setting that TFS used.

I mentioned Microsoft Visual Studio TFS 2012 in the last, because I consider this version can match the maturity of IBM Rational offerings. TFS 2010 can match the IBM Rational, but the requirement management isn’t intuitive enough.

Also even in TFS 2012 I can’t generate or at least make requirement traceability matrix like IBM Rational can.

Those tools above is not interoperable, you have to choose upfront and plan it carefully. Currently, Microsoft supports not just Visual Studio, but Eclipse is also supported for Eclipse 3.5 and 4.2 (Juno).

What about Rational? Currently I can’t find Rational tools from IBM to support VS 2010 or VS 2012. Or if you can correct me, my dear blog reader? I welcome corrections and suggestions!

Using TFS with Visual Studio is easy, using Visual Studio Professional or above edition will have Team Explorer installed, just like this:

VS2012_ultimate_TeamExplorer_1F98A8B8

It can also connect to Microsoft Visual Studio Team Foundation Service (or simply TFS in the cloud) easily.

But what about Eclipse?

eclipse_juno_j2ee_77B19559

For more info about Juno: http://www.eclipse.org/juno/

The TFS integration tool for Eclipse is freely available to download from Microsoft and it’s fully supported!

The name of the product is Microsoft Visual Studio Team Explorer Everywhere 2012 Update 1. I know, it’s quite mouthful.

Here’s the link to download:

http://www.microsoft.com/en-us/download/details.aspx?id=30661

TeamExplorerEverywhere_2012_Update1_Download_5D6D1836

Any files to download in Microsoft’s download page is free, and it can be a free trial software. But Team Explorer Everywhere is absolutely free and it’s a full working product, not a trial.

But if you want to set up automatically from Eclipse, you can set the Eclipse “Install software” setting to point to Microsoft’s Team Explorer Everywhere download URL.

The detail step by step is also available from the download site, but I’m capturing it for you:

install_teamexplorer_everywhere_2012_from_updatesite_460DD9F9

The display will look like this:

install_after_add_teamexplorer_site_2EEF32F0

Choose it, and install it.

After installing, Eclipse will have a new Team Explorer Everywhere perspective. Open the perspective.

teamexplorer_after_install_301F9203

Now you can connect to your own TFS server or connect to Team Foundation Service.

I have used it to connect to my account on Team Foundation Service, the looks is quite similar to Visual Studio Team Explorer:

choose_teamproject_eclipse_66E8FED5

Now the source control explorer:

teamexplorer_sourcecontrolexplorer_3529CD81

Done! But sadly enough, it has no toolbar like the one in VS Team Explorer.

In the future, I will bring more deep conversations and also deep tutorial about ALM using Microsoft Team Foundation Server, after finishing my blog on F#!

Wednesday, November 7, 2012

[INFO] A hot thread about F# and functional programming is available on Kaskus: about Monad and Type Classes

This is a quoted thread content F# and trends in functional programming in a discussion thread model, please follow my thread (my id on Kaskus is “erilive”) on Kaskus! And it’s available in Bahasa Indonesia!

Hi guys,

If you want to know more about F# and trends in functional programming in a discussion thread model, please follow my thread (my id on Kaskus is “erilive”) on Kaskus! And it’s available in Bahasa Indonesia!

There’s a lot of discussion happens there! And I invite you to join, and I will invite you all of those are advanced or just beginner in functional programming and F#. Some topics are very interesting but quite advanced such as type classes, but there is an easy topic about why functional programming matters.

Here’s the address:

http://www.kaskus.co.id/thread/000000000000000016890387/fpara-programmer-f-dan-functional-programming-disini-yah/

And paragraphs below are samples from the thread:


Monad sample

Quote:Original Posted By erilive on http://www.kaskus.co.id/show_post/000000000000000759711105/18/

Monad yang mana gan? Maybe monad, Identity monad, Reader monad, State monad?

Kalau Reader monad di F#, sudah ada yang bahas:
http://codebetter.com/matthewpodwysocki/2010/01/07/much-ado-about-monads-reader-edition/

Dan sepertinya kalau diimplementasikan di bahasa selain F# (kecuali kalau di Haskell) sepertinya akan menjadi kurang elegan.

Monad disini bukan "Monad" di cabang matematika Category Theory.

Kalau memang banyak peminatnya, akan saya jelaskan Monad di thread ini, agan-agan :)

Notes in English: (as translated)

Which Monad? There are Maybe Monad, Identity Monad, state Monad.

Reader Monad sample in F# has been discussed in:

http://codebetter.com/matthewpodwysocki/2010/01/07/much-ado-about-monads-reader-edition/

And if it’s implemented in other language besides F# and Haskell, it’ll be less elegant.

Monad in this context is not direct equals to Monad in Category theory from Math discipline.

Quote:Original Posted By Syinn

silahkan aja kalo mau langsung bahas monad, saya nyimak dulu ...kalo ada yang kurang ngerti , akan saya tanyakan pada anda

ada baiknya bahas yang awal dulu, yakni monad state

Dan sepertinya kalau diimplementasikan di bahasa selain F# (kecuali kalau di Haskell) sepertinya akan menjadi kurang elegan.

btw, saya ingin tahu kenapa om bisa berkesimpulan yang saya bold di atas ? bisa anda jelaskan secara tehnik dan detail?

karena soal keeleganan code pemrograman kan tergantung kreatifitas programmer itu sendiri, apapun bahasa program yang dia gunakan (ini kalo menurut saya lho, om )

Note in English:

He (Syinn) wanted to know about why I told him it’s less elegant.

And here’s my answer:

This is state monad in F# and sample code to use:

module StateMonad

let (>>=) x f =
   (fun s0 ->
      let a,s = x s0
      f a s)      

let returnS a = (fun s -> a, s)

type StateBuilder() =
    member m.Bind(x, f) = x >>= f
    member m.Return a = returnS a 

let state = new StateBuilder()

let getState = (fun s -> s, s)

let setState s = (fun _ -> (),s) 

let Execute m s = m s |> fst

Now, in C#: (taken from http://taumuon-jabuka.blogspot.com/2012/06/state-monad-in-c-and-f.html)

cs_state_monad_657AF37F

The Bind operator is implemented below:

cd_state_monad_bind_24D8A710

As you shall see, it’s less elegant!


Why IO Monad is “EVIL”?

Syinn asked again! But the topic is about why IO Monad is “EVIL”:

why_iomonad_evil_6F5FE4EA

Here’s my answer: (and apologize if it’s quite long)

There is a blog post that describe IO Monad is evil: http://kawagner.blogspot.com/2007/02/why-monads-are-evil.html

And I assume he (Syinn) quoting that blog post although he didn’t mention it.

My definite answer is: IO Monad isn’t evil. According to that post, because value evaluation when designing IO Monad became imperative, and therefore it would break referential integrity. But it’s not! Because the nature of Haskell is non strict (lazy), the timing of the execution is not so important and the reference is not broken.

A simple sample of this is when dealing with iterator of yield in C# (since VS 2005) and in VB.NET (since VB 11 in Visual Studio 2012).

Due to the fact that I/O is side effect, then declaring I/O must be explicit and has to be marked as signature to a part of the “world” that includes garbage collection.

Functional programming, especially the "pure" ones, forces us to be aware and be careful in handling side effect such as I/O, pointer, exceptions.


More on this?

You will have it on my part 4, 5 of functional programming series! Watch for my next blog post entry!

Tuesday, October 30, 2012

Event report on BSI Bekasi Microsoft Technology Update and explaining Asychronous without coding

Hi guys! While I was preparing for Part 4 and 5 of my blog series about F#, MUGI Jadetabek was organizing event at BSI Bekasi about Microsoft Technology update on 13th October, 2012. It is part of MUGI technology community sharing.

The complete event report is already presented by Wakhid Nusa in this blog entry. Now I’ll focus on my participation: acting as MUGI Jadetabek representative and also helping Nicko to deliver presentation of “Introduction to Visual Studio 2012”.

The number of audiences are quite large, it’s about 200 students with roughly equal numbers of boys and girls. The fun side is, the enthusiasm is overwhelming! It’s quite rare to have this rate of enthusiasm, comparing to previous MUGI gathering on other universities/schools.

Other than Nicko from MUGI, we have Agatha Leonita with Office 2013 and Aji Prasetio with Windows 8 respectively.

Here’s the pictures from the event:

Nicko, Agatha, and Aji Prasetio in the pictures below.

WP_000046_5FF63733 WP_000048 WP_000050

I was giving short MUGI history and answering questions about Visual Studio:

WP_000161 WP_000191

Now a picture of all MUGI’s speakers with Wakhid Nusa excluding Aji: (because Nicko and I have to go after my Visual Studio and Office 2013 sessions done)

WP_000051

One notable questions was “what asynchronous is” when Nicko was delivering Visual Studio 2012 introduction. Although there’s a minor difficulty in Nicko in explaining asynchronous, I was helping giving analogy of a customer ordering and waiting for his food in a restaurant.

Asynchronous means A – Synchronous, it’s not synchronous. Usually we code in synchronous way, in a sequences in our code. This means:

  1. Do something and wait until done
  2. After number one done, do something else and also wait until done.
  3. Do other things after number 1 done first, and then after number 2.

It is well explained, but what happens when you are in a restaurant?

Do you have to wait for your other customer’s order finished eaten and paid? If any restaurants are like these, the experiences will be unpleasant!

So, basically a restaurant is asynchronous:

  1. Waiter taking order from customer
  2. Waiter is giving order to the chef
  3. While waiting for the chef to complete cooking, waiter can take other orders from other customers but there is has to be a continuation point to signal/notify that the cooking is complete, see below
  4. Chef is completing the cooking and notifying the waiter
  5. Waiter is taking the cooked cuisine and giving it to the customer in a step one.

So, the experience is pleasant and satisfactory, because the waiter isn’t idle waiting for the cook to be finished and he/she can take other order from other waiting customers!

We have had asynchronous programming model in basic BCL threading, Windows Forms, WPF and ASP.NET. But sadly, it’s not intuitive and easy to write.

Now the horrible experience of writing async code is simplified using async keyword in C# and VB in Visual Studio 2012.

This is a sample of using async to get web content asynchronously: (from MSDN Library)

async_sample01

The code after await getStringTask is the continuation, but it’s quite easier to write because it feel synchronous!

But F# already has this way before VS 2012! It was introduced in F# 1.8 and F# asynchronous workflow was also inspiring async in C# and VB.

This is F# sample from MSDN:

fsharp_async_sample

In the sample above, it’s combined with parallel programming with Async.Parallel! Watch async in action in my next blog series about F#, guys!

For more information about async in C# and VB in Visual Studio 2012, visit:

http://msdn.microsoft.com/en-us/library/hh191443(v=vs.110).aspx

Lastly, keep sharing your knowledge guys! Go MUGI!