Sprachquiz

Kurze Frage, in welcher Programmiersprache ist das wohl geschrieben:
a->Foo = b->Foo;

Read all »

8 comments »

Verwirrung um StringBuilder und StringBuffer bei Eclipse

Im News and Noteworthy des Eclipse 3.4M4 habe ich heute morgen etwas ziemlich komisches gesehen, und zwar gibts es einen neuen Quickfix:

convert-to-sb.png

Was durch folgenden Code ersetzt wird:

convert-to-sb2.png

Ok, was fällt auf? StringBuffer! Dabei sollte man grundsätzlich immer StringBuilder verwenden, welcher im Gegensatz zum StringBuffer nicht synchronisiert ist. Um Thomas, unseren Parall- und Netzwerkprogrammierexperten, zu zitieren, ist der StringBuffer “unglaublich schweinisch sauteuer”.

Nehmen wir an, es würde anstelle des Buffers ein Builder verwendet, dann wäre der QuickFix trotzdem ziemlich unsinnig, denn der Compiler (zumindest Sun’s) ersetzt manuelle String-Konkatenationen sowieso durch StringBuilder-Aufrufe. Aus:
int offset = 3, line = 5;
String s = "Offset " + offset + " is at line " + line;
entsteht also folgender ByteCode:

0  iconst_3
1  istore_1 [offset]
2  iconst_5
3  istore_2 [line]
4  new java.lang.StringBuilder [16]
7  dup
8  ldc  [18]
10  invokespecial java.lang.StringBuilder(java.lang.String) [20]
13  iload_1 [offset]
14  invokevirtual java.lang.StringBuilder.append(int) : java.lang.StringBuilder [23]
17  ldc  [27]
19  invokevirtual java.lang.StringBuilder.append(java.lang.String) : java.lang.StringBuilder [29]
22  iload_2 [line]
23  invokevirtual java.lang.StringBuilder.append(int) : java.lang.StringBuilder [23]
26  invokevirtual java.lang.StringBuilder.toString() : java.lang.String [32]
29  astore_3 [s]
30  return

Interessanterweise wurde der QuickFix auch schon an anderer Stelle kritisiert, allerdings nicht das Kernproblem:

I know using StringBuffers is better for performance.

Tsts…

Ich überlege mir, einen Patch einzureichen, der den QuickFix wieder löscht ;-)

5 comments »

Ruby ist cool (und Java leider nicht ganz so)

Ruby ist cool, das ist wohl jedem klar, oder? :) Falls nicht, schaut euch mal den Beitrag von Daniel Berger an. Sieht doch wirklich chic aus, wenn man die korrekten, mathematischen Symbole benutzen kann.

“Hm, mit Java müsste das doch auch gehen, immerhin wissen wir, dass auch Umlaute erlaubt sind”. Also, Eclipse gestartet und ausprobiert:

java_sigma.png

Den Screenshot von der Greenbar muss man sich halt vorstellen.. ;)

Mit Lambda kann man unter Java eh nichts rechtes Anfangen, und das Wurzelzeichen wurde leider auch nicht als gültiger Identifier akzeptiert. Also leider nur ein Teilerfolg.

Ach ja, wie tippt man denn überhaupt beliebige Unicode-Zeichen? Mit der Kombination Ctrl+Alt+Shift+u und dann die Hex-Nummer das Codes, also beispielsweise 3A3 für Σ. Ich weiss aber nicht, ob das unter Windows so auch funktioniert, die Kombination ist, soviel ich weiss, GTK-spezifisch.

5 comments »

Eclipse 3.3 Europa

Endlich ist es so weit: Nach einem Jahr wurde soeben der neuste Eclipse Release namens Europa freigegeben. Den Download gibt es hier, vielleicht braucht es aber ein wenig Geduld, da der Ansturm bestimmt gross sein wird.

Ich arbeite seit M3 mit Eclipse 3.3, deshalb habe ich mich an die meisten neuen Features bereits gewöhnt, für diejenigen die noch bei 3.2 sind hier mal die meiner Meinung nach wichtigsten Features:

h4. Save Actions

Sehr nützlich sind die neuen Save Actions (Java -> Editor -> Save Actions), insbesondere um Organize Imports durchzuführen.

organize_imports_on_save.png

h4. plugin.xml als Participant beim Refactoring

Beim Umbenennen von Elementen (Klassen, Packages), die auch im plugin.xml oder Manifest vorkommen, werden diese nun auch mit umbenannt.

h4. Whitespaces anzeigen im Editor

Ein manchmal durchaus nützliches Feature ist die Anzeige der Whitespace-Zeichen im Editor, oder auch in der Diff-View von JUnit. Emanuel und ich fanden das sogar so nützlich, dass wir das auch für die Diff-View fürs Cute, bzw. RDT angepasst haben. Eigentlich haben wir sogar die bessere Implementierung, nicht wahr Emanuel? ;-)

h4. Quick Outline für den plugin.xml-Editor

Überschrift und Bild sagen wohl alles, aufzurufen mit Ctrl+o:

plugin_xml_quick_outline.png

h4. Code Completion für Exceptions

Die Code-Completion innerhalb eines Catchs bietet eine Liste der möglichen Exceptions an:

exception_assistant.png

h4. Drucken unter Linux

Endlich kann man auch unter Linux/GTK drucken..

h4. Step-Into mit Ctrl+Alt

Beim Debuggen muss man nicht mehr die Methode markieren und Ctrl+F5 drücken um direkt in einen Aufruf zu steppen sondern kann stattdessen Ctrl+Alt benutzen, was einiges komfortabler ist.

h4. Content Assistant für plugin.xml

Ok, nur interessant wenn man selber Plug-Ins schreibt, dafür aber sehr nützlich ist der neue Content Assistant fürs schreiben von Extensions. Funktioniert auch in den Manifest-Dateien.

plugin_xml_assistant.png

h4. Inline Rename Refactoring

Das Rename Refactoring funktioniert nun standardmässig inline, also wie das Rename In File, ohne dass ein Dialog aufpoppt.

inline_rename.png

h4. Quick Access für Views

Mit Ctrl+3 bekommt man den neuen “Quick-Access für Views, Commands und so weiter Dialog” zu sehen:

quick_access.png

Schade, da muss ich den coolen Alt+Shift+Q Q Shortcut wieder verlernen ;-)

h4. Introduce Parameter Object Refactoring

JDT bietet nun auch das Introduce Parameter Object refactoring an.

h4. Nerviges

Allerdings sind auch nervige Features hinzugekommen, wie beispielsweise den Spellchecker, den ich gleich nach wenigen Minuten wieder deaktiviert habe. Auch ziemlich verwirrt hat mich, dass defaultmässig beim klicken auf den Run-Button, oder mit (Ctrl+)F11, nicht die zuletzt ausgeführte Konfiguration ausgeführt wird, sondern diejenige die mit der aktuell geöffneten Resource zusammenhängt. Das ist aber eher nervig, da beispielsweise nicht die Unit-Tests nochmals ablaufen sondern das Plug-In gestartet wird.

h4. Fazit

Eclipse 3.3 bringt einige neue Features mit die sehr nützlich sind, aber wohl eher nur dem Poweruser (oder Power-Developer? ;-) ) auffallen werden. Infolge des ganze Europa-Release-Trains erscheinen natürlich auch viele weitere Projekte in einer neuen Version, beispielsweise das CDT.

Danke an all die Leute die mitarbeiten, dass das Entwickeln mit Java nicht ganz so schlimm ist ;-) .

No comment »

Spass mit dem OpenJDK

Seit einigen Tagen ist Sun’s OpenJDK ja unter der GPL zum download verfügbar und man kann es unter Eclipse an ein beliebiges JDK anhängen um so endlich beim Code-Browsen in alle Tiefen von java.* abzutauchen :-) Und es ist wirklich noch interessant, Codierrichtlinien betreffend den Einrückungen scheint man nicht zu kennen:

java_string_1.png

Echt strub, den Stil kannte ich bis jetzt eigentlich nicht..

Sehr interessant fand ich auch folgenden Kommentar:

java_string_2.png

Trotzdem möchte ich natürlich Sun danken, jetzt kann ich, als Gentoo-Jünger, endlich auch mein JDK selber kompilieren :-)

6 comments »

Gelesen: Rails for Java Developers

Und wieder ist ein Buch der Pragmatic Programmer auf meiner “gelesen” Liste: *Rails for Java Developers* von Stuart Halloway und Justin Gehtland:

fr_rails4java_medium.jpg

Wie der Titel sagt, geht es darum, Java-Entwicklern Rails näher zu bringen. Allerdings braucht man nicht allzu viel Ahnung von Java Web-Technologien zu haben um das Buch zu mögen, mein bisschen HSR Internet-Technologienwissen hat bereits gereicht. Es werden also die verschiedenen Komponenten (ActiveRecord, ActionController und ActionView) und weitere interessante Aspekte (Testen, WebServices und Security) jeweils mit einer Java-Technologie verglichen. ActiveRecord beispielsweise mit Hibernate, welches wohl das bekannteste Java-Persistenz-Framework ist. Meistens wird ein kleines Beispiel in beiden Sprachen implementiert und dann verglichen und auf die Unterschiede hingewiesen. Es ist aber nicht so, dass Rails einfach in den Himmel gelobt wird, es werden durchaus auch kritische Blicke geworfen und auf Unzulänglichkeiten hingewiesen.

Was mir gut gefallen hat war, dass nicht nur Rails wie es besteht angeschaut wird, sondern auch mal ein Plug-in (acts_as_authenticated, Authorization) oder ein anderes Tool wie Cerberus als CruiseControl Gegenstück behandelt. Im Kapitel Security wird die OWASP Top Ten durchgegangen und es wird erläuert, was für Lösungen Rails hierfür anbietet.

Das ganze Buch ist also nicht eine Einführung in Rails von Null an, sondern mehr eine Betrachtung der Kompontenten und dann verglichen mit Java Gegenstücken. Für mich, der Rails nur oberflächlich kennt und auch nicht allzu viel Ahnung von all den Java Web-Dingen hat war es sehr interessant und eine gute Ergänzung zu Agile Web Development with Rails.

No comment »

Gelesen: From Java to Ruby

Der für seine Java-Bücher ziemlich bekannte Bruce Tate schrieb mit den Pragmatic Programmers den Titel From Java to Ruby — Things Every Manager Should Know:

fr_j2r_small.jpg

Das Buch ist eigentlich für Manager geschrieben, es ist aber meiner Meinung auch für Entwickler interessant, besonders wenn man wieder mal eine Diskussion mit Java-Fanatikern hat bekommt man einige neue Argumente in die Hand. Es war mir auch nicht bekannt was für Probleme Java hat, dass die Sprache nicht sehr ausdrucksstark ist (sagt man das? was ich meine ist, dass es viel Code für wenig Funktionalität braucht) wusste ich schon, und damit bin ich auch nicht alleine. Aber dass die Frameworks viel zu komplex sind war mir weniger bewusst. Obwohl, wenn ich Eclipse anschaue…

Im Buch geht es also vor allem darum, die Vor- und Nachteil von Java und Ruby zu erläutern und Tipps zu geben, wie man auf Ruby migrieren kann und wann man es doch besser bleiben lässt. Insgesamt wird recht viel wiederholt wie gut Ruby doch ist. Vielleicht muss das so sein wenn man ein Buch für Manager schreibt ;-)

Wie schon gesagt, ein (wahrscheinlich) interessantes Buch für Manager aber auch für Entwickler, da man einen Einblick erhält wie ein Manager denkt und wie er seine Entscheidungen fällt.

2 comments »

Test-Coverage mit Cobertura

Da wir in unseren Projekten einige Zeit mit dem Schreiben von Unit- und Integrationstests verbringen, hat es mich schon immer interessiert, wie gut unsere Testabdeckung eigentlich ist. Nicht, dass die Testabdeckung allzu viel zur Qualität der Tests aussagen muss, aber interessant ist es trotzdem und es hilft, eventuell beim Testen vergessene Bedingungen zu finden. Bis anhin prüfte ich die Testabdeckung jeweils mit Coverlipse, einem Eclipse Plug-in. Da HTML-Reports, die man veröffentlichen kann und vor allem automatisch erstellt werden aber schöner sind und ich gerade in einem Buch über Cobertura gelesen habe, wollte ich es einmal ausprobieren.

Eigentlich ist es nicht allzu schwer, man sollte der Anleitung einfach genau folgen und sicherstellen, dass man sich genau merkt was man getan hat. Ausserdem ist es anzuraten, jeweils einen möglichst “frischen” Workbench zu haben, da es beim ausprobieren schnell passiert, dass man die Reports aufgrund alter Daten erstellt und dann das ganze auf dem Server, der jedes mal alles neu erstellt, doch nicht funktioniert. Ich spreche aus Erfahrung :)

Ach ja, und das Resultat, das sieht man hier. Wie man sieht, sind die ui- und action-packages kaum getestet, das liegt daran, dass wir keine Plug-In-Tests geschrieben haben. Ansonsten haben wir auch noch einige Lücken, wir haben also noch zu tun :)

No comment »

Eclipse Geburtstagsparty

Soeben bin ich von der Eclipse-Geburstagsparty in Zürich zurückgekommen. Ich muss sagen, es hat sich wirklich gelohnt! Angefangen hat es mit einer Video-Konferenz zu der Party in Stuttgart, auf welcher Erich Gamma einen Vortrag hielt. Danach kamen bei uns Daniel Megert und Martin Aeschlimann dran, welche diverse Screenshots vergangener Eclipse-Releases zeigten. Dabei ist mir aufgefallen, dass das Sprint-Männchen für die Run-Konfiguration eigentlich doch viel cooler war als der grüne Pfeil den wir jetzt haben.

Den Abschluss bildete ein kurzes Quiz, welches Leo und ich souverän für uns entschieden :) Und das mit nur 3 von 4 richtigen Antworten. Die Fragen waren:

  • Wieviele Preferences bietete der Java-Editor in Eclipse 1.0? – Genau 1, nämlich den Font.
  • Wie heisst der Eclipse Release Train 2007? – Europa! Hat aber nichts mit uns zu tun, sondern ist der Name eines Jupiter-Mondes
  • Wieviele Committer hatte Eclipse 1.0? – Ich schätzte 40, korrekt wären 46 gewesen, nahe genug war es aber
  • Weshalb hat die Verbreitung von Eclipse beim Uebergang von 3.0 zu 3.1 so stark zugenommen (oder so ähnlich)? – Ich wusste es nicht und tippte auf die Java 5 Unterstützung, die meisten tippten auf OSGI/RCP. Korrekt wäre aber die Umstellung der Icons von GIF auf PNG gewesen. War aber allerdings auh eher eine unbeantwortbare und nicht ernstzunehmende Frage.

Der Preis war ein von allen Teilnehmenden unterzeichnetes Poster, welches wir Morgen jemandem übergeben werden, dessen Namen wir noch nicht verraten ;-) Ich denke zwar nicht, dass er hier mitliest, aber wer weiss.

Danach gab es noch einen Apero und man erhielt ein Eclipse-Shirt. Darauf hat man noch ein bisschen geplaudert und ist dann zufrieden nach Hause gegangen. Ach ja, neben Leo, Emanuel und mir war noch ein vierter Vertreter der HSR anwesend, und zwar unser Professor Dr. Urs-Martin Küenzi.

Herzlichen Dank an die Organisation, es hat Spass gemacht. Und nicht vergessen, hier noch eintragen!

No comment »

Eclipse-Tipp: Semikolon automatisch am richtigen Ort einfügen

Auf EclipseZone habe ich heute einen ziemlich coolen Tipp gelesen, und zwar das Einfügen von Semikola (oder Semikolons?) betreffend. Und zwar kann man einstellen, dass man nicht am Ende der Zeile sein muss, um ein Semikolon am Ende einzufügen. Ist ziemlich mühsam zum erklären, schaut euch am besten einfach den Artikel an :-)

3 comments »