Freitag, 18. Dezember 2009

Meine erste Anwendung mit GTK# und Ironruby

Nachdem ich lange überlegt hatte, wie und womit man eine Anwendung entwickeln sollte, bin ich auf GTK/GTK# gestossen.

Da ich meine ersten Schritt meist mittels einer Skriptsprache erledige, war es natürlich, dass ich Ruby bzw. Ironruby verwendet habe.

Nachdem ich mir das Tutorial GtkSharpBeginnersGuide - Mono angesehen habe, statt den ersten Experimenten nichts mehr im Weg.

Hier ist meiner erste Anwendung zu finden (zwar ziemlich simple aber, naja).

Als weitere Schritte werde ich mit dem Gui-Designer Glade und der Erzeugung von Xml-Dokumenten für das Gui beschäftigen.

Dienstag, 16. Juni 2009

A new Star is born!

Mein Sohn Max hat gestern (15.06) um 17:06 das Licht der Welt erblickt. Er ist 3180 g schwer und 50 cm groß. IMG_0138.JPG

Donnerstag, 7. Mai 2009

Wo ich auch gern arbeiten würde ...

Na ja, man kann halt nicht alles haben 8-)

Donnerstag, 9. April 2009

Google hat Java für die AppEngine veröffentlich und nicht Ruby (Oder doch?)

Als ich die Nachricht zuerst gelesen hatte war ich etwas enttäuscht, da ich damit gerechnet hatte, dass Google zuerst Ruby (vor allem da es sich für Web 2.0 Anwendungen besonders eignet) veröffentlicht.

Nach dem ich den Artikel von Ola Bini gelesen hatte, war die Enttäuschung wie weggeblasen, da auf eine JVM ja auch JRuby läuft ;-).

Zwar ist es momentan noch nicht ganz so einfach eine Installation zu erstellen, aber der Artikel von JRuby on Rails on Google App Engine beschreibt das Vorgehen (eigentlich) sehr genau.

Also anmelden und starten ;-).

Ein paar nützliche Werkzeuge hat Ola Bini, der übrigens für die Verfügbarkeit von JRuby on Rails auf der App Engine mitverantwortlich war, auch noch zur Verfügung gestellt:

  • Bumble - Wrapper um den Google Datastore, so dass ein einfacher Rails bekannter Zugriff auf die Daten erfolgen kann.
  • BeeU - Ein Plugin für den Zugriff auf den aktuellen Benutzer mit einem einfachen Rollenkonzept

Zu letzt darf der Hinweis auf die Beispielanwendung YARBL und den zugehörigen Quellcode nicht fehlen.

Viel Spass beim Testen 8-).

Donnerstag, 2. April 2009

Mal wieder nach langer Zeit etwas von Google ...

Ich habe ja schon oft interessante Dinge über diese Firma gelesen, z.B. das ihre Serverfarm sehr sicher gegen Ausfälle einzelner Knoten ist (d.h. der Benutzer/Endanwender merkt praktisch nichts). Jetzt habe sie einige Details zum Design der Server veröffentlicht und was ich dabei interessant finde:
  • Keine USV
  • Netzteile auf fast maximaler Leistung
  • Lüfter auf minimalster Leistung
An machen Stellen hätte ich etwas anderes erwartet, habe mich aber auch nie mit dem Thema intensiv beschäftigt.

Mittwoch, 25. März 2009

Wenn man mal ne API-Dokumentation benötigt ...

Ich habe von einigen Tagen auf dem Blog von Priit Haamer gelesen, dass er für Rails eine Dictionary für Apples Lexikon gemacht hat.

Nachdem ich es ausprobiert habe, hatte ich auch gleich das Dictionary für Ruby installiert. Danach habe ich gelesen, dass Mika Tuupola auch ein Dictionary für jQuery erstellt hat.

Schön das eine so vernachlässigte Anwendung endlich eine Verwendung findet.

Samstag, 21. März 2009

Ein weiterer Weg für .Net als Plattform ...

nach einiger Zeit ist wieder eine neue Version von Ironruby veröffentlicht worden. Dies ist im Zusammenhang mit der Entwickler-Messe MIX09 von Microsoft erfolgt, auf der die Beta von Silverlight 3 und ASP.Net MVC 1.0 veröffentlicht worden sind.

Wesentliche Neuerungen von Ironruby 0.3 sind:

  • Zugriff auf Generic-Methoden
  • Besseres Zusammenspiel mit .Net (im Speziellen .Net Interop)
  • Verwendung von ASP.Net MVC
  • Bessere Ruby-Sprachkompatibilität
  • und und und

Viel Spass beim Ausprobieren.

Samstag, 24. Januar 2009

Ein Skript für "Wenn man mal schnell ein paar Dateien umbenennen muss" z.B. alle klein ...

... dann kann man vielleicht das folgende Skript als Vorlage verwenden:

@dir = "D:/Dev/samples/ruby/tests"
if ARGV.length
  puts "using '#{ARGV[0]}'"
  @dir = ARGV[0]
end

if File::directory?(@dir)
  Dir.chdir(@dir) do |cur_dir|
    Dir.glob("*.*").each do |cur_file|
      unless File::directory?(cur_file)
        puts "#{cur_file} -> #{cur_file.downcase}"
	File.rename(cur_file, cur_file.downcase)
      end
   end
end
else
	puts "'#{@dir}' is'nt a valid diretory."
end

Samstag, 10. Januar 2009

Wie das Web 2.0 Auswirkungen auf die "alten" Unternehmen hat ...

... zeigt der Artikel in der FAZ "Business-Webs ersetzen Unternehmen" (Obwohl ich den Titel des Artikel sehr weitreichend finden).

Was ich sehr Interessant finde, ist der Ansatz "alle" Menschen in den Arbeitsprozessen des Unternehmen einzubringen (Wikipedia im Unternehmen halt).

Weiter ist aber auch die Aussage nicht unerheblich, dass, wenn in den Minen der Goldgesellschaft nichts gefunden worden wäre, es auch auch das Aus des Unternehmens hätte sein können.

Wenn ich mal einen Software-Entwurf erstellen muss ...

... habe ich meist Visio verwendet, leider was es nicht sehr intuitiv und sahen die Entwürfe auch immer etwas altbacken aus.

Nachdem ich im Internet die Software "Mockups" von der Firma "balsamiq" und mir den entsprechenden Screencast bzw. die Beispiele angesehen habe, schöpfe ich wieder Hoffnung, dass auch meine Software-Entwürfe demnächst wieder etwas schöner aussehen.

myTunez

Donnerstag, 1. Januar 2009

Frohes neues Jahr

Alle Lesern meines Blog wünsche ich ein erfolgreiches und gesundes Jahr 2009.

Viel Erfolg und viel Spaß beim Lesen meines Blogs ;-)

Dienstag, 30. Dezember 2008

Wer mal ein Plugin-Framwork schreiben will bzw. muss, der sollte ...

... sich auf jeden Fall das MEF Framework von Microsoft ansehen. Damit ist entgehen des recht komplexen Framework System.AddIn ein einfacher Ansatz entstanden, der die Möglichkeit bietet seine Anwendung zu erweitern.

Aufmerksam auf das Framework bin ich durch folgende drei Artikel geworden, die eindrucksvoll darstellen, wie man mit MEF auch Ruby-Skript (es funktioniert auch Python) zum Einbinden in seine Anwendung verwenden kann.

Samstag, 6. Dezember 2008

Eine neue Form des Testens ...

... habe ich durch meine Arbeite mit Rails kennen gelernt. Es handelt sich um rSpec, ein Form des Testen wobei man sich auf das Verhalten des Software und nicht deren technischen Eigenschaften konzentrieren soll. Zuerst habe ich gedacht, dass ich diese Art des Testens nicht auf andere Sprachen/Plattformen übertragen kann. Nachdem ich aber den Artikel "IronRuby and .Net" gelesen habe, habe ich nach einigen Testes etwas einen ersten sehr guten Eindruck gewonnen und werde diese Art des Testens in meinen aktuellen Projekten testen. Da bei gilt zu prüfen ob sich diese Art des Testens auch auf andere und größe/gewachsene Projekte übertragen lässt.

Die (neue) moderne Art zu Leben und zu Arbeiten

Nachdem ich den Artikel auf heise.de gelesen habe, habe ich mir gleich die Bücher bestellt: Ich denke die Bücher werden sehr spannend sein. Ich freu mich schon darauf 8-).

Montag, 1. Dezember 2008

Wenn man wissen will was IronRuby in einen C# Programm anstellen kann.

Ich habe auf der PDC ein Video über den Stand von der Ruby Integration in .Net gesehen.

Es wird vorgestellt wie man mit einfachen Mitteln eine bestehende .Net-Klasse erweitert. Des weiteren wird die Erweiterung von Visual Studio gezeigt. Sollte man sich mal ansehen:

IronRuby: The Right Language for the Right Job.

Donnerstag, 30. Oktober 2008

IronPython und IronRuby unter .Net 4 mit C#

Wer mich ein wenig kennt, weiss das ich auf dynamische Sprachen wie Python und Ruby stehe.

Nachdem ich den PDC Talk "Dynamic Languages in Microsoft .Net" von Jim Hugunin gesehen habe, konnte ich mich entspannt zurücklegen, da die Zukunft endlich das Ende des Dynamic gehen Static bringen wird ;-)

Samstag, 4. Oktober 2008

Wer möchte sein (Linux)-System in 5 Sekunden booten lassen ...

... dem kann ich nur empfehlen diesen Artikel zu lesen ;-)

Viel Spass

Freitag, 3. Oktober 2008

Wie man Silverlight mit Rails verbindet

Jimmy Schementi hat schon vor einiger Zeit ein Plugin für Rails veröffentlich (Silverline), mit dem man wie gewohnt Anwendungen unter Rails entwickelt, dabei aber auf Silberlight 2 (momentan noch Beta 2) auf dem Client zurückgreift.

Zu Anfang hatte ich einige Schwierigkeiten, da ich die neuste Version von Silverlight 2 RC0 installiert hatte und die DLLs aus dem Dynamic-Silverlight SDK 0.4 verwendete. Nachdem ich wie auf der Webseite beschrieben, auf Silverlight 2 Beta 2 gewechselt bin und die "orginal" DLLs aus der Demo-Anwendung von Jimmy genommen hatte, könnte ich mir ein Bild von den Möglichkeiten machen.

Nachdem wir den Webclient für unsere GTD-Anwendung fast fertig haben (es sind nur noch ein paar APIs auf dem Server anzupassen), haben Björn und ich beschlossen einen Silverlight 2 Client zu entwickeln. Noch steht nicht fest, ob er traditionell unter Visual-Studio mit C# oder per Dynamic-Silverlight (und dem Silverline-Plugin) entstehen wird. Ich denke es wird noch etwas experimentiert werden.

Entsprechende Updates zu diesem Thema werde ich auf dieser Seite bekannt geben ;-).

Mittwoch, 1. Oktober 2008

Eigentlich sollte man darüber nicht schreiben ...

... wenn es dann nicht die falschen treffen würde.

Apple hat angekündigt die NDA bei der iPhone-Entwicklung aufheben zu wollen.

Na endlich

Montag, 29. September 2008

Wie verwende ich Ironruby in einem C# Programm

Ich habe die Aufgabe gehabt einen Teil eines .Net Programm mit dynamischen Code auszustatten.

Aus meiner Sicht gab es nur die Möglichkeit, die für Silverlight entwickelten Sprachen zu verwenden (Python, Ruby bzw. Managed Javascript). Nach einigen Überlegungen und den Erfahrungen, die ich mit Rails gemacht habe, entschied ich mich für die Integration von Ironruby.

Nachdem ich zuerst ein paar Schwierigkeiten hatte einen String als Referenz an die Skript-Engine zu übergeben. Es schein ein Problem zu geben, wenn man mit ValueTypes arbeitet. Nachdem ich den String in eine Klasse eingepackt hatte, konnte ich die Daten ohne Problem mit der Script-Engine austauschen.

Ich habe den reduzierten Quellcode mal beigefügt:

using System;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using IronRuby;
using IronRuby.Hosting;
using Microsoft.Scripting.Hosting;
using System.Threading;
using System.Runtime.Remoting;
using System.Data.Odbc;
using System.Collections;
using System.Collections.Generic;

namespace SampleEmbeddedRuby
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private IDataReader GetData()
        {
            IDataReader result = null;
            OdbcConnection connection = new OdbcConnection("DSN=test_sqlite");
            try
            {
                connection.Open();
                IDbCommand command = new OdbcCommand("select * from projects"
                  , connection);

                IDataReader reader = command.ExecuteReader();

                while (reader.Read())
                {
                    for (int fieldIndex = 0; fieldIndex < reader.FieldCount;
                         fieldIndex++)
                    {
                        if (0 != fieldIndex)
                        {
                            mResult.AppendText(", ");
                        }

                        mResult.AppendText(reader.GetName(fieldIndex) 
                          + "=" + reader[fieldIndex].ToString());
                    }
                    mResult.AppendText(Environment.NewLine);
                }
                reader.Close();
                result = command.ExecuteReader();
                mResult.AppendText("-------------------------" + Environment.NewLine);
            }
            finally
            {
                //connection.Close();
            }
            return result;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ScriptRuntime scriptRuntime =   
               Ruby.CreateRuntime(Ruby.CreateRuntimeSetup());
            ScriptScope scope = scriptRuntime.CreateScope("ruby");

            IDataReader input = this.GetData();
            scope.SetVariable("input", input);

            IDictionary output = new Dictionary();
            scope.SetVariable("output", output);

            while (input.Read())
            {
                scope.Execute(mCode.Text);
                foreach (string key in output.Keys)
                {
                    mResult.AppendText(output[key] + " - ");
                }

                mResult.AppendText(Environment.NewLine);
                output.Clear();
            }
        }
    }
}

Der Quellcode, der im Beispiel verwendet wird, ist ziemlich trival. Für die Leute die der Sprache nicht mächtig sind, hier die paar Zeilen:

(0...input.FieldCount).each do |index|
     output.Add input.GetName(index), input.GetValue(index).ToString()
end

Im Beispiel werden die Daten aus dem input (IDataReader) in die Ausgabe output (IDictionary) kopiert. Der Range 0...input.FieldCount besagt, dass der Index bei 0 beginnt und bei input.FieldCount-1 endet.

Was ich interessant finde, ist, dass für die Einbindung einer Erweiterungssprache mehr nicht notwendig ist.

Viel Spass ;-)