Rash thoughts about .NET, C#, F# and Dynamics NAV.


"Every solution will only lead to new problems."

Category TechTalk

Tuesday, 2. June 2009


F# BootCamp – Questions and Answers – part I – Introduction

Filed under: .NET,F#,Informatik,Mathematik,Steffen,TechTalk,Tools — Steffen Forkmann at 10:34 Uhr

Last Friday we had a fantastic LearningByTeaching F# BootCamp in Leipzig. Each attendee got homework and had to solve one theoretical question and one programming task. For this two questions they had to present their results to the rest of us and after this I gave my solution in addition.

It was very interesting to see the different strategies and solutions. In this post series I will discuss the questions and some of the possible solutions.

Question 1 – What is “Functional Programming” in contrast to “Imperative Programming”?

This seems to be an easy question but in fact, the attendees had some problems to give a short definition of both functional and imperative Programming.

I didn’t find a formal definition of the terms so my intention was to clarify things with an informal description like the one from Wikipedia:

“In computer science, functional programming is a programming paradigm that treats computation as the evaluation of mathematical functions and avoids state and mutable data. It emphasizes the application of functions, in contrast to the imperative programming style, which emphasizes changes in state. Functional programming has its roots in the lambda calculus, a formal system developed in the 1930s to investigate function definition, function application, and recursion.”

Wikipedia

I think the main aspect here is: avoiding state and mutable data. Maybe the words “side-effect”, recursion and “higher-order functions” could also be used, but they will be discussed in later questions.

On my slides I covered the following aspects:

  • Functional programming is a paradigm
  • FP tries to avoid shared state
  • Functions are first class citizens, enabling higher-order functions
  • Pure functions
    • no side-effects
    • Results calculated only on the basis of input values
    • No information storage
    • Deterministic
    • ==> Debugging and testing benefits
    • ==> Thread-safe without locking of data

For further reading I recommend "Conception, evolution, and application of functional programming languages" (Paul Hudak) or “Functional Programming For The Rest of Us” (Slava Akhmechet).

Question 2 – Explain the keyword “let”. In F# we are talking about “let-bindings” and not “variables”. Why?

Basically you use the let keyword to bind a name to a value or function. It won’t change any more, so a binding is immutable at default and not “variable”.

I was glad to see the presenter showing the problem with an imperative assignment like
x = x + 1, which from a mathematical view is paradoxical. There is no x which equals x plus one. I think choice of the F# assignment operator is better than equality sign. The statement x <- x + 1 shows the real intention. I want to put the old value of x plus one into the memory cell where x was before.
So we discussed some basic terms like scope and mutability here and I showed how we can explicitly tell the compiler to use mutable data using reference cells or mutable variables.

Maybe it wasn’t that good idea to discuss “Imperative F#” at such an early point (without knowing any functional concepts), but it showed the contrast to immutable let-Bindings.

Question 3 – What is a recursion? Try to explain why we often want recursions to be tail-recursive. Hint: Look at the following C# program. What is the problem and how could you solve it?
public static Int64 Factorial(Int64 x)
{
    if (x == 0) return 1;
    return x*Factorial(x - 1);
}
…
Factorial(10000);

It was interesting to see that nearly nobody expected a real problem in such a short code snippet. Some attendees thought this program might have an integer overflow – but only the presenters (they tested the program) gave the right answer (stack overflow). In fact they gave a very good and deep explanation about recursion and the problem on the stack.

As the question hinted, a possible solution was adding a accumulator variable and using tail-recursion:

public static BigInt FactorialTailRecursive(BigInt x, BigInt acc)
{
    if (x == BigInt.Zero) return acc;
    return FactorialTailRecursive(x - BigInt.One, x*acc);
}

Unfortunately this "trick" doesn’t work in C# (the compiler doesn’t use tail calls), but it leads to the correct idea – converting it to a while-loop. Of course I would prefer the tail-recursive F# solution:

/// Tail recursive version
let factorial x = 
  let rec tailRecursiveFactorial x acc =
    match x with
      | y when y = 0I -> acc
      | _ -> tailRecursiveFactorial (x-1I) (acc*x)           

  tailRecursiveFactorial x 1I

We didn’t cover continuation passing here. I think this could be something for an advanced session.

Next time I will discuss the rest of the introduction and show some of the first programming tasks.

Tags: , , ,

Friday, 10. April 2009


Microsoft TechDays Mai 2009 – Administrieren mit PowerShell

Filed under: TechTalk — Steffen Forkmann at 11:08 Uhr

Seit Herbst 2008 bietet Microsoft TechNet eine neue Veranstaltungsreihe an: den sogenannten Microsoft TechDay. Im Mai wird sich diese Reihe um das Thema „Administrieren mit PowerShell“ drehen.

“Die Windows PowerShell, zeitweise auch bekannt unter den Codenamen Monad und Microsoft Command Shell (MSH), ist eine von Microsoft entwickelte Alternative zum Windows-Kommandozeilenprogramm cmd.exe und zum Windows Script Host.

Die auf dem .NET-Framework in der Version 2.0 basierende Windows PowerShell verbindet die aus Unix-Shells bekannte Philosophie von Pipes und Filtern mit dem Paradigma der objektorientierten Programmierung. Der Benutzer kann wie bisher einfache Befehle an einer Kommandozeile ausführen und miteinander verknüpfen oder aber auch komplexe Skript-Programme mit der eigens dafür entwickelten PowerShell Scripting Language schreiben.”

[Wikipedia]

Folgende Termine stehen zur Auswahl:

  • 05.05.2009: Hamburg
  • 06.05.2009: Düsseldorf
  • 12.05.2009: Stuttgart
  • 15.05.2009: München

Weitere Informationen zur Anmeldung und weiteren geplanten Themen findet man auf der Event-Seite des Microsoft TechDay bzw. auf der Agenda-Seite.

Im Juni wird es dann übrigens eine TechDays-Reihe zu Windows 7 geben. Man darf gespannt sein.

Tags: ,

Saturday, 10. November 2007


Vorlesungen über Dynamics Nav an der Berufsakademie Heidenheim

Filed under: Dynamics NAV 2009,Informatik,Navision,Steffen,TechTalk,Veranstaltungen — Steffen Forkmann at 18:54 Uhr

In dieser und der letzten Woche haben ich zwei Vorlesungen an der BA Heidenheim gehalten. Beide Vorlesungen wurden als Blockseminar veranstaltet und gingen jeweils über zwei Tage. In der ersten Veranstaltung mit dem Titel “ERP-Systeme: Microsoft Dynamics Nav” bin ich auf die aktuelle Navision-Version 5.0 eingegangen und habe die Finanzbuchhaltung sowie die Lagerverwaltung mehr oder weniger aus Anwendersicht erkärt. Im weiteren Verlauf der Veranstaltung habe ich dann noch einen Ausblick auf Microsoft Dynamics Nav 6.0 gegeben und versucht eine Diskussion über das Thema “Dynamics oder SAP – Wer gewinnt den Mittelstand” anzuregen.

Im zweiten Blockseminar wurde es dann wesentlich technischer – es ging um “Web-ERP Kopplung” am Beispiel von Dynamics NAV. Die Teilnehmer waren Studenten der Wirschaftsinformatik im 5.ten Semester. Ziel der Veranstaltung war den Studenten das nötige Wissen zu vermitteln, so dass sie ihr Webshop-Projekt an Navision anbinden können. Interessant war in dem Zusammenhang die Diskussion über die Wahl des Integrationsweges. Reicht eine Sammlung von einfachen Dataports, die in regelmäßigen Abständen manuell ausgeführt werden? Sollte man evtl. den Navision Application Server einsetzten und die Dataports automatisch ausführen lassen? Oder geht man im Sinne einer serviceorientierten Architektur sogar soweit, dass man ein Reihe von Webservices in den NAS integriert.

Insgesamt war es eine interessante Erfahrung mal den Vorlesungsbetrieb von der anderen Seite zu erleben. Ich musste erkennen wie schwierig es ist die Motivation der Teilnehmer für ein Thema über eine längere Zeit hoch zu halten.

Die Vortragsfolien werden diesmal nicht öffentlich zum Download angeboten, sondern nur für Teilnehmer passwortgeschützt per E-Mail geschickt.

Tags: , , , , , , , , ,

Saturday, 3. November 2007


Microsoft Dynamics Technical Community Airlift – Neues von Dynamics NAV 6.0

Filed under: Dynamics NAV 2009,msu solutions GmbH,Navision,TechTalk,Veranstaltungen — Steffen Forkmann at 17:18 Uhr

Das Microsoft Dynamics Technical Community Airlift findet am 29. und 30. November 2007 im Münchner Arabella Sheraton Grand Hotel statt. Voranging geht es bei der zweitägigen Veranstaltung um neue Einblicke in die Dynamics Reihe und speziell auch zu Dynamics NAV “6.0”. Die Agenda der “Luftbrücke” umfasst momentan 8 Vortrage zu Navision – u.a. auch von Jesper Ræbild, der auch schon auf der CONVERGENCE die NAV-Vorträge gehalten hat.

Direkt nach dem Technical Airlift, veranstaltet Microsoft bzw. die Impuls Academy noch eine Zertifizierungsveranstaltung (Certification@Weekend) für Dynamics NAV Consultants und Entwickler.

Der Kurs “Microsoft Dynamics NAV 5.0-C/SIDE Introduction und Solution Development” besteht aus einer eintägigen Zertifizierungsvorbereitung und dem Examen. Die Certification@Weekend findet am Samstag, den 1.12. in München statt.

Nachtrag: Meine Eindrücke vom Event beschreibe ich hier.

Tags: , , , , ,

Saturday, 5. May 2007


Vortrag von Roland Weigelt zur Visual Studio 2005 Erweiterbarkeit

Filed under: .NET 3.0,C#,TechTalk,Veranstaltungen,Visual Studio — Steffen Forkmann at 8:57 Uhr

Am 06.07.2007 findet ab 19:30 ein sehr interessantes Event in Leipzig statt. Roland Weigelt wird über die Entwicklung seines mehrfach ausgezeichneten Plugins GhostDoc berichten und einen Einblick in die Visual Studio Erweiterbarkeit geben. GhostDoc ist für mich neben ReSharper das wichtigste Plugin für Visual Studio überhaupt.

Der Vortragende wird folgende Features vorstellen:

  • Code Snippets
  • Item und Project Templates
  • Wizards
  • Makros
  • Add-Ins

Mehr zu dieser Veranstaltung bzw. die Anmeldung findet man auf den Seiten der .NET User Group Leipzig.

Tags: , , , ,

Thursday, 5. October 2006


TechTalk zur WF mit Sebastian Weber

Filed under: TechTalk,WF — Steffen Forkmann at 18:40 Uhr

Am 25.10.2006 findet in Dresden ein TechTalk zum Thema Windows Workflow Foundation mit Sebastian Weber statt. Anmeldung

Thursday, 28. September 2006


Nachlese: TechTalk zu WCF mit Christian Weyer

Filed under: TechTalk,WCF — Steffen Forkmann at 13:23 Uhr

Gestern war ich mit zwei Kollegen beim “Teile und herrsche: Verteilte Lösungen mit der Windows Communication Foundation”-TechTalk in Leipzig. Der Vortragende Christian Weyer  zeigte wieder alles was einen guten Redner ausmacht und vermittelte eine sehr gute und vor allem lustige Einführung in das Thema Serviceorientierte Architektur.

Christian schaffte es in ca. 3 Stunden die komplette Infrastruktur seiner Beispielanwendung TecTv zu erklären und in Live-Codesamples um zu setzen.

Meine ersten Eindrücke vom Thema WCF sind wirklich durchweg positiv. Microsoft scheint die orthogonalen Features wie Security, Transport, Logging, Tracing usw. wirklich fast komplett konfigurierbar gemacht zu haben, so dass man in den meisten Fällen keine Zeile Code mehr schreiben muss um eine neue “Übertragungstechnologie” für seinen Service zu implementieren. 

Man gibt nur noch in den ApplicationSettings (client- und serviceseitig) den entsprechenenden Service-Endpoint an und schon kann es losgehen.

Zum Beispiel so:

<endpoint address="net.tcp://localhost:1234/myNetService" binding="netTcpBinding" bindingConfiguration="unsecureTcp" contract="IMyInterface" /> <endpoint address="http://localhost:1235/myHttpService" binding="basicHttpBinding" contract="IMyInterface2" />

Weitere Feature wie Transaktionen oder Streaming usw. kann man einfach oben drauf per Konfigurationseinstellungen hinzufügen. So rückt der bisher so wichtige Teil der Protokollauswahl sehr stark in den Hintergrund und die Nachricht selbst (bzw. der Contract der Nachricht) kommt an die wichtigste Position.

Wenn man selbst in das Thema einsteigen will, kann man z.B. den Hello-World-Artikel nachprogrammieren – auch wenn Christian mit der Architektur des Samples wohl nicht 100% zufrieden wäre.

Weitere Informationen:

Saturday, 16. September 2006


TechTalk mit Christian Weyer in Leipzig

Filed under: Diverses,TechTalk,WCF — Steffen Forkmann at 12:40 Uhr

 

Am 27. September findent im Leipziger Mercure-Hotel ein TechTalk mit Christian Weyer über die Windows Communication Foundation (WCF ehemals Indigo) statt. Organisiert wird das Event von der .NET User Group Leipzig.

Die Anmeldung und weitere Informationen gibt es hier.

Saturday, 23. July 2005


Webcast-DVD kostenlos bestellen

Filed under: .NET,TechTalk,WebCasts — Steffen Forkmann at 13:06 Uhr

Bei Microsoft kann man sich jetzt kostenlos eine DVD mit allen bisher erschienenen TechTalk-Webcasts bestellen. Einfach Formular ausfüllen und schon wird die DVD verschickt.

Monday, 20. June 2005


Visual Web Developer Express On Tour

Filed under: ASP.NET,TechTalk,Visual Studio — Steffen Forkmann at 19:14 Uhr

Unterwegs in der “Mission Bessere Websites”

12. Juli bis 12. September 2005, bundesweit
Aufgrund der großen Nachfrage wird es nach Erscheinen der Beta 2 von ASP.NET 2.0 einen TechTalk-Special geben: Ohne viele Folien und Theorie liegt diesmal der Schwerpunkt auf praxisorientiertem Coding mit Visual Web Developer Express – ein Workshop, der auch für Einsteiger in die Microsoft-Webtechnologien geeignet ist.
“70% produktiver sein beim Schreiben von Webanwendungen – und keinen Cent für die Tools ausgeben!” tönt es frech aus dem Microsoft-Marketing. Die zwei Webprogrammierer und Profi-Marketing-Skeptiker Neno Loje und Uwe Baumann wollen diese Aussage mit einem extremen Selbstversuch überprüfen: Ein Music-Downloadstore soll programmiert werden, und zwar in drei Stunden. Mit der frei erhältlichen Entwicklungsumgebung Visual Web Developer Express 2005. Kann das klappen?

Mission Bessere Websites

Tags: , , ,