Applications-Icons mit WxRuby

Lange habe ich versucht eine WxRuby Anwendung mit Icon zu erstellen. Das ist auch nicht schwer, das einzige Problem ist das es dazu nirgends eine brauchbare Anleitung oder ein brauchbares Beispiel gibt.

require "wx" include Wx 
 class MinimalApp < App 
   def on_ini main
     Window=Frame.new(nil, -1, "The Bare Minimum") 
     mainWindow.icon=Wx::Icon.new("ragersLogoAll.ico", BITMAP_TYPE_ICO)
     mainWindow.show() 
   end 
 end 
 MinimalApp.new.main_loop()

Andere Icon-Formate können ebenfalls eingebunden werden. Dazu muss nur die entsprechende Konstante "bitmap_type" geändert werden. Mehr dazu findet ihr unter wxruby.rubyforge.org.

Deutsche Sonderzeichen in einer Ruby Konsolenanwendung

Leider ist es mit Ruby nicht direkt möglich deutsche Sonderzeichen in einer Konsolenanwendung auszugeben. Aber er gibt eine Möglichkeit sie trotzdem zu verwenden, dafür ist eine Zeichenkettenkonvertierung nötig:

require "iconv"
   puts "Anbei meine Sonderzeichen:\n"  
   puts Iconv.conv("CP850","ISO-8859-1","ÄÖÜäöüß")  
   puts "\n\n"  
 system("PAUSE")  

WxRuby Tutorial: Erstellen eines Fensters

Die Absoluten Grundlagen

Das Programmieren von GUIs ist eine der schönsten Aufgaben die ein Programmierer haben kann. Man schreibt etwas Code, und Volai, es erschein eine schöne GUI, fast  wie magisch auf dem Bildschirm. Es ist ein großer Unterschied ob man einen Parser oder Compiler schreibt (was natürlich auch eine interessante Aufgabe ist), oder ob man eine GUI erstellt. Den Parser oder Compiler kann man nämlich nicht sehen.Das programmieren mit WxRuby ist dabei keine Ausnahme. Mit WxRuby steht einem eine große Auswahl, von einer länderübergreifender Community ausführlich getesteter WxWidgets zu Verfügung - und das beste ist, man kann sie jetzt auch mit Ruby einsetzen. Anstatt lange darüber zu reden wie WxRuby funktioniert beginnen wir am besten mit einem einfachen Beispiel, welches wir anschließend erklären.

require "wx"
include Wx 

 class MinimalApp < App
     def on_init
         Frame.new(nil, -1, "The Bare Minimum").show()
     end
 end
 MinimalApp.new.main_loop

Das war es schon, sehr kurz und einfach, Die erste Zeile require „wx“ muss in jedem Programm auftauchen das WxRuby verwendet – es macht Ruby mit dem WxRuby-Modul bekannt. In der zweiten Zeile wird WxRuby eingebunden, dadurch müssen wie nicht immer den gesamten Klassennamen angeben wenn wir Funktionen aus WxRuby benutzen wollen. Anstatt Wx:App oder Wx:Frame zu schreiben, können wir einfach App oder Frame benutzen. Das ist möglich weil wir das Modul dem Namespace des Programms hinzugefügt haben. Das ist super wenn man mal schnell etwas testen will oder ein Beispiel (oder Tutorial) schreibt. Allerdings empfehle ich bei größeren Programmen immer das WX-Prefix zu verwenden, da man dadurch besser erkennt was zu WxRuby gehört und was nicht.
Die nächste Zeile class MinimalApp < App wird meistens mit dem von euch geschribeenn Code idetisch sein. Jedes WxRuby-Programm muss von der Klasse App abgeleitet werden. App ist die Main-Application-Class, sie ist dafür verantwortlich das Programm zu starten und die GUI bei jedem Schleifendurchlauf zu verwalten. def on_init überschreibt den Konstruktor der App Klasse. Der Konstruktor wird immer aufgerufen wenn das Programm gestartet wird.
 In diesem Beispiel-Programm wird innerhalb unseres Konstruktors eine Frame erstellt. Dieser Frame sagen wir dann auch noch dass sie sich selbst zeigen soll.  Frame.new(nil, -1, "The Bare Minimum").show()

Betrachten wir das ganze jetzt etwas genauer:

  1. Das erste Argument das dem Construktor übergeben wird, ist nil (in anderen Programiersprachen auch oft als NULL bezeichnet). Es sagt WxRuby das die erstellte Frame kein Eltern-Fenster hat.
  2. Das zweite Argument ist der Identifier. Über den Identifier kann das Widget immer wieder angesprochen werden. 
  3. Das dritte Argument ist der Titel des Fensters der auch in der Taskleiste erscheint.
  4. Das vierte Argument das wir hier aber nicht verwenden, ist die Position des Fensters. Es könnte so aussehen Point.new(100,100).
  5. Das fünfte Argument das wir ebenfalls nicht verwenden, gibt die Größe des Fensters an. Bsp: Size.new(600,480).
  6. Das letzte Argument das wir hier in diesem Beispiel auch nicht verwenden gibt die Art des Rahmens an. Der Standartwert ist DEFAULT_FRAME_STYLE.
     

Um Platz zu sparen rufe ich die Metode show() auf. Diese sagt WxRuby das die Frame angezeigt werden soll. Wird „show“ nicht aufgerufen wird der Code ausgeführt ohne das etwas sichtbares passiert. Hinweis: show() akzeptiert einen boolean-Wert wenn man ein Fenster wieder verstecken will kann man einfach show(false) aufrufen.

Am Ende rufe ich MinimalApp.new.main_loop auf. Auch hier habe ich die kurzschreibweise verwendet. Durch den Aufruf der main_loop Methode wird das Programm ausgeführt.

Das war’s. Hier noch mal die wichtigsten Schritte:

  1. require "wx"
  2. include Wx
  3. Erstellen einer Klasse die von App ableitet
  4. Überschreiben des Konstruktors on_init()
  5. Estellen einer neuen Instanz der Abgeleiteten App-Klasse
  6. Aufrufen der main_loop() Methode

Übersetzt aus dem englischen:
http://wxruby.rubyforge.org/wiki/wiki.pl?Getting_Started

PHP-Ext eine PHP-Widget-Bibliothek

PHP-Ext ist eine auf Ext aufsetzente PHP-Bibliothek. Sie ermöglicht das einvache verwenden von den aus Ext bekannten Widgets. Dabei muss kein JavaScript-Code geschrieben werden, der benötigte Code wird automatisch erstellt. Momentan sind noch nicht alle Funktionen von Ext aus PHP-Ext ansprechbar, aber ich gehe davon aus dass diese bald ergänzt werden. PHP-Ext kann bei  php-ext.quimera-solutions.com heruntergeladen werden.

CrazyBump & ShaderMap - BumpMaps einfach erstellen

Wer schon einmal versucht hat ohne besondere Hilfsmittel eine Normal - oder Specular-Map zu erstellen weis wie schwierig das ist. Momentan gibt es zwei bekannte Produkte die einem bei der Erstellung unter die Arme greifen können. CrazyBump ist hierbei wahrscheinlich das bekanntere der beiden. CrazyBump macht das Bumpmapping zum Kinderspiel. Einfach Textur laden ein paar einfache Einstellungen treffen und fertig. Leider sind die kostenlosen Beta-Versionen von CrazyBump nicht mehr erhältlich (und auch nicht merhr Lauffähig), da die Entwicklung abgeschlossen ist. Allerdings kann man sich immer noch eine kostenlose zeitlich begrenzte Demoversion auf der Homepage herunterladen. Die Vollversionen die ebenfalls über die Homepage bezogen werden kann Kostet zwischen 69 $ und 299$. Ein nicht ganz so komfortabler weg ist das Tool „ShaderMap“, in der Command-Line-Version ist dieses für den privaten Einsatz kostenlos.

Die Besten Freeware-Programme für Entwickler

  • Eclipse -  Die universelle IDE
  • Notpad++ -  Der schnelle Editor 
  • Filezilla - Das ausgereifte FTP Programm
  • Wx-DevC++ - Die smarte C++ IDE mit Form-Builder und integriertem Compiler
  • HeidiSQL - MySQL Datenbanken verwalten
  • SQLiteAdmin - SQLite Datenbanken verwalten
  • GreenShot - komfortabel Screenshots‘ erstellen
  • Opera -  Der beste Browser überhaupt
  • 7Zip - Das kostenlose Archiv-Programm (ZIP,RAR,ACE,TAR,GZ usw)
  • WinMerge - Programm zum Vergleichen beliebiger Textdateien 
  • CamStudio - Programm zum Erstellen von Desktop-Videos. 

Besseres var_dump für PHP

Jeder der neben PHP schon einmal mit ColdFusion gearbeitet hat wird das Tag <cfdump> aus CF in PHP vermissen. Cfdump ist mir der var_dump-Funktion von PHP vergleichbar, allerdings ist die Darstellung der von PHP Welten voraus. Alle Werte die auf die Cfdump angewendet wird, werden übersichtlich in einer oder mehrere ineinander verschachtelter Tabellen ausgegeben. Dies ermöglicht einen schnellen Überblich ohne dass man sich das ganze Zwecks Einrückung wie in PHP üblich im Quelltext anschauen muss.

In PHP ist es zwar möglich var_dump mit einem vorgestellten <pre>-Tag übersichtlicher zu gestallten, dem ausgereiften Cfdump  kann es aber nicht das Wasser reichen. Das gleiche haben sich auch die Entwickler der PHP-Klasse „dBug“ gedacht. dBug baut die Darstellung von Cfdump bis ins kleinste Detail nach, so können z.B ineinander verschachtele Strukturen per JavaScript ein und ausgeklappt werden. dBug steht unter der GPL und kann unter der Adresse www.dbug.ospinto.com heruntergeladen werden.