DNN PopUp Kalender / Fehler mit IE 7.0

Nachdem ich nun mein neues Notebook habe und mir ein komplett neues System aufsetzen musste - bekam ich plötzlich einen ganz seltsamen Fehler bei DotNetNuke und der Verwendung des PopUp Kalenders. Hier wurde das Datum wahlweise mal im richtigen und dann mal wieder im falschen Format zurück gegeben.Nur zur Erklärung: Das richtige Datumsformat ist für mich das deutsche (weil deutsche Anwendung) also dd.MM.yyyy aber ich bekam immer wieder folgendes m/d/yyyy. Zunächst dachte ich daran, das die es ein Konfigurationsfehler sei bzw. ich mir irgendein englisches Servicepack installiert habe (ja, ich geben zu: Ich hab ein deutsches Betriebssystem - sorry). Aber auch nach erneuter Installation des DotNet Frameworks, war keine Besserung in sicht :( Dann hab ich ein wenig im Forum von DNN gesucht in bin da auch recht schnell auf eine Lösung gekommen: Wer ein ähnliches Problem hat sollte ganz einfach in der Javascript-Datei "~/js/PopupCalendar.js" folgende Zeile verändern: anchorVal = "<A HREF=\"javascript:window.opener.calPopupSetDate(window.opener.popCalDstFld,'" + (thisMonth+1) + "/" + monthDate + "/" + thisYear + "');window.opener.closeCalPopup()\">"; zu anchorVal = "<A HREF=\" window.opener.calPopupSetDate(window.opener.popCalDstFld,'" + constructDate(monthDate,thisMonth+1,thisYear) + "');window.opener.closeCalPopup()\">"; Durch die Verwendung von "constructDate" wird sichergestellt, dass auch auf jeden Fall das richtige Format zurück geliefert wird, wenn ein Anwender im DotNetNuke Popup Kalender darauf klickt! In der Version 4.4.0 ist dieser Fehler laut Gemini-Report behoben ... für alle anderen installierten Version sollten diese Fix manuell vornehmen!  

Anzahl der Zeichen eines Strings per Validatorcontrol checken

Mit dem RangeValidator von ASP.Net ist es nicht so ohne weiteres möglich die Länge einer Eingabe (Strings) zu überprüfen. Durch die Verwendung eines regulären Ausdrucks kann man aber trotzdem diese Überprüfung durchführen. So sieht das dann im Code aus:<asp:RegularExpressionValidator ID="checklength" runat="server" ErrorMessage="Error: invalid length" ValidationExpression="^\w{1,10}$" /> Der Ausdruck "\~w(1,10)$" besagt das die Eingabe maximal 20 Zeichen lang sei darf. Natürlich kann man auch die Eigenschaft MaxLength des Controls Textbox nutzen, allerdings kann man damit keinen Minimumwert überprüfen.

Sicherheitsanalyse von WCF (Windows Communication Foundation) durch das BSI und newtelligence

Wie ich schon in meinem Beitrag über den NRW Sumit 06 geschrieben haben, hat Newtelligence eine Beispielanwendung für die WCF geschrieben. Diese Anwendung wurde im Auftrag des BSI (Bundesamt für Sicherheit in der Informationstechnik) entwickelt und sollte nicht nur ein praxisorientierte Beispielanwendung sondern viel mehr die sichere Nutzung der WCF-Sicherheitsfunktionen zeigen.Die Empfehlungen umfassen neben den Hinweisen zu WCF-spezifischen Architekturen, zur sicheren Installation, Authentisierung und zur Anbindung von Datenbanken oder der Fehlerbehandlung in verteilten Systemen auch auch den Quellcode der beispielhaften WCF-Anwendung. Die entwickelten Handlungsempfehlungen sowie die Beispielanwendung kann per E-Mail (security (at) bsi.bund.de) angefordert werden.

iBATIS: Ein Data Mapper framework fuer DotNet / Java

Ohne jetzt große Erfahrungen mit dem System iBATIS gemacht zu haben, kann ich sagen, dass mir die Vorgehensweise sehr gut gefällt! So um 2000 herum habe ich mit einem Kollegen eine ähnliche Datenbankzugriffskomponente entwickelt und sehr gute Erfahrungen damit gesammelt. Gerade das Auslagern der der SQL-Befehle bzw. die Abstrahierung der SQL-Befehle kann Vorteile haben. Damals haben wir dieses Konzept unter dem Aspekt der Datenbankunabhänigkeit implementiert und eine allgemeine Beschreibung in Form von XML auf die entsprechende Datenbank zur Laufzeit angepasst. Freut mich doch immer wieder wenn ich Projekte sehe, die ähnliche Methode anwenden. Mittlerweile bin ich zwar mehr der Freund vom Provider-Pattern aber der Ansatz von iBATIS kann durchaus einen Sinn ergeben! Eine weiter Diskussion erspare ich mir an dieser Stelle :) Ach so, hier gibt es noch den Link. Nur so am Rande: MySpace.com benutzt nicht nur ASP.NET 2.0 sondern auch iBATIS .. guckst Du hier!

Performanceoptimierung von DotNetNuke / DNN

Das DotNetNuke mittlerweile einen sehr großen und brauchbaren Funktionsumfang hat muss an dieser Stelle nicht weiter erwähnt werden. Bei der Implementierung alle dieser Features stand aber leider der Punkt Geschwindigkeit (Performance) nie im Mittelpunkt. Das soll nun endlich mit der kommenden Version 4.4.0 verändert werden! Durch folgende Maßnahmen soll die Geschwindigkeit verbessert werden: (1) Code Refactoring (2) Optimierung und verbesserte Einsatz des Caching (3) Assembly Management (4) Database (5) Compression (6) Page State Wer genauer wissen möchte was sich hinter den einzelnen Punkten versteckt kann das im Blogeintrag von Charles Nurse hier nachlesen. Die Ergebnisse der ersten Tests kann man hier nachlesen! Auf die Version 4.4.0 dürfen wir also alle sehr gespannt sein :)

Microsofts Ajax (Atlas) steht als RC zum Download bereit

Auch wenn ich bis jetzt das Thema Ajax hier wohl mehr stiefmütterlich behandelt habe, habe ich dieses immer im Fokus. Das von Microsoft entwickelte Ajax-Framework steht nun als RC zur Verfügung und kann hier runtergeladen weden. Jetzt kann man also über einen ernsthaften Einsatz nachdenken und ich werde das Thema nun endlich angehen.

DotNetNuke und entfernen von Profilproperties

Für einen Bekannten habe ich eine DotNetNukeinstallation (4.3.6) aufgesetzt und ihn ein wenig damit spielen lassen. Dabei hat er sich auch ein wenig mit den Profileigenschaften eines Users beschäftigt und diese Modifiziert. Das finde ich doch schon sehr gut und hätte ich mir eigentlich von Anfang an gewünscht .. Da sein Portal lediglich den deutschsprachigen Raum anspricht hat er einfach die Eigenschaft TimeZone gelöscht. Leider findet das DotNetNuke gar nicht witzig und normale Anwender konnten sich ab diesem Zeitpunkt nicht mehr anmelden. Einige Komponenten benötigen diese Profileigenschaft und es kracht ganz schön böse, falls diese nicht im Profil enthalten ist. Also: Vorsicht beim Löschen von Profileigenschaften - lieber ausblenden:)

Visual Studio 2003 und Windows Vista / Mein Tag

Schon länger wollte ich mein Notebook mal mit Windows Vista ausstatten doch irgendwie fehlte mir die Zeit. Nachdem dann letzte Nacht mein Notebook softwaretechnisch zu Bode ging, habe ich mich direkt entschlossen Windows Vista zu installieren. Im guten Glauben gesagt, getan und dachte alles wäre gut! Doch weit gefehlt... der erste Eindruck ist echt gut (ein wenig gewöhnungsbedürftig aber ich würde sagen: nicht schlecht).... Dann habe ich meine Visual Studio 2003 installiert,  was kein Problem war, nur das Starten war mir nicht vergönnt. Was soll das denn ????  Eigentlich bin ich davon ausgegangen, dass Microsoft die meist verwendeten Anwendungen (Visual Studio 2003 / MS-SQL Server 2000, usw) unterstützt ... diese Hoffnung ist aber gerade wie eine Seifenblase geplatzt! Normalerweise bin ich nicht contra-microsoft aber das ist ja wohl komplett am Thema vorbei! Sogar Visual Studio 2005 läuft nur nach einem ServicePack - und selbst dann gibt es wohl noch ein paar Probleme (mehr als unter XP). Super, toller Start in ein neues Betriebssystemzeitalter.... jetzt geht es wieder zum good, old Windowx XP - bis all meine Anwendung und Tools unter .NET 2.0 (3.0) laufen. An dieser Stelle sage ich : Vielen Dank für nichts! P.S.: Vielleicht hätten wir alle bei VB 6 bleiben sollen, denn das wird unter Vista supportet *mahlzeit*

DotNetNuke 3.3.6 / 4.3.6 steht zum Download bereit

Seit gestern gibt es die aktuelle Version von DotNetNuke auf der offiziellen Downloadseite zur Verfügung. Neben einigen Fehlern, Sicherheitslücken und Peformanceoptimierung wurde auch mal die Datensyncronisation verbessert. Genaue Informationen gibt es wie immer hier. Die Deutsche Übersetzung findet man bei http://www.deutschnetnuke.de/

Endlich neuer IE / .NET Framework 3.0 ready to download

Vermutlich ist es kein großes Geheimnis mehr aber trotzdem verbreite ich die Neuigkeit auch mal: Microsoft hat den Internet Explorer 7.0 zum Download frei gegeben. Der neue IE ist nicht nur ein Featureupdate sondern laut Aussage von Microsoft ein von Grund auf komplettes Redesign.  Besonders die Punkte Bedienbarkeit und Sicherheit standen im Vordergrund der Entwicklung. Hier gibt es den neuen Browser:Download   Endlich ist es da: Das .NET Framework 3.0 inkl. der passenden SDK's und den passenden Erweiterungen für das Visualstudio 2005. Ein paar Informationen zum .NET Framework und der Installation gibt es hier. Hier die Downloadlinks für die einzelnen Downloads: net 3.0 runtime -> http://www.microsoft.com/downloads/details.aspx?FamilyId=10CC340B-F857-4A14-83F5-25634C3BF043&displaylang=en sdk -> http://www.microsoft.com/downloads/info.aspx?na=40&p=3&SrcDisplayLang=en&SrcCategoryId=&SrcFamilyId=10CC340B-F857-4A14-83F5-25634C3BF043&u=http%3a%2f%2fgo.microsoft.com%2ffwlink%2f%3fLinkId%3d74726 visual studio extensions for WF -> http://www.microsoft.com/downloads/info.aspx?na=40&p=4&SrcDisplayLang=en&SrcCategoryId=&SrcFamilyId=10CC340B-F857-4A14-83F5-25634C3BF043&u=http%3a%2f%2fgo.microsoft.com%2ffwlink%2f%3fLinkId%3d74727 visual studio extensions for WCF, WPF (noch CTP !1) -> http://www.microsoft.com/downloads/info.aspx?na=40&p=2&SrcDisplayLang=en&SrcCategoryId=&SrcFamilyId=10CC340B-F857-4A14-83F5-25634C3BF043&u=http%3a%2f%2fgo.microsoft.com%2ffwlink%2f%3fLinkId%3d74725

SqlException: Konflikt der Sortierung fur die equal to-Operation

"Konflikt der Sortierung für die equal to-Operation kann nicht aufgeloest werden." Was will der von mir???? ;-) Nach dem Umzug einer DotNetNuke - Site auf eine anderen Server bekam ich plötzlich im Log Viewer die Fehlermedlung DotNetNuke.Services.Exceptions.ModuleLoadException: Konflikt der Sortierung für die equal to-Operation kann nicht aufgelöst werden. ---> System.Data.SqlClient.SqlException: Konflikt der Sortierung für die equal to-Operation kann nicht aufgelöst werden. at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream) at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior) at Microsoft.ApplicationBlocks.Data.SqlHelper.ExecuteReader(SqlConnection connection, SqlTransaction transaction, CommandType commandType, String commandText, SqlParameter[] commandParameters, SqlConnectionOwnership connectionOwnership) at Microsoft.ApplicationBlocks.Data.SqlHelper.ExecuteReader(String connectionString, CommandType commandType, String commandText, SqlParameter[] commandParameters) at Microsoft.ApplicationBlocks.Data.SqlHelper.ExecuteReader(String connectionString, String spName, Object[] parameterValues) at DotNetNuke.Services.Log.EventLog.DBLoggingProvider.Data.SqlDataProvider.GetLog(Int32 PageSize, Int32 PageIndex) at DotNetNuke.Services.Log.EventLog.DBLoggingProvider.DBLoggingProvider.GetLog(Int32 PageSize, Int32 PageIndex, Int32& TotalRecords) at DotNetNuke.Services.Log.EventLog.LogController.GetLog(Int32 PageSize, Int32 PageIndex, Int32& TotalRecords) at DotNetNuke.Modules.Admin.Log.LogViewer.BindData() at DotNetNuke.Modules.Admin.Log.LogViewer.Page_Load(Object sender, EventArgs e) --- Ende der internen Ausnahmestapelüberwachung --- Nach ein wenig Forschung war die Lösung schnell gefunden. Die SP muss ein wenig verändert werden, damit der Fehler nicht mehr auftritt. Die Stored Procedure "GetEventLog" muss von     CREATE TABLE #PageIndex     (        IndexID        int IDENTITY (1, 1) NOT NULL,        LogGUID    varchar(36)     ) auf    CREATE TABLE #PageIndex     (        IndexID        int IDENTITY (1, 1) NOT NULL,        LogGUID    varchar(36) COLLATE database_default     ) geändert werden. Dann ist wieder alles im Lot!

Ein CSS Menu fuer DotNetNuke 3.x / ASP.NET

Ich möchte jetzt hier gar keine Diskussion lostretten die über das Solpart-Menu herzieht. Fakt ist auf jeden Fall: Das Anpassen des Menü via CSS kann einem wirklich graue Haare bereiten Die Größe des Menü (bezogen auf die HTML Datei) ist sehr groß Die Suchmaschinenfreundlichkeit ist fast nicht gegeben Aus diesen Gründen habe ich ein kleines niedliches CSS-Menu gebaut das mit HTML Aufzählungen, CSS und wirklichen Links (!) arbeitet. Es ist noch kein perfektes Menu aber für meine derzeitigen Einsatzbereich wirklich ausreichend. Ein paar Erweiterungen und Optimierungen müssen da in Zukunft noch implementiert werden. Aber wie bei jedem Projekt gibt es auch hier mal eine Version 1.0. Da ich sehr gerne und eigentlich fast alle DotNetNuke Module in C# entwickel ist auch dieses Modul ist c# geschrieben. Die Einbindung in ein Skin ist relativ simple! Einfach folgendes in das Skin aufnehmen: <%@ Register TagPrefix="gwc" Namespace="GaliNeo.Modules.Framework" Assembly="GaliNeoMenu" %> und dann an der Stelle wo das Menü erscheinen soll: <gwc:GaliNeoMenu runat="server" id="TestMenu"></gwc:GaliNeoMenu> Natürlich läst sich damit so ziemlich jede Menü darstellen das sich mit den HTML Tags UL und CSS formatieren läßt. Hier ist es zunächst ein klassisches Drop-Down Menü....Hier der Download des Source-Codes:GaliNeo.DotNetNukeMenu (1.0.0.0).zip (7,96 KB)

Ein DotNetNuke Skin ohne Table-Tags rein auf DIV/CSS basierend

Ja ja ... i know. Wochenlang habe ich mein Blog vernachläßigt und jetzt jagt ein Beitrag den anderen ;-) Aber irgendwie habe ich mir heute ein wenig Zeit genommen um durch das www zu surfen. Hier ist noch eine Seite, die man keinen DNN Skin Designe vorenthalten sollte: http://www.xhtmlskins.com/ Auf dieser Seite geht es um die Erstellung von DotNetNuke Skins ohne Tabellen. Total sexy :)

Generierung von Barcode on the fly

Hier ein paar Blogbeträge zum Thema Barcodes und wie man diese unter DotNet erzeugen kann ohne 3rd-party Komponenten:Code 39 barcodes in C#ISBN to EAN-13 (C#)An ASP.NET .ashx HTTP handler for Code 39 barcode generation

Posting Form Data with c#

Letztes Jahr habe ich folgenden Blog-Eintrag verfasst. Darum ging es, wie man ein HTML-Form innerhalb von .NET simulieren kann. Jetzt ist mir gerade aufgefallen, dass der Sourcecode der ausführenden Klasse dafür fehlt. Natürlich ist das der spannende und entscheidene Part für das Post der HTML-Form. Das möchte ich natürlich nicht so stehen lassen und hier kommt der fehlende Part! using System;using System.Net;using System.Web;using System.IO;using System.Text ;namespace GaliNeo.Framework{    public class RemotePost    {        #region Private Members        private System.Collections.Specialized.NameValueCollection Inputs = null ;        private string _sUrl = "" ;        #endregion                public RemotePost()        {            //            // TODO: Fügen Sie hier die Konstruktorlogik hinzu            //            Inputs = new System.Collections.Specialized.NameValueCollection() ;        }        #region Public Methods        public void Add(string sName, double dValue)        {            this.Add(sName, dValue.ToString()) ;        }        public void Add(string sName,int iValue)        {            this.Add(sName, iValue.ToString() ) ;        }                public void Add(string sName,string sValue)        {            Inputs.Add(sName,sValue) ;        }        public string Url        {            get { return _sUrl ; }            set { _sUrl = value ; }        }                public string Send()        {            string sPostData = "" ;            Uri sUri = new Uri(this.Url) ;                    //Wird für evtl. SSL - Verbindungen benötigt            System.Net.ServicePointManager.CertificatePolicy = new trustedCertificatePolicy();            HttpWebRequest request = (HttpWebRequest) WebRequest.Create(sUri);            //User-Agent            request.UserAgent = "GaliNeo OnlineStore" ;            request.Method = "POST";            request.ContentType = "application/x-www-form-urlencoded";                        //Zusammensetzen der Daten für die Übermittlung            sPostData = GetContentToPost() ;                        request.ContentLength = sPostData.Length ;                        Stream writeStream = request.GetRequestStream();                        //Encoding im UTF-8 Format um kompatible zu sein            //UTF8Encoding encoding = new UTF8Encoding(); //UFT-8 funktioniert unter ASP.NET nicht :(            System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding() ;                        byte[] bytes = encoding.GetBytes(sPostData);            writeStream.Write(bytes, 0, bytes.Length);            writeStream.Close();            HttpWebResponse response = (HttpWebResponse) request.GetResponse();                        //Überprüft den HTTP-Statuscode            if (response.StatusCode != HttpStatusCode.OK)            {                return "N,-1, HTTPStatuscode:" +response.StatusCode.ToString() ;            }            Stream responseStream = response.GetResponseStream();            StreamReader readStream = new StreamReader (responseStream, Encoding.UTF8);            return readStream.ReadToEnd();                 }        public string GetContentToPost()        {            string sReturn = "" ;            for(int i=0; i< Inputs.Keys.Count;i++)            {                if (sReturn.Length == 0)                {                    sReturn = Inputs.Keys[i] + "=" + Inputs[Inputs.Keys[i]] ;                }                else                {                    sReturn += "&" + Inputs.Keys[i] + "=" + Inputs[Inputs.Keys[i]] ;                }//    if (sPostData.Length == 0)            }//for(int i=0; i< Inputs.Keys.Count;i++)            return sReturn ;        }        #endregion    }}

HTML-Mails mit Bildern unter .Net erzeugen und versenden

Wer schon mal HTML-E-Mails verschickt hat kommt wohl kaum um das Problem herum, dass man auch Bilder dieser E-Mail hinzufügen möchte. Der erste und einfachste Weg ist, diese einfach auf einem Server abzulegen und dann auf diesen zu verweisen. Was ist aber wenn der Anwender keine Internetverbindung hat, der Server bzw. das Bild nicht mehr erreichbar ist? Dann sehen diese E-Mails meist sehr unschön aus. Gerade habe ich einen netten Artikel gefunden, der Beschreibt, wie man ein Bild als E-Mailanhang mitschickt und wie man die Verbindung zwischen Bild und Anhang herstellen kann. Hier einmal die Kurzfassung: <IMG height=68 src="cid:015024716@24012006-255A" width=140 align=top border=0> Die Sourceanweisung mit dem Wert "cid:015024716@24012006-255A" ist hier das interessante. Die RFC-Spezi. besagt das jeder E-Mailanhang eine eindeutige Id bekommt. Der benötigte Sourcecode zum Versand der E-Mail: 'Zu erst mal die Imports die benötigt werdenImports System.Net.MailImports System.Net.MimePublic Sub SendMail()Dim objMail As New MailMessageDim objSender As New MailAddress("absender@server.de")Dim objSmtpClient As New SmtpClient("smtp.server.de:8881")Dim objEmpfaenger As New MailAddress("empfaenger@server.de")objMail.To.Add(objEmpfaenger)objMail.From = objSenderobjMail.Subject = "Betreff der Mail"'Damit das ganze auch funktioniert muss man angeben,'das man die Mail im HTML-Format verschicken möchteobjMail.IsBodyHtml = True'So jetzt zum spannenden Teil, das Bild als Attachment anfügenDim objFootImage As New Attachment(Server.MapPath("LOGO.gif"), _MediaTypeNames.Image.Gif)objFootImage.ContentId = "01"objFootImage.ContentDisposition.Inline = TrueobjFootImage.TransferEncoding = TransferEncoding.Base64objMail.Attachments.Add(objFootImage)'Und so wird es anschließend verwendetobjMail.Body = "<img src=""cid:01"" border=0 height=68 width=140>"'Jetzt nurnoch die Mail verschicken und fertigobjSmtpClient.Send(objMail)End Sub Eine ausführliche Erklärung des ganzen gibt es auf dieser Seite

Cool (und kostenlos) Threading .NET 2.0 E-Book

Ich habe gerade eine coole Seite über Threading in .NET 2.0 gefunden, die auch viele Beispiele in C# bietet. http://www.albahari.com/threading/ Zudem gibt es (derzeit links unten) einen PDF, das nun auf meinem "muss ich unbedingt mal komplett Lesen" Stappel liegt ;-)

Phalanger 2.0 oder wie aus php msil code erzeugt....

Auf CodePlex wird von Microsoft ein Projekt mit dem Namen Phalanger gehostet. Phalager soll einen PHP-Compiler anzubieten, der es ermöglicht, PHP-Skripts ohne Modifikation auf .NET zu kompilieren. Dabei erzeugt der Compilier aus PHP-Skipts MSIL (Microsoft Intermediate Language). Ausprobiert habe ich es selber noch nicht, allerdings finde ich den Ansatz sehr interessant! Hier der direkte Link zum Projekt auf CodePlex

NRW06 Summit am 27.08.2006 .... ich war dabei

Letzte Woche Donnerstag war ich auf dem diesjährigen NRW Sumit veranstaltet von JustCommunity e.V.. Es war eine wirklich klasse Veranstaltung, auf der man eine ganze Menge geboten bekommen hat. Es gab sehr viele interessante Vorträge und die eine besser Auswahl an Dozenten kann man wohl kaum treffen. Nur schade war das Christian Weyer absagen musste und damit der Vortrag über die WCF ausgefallen ist. Es war eine gute Gelegenheit sich mit Kollegen auszutauschen und ein paar Anregungen mitzunehmen. Es wurden aber nicht nur Vorträge zum Thema "Mircosoft" angeboten auch die PHP- und Linuxwelt waren mit Referenten vertreten. Also für jeden Geschmack gab es das passende Angebot. Besonders gespant war ich auf den letzten Vortrag über "Indigo & SOA in the real World", in dem Daniel Fisher und Michael "Security" Willers aus einem Projekt für das BSI berichteten. Ziel war es wohl Indigo (WCF) auf Sicherheitsmerkmale zu überprüfen. Nun und auf der ersten Folie stand dann plötzlich Proseware :) ... die Anwendung lebt also doch noch. Ich bin leider nicht dazu gekommen nachzufragen ob die Anwendung komplett neugeschrieben wurde oder aber ob es die Basis von Clemens ist. Leider hat Proseware ja nie eine Freigabe von Microsoft erhalten :( aber diese Version wird wohl zum Ende des Jahres erhältlich sein ... ich denke auf diese Anwendung darf man sich sehr freuen! Leider konnte ich nicht alle Vorträge besuchen da immer vier Tracks parallel liefen und das von 10:00Uhr Uhr bis Abends 20:30Uhr (!). Aufgrund der Länge und des doch sehr warmen Wetters waren wohl alle am Abend ziemlich platt und müde, was bei der anschließende Party mit 50 Liter Freibier aber keinen größeren Schaden anrichtete. Ein großes Dankeschön geht an dieser Stelle an die beiden Hauptorganisatoren Daniel Fisher und Stephan Oetzel ... ich freue mich sehr auf den NRW Summit 07 :)    

DotNetNuke 3.3.3 Final Release

Die letzten Monate war es um DotNetNuke ja doch recht ruhig geworden. Mittlerweile kommt aber wieder Leben in den Releasezyklus :) Vor wenigen Tagen wurde die Version 3.3.3 veröffentlich, die als Final Release bezeichnet wird. Hier ist ein Auszug aus den Änderungen (die Orginalfassung findet man unter dotnenuke.com): Membership ManagementCAPTCHA - eine bekannte Technologie, die mehr Sicherheit bei der Anmeldung verspricht. In einem Bild werden Zahlen und oder Buchstaben angezeigt, die der Benutzer bei der Anmeldung eingegben muss. Durch die Darstellung als Bild es es dann nicht mehr so ohne weiteres möglich eine brute force Attacke durchzuführen.Login Redirect - Nach der Anmeldung kann man die User zu einer definierten Seite weiterleitenPassword Generation - Als Administrator kann man nun automatisier ein Passwort für einen Anwender verwegeben.Public Registration - Beim diesem Anmeldetyp wird nun auch eine E-Mail an den Benutzer geschickt - damit kann man den Mißbrauch von Daten vorbeugen.Profile Change Notification - Anwender werde über Änderungen in Ihrem Profil per E-Mail informiert.User Account Creation Notification - Wenn ein Administrator ein Benutzerkonto anlegt, dann können nun die Daten an den entsprechenden Benutzer verschickt werden.Force Profile Update - Der Benutzer kann dazu "gezwungen" werden, nach einem Login sein Profil u verändern.Force Password Change - Bietet die Möglichkeit das der Anwender sein Passwort erneuern muss.Password Complexity - Der Aufbau und die Komplexität der Passwörter lassen sich definieren.Preserve Login Parameters - Wenn ein Benutzer zur Anmeldung geleitet wird, dann wird nun die Herkunftsurl ausgelesen und gespeichert, damit anschließend dahin zurück geleitet werden kann.Automated Verified Registration URL - Der Benutzer bekommt per E-Mail eine URL und sobald er diese aufruft wird das Konto freigeschaltet.User Lockout Notification - Wen ein Benutzerkonto gesperrt wird (durch die falsche Eingabe vom Passwort), bekommt der Administrator darüber eine E-Mail. Role ManagementEffective Date - Ab wann soll eine Rolle gültig sein.Role Groups - Rollen können nun zu Gruppen zusammengefasst werden.UsabilityRich Text Editor - Nun können Verlinkungen zu Seiten im Poral direkt angelegt werden.Newsletter - Die Abenderadresse kann definiert werden. FrameworkAccessDeniedURL - Hierfür kan nu eine Seite definiert werden.PerformanceModule Settings - Seiten und Moduleinstellungen werden nun gecached :). Module Definitions/InstallerModule Definitions - Die Moduledefinition kann nun direkt durch eine *.dnn Datei angelegt werden, ohne eine Zip-Datei hochzuladen.OtherSMTP Settings - Die Portnumber kann angepasst werdenNew Modules - Store, Forums, Blogs, Gallery sind nun Bestandteil der aktuellen Version.

Es ist so weit DNN 3.3.0 steht zum Download bereit

In der Mittagspause noch mit einem Bekannte über DNN diskutiert und das es in der letzten Zeit doch recht still geworden ist .... musste ich gerade feststellen das das Core-Team von DotNetNuke heute das neue Release 3.3.0 zum Download frei gegeben hat. Leider komme ich in den nächsten nicht dazu diese Version zu testen aber in den Foren gibt es dazu bestimmt jede Menge zu lesen - oder auch nicht, wenn alles ohne Probleme verläuft.Es bleibt aber dabei: Zuerst die Installationsanweisung von DotNetNuke lesen und auf jeden Fall eine komplette Datensicherung von Datenbank und Dateisystem durchführen. Die deutsche Übersetzung gibt es wie immer unter Sebastian Leupold.

DotMSN - Zugriff auf den MSN Messanger Service

Habe gerade eine OpenSource Library/Komponente entdeckt, die den Zugrif auf die Messanagerplattform von MSN ermöglicht. In manchen Anwendungsszenarien macht es durchaus Sinn, einen Messanger als Kommunikationsweg einzusetzen z.B. bei kritischen Fehlermeldungen, Meldungen das ein asyncroner langer Prozess beendet ist, usw. Wer dafür den MSN Messanger nutzen möchte aber die Anbindung nicht selber programmieren mag, sollte sich folgende Library anschauen: http://www.xihsolutions.net/dotmsn/index.html   

Dockpanel fuer WinForms

Gerade habe ich eine doch sehr cooles .NET Opensource Projekt auf sourcefroge.net gefunden. Dabei handelt es sich um eine in C# geschriebene Komponenten die eine Dockingfunktionalität bietet. Vorlage war dabei wohl das Visual Studio.net 2005. Für so manche .NET Windows Anwendung dürfte das eine wirkliche Bereichung sein. Hier geht es zu der Komponente: Link

testing regular expressions online

Wer mal "eben" ein Regex-Pattern erstellen möchte und dieses auch direkt testen will, kann ein kleines Online-Tool dafür nutzen. Hier der Link

Timezones in DotNet: GMT in PST (Pacific Standard Time) konvertieren

Ich kann es ja kaum glauben aber bei dem mächtigen Framework von .Net wird es echt kompliziert eine DateTime Wert von GMT in PST zu konvertieren. Habe gerade ein paar lustige Stunden damit verbraucht eine dieses einigermaßen sauber zu implementieren und hier meine Lösung: Basis für meine Lösung ist eine Klasse von Clemens Vasters und seiner Blogengine dasblog.net. Dort gibt es im Projekt "newtelligence.DasBlog.Util.csproj" die Klasse "TimeZones.cs". Die nötigen Informationen für eine Konvertierung wird hier allerdings in einer XML Datei gespeichert. Da ich derzeit allerdings nur eine konvertierung nach PST brauch habe ich die XML Datei ignoriert und setze die Daten manuell in einer Klasse.     /// <summary>    /// Liefert verschiedne Zeiten auf der Welt zurücl    /// </summary>    public class TimeZoneConverter    {        /// <summary>        /// (GMT-08:00) Pacific Time (US &amp; Canada); Tijuana        /// Pacific Daylight Time        /// </summary>        /// <returns>DateTime of Pacific Daylight Time</returns>        public static DateTime GetCurrentPST()        {            return DateTime2PST(DateTime.Now) ;        }        /// <summary>        /// (GMT-08:00) Pacific Time (US &amp; Canada); Tijuana        /// Pacific Daylight Time        /// </summary>        /// <returns>DateTime of Pacific Daylight Time</returns>        public static DateTime DateTime2PST(DateTime dtDate)        {            WindowsTZI pstTZI = new WindowsTZI();            pstTZI.bias = 480;            pstTZI.daylightBias = -60;            pstTZI.standardBias = 0;                        WindowsSystemTime standardDate = new WindowsSystemTime();            standardDate.year = 0;            standardDate.month = 10;            standardDate.day = 5;            standardDate.dayOfWeek = 0;            standardDate.hour = 2;            standardDate.minute = 0;            standardDate.second = 0;            standardDate.milliseconds = 0;            WindowsSystemTime daylightDate = new WindowsSystemTime();            daylightDate.year = 0;            daylightDate.month = 4;            daylightDate.day = 1;            daylightDate.dayOfWeek = 0;            daylightDate.hour = 2;            daylightDate.minute = 0;            daylightDate.second = 0;            daylightDate.milliseconds = 0;            pstTZI.standardDate = standardDate;            pstTZI.daylightDate = daylightDate;                                    WindowsTimeZone tz = new WindowsTimeZone();            tz.WinTZI = pstTZI;                        return tz.ToLocalTime ( dtDate.ToUniversalTime() ) ;        }        } Wer das ganze etwas dynamischer haben möchte schaut sich am beste die Klasse vom Clemens an ... Ich brauchte diese Funktion für die Google-Adwords-API, diese erwatet nämlich das Datum im PST Format.