In der aktuellen Computerbild gibt es ein “Blitzstartsystem”, welche “Chromium” enthält. Was sehr verwunderlich ist, da Google das ganze selbst noch nicht als stabil oder fertig deklariert.
Aber ein Grund das ganz mal selbst auszuprobieren!
Hat man ein Netbook, hat man das Problem, dass die CD einem gar nichts nützt, braucht man auch nicht. Alles was man zum Testen braucht ist ein USB-Stick mit mindestens 4 GB.
Mein Testsystem ist ein Samsung NC 10 Plus. Fertige Builds gibts bei http://chromeos.hexxeh.net/. Dann folgt man einfach der Anleitung auf seiner Seite.Leider scheint die Downloadrate auf 40KB/s gedrosselt, was für die 250 MB schon eine etwas längere Wartezeit benötigt. Hat man den Download gemeistert, ist man schon fast fertig, entpacken und auf den USB-Stick schreiben. Nun kann man das Netbook neu starten. Im Bios den USB-Stick als 1. Bootlaufwerk auswählen sollte man auch nicht vergessen.
Es kann an dem billigen USB-Stick liegen oder daran, dass ich ein “Debug Build” erwischt habe, die “unter 10 Sekunden” erreiche ich nicht, es sind eher 20 Sekunden, aber weit besser als das vorinstallierte Windows 7. Im Gegensatz zu vielen im Netz wurde unser W-Lan problemlos erkannt. Anmeldung (über Google Konto) und Browsen war problemlos möglich. Die Einrichtung klappte in unter 3 Minuten. Da kamen aber auch schon die ersten kleinen Fehlerteufel. Keiner davon war gravierend, aber sehr unschön:
Eine kleine Auswahl:
Sieht man aber von diesen Makeln ab, so macht das System einen sehr flotten und stabilen Eindruck.
Mein Netbook ist nun problemlos zu einem Chromebook geworden, Chromium OS hat noch einige kleinen Macken, die aber nicht groß stören. Spätestens wenn Google selbst von einer stabilen Version spricht, ist es eine Alternative für Netbook- Besitzer, welche eigentlich nur schnell mal ins Internet wollen.
Natürlich gibt es auch anderen Änderungen, wie die Aktualisierung der CellTable oder der Integrierte GWTDesigner,
eine Übersicht dazu gibt es hier. Doch die neuen HTML5 Features, mit denen ja einige Firmen wie zB Facebook schon Arbeiten,
sollen heute das Thema sein.
GWT ist ein Framework, welches die unterschiedlichen Javascript- Implementierungen der Browser weitgehend vom Entwickler fernhält.
Doch beim Thema HTML5 und vor allem Canvas gibt es nicht nur unterschiedliche Implementierungen, es kann auch gar nicht vorhanden sein.
Um welchen speziellen Browser es sich handelt, muss man wohl kaum erwähnen, in der neunten Version sollen aber die Features dabei sein.
Wenn es doch schon so weit wäre.
Auch Google hilft einem Webentwickler, welcher die Existenz des bösen Browsers vergessen hat mit ungewohnten Konstruktoren.
canvas = Canvas.createIfSupported(); audio = Audio.createIfSupported();
In Java ist die Entwicklung kaum anders als mit Javascript.
public void draw(Canvas toDraw) { Context2d context = toDraw.getContext2d(); context.clearRect(x, y, 72, 72); String toPrint = image[type][index % image[type].length]; Image map = new Image(IMAGEPATH + toPrint); context.drawImage(ImageElement.as(map.getElement()), x, y); index++; } audio.getAudioElement().setSrc("audio/elf/attack.ogg"); audio.getAudioElement().setAutoplay(true);
Interessanterweise halte ich Apple’ s iPhone für einen Meilenstein der Webentwicklung mit HTML5. Die Entscheidung kein Flash zuzulassen, nebenbei auch kein Siverlight,
hat viele Entwickler vor ein Problem gestellt: Wie kriege ich meine Multimedia-Inhalte aufs iPhone? Neben Videos und Sound geht es auch um dynamische Grafiken.
Und Apple hat als Lösung des Problems HTML5 propagiert. Seit dem letzten Update des App Stores, dass es verbietet, das finanzielle Transaktionen in Apps am Marketplace vorbeilaufen,
suchen Firmen wie Amazon nach einer Alternative um auf dem iPhone weiterhin vertreten zu sein.
Neben den 3 Tags Audio, Video und Canvas gibt es noch andere Features, wie LocalStorage, Offlinemodus und Websockets, welche ich bald auch im GWT erhoffe.
Auch die Branche der Browser- und Socialgames wird wohl kaum an HTML5 vorbeikommen. Zwar scheint dort Flash der Platzhirsch zu sein, das wird sich aber wohl in den nächsten Jahren ändern. Vielleicht schon mit der Version 9 des böses Browsers.
Dass es durchaus möglich ist, mit HTML5 schicke Sachen zu erstellen, soll eine meine kleine Demo zeigen:
http://myasciigenerator.appspot.com/
Ich hab das “Preload” Problem von Canvas nocht nicht ganz behoben, aber es ist auch nur eine Demo.
Grafiken und Sounds stammen aus dem Open-Source Game “Battle for Wesnoth“.
HTML5 kann und wird ein Flashkiller sein und GWT das Framework für Browsergames der Zukunft.
Oder seid ihr anderer Meinung?
Datenbankzugriffe sind teurer als Speicherzugriffe, das ist nicht neu. Viele Frameworks wie Hibernate setzen deswegen auf einen Cache, um die Anzahl der Datenbankzugriffe zu minimieren und damit die Performance zu erhöhen. Das Caching passiert dabei meißt unter der Haube und lässt den Entwickler den Fokus auf die eigentlichen Arbeiten behalten.
Mit Google App Engine und Memcached und dem verteilten Cache ist Caching auch in der Cloud möglich. Doch auch wenn bei App Engine keine Persistenzlösung wie Hibernate oder EclipseLink möglich ist, kann man auf eine einfache Weise Caching nachrüsten.
Eine einfache DAO-Klasse
public class NodeDAO { public Node load(long id) { // code } public Node save(Node node) { if (node.getId() == 0) { insert(node); } else { update(node); } return node; } public void delete(Node node) { // code } private void insert(Node node) { // code } private void update(Node node) { // code } }
Relativ einfach, aber erfüllt den Zweck.
Zunächst erstellen wir ein Interface Indexed, damit die Lösung später für verschiedene Klassen möglich ist.
public interface Indexed { public long getId(); }
Und einen Simplen Cache (hier kann man später auf MemCached umrüsten)
public class SimpleCache { static HashMap cache; public static HashMap getInstance(){ if (cache==null){ cache = new HashMap(); } return cache; } }
Als Schlüssel soll hier Klassenname und ID fungieren
Noch ein paar kleine Interfaces für die 3 Cache- bzw Datenbankfunktionen
@Retention(RetentionPolicy.RUNTIME) public @interface SelectCachable {} @Retention(RetentionPolicy.RUNTIME) public @interface SaveCachable {} @Retention(RetentionPolicy.RUNTIME) public @interface DeleteCachable {}
Ein bisschen Guice-Magie
Starten wir mit dem SELECT oder GET – Befehl. Wenn wir einen Datensatz geladen haben, soll der im Cache verewigt werden. Ist er schon im Cache, soll keine Datenbankverbindung hergestellt werden. Wir benutzen den MethodInterceptor.
public class SelectCacher implements MethodInterceptor{ public Object invoke(MethodInvocation call) throws Throwable { Object[] args = call.getArguments(); Object result; if (args.length==1 && args[0] instanceof Long && SimpleCache.getInstance().containsKey(call.getMethod().getReturnType()+ "@" + args[0])){ // aus dem Cache holen result = SimpleCache.getInstance().get( call.getMethod().getReturnType()+ "@" + args[0]); }else{ // Aus der DB Holen result = call.proceed(); SimpleCache.getInstance().put( call.getMethod().getReturnType()+ "@" + args[0],(Indexed) result); } return result; } }
Auch der DELETE-Befehl ist simpel:
public class DeleteCacher implements MethodInterceptor { public Object invoke(MethodInvocation call) throws Throwable { Object[] args = call.getArguments(); Indexed indexer = (Indexed) args[0]; if (args.length==1 && SimpleCache.getInstance().containsKey(indexer.getClass()+ "@" + indexer.getId())){ SimpleCache.getInstance().remove( indexer.getClass()+ "@" + indexer.getId()); } return call.proceed(); } }
Zuletzt noch der PUT Befehl, hier muss man dazu sagen, dass aufgrund der ID entschieden wird, ob ein Insert oder Update geschieht, beim Insert wird bei @@IDENTITY die ID bestimmt und dem Objekt zugewiesen.
public Object invoke(MethodInvocation call) throws Throwable { Object result = call.proceed(); Indexed indexer = (Indexed) result; SimpleCache.getInstance().put(indexer.getClass() + "@" + indexer.getId(), indexer); return result; }
Nun müssen wir noch die Annotationen mit den Interceptors verbinden. Das passiert bei Guice so:
public class CacheModule extends AbstractModule{ protected void configure() { bindInterceptor(any(), annotatedWith(SelectCachable.class), new SelectCacher()); bindInterceptor(any(), annotatedWith(SaveCachable.class), new SaveCacher()); bindInterceptor(any(), annotatedWith(DeleteCachable.class), new DeleteCacher()); } }
Der finale Schritt, jetzt verbinden, oder besser gesagt injizieren, wir alles, was bisher erstellt wurde. Per Factory-Pattern erhalten wir wir nun eine Erweiterte Variante der Basisklasse. Per Annotationen bestimmen wir, welcher Methode welcher Interceptor zugewiesen wird.
public class NodeDAO { public static NodeDAO create() { Injector inj = Guice.createInjector(new CacheModule()); NodeDAO ret = inj.getInstance(NodeDAO.class); return ret; } @SelectCachable public Node load(int id) { // Code } @SaveCachable public Node save(Node node) { if (node.getId() == 0) { insert(node); } else { update(node); } return node; } @DeleteCachable public void delete(Node node) { // Code } private void insert(Node node) { // Code } private void update(Node node) { // Code } }
Mit Google Guice Funktionalitäten nachrüsten ist recht einfach. Die Lösung ist noch nicht ideal, aber ein guter Start, da alle Komponenten austauschbar sind.
Ich habe bisher vor allem das JQuery- Javascript Framework benutzt und bin mit Grails zum ersten Mal mit YUI (2)in Berührung gekommen.
Und ich denke es ist eine mehr als unglückliche Wahl.
Fangen wir mit Groovy an. Nehmen wir mal und das wirklich nur angenommen, der Browser könnte Groovy wie Javascript ausführen.
Wir würde man dann alle “divs” mit der Klasse “selected” eines Dokuments suchen?
def divs = document.findAllByTypeAndClass("div","selected")
Wäre da so meine erste Idee. Ähnlich den Dynamic Finders. Aber das wäre mir nicht “Groovy” genug.
Laut IBM sähe die Lösung etwa so aus:
def divs = document.div.[@class="selected"]
Quasi wie E4X. Bleiben wir einfach mal bei dieser Lösung. Sie ist Groovy genug.
Gehen wir weiter zu YUI
var elements = YAHOO.util.Dom.getElementsByClassName('test', 'div');
oder
var elements = YAHOO.util.Selector.query('div.test');
Und dann zu JQuery
var elements = $("div.selected");
Welches Framework ist nun Grooviger?
Okay vielleicht ist das Beispiel noch zu einfach. Gehen wir mal weiter und markieren die eben gewählten divs mit einem rotem Hintergrund.
Zunächst wieder Groovy
document.div.[@class="selected"].each(){ it.backgroundcolor="red"}
Schöne und Groovy Lösung! Gehen wir nun über zu YUI
Dom.batch(YAHOO.util.Selector.query('div.test'), function (element) {Dom.setAttribute(element, "background-color","red");});
und dann zu JQuery
$("div.selected").each(function(){$(this).attr("background-color","red");});
//oder sogar
$("div.selected").attr("background-color","red");
Spätestens hier sollte klar werden auf was ich hinaus will. Die JQuery- Syntax passt einfach viel besser zu Groovy und Grails.
Letztens habe ich ja schon ein bissel über Google und ihre AGBs geschrieben. Die Krone allerdings setzt sich Springsource auf.
In der letzten Zeit habe ich auch mehr mit Groovy und Grails beschägtigt. Springsource hat Groovy und Grails übernommen.
VMWare hat Springsource übernommen. Und die IDE mit der besten Grails und groovy Unterstützung soll zur Zeit die “SpringSource Tool Suite” sein. (Und fehlende IDE Unterstützung ist zZ das Problem von Groovy und Grails, die ich ab jetzt mit GG abkürze). Das Spring Framework, ein führendes Enterprise-App Framework und Teil der Basis von Grails sowie die Basis von Spring Roo ist Open Source. Open … Offen …. Offen für jeden … es zu benutzen, es zu verbessern und es herunterzuladen.
Auch Eclipse, die zur Zeit wohl beste Java-IDE ist Open Source. Diese IDE ist so gut, das Borland von ihrem eigenen Produkt JBuilder zu einem kommerziellen Plugin für Eclipse übergegangen sind. Der Flexbuilder von Adobe basiert auf Eclipse. Einfach DIE IDE zur Zeit. Und auch die SpringSource Tool Suite basiert auf Eclipse.
Will man sich die STS jedoch runterladen sieht man folgende AGBs.
Gleich 3 Listen mit Menschen und Organisationen für die das ganze nicht ganz so offen ist.
Und ich bin echt überrascht. Vor allem von der Häufigkeit von “Germany” in den Listen. Neben Iran und Korea zwar nichts aber was ist das für eine Politik?
Offen für alle ausser den Bösen? Böse welche die USA bestimmt?
Ich steh zwar nicht auf einer der Listen, aber mich schreckt sowas ab. Wie heisst so eine Lizenz?
TNEUSV würde ich vorschlagen … und jedem davon abraten.
Der meiste Schaden, den der Computer potentiell zur Folge haben könnte, hängt weniger davon ab, was der Computer tatsächlich machen kann oder nicht kann, als vielmehr von den Eigenschaften, die das Publikum dem Computer zuschreibt. Der Nichtfachmann hat überhaupt keine andere Wahl, als dem Computer die Eigenschaften zuzuordnen, die durch die von der Presse verstärkte Propaganda der Computergemeinschaft zu ihm dringen.
Joseph Weizenbaum, 1972[1]
Jeder hat das Recht, seine Meinung in Wort, Schrift und Bild frei zu äußern und zu verbreiten und sich aus allgemein zugänglichen Quellen ungehindert zu unterrichten. Die Pressefreiheit und die Freiheit der Berichterstattung durch Rundfunk und Film werden gewährleistet. Eine Zensur findet nicht statt.
Grundgesetz Artikel 5
Laut dem am 18.06.2009 beschlossenem Gesetzentwurf[2] nur Seiten mit kinderpornografischem Inhalt. Soweit auch nicht schlimm.
Warum aber beschweren sich dann so viele darüber?

Vielleicht ja deswegen:
Unsere gewählten und für uns dadurch “in unserem Sinne” entscheidenden Menschen, haben also teilweise nur wenig oder gar keine Ahnung von den ganzen “Computersachen”. Wo informiert man sich da? Natürlich bei der Presse oder im TV, sagte ja auch schon Weizenbaum, aber bei der Killerspieldebatte ging ja schon genug schief.
Bei den Interviews merkt man den Politikern die stehts gleichen Phrasen mit absurden Versprechern an.
Jederzeit … Massenmarkt … massives Interesse
…
Wir wissen, dass bei den vielen Kunden, die es gibt, rund 80 Prozent die ganz normalen User des Internets sind. Und jeder, der jetzt zuhört, kann eigentlich sich selber fragen, wen kenne ich, der Sperren im Internet aktiv umgehen kann. Die müssen schon deutlich versierter sein. Das sind die 20 Prozent. Die sind zum Teil schwer Pädokriminelle. Die bewegen sich in ganz anderen Foren. Die sind versierte Internetnutzer, natürlich auch geschult im Laufe der Jahre in diesem widerwärtigen Geschäft”,
…
DNS-Sperre, das ist was technisches
…
300.000 – 400.000 Versuche, die man jeden Tag
Quelle: http://www.radioeins.de/programm/sendungen/eine_stunde_zeit/kopf_der_woche/ursula_von_der_leyen.html
Okay da wirds wohl Zeit zur Selbstanzeige
Sehr geehrte Frau Leyen,
ich bin ein versierter Internetbenutzer, im Gegensatz zu Ihnen und ihren Kollegen, mit Ausnahme vllt. von Jörg Tauss, browse ich seit dem Jahr 2000 fast täglich im Internet. Ich habe während der gesamten letzten 9 Jahren noch nie eine Kinderpornoseite (jederzeit Massenmarkt klar …. ) gesehen noch einen Link(das ist etwas wo man draufklickt und dann ‘ne andere Seite aufgeht … bei ihrem Bildungsstand erklär ich das mal lieber) auf ebensolche gesehen. Und ich habe auch Computerspiele gespielt. Sogar E- Mails, Foren und Chats habe ich benutzt. Ich gehöre zu den 40 Millionen Internetbenutzern in Deutschland. Wenn also jeder dieser Benutzer täglich einmal ins Internet geht und eine Seite aufruft, dann sind ihre 400.000 Versuche quasi 1% der Anfragen. Ich wette mit ihnen das nichtmal 1% der Internetbenutzer in Deutschland Kinderporno-Sucher sind. Ich würde sogar mit ihnen wetten, weil ich weiss ich gewinne, dass der Anteile der Bundesbürger die nach Kinderpornos sucht, geringer als der Anteil im deutschen Bundestag ist.
P.S: Jörg Tauss ist ein aktueller Bundestagsabgeordneter und steht unter Kinderporno- Verdacht und wechselt aktuell zur Piratenpartei.
Aber zurück zum Thema, unsere Politiker wollen also unser Recht frei durch das Netz zu surfen beschneiden. Wir haben das Recht aber noch, und wir wissen dass es in China[3] , Australien[4] , Afgahnistan[5] schwere Fälle von Zensur gibt und minder schwer die Schweiz, Dänemark, Finnland, Schweden und Österrreich das Internet zensieren. (Fehlt ein Land ? Schreibt nen Kommentar!)
Und wo Zensur anfängt, hört sie nicht auf. Ich habe echt Angst davor, dass solche Menschen( bessere Worte kann ich für inkompetemte Politiker nicht finden) durch Vorurteile und schlechte Beratung Entscheidungen treffen, die meine Freiheit weiter beschneiden. Unabhängig sind eure Medien auch nicht. Bevor eine neue “Aktion wider den undeutschen Geist“(1933) stattfindet, bitte ich jeden einzelnen Politiker, sich mit den Themen intensiver zu befassen, über die ihr entscheidet, oder einfach mal nichts sagen, wenn man nichts zu sagen hat.
Ich wohne in Leipzig und bei uns gibt es die ComputerSpielSchule, gibt es an der VHS Kurse zum Thema Internet. Zwei wunderbare Institutionen die es Eltern und Grosseltern erlaubt, sich mit den “Comuptersachen” unter Anleitung auseinanderzusetzen, Gibt es sowas bei euch nicht oder habt ihr da einfach keinen Bock drauf und versteckt euch lieber hinter lächerlichen und schlecht recherchierten “Fakten”?
Politik muss gefallen und mit dem Web 2.0 gibt es eine Generation Web 2.0 vergesst uns nicht … we watch you
und die gaaaanz grosse Bitte: wechsel endlich die Partei bevor wir dich weitere 4 Jahre ertragen müssen.
denn da gehörst du hin
Links
http://nurtext.zeit.de/1972/03/Albtraum-Computer?page=5
http://dip21.bundestag.de/dip21/btd/16/128/1612850.pdf
http://www.heise.de/newsticker/Google-muss-Teile-seines-Suchdienstes-in-China-sperren-Update–/meldung/140780
http://www.heise.de/newsticker/Jeder-australische-Internetzugang-soll-gefiltert-werden–/meldung/117422
http://www.sarsura-syrien.de/islamkritik-20-jahre-haft_1862.html
Ich habe mich die letzte Zeit sehr intensiv mit dem Framework Grails[1] beschäftigt. Und ich muss zugeben ich bin beeindruckt. Dieser Artikel soll eininge der Vor- und auch natürlich auch die Nachteile des “Railsway” nach meiner Sichtweise dokumentieren. Viele der Kommentare lassen sich auf Ruby on Rails, CakePHP, Symfony und andere Frameworks anwenden.
Für jeden der das Spiel kennt:
Rapid Application Development(RAD), Model Driven Development(MDD), Best Practises, Spring, The Yahoo! User Interface Library (YUI), Hibernate, Don’t repeat yourself (DRY),Agile Development, Database Migaration, Code Generation, SLF4J, DOM4J, Groovy, Metaclass, Sitemesh, Model View Controller (MVC), Apache Ant, JUnit, Jakarta Commons, HSQLDB, OSCache, Apache ORO,Apache Ivy, Rapid Prototyping,Keep it simple and straightforward (KISS), Single Point of Truth(SPOT),Convention over configuration(COC), Domain Specific Languages (DSL), Scaffolding, Dynamic Finders, Create -Retríeve- Update- Delete(CRUD)
So spätestens jetzt sollte einer Bingo schreien.
Um was gehts beim Railsway? Um eins : Geschwindigkeit!
Alles fing an mit einem Video[2].
Ein Webblog in 16 Minuten.
REVOLUTION!
Was schaffen normale Softwarefirmen in 16 Minuten?
Zum einen geht es darum, dem Entwickler möglichst viele Entscheidungen abzunehmen. Man benutzt einfach diese Sachen, die Standard sind.
Hat jemand von euch schon mal so ein Meeting erlebt?
Persistenz-Schicht(DAO)
- JDO
- JPA
- Hibernate
- Selbstgeschriebenes SQL (dann noch die Diskussion um Prepared Statements )
- Dynamisches Selbstgeschriebenes SQL (dann noch die Diskussion um Prepared Statements )
- SQL-Injection Handling
Views
- Java Server Pages(JSP)
- Java Server Pages (JSP)+ Java Standard Template Library (JSTL)
- Java Server Faces (JSF) und dann die Distribution (MyFaves/IceFaces etc .. )
- XSS Handling
Code
- Java 1.4.2
- Java 1.5
- Java 1.6
- Alles Andere
Abhängigkeiten
- Spring
- Maven
- Ivy
- Guice
- Eigenproduktion
Sonstige Entscheidungen
- put the most annoying part of each meeting here
Beim Railsway gibt es solche Meetings nicht mehr. Per Default ist es Hibernate+ Java Server Pages (JSP)+ Java Standard Template Library (JSTL) + Ivy + Java (1.5+) oder Groovy
Okay starten wir … Eclipse ? Natürlich!
Vorher : Create new Dynamic Web Project … bla bla bla … MyProject … bla bla bla … Jars kopieren … Buildpath … pom.xml…. oh 16 minuten schon überschritten?
Railsway : grails create.app MyProject … Import existing Project
Dieses Prinzip ist sicher jedem Entwickler bekannt. Bei Grails wird es strikt gefordert und bedankt sich dafür mit viel generiertem Code, der Überstunden erspart.
In den meissten Applikation entspricht eine Klasse einer Zeile irgendeiner Tabelle der Datenbank.
Warum also nicht die Tabelle so benennen wie die Klasse?
Diese Frage stellt sich der Railsway einfach nicht, sondern macht es.
Bei Grails entspricht auch jede Klasse einem Problem, einer eigenen Domäne.
Als Beispiel soll fogendes dienen:
class JsecUser { String username String passwordHash String email static constraints = { username(nullable: false, blank: false) email (email:true) } def setPassword(word){ passwordHash = new Sha1Hash(word).toHex() } }
Mit Grails ist folgendes möglich :
JsecUser user = new JsecUser() user.setUsername("admin") user.setPassword("gayheim") user.password = 'gayheim99' user.save()
Die Setter in Zeile 2 und 3 haben wir nie geschrieben, sie wurden für uns generiert. Jeder der Eclipse benutzt weiss, dass man Getter und Setter auch in Eclipse generieren kann. Allerdings die die entstehende Klasse inklusive Outline-Ansicht nicht wirklich unterscheidbar nach “wo passiert das Standard-Zeug” und “wo passiert wirklich etwas”, hier hilft Grails die Übersicht zu behalten.
In Zeile 4 sieht es für Java-Entwickler so aus, als würde man direkt auf eine Eigenschaft zugreifen, doch weit gefehlt! Solche Zuweisungen gehen immer über Getter und Setter.
Die grösste Überraschung sollte aber die Zeile 5 darstellen. Alles was dazu benötigt wird, folgt nun.
Egal für welches Framework man sich entschieden hat, man konfiguriert das ganze erstmal. Ganz schlecht sind hier die selbstgeschriebenen Lösungen.
Bei Grails kann man mit
def scaffold=true
die normale CRUD-Funktionalität erreichen. Und viel mehr … ein Zauberwort ist hier Dynamic Finders
def user = JsecUser.findByUsername("admin")
ist ein gültiger Ausdruck, obwohl wir die Methode nie geschrieben haben. Alles was benötigt wird, ist eine Klasse, welche wie die Domainklasse + das Suffix Controller heisst und im Ordner “controller” abgelegt wird. Nebenbei hat man durch den Einsatz von Hibernate einen L2-Cache und SQL-Injection-Schutz OnBoard. Standard…….
In Grails gibt es eine einfache Regel
/$controller/$action/$param
So würde der Aufruf
/laender/view/deutschland
folgendes bewirken:
Für die normalen Aktionen (CRUD
) werden die Views “list”, “create” , “show” und “edit” erzeugt, welche man an seine Bedürfnisse anpassen kann.
Grails unterstützt und beschleunigt den kompletten Entwicklungsprozess.
Der Start geht sehr schnell und reibungslos.
Der Railsway erzeugt sehr schnell funktionierende Webanwendungen.
Das Ganze hat auch seinen Preis :
http://www.youtube.com/watch?v=Gzj723LkRJY
http://adhockery.blogspot.com/2009/06/querying-by-association-redux.html
http://adhockery.blogspot.com/2009/04/when-is-pirate-not-pirate-when-its.html
Ein ich wiederhole EIN trigami-Beitrag und mein Pagerank geht wieder runter.
Wie im Link [1] nachzulesen geht Google (mal wieder) gegen Linkverkäufer vor,
also auch gegen mich – und das nachdem ich erst heute morgen überlegt habe,
endlich mal code.google[2] zu nutzen. Warum auch nicht? SVN wiki etc..
Besser als das Urgestein SourceForge[3] alle mal, aber wenn mich “The Big G” so ärgert…
Mal schauen wie es sich so entwicklet
[1]http://bloggingtom.ch/archives/2007/10/24/google-straft-textlink-verkaufer/
Hinweis: Dies ist ein von trigami vermittelter bezahlter Eintrag.
… ist meisstens auch Beta drin, so fehlen noch einige offenbar geplante Komponenten des Portales (Chat und Gruppen), andere haben noch ihre Macken (sowohl der Profiler, auf den ich später eingehe, als auch bei “Gamer in der Umgebung suchen”)
… wird noch viel gemacht, so fand ich es erstaunlich, das die Itemanzeige der Charprofile 2 Tage nach meiner Anmeldung dort gefixt wurde.
… ist noch nicht alles fertig und man steht vor der Glaubensfrage: ” Eigene Ideen durchsetzen oder auf die Community hören”, bei XChar.de wird ein Mittelweg versucht.
Bis auf die Startseite wirkt die Seite sehr aufgeräumt, nur eben die Startseite wirkt überladen, evtl kann man (muss man aber nicht) hier mit einem Untermenu für mehr übersicht sorgen. Ansonsten bietet XChar.de alles was eine WoW-Community braucht: Forum(auf moderner vB-Basis), Chat (zZ nur IRC) und Shoutbox(wobei das Geschmackssache ist, ich persönlich bin kein Freund davon).
Auch Nachrichten können versand werden, leider wird hier keine meldung über eingehende Nachrichten ausgegeben, auch hier besteht noch ein wenig Verbesserungsbedarf.
Benutzerprofile können aufwendig gestaltet werden, so kann man neben Hobbies und Beruf auch Fotos, Videos und sogar einen eigenen Blog hinzufügen. Ist alles nichts neues und besonderes ? Der Clou ist der Profiler!
Ein feines WoW-Addon, evtl von der Idee oder dem Quelltext von Sourceforge inspiriert, in Verbindung mit der Website eine wirkliche Freude. So kann man recht unkompliziert seinen Char mitsamt Level, Talenten, Items und Co. anderen präsentieren und begutachten lassen. Teilweise noch ein wenig fehleranfällig, aber im Forum wird einem weitergeholfen.

Und während man nun die anderen Charakter-Profile durchstöbert, ist man erstaunt, welche User dahinter stecken, so trifft man neben massig Studenten auf Tauren-Polizisten, Krieger-Soldaten (wen wunderts) oder Nachtelf-Buchhändlerinnen. Insgesamt ist das Niveau auf XChar offensichtlich höher als bei anderen Communities mit dem selben Thema, was sehr angenehm ist, wenn man selbst schon 26 ist und auf Umgangsformen achtet.
Auch wenn noch BETA draufsteht, macht das Portal jetzt schon Spass. Für jeden der gerne WoW spielt und mit Menschen nicht nur durch den InGame-Chat reden will, vllt die Anlaufstelle im Netz, aber durch die vielen Server in WoW nicht unbedingt geeignet um sich leute für Raids zu suchen.
Im letzten Beitrag bin ich ja auf die “Einstiegsdroge Userscripts” eingegangen, wer sich das ganze angeschaut hat, stellt fest, das es eine sehr nützliche Sache ist. Warum dann noch das ganze Drumherum mit den Extensions?
Die Vorteile der Userscripts liegen auf der Hand:
Die Vorteile der Extensions werden erst beim Anpacken grösserer Projekte deutlich
Das man sich dafür mit RDF, XUL und Co. anfreunden muss, ist durch die Vorteile das geringste Problem.
Natürlich kann man viele Vorteile auch mit Workarounds in Userscripts umgehen(Lokalisierung mit Spracharray, Bilder per Base64-Codierung), wer das aber mal gemacht hat, weiss wie schnell sich dann der Code zu einem unübersichtlichen Worthaufen entwickelt.

Categories
Tag Cloud
Blog RSS
Comments RSS
Last 50 Posts
Back
Back
Void « Default
Life
Earth
Wind
Water
Fire
Light 