Location Based Services mit ALOQA

Gregor Ottmann | Mai 13, 2008 on 10:02 am | In Tools | No Comments

Wir hatten schon vor einiger Zeit mit Leuten von der Uni München zu tun, die an einer API für die Realisierung von “Location Based Services” gebastelt haben, d.h. an Code für die Umsetzung von Funktionen, die auf die Position von Mobilgeräten reagieren. Als Uni-Projekt sah das schon nicht uninteressant aus, und heute habe ich von unserem damaligen Kontakt erfahren, dass mittlerweile eine Firma für die Sache gegründet wurde, bei der besagter Kontakt geschäftsführert, die “ALOQA GmbH“.

Das Projekt von damals ist ziemlich gewachsen, inzwischen gibt es APIs für Android, normales Java und JavaScript - eine Version für Windows Mobile ist auch schon angekündigt. Ich hatte jetzt noch nicht wirklich die Gelegenheit, mir das alles im Detail anzusehen, aber die Entwickler-Website von ALOQA macht schon mal einen sehr guten Eindruck. Es scheint viel Doku zu geben und Beispiele habe ich auch gesehen - was will man mehr? Eine geeignete Lizenz vielleicht noch, aber die gibt es nach Aussage meines Kontakts scheinbar auch. Ich zitiere:

Alle Schnittstellen und Softwaremodule können gemäß den Nutzungsbedingungen in einem bestimmten Rahmen kostenlos verwendet werden, solange der entwickelte Dienst / die mobile Anwendung Endnutzern kostenlos zur Verfügung steht.

Klingt nicht verkehrt. Muss ich mir gelegentlich näher ansehen.

Quelloffener Kaffee

Gregor Ottmann | April 24, 2008 on 7:17 am | In Aktuelles | No Comments

Juhuu, Sun öffnet jetzt wirklich alle Java-Quellen, so dass ich auf meinen Linuxkisten endlich nicht mehr irgendwelche dubiosen Restricted-Pakete installieren muss, um IT-Kaffee auf die Platte zu bekommen. Man könnte sagen, dass das ja auch lang genug gedauert hat und vermuten, dass Mono irgendwie doch irgendwas damit zu tun haben könnte - aber das würde bedeuten, Sun zu kritisieren, und das wollen wir ja nicht. Da hacken wir lieber noch eine Runde auf Microsoft rum, das ist politisch deutlich korrekter und in den meisten Kreisen auch sozial verträglicher.

Wenn die PHP-Session rumspinnt

Gregor Ottmann | April 18, 2008 on 7:20 am | In Know-How, PHP | No Comments

Ich war noch nie in der Situation, eine Website bei einem kommerziellen Horster horsten lassen zu müssen, aber für die, denen keine andere Wahl bleibt, könnte ich eventuell einen guten Tipp haben. Der Maxx hat nämlich heute eine Mail rumgeschickt, die den Eindruck macht, so manche schlaflose Nacht vermeiden zu können:

Falls jemand mal das „Vergnügen“ haben sollte, eine Webanwendung auf einem Server eines der ganz großen deutschen Hoster zu betreiben und die PHP-Sessions mit ihm Lotto spielen sollten (das muss man auch erstmal merken), dann erspart Ihr Euch mit folgender Zeile in einer eigenen php.ini evtl. wertvolle Freizeit, erhaltet Eure Nerven und könnt die gewonnene Zeit für ein leckeres Bier nutzen:

session.save_path=/home/strato/www/<first-two-letters-of-domain>/<domain>/htdocs/sessions

Der Fehler ist nie wirklich reproduzierbar und die „aktive“ Session wird anscheinend mit dem ganz großen Würfel bestimmt. Meine Spekulation wäre ja, dass das /tmp Verzeichnis des Servers einfach voll ist (Anzahl Filehandles oder auch Inodes). Was aber doch verwunderlich ist, ist dass das dann keinen Fehler schmeisst, sondern scheinbar toll funktioniert… nur eben mit einer Zufalls-Session.

Uuh, klingt ungroovy, also gar nicht tofte. Vor allem würde ich das für einen dieser Fehler halten, die einen mangels Reproduzierbarkeit ganz locker in klinische Zustände treiben können, und das muss ja nicht sein.

SDL: XML für die, denen JSON nicht exotisch genug ist

Gregor Ottmann | April 14, 2008 on 11:35 am | In Know-How, Vermischtes | No Comments

Du besitzt einen Mac und weigerst Dich standhaft, in reinen Microsoft-Umgebungen auch mal einen Windows-PC zu verwenden? Du würdest Dich lieber von einer Klippe stürzen, als eine Webapplikation mit J2EE oder .Net statt mit Ruby, Python oder INTERCAL zu realisieren? XML war für Dich nie ein Thema und JSON ärgert Dich inzwischen damit, dass es nicht mehr hip und obskur genug ist? Du bezeichnest jedes Programm, dass von mehr als 2 Leuten auf dem Planeten verstanden wird, als “Mainstreamkacke”?

Du solltest Dir unbedingt mal SDL ansehen, das wird Dir gefallen.

Sharepoint und die Downloads aus dem Web Part

Gregor Ottmann | April 10, 2008 on 3:08 pm | In .Net, JavaScript, Know-How | No Comments

Eigentlich ist die Anforderung ganz einfach und keineswegs unüblich: Man will auf einer Website irgendeine Datei dynamisch generieren, beispielsweise einen Excel-Report, die man dann per Klick auf einen Button zum Download anbietet. Sowas ist im Regelfall nicht schwer, außer natürlich, wenn man ein “Web Part” für Sharepoint baut. Wenn man das tut ist, wie ich inzwischen weiß, ziemlich vieles schwer, schmerzhaft und generell mehr oder weniger unbefriedigend.

An sich ist die Sache aj auch in ASP ganz easy und in vielen Blogposts beschrieben, beispielsweise bei den Dotnetslackers. Das Problem ist nur, dass bei diesem Ansatz die Datei erst nach einem Postback generiert und an den Client geschickt wird, dieser Postback aber das momentan angezeigte Formular nicht neu vom Server lädt. Problem? Wieso Problem?

Ganz einfach: Sharepoint meint es gut mit uns und sorgt per JavaScript dafür, dass Formulare nicht öfter als einmal abgeschickt werden können, beispielsweise durch amokklickende Benutzer. Das führt dazu, dass nach dem Download der Datei das Formular hinüber ist, d.h. es nicht mehr abgeschickt werden kann, weil es ja schon mal abgeschickt wurde. Sehr blöde, und die Lösungen, von denen ich gelesen habe, waren allesamt extrem kompliziert zu implementieren, weil sie irgendwelche speziellen Download-Handler vorgesehen haben. Mensch, Leute, ich habe eine Deadline und nicht beliebig viel Budget - ich brauche eine EINFACHE Lösung. Meinetwegen auch einen kleinen Hack.

Einen solchen Hack habe ich dann auch hinbekommen. Diese Resubmit-Sperre wird von Sharepoint nämlich im onsubmit-Handler des Formulars aufgerufen, so dass man nur beim Klick auf den Downloadbutton genau diesen Handler wegschießen muss:

exportButton = new Button();
exportButton.Text = “Generate some Excel stuff”;

// the handler method generates the file, writes it to the response and ends the response.
exportButton.Click += onExcelExportClicked;

// erase the form’s onsubmit handler when the button is clicked
exportButton.OnClientClick = “this.form.onsubmit = function() {return true;}”;

Hässlich, ja, und eventuell auch gefährlich, wenn man nicht aufpasst, aber es funktioniert. Die nächste Verbesserung wird sein, dass ich irgendwie nach dem Download den ursprünglichen onsubmit-Handler wieder herstelle oder so - aber das mache ich erst, wenn ich es brauche.

(Nur, falls irgendwer sich wundert: Das Posting mit dem identischen Codebeispiel im MSDN-Forum ist nicht geklaut, sondern auch von mir.)

Excelfiles einfach generieren mit Flexcel

Gregor Ottmann | April 10, 2008 on 7:46 am | In .Net, ASP.NET, Tools | 2 Comments

Eine Warnung vorweg: Die nachfolgende Toolempfehlung kostet Geld. Im Grunde ist das Teil zwar spottbillig, aber wenn man aus Prinzip nix benutzen mag, für das man seine $$$ auf den Tisch werfen muss, sollte man jetzt eine andere News lesen.

Also. Wir mussten neulich für einen Kunden Excel-Files erzeugen, und zwar total komplizierte. Das Ganze durfte natürlich keine Excel-Installation auf dem Server voraussetzen, und CSV war definitiv keine Option, logo. Ein Fluch bildete sich schon auf unseren Lippen, als Paul ein Toolkit fand, das sich zur Rettung unserer Hinterteile in letzter Sekunde eignete: TMS Flexcel Studio for .Net.

Dieses Flexcel-Dings kann nicht nur beliebige Excel-Dateien einlesen, die darin enthaltenen Formeln berechnen, die Inhalte beliebig verändern und dann wieder eine Excel-Datei ausspucken. Nein, das wäre ja noch harmlos. Es enthält auch eine Reporting-Engine und kann Excel-Files als PDF oder HTML rendern, wobei Excel-Charts als PNG ausgegeben werden. Besonders geil ist das beiligende Tool, das eine beliebige Excel-Datei einlesen und daraus den Sourcecode in C#, VB oder Delphi generieren kann, den man bräuchte, um die Quelldatei programmatisch zu erzeugen… Das muss man echt mal gesehen haben.

Ach ja: Der Sourcecode der gesamten Komponente inklusive PDF-Library liegt bei, wenn man das Tool für sagenhaft günstige 125 EUR pro Entwickler kauft. Für 495 EUR gibt’s eine “Site Licence”, die dann von beliebig vielen Entwicklern einer Firma benutzt werden darf - da kann man nicht meckern. Insbesondere dann nicht, wenn man sich überlegt, wieviel eine Excel-Lizenz für den Server kosten würde. Oder die Eigenentwicklung so einer Killerkomponente.

Und nein, ich bin nicht zum reinen Microsoftie verkommen. Ich arbeite halt momentan mehr oder weniger ausschließlich mit dem Zeugs, hoffe aber darauf, irgendwann mal wieder was mit Java machen zu dürfen - und dann kriegt Ihr auch wieder Blogposts, die sich nicht um den MS-Krempel drehen.

Confusion by Extension: Extensionsmethodierung im Scharf-C

Gregor Ottmann | März 17, 2008 on 10:04 am | In .Net, Know-How | 1 Comment

Der einfachste Weg, um schönen Code komplett unverständlich zu kriegen, ist meiner Meinung nach definitiv AOP, d.h. aspektorientierte Programmierung. Diese total hippe Möglichkeit, um Code gewissermaßen um 90° versetzt zur Klassenhierarchie zu pflegen und mehr oder weniger deklarativ an Stellen einzubringen, mit denen man nicht gerechnet hätte, kann mit Fug und Recht als “das neue GOTO” bezeichnet werden. Finde ich zumindest, und meine Meinung ist bekanntlich reichlich normativ.

Man kann sich also vorstellen, wie glücklich ich war, als ich gemerkt habe, dass Microsoft in C# mittlerweile eine spezielle Delikatesse namens “Extension Methods” anbietet. Das sind Methoden, die sich mehr oder weniger automatisch an Instanzen bestimmter Klassen hängen und so tun, als wären sie Teil der Klasse. Ja, das ist gewissermaßen AOP Deluxe: Die gesamte Verwirrung und Unverständlichkeit der AOP, nur nicht so mächtig wie AspectJ oder vergleichbare S/M-Technologien. Genial, das muss ich in Zukunft in jedem einzelnen Stück Code verwenden, von dem ich sicher weiß, dass es zukünftig nur von anderen gepflegt werden muss, nicht von mir selbst.

Ah, fast vergessen - einen Link gibt es ja auch noch: Extension Methods bei MSDN. Go and knock yourselves out.

Configgerationiere Deine web.config mit ASPHere!

Gregor Ottmann | Februar 13, 2008 on 9:01 am | In ASP.NET, Tools | No Comments

Diese Deskriptoren machen mich ganz deskriptiv, egal für welche Technologie. Wenn ich eine web.xml basteln muss, werde ich ganz kribbelig und glaubt mir - bei einer web.config für ASP.NET ist das kein Stück besser. Können diese blöden Websites nicht einfach genau das tun, was ich mir so denke, statt von mir zu verlangen, dass ich es vernünftig aufschreibe? Ist das etwa zuviel verlangt? Scheinbar schon.

Dank PRogalinski ist der Schmerz zumindest bei der ASP-Konfickelei jetzt aber etwas weniger schlimm, denn er hat mir das web.config-Editiertooldings “ASPHere” gezeigt, von dem ich ziemlich begeistert bin. OK, ich habe es nur mal kurz ausprobiert, aber meine vorhandenen Dateien konnte es einlesen und bearbeiten, ohne Fehler zu spucken - das ist ein gutes Zeichen.

ASPHere

Besonders fein finde ich bei dem Tool noch nicht mal unbedingt, dass man visuell configgen kann, sondern dass man eine übersichtliche Liste der möglichen Optionen nebst Hilfestexten, Tooltips und Links zu MSDN hat. Meistens ist es schließlich gar nicht so arg schwer, den Kram hinzuschreiben - nur weiß man halt von den meisten Optionen gar nicht, dass es sie überhaupt gibt, und da hilft so ein Optionsbrowser doch enorm. Wer sich mit ASP rumschlagen muss, sollte jedenfalls mal einen Blick auf das Dings werfen.

Von Typen mit Strings und assemblierter Sicherheit

Gregor Ottmann | Februar 10, 2008 on 7:40 pm | In .Net, ASP.NET, Know-How | No Comments
Picture it: Sicily, 1922. A beautiful young girl meets an american guy who wants to make every single developer in the world throw up continuously. The girl was me and the guy was Bill Gates…

So oder ähnlich denkt man, wenn man a) zuviele Folgen der Golden Girls gesehen hat und b) gerade mit .NET arbeitet. Zumindest dann, wenn man gerade folgende Situation hatte:

  • Ein WebPart enthält einen GridView mit einer ObjectDataSource, die auf ein eigenes DAL verweist
  • Das Part funktioniert in ASP-Seiten
  • Das Part funktioniert im Sharepoint mit voller Pulle Trustlevel
  • Das Part fliegt mit einem Hinweis, dass die DAL-Klasse nicht gefunden wurde, auseinander, wenn man es im GAC installiert.

Des Rätsels Lösung war ganz einfach, wenn man nur weiß, wo man suchen muss. Wir hatten diesen Code (den ich aus einem Tutorial kopiert hatte) im Part:

ObjectDataSource ods = new ObjectDataSource();
ods.EnablePaging = true;
ods.SelectMethod = “getItems”;
ods.SelectCountMethod = “GetTotalItemCount”;
ods.SortParameterName = “sortExpression”;
ods.TypeName = typeof(AreDal).ToString();

Die letzte Zeile musste wie folgt geändert werden, damit das Mistding vernünftige Klassennamen mit Assembly-Namen und Public-Key-Dingsbums ausspuckt:

ods.TypeName = typeof(AreDal).AssemblyQualifiedName;

NA DANN! Wieso ist das ToString bei dem Mist eigentlich nicht gleich so implementiert, dass es ordentlich funktioniert? Kann mir das irgendwer verraten? Nein? Naja, auch egal, ich hab’s ja jetzt.

SQL Server 2005, ein anderer Port und das Management Studio Express

Gregor Ottmann | Januar 24, 2008 on 1:01 pm | In .Net, Datenbanken, Know-How | No Comments

Wenn man einen SQL-Server hat, auf dem mehrere Instanzen laufen, kriegt jede Instanz einen eigenen Port. Wenn man nun mit dem Management Studio Express auf eine der Instanzen will, muss der SQL Browser auf dem Server laufen, damit die Kisten untereinander den Zielport auskaspern können. Blöde, dass sogar MS selbst diesen SQL Browser als Sicherheitslücke bezeichnet - was macht man also?

Ganz einfach, man gibt den Port einfach in der DB-URL an, also typischerweise so:

hostname.domain.de:4711\InstanzName

Nein, natürlich nicht. Das wäre ja die Standardnotation, und bekanntlich mag Microsoft keine fremden Standards. Den abweichenden Port muss man deshalb mit einem KOMMA trennen, nicht mit einem Doppelpunkt… Der korrekte Hostname sähe also so aus:

hostname.domain.de,4711\InstanzName

Ja, leckt mich doch… Bis ich das raus hatte, hatte ich mal wieder eine ganze Reihe neuer grauer Haare. Die Rechnung für das Haarfärbemittel schicke ich auf jeden Fall an Microsoft, Abteilung “Anwenderverwirrung”.

Nächste Seite »

Entries and comments feeds. Valid XHTML and CSS. ^Top^

xml :RSS2-Feed