Der Weltmeister heißt Spanien! Und unser Tippmeister ist johnny.
Als wir das Tippspiel starteten hätten wir nicht mit so starkem Interesse gerechnet, da wir eher die Software Entwickler ansprechen wollten anstatt die breite Masse. Die Packung! wurde mit JVx umgesetzt, einem sogenannten Newcomer in der Framework Szene. Darum war unser Ziel, den Bekanntheitsgrad von JVx zu steigern. Und diesem Ziel sind wir nun einen Schritt näher gekommen.
Besonders stolz sind wir jedoch auf die Qualität unserer Software. Ursprünglich für die WJAX Challenge entwickelt - einige Monate später, ohne Source Code Änderungen, eingesetzt. Es traten keinerlei Fehler auf und wir bekamen nur positives Feedback von unseren Usern. Aufgrund der ganzheitlichen Betrachtung der Anforderungen, der sehr detailierten Planung und der SIB Visions üblichen, professionellen, Programmierung war dies überhaupt erst möglich.
Aber um ganz ehrlich zu sein... die Features: Quick Tipp, Live Spielstände, Turniersieger Anzeige haben wir speziell für die WM implementiert. Die praktischen Erfahrungen sind eben auch mit der besten Planung nicht abzudecken, und das ist gut so.
Durch die Live Spielstände wurden die Punkte ebenfalls Live berechnet. Das machte sich bei jedem Tor, in der Statistik bemerkbar. Es war immer wieder spannend die aktuellen Platzierungen aufgrund des aktuellen Spielstandes zu beobachten.
Nachdem die Hälfte der Spiele absolviert wurden, haben unsere User um Feedback gebeten und wurden mit positiven Rückmeldungen überhäuft. Ein ganz großes DANKE an alle die uns Ihre Meinung mitgeteilt haben. Jedes einzelne E-Mail wurde beantwortet und die Wünsche werden wir beim nächste Event berücksichtigen.
Doch am Ende zählt doch nur der Sieg, oder?
Den Hauptpreis krallte sich johnny vor delray77. Auf Platz drei landeten Hary und Hansblafoo.
Die Punktestände und Spieltag Statistiken wurden laufend über Twitter bekanntgegeben.
Die Preise wurden bereits versendet bzw. werden in den nächsten Tagen persönlich übergeben. In den nächsten Tagen werden wir die Preisträger kurz vorstellen.
Nachdem die JVx .NET AddOns bereits wunderbar mit Silverlight harmonieren, haben wir einen ersten Versuch mit dem Windows Phone SDK gewagt. In erster Linie wollten wir prüfen ob die AddOns auch mit Windows Phone funktionieren. In der Spezifikation waren keine Stolpersteine zu fnden, daher sollte eine Integration problemlos möglich sein.
In der Praxis sieht die Sache natürlich etwas anders aus. Das SDK enthält (noch) nicht alle Klassen die in den AddOns verwendet wurden. Daher musste für unseren Test auf etwas Komfort verzichtet werden. Nach der Anpassung der AddOns war die Integration jedoch ohne Probleme möglich.
Wir setzten uns ein sehr bescheidenes Ziel für die Entwicklung der ersten App:
Darstellung einer Liste mit den Ländern aus unserer Showcase Anwendung.
Unsere App war überraschend schnell umgesetzt. Hierbei ist jedoch anzumerken, daß das Windows Phone SDK im Moment nicht mit der Konkurrenz mithalten kann. Dazu müssen noch wesentliche Details verbessert werden.
Unsere App, gestartet mit dem Windows Phone Emulator:
 Windows Phone App
|
Der Source Code für den Zugriff auf die Daten ist in üblicher Manier zu schreiben:
private JVxDataAdapter dataSource
;
private MasterConnection Connection
;
public MainPage()
{
InitializeComponent();
SupportedOrientations = SupportedPageOrientation.Portrait
| SupportedPageOrientation.Landscape;
// init connection
HttpConnection conn = new HttpConnection(new UniversalSerializer(),
"http://demo.sibvisions.org/showcase/services/Server");
MasterConnection master = new MasterConnection(conn);
master.ApplicationName = "showcase";
master.LifeCycleName = "com.sibvisions.apps.showcase.frames.Contacts";
master.UserName = "admin";
master.Password = "admin";
// init data adapter
dataSource = new JVxDataAdapter(master);
dataSource.OpenComplete += new OpenCompleteEventHandler(OpenComplete);
// open connection
dataSource.Open();
}
void OpenComplete(OpenCloseCompleteEventArgs pEvent)
{
// fetch data
CommunicationCallback callback = new CommunicationCallback(
new AsyncCallback(EndFetch));
dataSource.Connection.call("countries", "fetch", callback,
new object[] {null, new SortDefinition(new String[] {"COUNTRY"}), 0, -1});
}
void EndFetch(IAsyncResult pResult)
{
CommunicationCallback requestCallback = (CommunicationCallback)pResult.AsyncState;
ArrayList result = (ArrayList)requestCallback.CallResult[0];
// fill list
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
foreach (object[] item in result)
{
if (item != null)
{
ListBox.Items.Add(item[1]);
}
}
});
}
Das XAML ist im Vergleich zum Datenzugriff weit komplexer:
<phoneNavigation:PhoneApplicationPage
x:Class="WindowsPhoneApp.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phoneNavigation="clr-namespace:Microsoft.Phone.Controls;
assembly=Microsoft.Phone.Controls.Navigation"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="800"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}">
<Grid x:Name="LayoutRoot" Background="{StaticResource PhoneBackgroundBrush}">
<Grid.RowDefinitions>
<RowDefinition Height="162"/>
<RowDefinition Height="44"/>
<RowDefinition Height="514*"/>
<RowDefinition Height="80"/>
</Grid.RowDefinitions>
<Border BorderBrush="Silver" BorderThickness="5" Name="border0"
CornerRadius="20" Background="#18A2E7" Margin="12,0,12,20">
<Grid x:Name="TitleGrid" Height="147" >
<TextBlock Text="Windows Phone App" Foreground="Black"
x:Name="textBlockPageTitle"
Style="{StaticResource PhoneTextPageTitle1Style}"
Margin="7,6,12,100" />
<TextBlock Text="JVx showcase" Foreground="Black"
x:Name="textBlockAppTitle"
Style="{StaticResource PhoneTextPageTitle2Style}"
Margin="-3,26,-3,16" TextAlignment="Center" />
</Grid>
</Border>
<TextBlock Text="Countries" x:Name="textBlockListTitle" FontSize="30"
HorizontalAlignment="Right" Width="456" Margin="0,148,12,6"
VerticalAlignment="Stretch" Padding="0,5,0,0" Grid.RowSpan="2" />
<Border BorderBrush="Silver" BorderThickness="5" Name="border1"
Grid.Row="1" CornerRadius="20" Margin="12,35,12,0" Grid.RowSpan="2">
<ListBox Name="ListBox" HorizontalAlignment="Left"
VerticalAlignment="Top" Width="480" Margin="5,5,5,5" />
</Border>
<Image Grid.Row="3" Height="74" Margin="0,6,0,0" Name="image1"
Stretch="Uniform" VerticalAlignment="Top"
Source="/WindowsPhoneApp;component/Images/sib_visions.png"/>
</Grid>
</phoneNavigation:PhoneApplicationPage>
Um native mobile Apps zu entwickeln sind die jeweiligen SDKs der Hersteller nötig. Eine alternative Entwicklungsmöglichkeit bietet das Open Source Framework PhoneGap. Die Apps werden mit HTML, CSS und Javascript entwickelt und native zur Verfügung gestellt.
Es ist zwar noch etwas früh um von einem Framework zu sprechen, dennoch klingt der Projekt Antrag - Sapphire - recht interessant. Die weitere Entwicklung bleibt jedoch abzuwarten.
Dennoch wird anhand des Antrages deutlich, daß die Applikationsentwicklung einfacher werden muss. Und mit JVx existiert bereits eine Lösung die genau das ermöglicht. Ob die Abhängigkeiten zu den Eclipse Frameworks nicht eher ein Nachteil, hinsichtlich der Einfachheit ist, wird die Umsetzung zeigen.
Seit heute ist unsere Packung! als mobile App, offiziell im Android Market erhältlich. Natürlich kostenlos!
Der Link für den Market: market://search?q=pname:com.sibvisions.apps.packung
Die App wurde ursprünglich entwickelt um zu zeigen, daß JVx auch unter Android ohne Probleme eingesetzt werden kann. Und das ohne Qualitätsverlust. Die App wurde zu 100% mit den JVx AddOns für Android und JVx selbst erstellt. Es kommen die selben Sourcen wie auch für die RIA zum Einsatz.
Doch mittlerweile ist das Projekt aus den Kinderschuhen entwachsen und zählt zu den Schmuckstücken in unserer Sammlung.
Was ermöglicht die App im Unterschied zur RIA?
Die App ist kein Ersatz für den großen Bruder, aber ein treuer Wegbegleiter. Mit der App ist es möglich, einfach und unkompliziert, von unterwegs seine Tipps abzugeben, mit den Spielergebnissen zu vergleichen und den Highscore einzusehen.
Folgende Screenshots zeigen die Funktionen im Detail:
 Login |
|
Die Anmeldung
Mit dem vorhandenen Benutzernamen und Passwort wird die Anmeldung durchgeführt!
Ein neuer Benutzer muss zuerst in der Rich Internet Application registriert werden bevor die mobile Anwendung genutzt werden kann. Durch die Aktivierung der automatischen Anmeldung entfällt die Eingabe von Benutzernamen und Passwort, bei erneutem Start der App bzw. wenn die Verbindung aufgrund eines Kommunikationsfehlers neu geöffnet werden muss.
Über das Menü kann der Server gewechselt werden und die App lässt sich beenden.
|
|
 Choose Server |
|
Die Server Auswahl
Es kann zwischen den zur Verfügung stehenden Systemen gewählt werden. Der Tournament Server ist das Live System für die WM 2010.
Der Demo Server ist ein System mit dem die Funktionen der RIA und das Zusammenspiel mit der mobilen App, getestet werden kann.
Der Development Server ermöglicht das Debuggen der Applikation und sollte nur von Software Entwicklern eingesetzt werden, die den Source Code der Anwendung zur Verfügung haben.
|
|
 Categories |
|
Die Kategorie Auswahl
Das Hauptmenü der App enthält die möglichen Optionen:
- My Bets
Unterstützt beim Abgeben der Tipps.
- History
Vergleicht die Tipps mit den Ergebnissen und zeigt die Punkte pro Tipp.
- Statistics
Aktueller Highscore - Weltweit bzw. der privaten Tippgruppen.
|
|
 MyBets |
|
Tippen
Pro Spieltag stehen die möglichen Spiele zur Verfügung. Das Wunschergebnis kann durch die Selektion des jeweiligen Spieles, eingegeben werden.
|
|
 Place Bet |
|
Den Tipp eingeben
Den gewünschten Endstand eingeben und bestätigen. Solange die erlaubte Deadline nicht überschritten ist, kann das Ergebnis jederzeit korrigiert werden.
|
|
 History |
|
Die Historie
In der historischen Ansicht wird das Endergebnis (rot) mit dem Tipp verglichen. Zusätzlich werden die Punkte pro Spiel angeführt.
|
|
 Statistics |
|
Highscore
Der Highscore zeigt die aktuellen Platzierungen inklusive des Punktestandes. Sollten private Tippgruppen verwendet werden, sind auch diese sichtbar.
Der eigene Benutzername wird grau hinterlegt um die Übersicht zu bewahren.
|
|
 User Info |
|
Die Benutzer Information
Der Benutzername sowie der Anmelde Zeitpunkt werden angezeigt. Mit dem Menü ist der Wechsel zu den Kategorien, die Abmeldung und die Beendigung der App möglich.
|
|
Am gestrigen JUGAT Event haben wir unsere Web Implementierung von JVx UI vorgestellt.
Was genau ist die Web Implementierung von JVx UI?
Dabei handelt es sich um eine HTML/Ajax Implementierung des Plattform unabhänigen User Interfaces das von JVx vorgegeben wird. Dadurch ist es nun möglich, eine JVx Applikation als klassische Web Anwendung zu starten. Und der entscheidende Vorteil dabei ist, daß die Applikation nicht geändert oder neu codiert werden muss. Eine Applikation die bisher als Swing Applet verwendet wurde, kann nun auch ohne Anpassung als HTML Client betrieben werden!
Und wie kann so eine Applikation im Web aussehen?
Auf den ersten Blick ist die Web Anwendung nicht von einer Swing Anwendung/Applet Anwendung zu unterscheiden. Und auch beim zweiten Blick sollte genau hingesehen werden. Doch genug der Worte - mit Screenshots sollte der WOW Effekt nun eintreten.
WebUI login |
|
Die Anmeldung
Im Vergleich zur Applet Anwendung ist der Unterschied kaum merkbar. |
|
Die Konkakte verwalten
Die gewohnten Features der Swing Anwendung stehen natürlich auch in der Web Implementierung zur Verfügung, wie z.B.: Master/Detail, Automatische Zellen Editoren, Bildanzeige usw. |
|
 WebUI contacts |
|
 WebUI contacts firebug |
|
Der Beweis
Mit Firebug treten wir den Beweis an, daß es sich bei der Anwendung tatsächlich um eine HTML/Ajax Anwendung handelt. |
|
Für die Umsetzung der JVx WebUI wurde die ext GWT Bibliothek eingesetzt. Diese bietet gute Komponenten auf denen wir aufsetzen konnten. Es wäre jedoch auch denkbar eine andere Bibliothek wie z.B.: qooxdoo zu integrieren.
Wir haben vor wenigen Wochen unseren Silverlight Showcase vorgestellt. Nun steht die Anwendung offiziell zur Verfügung.
Der Silverlight Showcase ist eine in C# entwickelte Anwendung die mit den JVx AddOns für .NET entwickelt wurde. Dabei wird die komplette Business Logik von der Java Implementierung wiederverwendet. Der Silverlight Client kommuniziert durch den UniversalSerializer direkt mit dem Java Applikationsserver.
Die Anwendung ist zusammen mit dem Java Showcase hier zu finden.
Die JVx AddOns für .NET unterliegen der Apache Lizenz 2.0 und der Source Code wird in den nächsten Wochen offiziell freigegeben.
Wie bereits in einem früherem Posting berichtet wurde, haben wir im Rahmen der WJAX Challenge 2009 ein Fußball Tippspiel entwickelt. Und genau dieses Tippspiel setzen wir nun für die Fußball Weltmeisterschaft 2010 ein.
Seit heute steht die offizielle Version für jeden Fußball Fan zur Verfügung und wir laden recht herzlich zur Teilnahme ein.
Das Tippspiel wurde vollständig mit dem Enterprise Application Framework - JVx - entwickelt und der Source Code steht unter Apache Lizenz 2.0 zum Download bereit.
Aber was wäre ein Tippspiel ohne Preise?
Natürlich nur halb so interessant. Deswegen gibt es auch passend zu den Themen JVx, Java und Fußball etwas zu ergattern. Auch an dieser Stelle ein Dankeschön an unsere Sponsoren.
Genauere Informationen sind auf unserer Fußball WM-2010 Webseite zu finden.
Die in JVx integrierte Kommunikation hätte durchaus potential für ein eigenständiges Open Source Projekt. Wir sind jedoch bemüht die Entwicklung immer so einfach als möglich zu halten. Das bedeutet nicht, daß in JVx alle möglichen Frameworks zusammengeführt werden und somit ein nicht überschaubares "etwas" entsteht, sondern JVx enthält alles was nötig ist um Business Anwendungen in einer 3 Schichten Architektur zu erstellen. Und dazu gehört nun mal eine effiziente Client/Server Kommunikation.
Es gibt natürlich Frameworks für die Kommunikation zwischen Client und Server, wie z.B. Netty. Doch unabhängig von den vielen Möglichkeiten des Frameworks ist die Bibliothek mit knapp 700KB ein großer Brocken (nur für die Kommunikation!). Weiters ist ein Kommunikationsframework alleine noch nicht ausreichend, denn die Objekte müssen zwischen Client und Server auch noch serialisiert bzw. deserialisiert werden.
Für die Serialisierung könnten wiederum vorhandene Frameworks wie z.B.: Google Protocol Buffers oder Hessian eingesetzt werden. Doch die Google Protocol Buffers erfordern die Definition der zu übertragenden Objekte und ist daher für ein generisches Framework wie JVx nicht geeignet. Und Hessian unterstützt leider nicht alle Objekttypen und ist nicht out-of-the-box mit z.B. Android einsatzfähig.
Der in JVx integrierte Kommunikationsmechanismus erlaubt ohne weiteres die Integration von den bisher genannten Frameworks, da weder das Transportprotokoll noch die Serialisierung ausschlaggebend sind für eine Business Anwendung. Außerdem definiert JVx mit Interfaces, was die Kommunikation bieten muss. Üblicherweise ist eine eigene Implementierung durch die Ableitung von AbstractSerializedConnection bzw. die Implementierung von ISerializer rasch durchgeführt.
Mit dem UniversalSerializer wird außerdem eine Lösung bereitgestellt mit der Objekte, zwischen unterschiedlichsten Technologien, ausgetauscht werden können. Und das ohne sich Gedanken über die Konfiguration zu machen bzw. Mappings zu erstellen. Der Einsatz des UniversalSerializer in Verbindung mit Netty ist ebenfalls ohne Probleme möglich, nur um hier auf den flexiblen Einsatz der JVx Kommunikation hinzuweisen!
Die Kommunikation wird im Moment mit Java und .NET erfolgreich eingesetzt. Weiters funktioniert die Kommunikation auch ohne jegliche Anpassung mit Android.
Seit gestern sind unsere Demo Anwendungen in der Cloud beheimatet. Unser bisheriges Demo System war nicht unbedingt für eine Vielzahl von Usern ausgelegt. Außerdem dachten wir ursprünglich, daß ein Demo System nicht so performant sein muss wie ein produktives System. Doch dieser Gedanke passt so überhaupt nicht zu JVx. Denn JVx unterscheidet sich von anderen vergleichbaren Frameworks unter anderem durch die Performance.
Damit JVx seine Vorteile voll ausspielen kann, war ein Umzug unbedingt erforderlich.
Das neue System ist in seiner Basis Konfiguration bereits für mehrere Hundert User ausgelegt und kann bei Bedarf beliebig skaliert werden. Das ist nur einer der vielen Vorteile einer Cloud.
Aufgrund des Umzuges wurden beim Tippspiel Packung nur die Benutzerkonten übernommen, nicht aber die Tipps, die erfassten Ergebnisse bzw. die manuell erstellten Turniere. Da es sich um eine Demo Anwendung handelt haben wir auf eine vollständige Datenübernahme verzichtet.
Weiters wird nun für die Showcase Anwendung die aktuellste JVx Version eingesetzt. Das bedeutet unter anderem ein verbessertes Meta Daten Caching und den Einsatz des Universal Serializer.
Unsere .NET bzw. MONO Anbindungen an JVx befindet sich bereits auf der Zielgeraden. Und frei nach dem Motto "ein Bild sagt mehr als tausend Worte" präsentieren wir Ihnen die ersten Screenshots von unserem Silverlight Showcase.
Die Anwendung befindet sich zwar noch in der Entwicklung, sowohl am Design als auch Funktional wird sich noch das eine oder andere Detail ändern, aber sehen Sie selbst:
 Silverlight Login |
|
Die Anmeldung
Die Anmeldung an die Applikation erfolgt durch die Eingabe von Benutzername und Passwort. Selbstverständlich können die gleichen Benutzerdaten wie auch in der Java Applikation verwendet werden.
Der Silverlight Client unterscheidet sich zwar optisch vom Java Client, doch die Business Logik wird ohne Souce Code oder Konfigurations- Anpassungen wiederverwendet.
Ein wesentliches Ziel bei der Entwicklung ist, die Vorteile der jeweiligen Technologie ideal zu nutzen! |
|
Die Kontaktverwaltung
Das Foto kann bequem per Drag and Drop vom Desktop in die Anwendung gezogen werden. Und weiters ermöglichen wir die Adress Auswahl über das Map Control (siehe nachfolgenden Screenshot).
Ein nicht gleich auf den ersten Blick ersichtlicher Knüller ist das Data Binding. Die Daten werden nämlich nicht via Webservice oder JSON geladen, sondern direkt von der JVx Business Logik. Und für sämtliche CRUD Anweisungen werden die selben Server Objekte verwendet wie auch für den Java Client. |
|
 Silverlight Contacts |
|
 Silverlight Map |
|
Die Adressauswahl
Eine Adresse einzugeben ist nur halb so viel Spaß wie die Adresse auf einer Karte zu suchen. Aus diesem Grunde haben wir das komfortable Map Control integriert.
Da macht das ganze doch gleich viel mehr Spaß! |
|
Den Silverlight Showcase werden wir demnächst veröffentlichen. Bleiben Sie also am laufenden!