Donnerstag, 22. März 2012

Google is watching you!

Grmpf! Mein letzter Post wurde soeben von Google abgemahnt: Ich habe damit angeblich verbotenerweise Leute aufgefordert, auf die Werbung der Elexis Seite zu klicken. Offensichtlich haben die Googler entweder niemanden, der deutsch kann, oder niemanden, der Ironie kann. Oder beides nicht. Oder vielleicht hat sich auch der Hersteller der "besten KG der Schweiz" bei Google über meinen geschäftsschädigenden Blogeintrag beschwert ;-)
Wie auch immer: Ich habe mein AdSense Konto soeben aufgelöst. Also Ihr müsst in Zukunft auf die Interessante Werbung der besten KG der Schweiz auf meiner Seite verzichten.

Jetzt bin ich nur noch gespannt, ob Google auch diesen Blogpost kritisiert oder gleich mein Konto auflöst....

Donnerstag, 8. Dezember 2011

Die beste elektronische KG

Eigentlich ist es ja lustig, dass die beste KG der CH (Ich schreib jetzt nicht, welche das ist, das wissen Sie bestimmt schon...),  Google AdWords bezahlt, um für sich auf www.elexis.ch Werbung zu machen. Für jeden Klick auf die Werbung des Mitbewerbers bekomme ich dadurch von Google etwas Geld überwiesen, die der Weiterentwicklung von Elexis zugute kommt. Merci vilmool :-)

Mittwoch, 5. Oktober 2011

Mitbewerber fühlen sich bedroht

Einer der grössten Mitbewerber fühlt sich offensichtlich von Elexis bedroht. Fast eine halbe Seite seines neuen Gratisprospekts widmete er Beteuerungen, dass "das günstigste Produkt" nichts tauge. Wir sind natürlich für kostenlose Werbung dankbar, legen aber Wert auf die Feststellung, dass dieses Co-Marketing unsererseits nicht beabsichtigt war. Immerhin betrachte ich persönlich es als schmeichelhaft, einem soviel grösseren und seit Jahren etablierten Gegner soviel Angst einjagen zu können :-)

Das bei diesem Mitbewerber der Prospekt auch das einzige Preiswerte ist, ist allgemein bekannt. Gegen die Stabilität seines Produkts habe ich nichts einzuwenden. Bloss die Turbo-Pascal-artige Oberfläche gefällt mir überhaupt nicht. Aber über Geschmack lässt sich ja bekanntlich streiten.

Ich empfehle Ihnen folgendes: Wenn Sie eine neue Praxissoftware brauchen, lesen Sie nicht nur den Prospekt und lassen Sie sie sich auch nicht nur vom Hersteller vorführen, sondern fragen Sie Kolleginnen und Kollegen, wie zufrieden sie mit der Software und dem Herstellersupport sind. Verlangen Sie eine kostenlose Demoversion und probieren Sie diese in Ruhe aus. Wählen Sie dann das Produkt, das Ihnen am meisten zusagt.

Eigentlich logisch. Deswegen von mir an dieser Stelle keine Spitze gegen die Mitbewerber :-)

Sonntag, 29. Mai 2011

Scala und Specs

Das hier, was man auch ohne Programmierkenntnisse zumindest so halbwegs verstehen kann....

"Service" should {
    "retrieve a Service matching a given nucleus version" >> {
      val serviceBox = Service.findService(context.serviceToMatch, "2.1.5")
      serviceBox mustNot beEmpty
      val service = serviceBox.get
      service.version.is must_== "2.0.7"
      service.symbolicName.is must_== "ch.elexis.features.switzerland.de"
    }
    "return Service with the highest version for the given nucleus version" >> {
      val serviceBox = Service.findService(context.serviceToMatch, "2.2.0")
      serviceBox mustNot beEmpty
      val service = serviceBox.get
      service.version.is must_== "2.1.0.20110101"
    }
    "return empty Box for inexisting service" >> {
      val serviceBox = Service.findService("this.doesnt.exist", "2.2.0")
      serviceBox must beEmpty

    }
    "extract the binary contents from the service" >> {
      val serviceBox = Service.findService(context.serviceToMatch, "2.2.0")

      serviceBox mustNot beEmpty
      val service = serviceBox.get
      val bytesBox = service.getPackedFile.getBinary
      bytesBox mustNot beEmpty

    }

    "produce a list of existing services for a given nucleus" >> {
     
    }
  }


... ist ein gültiges Programmfragment, welches beim Ablauf folgende Ausgabe liefert:

[info] + Service should
[info]   + retrieve a Service matching a given nucleus version
[info]   + return Service with the highest version for the given nucleus version
[info]   + return empty Box for inexisting service
[info]   + extract the binary contents from the service

[info]   o produce a list of existing services for a given nucleus

Es handelt sich um ein Testfragment in Scala mit dem "Specs" Testframework.
Das + vor jeder Zeile der Ausgabe bedeutet, dass der betreffende Test erfolgreich war. Das o vor der letzten Zeile sagt, dass dieser Test zwar deklariert, aber noch nicht implementiert ist.

Am Ende des Testlaufs steht dann:

[info] == test-finish ==
[info] Passed: : Total 34, Failed 0, Errors 0, Passed 33, Skipped 1
[info] 
[info] All tests PASSED.


Diese Art der Programmentwicklung nennt sich "behaviour driven development" (BDD) und ist je nach Sichtweise eine Abspaltung oder eine Weiterentwicklung des älteren TDD (test driven development).

Beide Entwicklungskonzepte bauen auf dem Grundsatz aus, dass man zunächst definiert, was das Endprodukt tun soll, dann Tests entwickelt, die zeigen, dass es das noch nicht tut, und erst zuletzt das "eigentliche" Programm schreibt, das dann letztlich dazu führt, dass der Test schliesslich erfolgreich endet.

Dadurch erreicht man, dass man exakt das entwickelt, was man entwickeln will und soll. Man verzettelt sich nicht, sondern bringt nur den Test zum Gelingen), und als "Abfallprodukt" hat man eine stetig wachsende Sammlung von Tests, die man später immer wieder automatisch durchlaufen lassen kann und so sicherstellt, dass das Programm auch nach Änderungen immer noch so funktioniert wie erwartet.

Während man die Tests beim TDD sehr technisch fomuliert, etwa als JUnit TestCases, deklariert man beim BDD eher, wie das Programm sich verhalten soll (Mit Begriffen wie "should" oder "can") und bleibt dabei nahe an der natürlichen Sprache. Das ermöglicht es, Programmspezifikationen auch zusammen mit nicht-programmierenden Anwendern festzulegen und zu überprüfen.

Eine interessante Alternative, und dank der Flexibilität von Scala mit Specs recht einfach umzusetzen. (Womit ich mal wieder mein Scala statement abgegeben hätte)

Donnerstag, 5. Mai 2011

Scala

Scala war bisher eine interessante Idee (wie kombiniert man die Unlesbarkeit von Perl mit der Komplexität von C++ und lässt das ganze auf der Java VM laufen?).

Ok, eigentlich war das schon immer Ansichtssache:
http://lamp.epfl.ch/~odersky/blogs/isscalacomplex.html

Jetzt aber ist die Scala IDE for Eclipse endlich so ausgereift, dass man den Charme und die Leistungsfähigkeit von Scala erkennen kann. Schaut es nochmal an :-)

Mittwoch, 22. September 2010

Aus für OpenSource in Solothurn

Wie Heise.de berichtet, werden in der SOlothurner Kantonsverwaltung alle Linux-PC's auf Windows 7 umgestellt.Die Gründe für das Scheitern waren offenbar:
  • 10% der Kantonsmitarbeiter waren mit Linux grundsätzlich unzufrieden, weitere 10 Prozent teilweise unzufrieden, 80% zufrieden. Die ca.200 teilweise oder völlig unzufriedenen Mitarbeiter machten sich aber offenbar recht sicht- und hörbar Luft,

  • Man wollte nicht nur das Betriebssystem, sondern auch verschiedene Anwendungsprogramme wie Datenbanken und Exchange auf OpenSource-Pendants migrieren. Dazu musste man teils jahrzehntealte Datenbestände au Linux portieren, was nicht ohne Schwierigkeiten abgehen konnte. "Wieder Ärger mit dem Pinguin" wurde zum geflügelten Wort. Jetzt kurz bevor die Millionenteure Migration beendet ist, beschloss der Kanton die Kehrtwende und inverstiert weitere Millionen für den Rückmarsch zu Windows.

Können wir aus dieser Geschichte etwas lernen?

  • Es gibt immer einen Teil der Mitarbeiter, die einem Systemwechsel grundsätzlich kritisch gegenüberstehen. Diese muss man mit möglichst "sanfter" Migration auffangen. War es wirklich nötig, gleich alles zu wechseln?
  • Linux ist nicht das ideale Betriebssystem für den Desktop. Die Mitarbeiter sind fast alle von zuhause Windows gewohnt und manchen fällt die Umstellung schwer. Dagegen ist Linux ganz klat das geeignete Server-Betriebssystem. Man hätte die Clients erst mal auf Windows lassen können, und nach und nach Office durch OpenOffice, Outlook durch eine OpenSource-Groupware aber unter Windows! ersetzen können.
Also, falls Sie Ihr Praxis auf OpenSource umstellen wollen: Ändern Sie nicht gleich alles. Lassen Sie den MPAs ihren Windows-Desktop und erstezen Sie erst mal "unter der Haube" soviel Sie können gegen OpenSource. Fangen Sie dann mit einem Anwendungsprogramm an, von dem es bestimmt kein Microsoft-Pendant gibt. (z.B. Elexis :-) ). So entfallen Umstellungsprobleme zwischen Zuhause und Arbeitsplatz. Gehen Sie dann Schrittweise vor. Der Linux-Arbeitsplatz-PC ist wenn überhaupt der letzte Schritt der Umstellung.

Mittwoch, 7. Juli 2010

Java und OpenSource vs. .NET und Microsoft

Ein echtes Drama...
http://www.20min.ch/digital/webpage/story/-Mein-Sohn-ist-ein-Monster--17920516