CSS und Sprites. Fast so gut wie Javascript und Colas. Haha.
Gregor Ottmann | April 29, 2009 on 8:47 am | In CSS, Know-How | No CommentsIch gestehe: Als mehr oder weniger verbohrter Servercodierer, der sich generell so weit wie möglich von allem, was nach Frontend aussieht, entfernt, habe ich noch nie etwas von “CSS Sprites” gehört. Hätte man mich vor 10 Minuten auf dieses Thema angesprochen, hätte ich vermutlich gesagt, dass “Counterstrike:Source” keine Sprites, sondern 3D-Modelle verwendet. Oder ich hätte desinteressiert geguckt und darüber nachgedacht, welche DVD ich heute Abend anschaue. Ich hätte das aber immerhin mit einem “aha” oder “jaja” garniert, man ist ja nicht völlig unhöflich.
Dank einer kleinen internen Rundmail, in der PRogalinski einen Artikel mit einer Erklärung zu CSS-Sprites und Links auf so ziemlich jede relevante Page empfohlen hat, weiß ich jetzt aber mehr. Genau genommen sogar mehr, als ich jemals über das Thema wissen wollte. Ich bin gerade dabei, hektisch “aha” und “jaja” zu sagen und dabei eine Taktik zu entwickeln, wie ich dieses Wissen wieder aus dem Kopf bekomme - wenn sich rumspricht, dass ich den Artikel gelesen habe, gelte ich bestimmt bei irgendwem als Experte für CSS-Sprit, und wo das hinführen kann… Nein, das will ich lieber nicht wissen.
Stored Procedures als Webservices publizieren mit SQL Server 2005
Gregor Ottmann | Februar 23, 2009 on 11:23 am | In .Net, Datenbanken, Know-How | No CommentsWow, mein letzter Post ist ja eeeewig her - ich sollte echt weniger arbeiten, das hält einen nur von den wirklich wichtigen Dingen im Leben ab, d.h. vom Lesen fremder und Verfassen eigener Blogposts. Sobald ich es geschafft habe, meinen Arbeitgeber von dieser Philosophie zu überzeugen, kriegt Ihr wieder mehr zu lesen, ich verspreche es!
Nun, bis dahin lasse ich die Informationen tröpfeln, und das heutige Tröpfchen sei ein schön knapper Hinweis darauf, wie man Stored Procedures in MS SQL 2005 als Webservices publiziert. Das geht erfreulich einfach, braucht nicht mal einen IIS und dürfte die Notwendigkeit für so manche Webapplikation dahin schubsen, wo kein Coder jemals hinsieht - und das, meine Freunde, schätze ich sehr. Fast so sehr wie die Gelegentheit, mal wieder zu bloggen.
Kleiner Nachtrag: Man kann auch relativ einfach Webservices aus gestörten Prozeduren heraus aufrufen.
Java verteilt mit Kilim schnelle Nachrichten
Gregor Ottmann | Juni 27, 2008 on 9:53 am | In Know-How, Tools | No CommentsKennt Ihr dieses komische Gefühl, das einem beim Lesen eines Papers oder Verfolgen eines Vortrags überfällt? Dieses ungeile Gefühl, dass so ungefähr jeder Softwaremuckel da draußen so viel krasser als man selbst drauf ist, dass einem davon komisch wird? Nein? Dann schaut Euch mal den Vortrag über Message Passing mit Java und der Library “Kilim” an, den MHenze mir empfohlen hat.
OK, ich kriege nicht wirklich Komplexe, weil ich immerhin in der Lage bin, sowohl das Problem als auch den Lösungsansatz zu begreifen - nur komme ich mir irgendwie minderwertig vor, weil ich noch nie ein Problem hatte, das so einen wunderbar abstrakten, abgehobenen und irgendwie erregenden Lösungsweg erfordert hätte. Es sieht so aus, als müsste ich mir dringend ein paar ausgefallene Probleme, einen abgefahrenen Akzent und einen Satz wirklich feiner Ideen besorgen, um mich selbst wieder richtig ernst nehmen zu können.
Ach ja, einen direkten Link zur Projektpage von Kilim kriegt Ihr natürlich auch noch. Ich bin ja nicht so.
Location Based Services mit ALOQA
Gregor Ottmann | Mai 13, 2008 on 10:02 am | In Tools | No CommentsWir 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 CommentsJuhuu, 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 CommentsIch 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 CommentsDu 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 CommentsEigentlich 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 CommentsEine 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 CommentDer 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.
Entries and comments feeds.
Valid XHTML and CSS. ^Top^
:RSS2-Feed