Dotlab – Development and other evil things


Opera Unite: oder, der Feind rückt näher

Veröffentlicht in Allgemein von dotlab am Juni 17, 2009
Tags: , , ,

Nachdem der Opera Browser auf allen Plattformen Marktanteile an die jeweiligen Platzhirsche abgeben musste, melden sich die Entwickler nun mit einer frischen Idee zurück. Die neue Software Opera Unite (noch im Entwicklungsstadium) bietet einen integrierten Webserver im Browser. “Webserver auf dem eigenen Rechner” tönt für uns Entwickler nicht so spektakulär, aber Opera Unite geht ein ganzes Stück weiter..

Integrierte Applikationen ermöglichen es, diverse Dienste auf dem eigenen Rechner auszuführen. So kann ich im Büro die Musik ab dem heimischen Rechner hören, Freunde können sich (freigegebene) Files direkt ab meiner Kiste ziehen, Fotos können ohne Umweg über Flickr oder ähnliche Dienste präsentiert werden, ich kann eine Website ohne Know-how selber hosten, an einem “Fridge” können Freunde Nachrichten hinterlassen und es gibt sogar eine Lounge mit Chatfunktion. Wow, eine ganze Menge Funktionalität!

Das tönt alles sehr lecker. Allerdings funktioniert das ganze nur mit dem Opera Browser und irgendwie habe ich da doch ein paar Sicherheitsbedenken. Bei allfälligen Exploits (und die wird es garantiert geben..) ist die letzte Hürde zu den privaten Daten sehr schnell gefallen. Wenn man bedenkt, wieviele User bereits jetzt massiv überfordert sind (WLAN Schutz, Facebook Privatsphäreneinstellungen, Konfiguration von Firewalls/Routern et cetera) tut sich da ein ganz neues Tummelfeld auf..

Dass der eigene Rechner die ganze Zeit laufen muss und die Bandbreite mehr oder weniger unnötig belastet wird ist ein weiterer Nachteil. Aber immerhin wird dann der ganze Schrott, der bislang auf Facebook und Flickr landete, in einem privateren Rahmen bleiben.

:-)

Lytebox: Lyteframe ohne Frameborder

Veröffentlicht in Allgemein von dotlab am Juni 15, 2009
Tags: , ,

Beim Einsatz von Lytebox in einem Asp.net Projekt trat ein offensichtlich bekanntes Problem mit dem Lyteframe auf. Das Einbinden von Lytebox an und für sich war kein Problem, das Entfernen des hässlichen iFrame Borders hingegen schon. Offensichtlich ist das Problem zwar bekannt und Tipps zur Lösung gibt es en masse – nur haben bei mir die ersten 30 Versuche nicht gefruchtet..

Hier aber eine mögliche Lösung, die zumindest auf IE7 und FF3 prima funktioniert.


var objIframe = this.doc.createElement("iframe");
objIframe.setAttribute('id','lbIframe');
objIframe.setAttribute('name','lbIframe');
objIframe.style.display = 'none';
objIframeContainer.appendChild(objIframe);

Diesen Abschnitt in Lytebox.js suchen und mit dem folgenden ersetzen:


var objIframe = this.doc.createElement("iframe");
objIframe.setAttribute('id','lbIframe');
objIframe.setAttribute('name','lbIframe');
objIframe.style.display = 'none';
//add the following line to remove the frameborder
objIframe.setAttribute('frameBorder','0');
objIframeContainer.appendChild(objIframe);

Destruktoren in C#

Veröffentlicht in .net Stuff von dotlab am Mai 20, 2009
Tags: , ,

Beim Umschreiben einer DataAccessHelper Klasse von VB nach C# bin ich auf das folgende Problem gestossen: in VB ist es ohne weiteres möglich, die Finalize() Methode zu überschreiben, wie in folgendem Beispiel:


' Destructor
    Protected Overrides Sub Finalize()
        Dispose()
    End Sub

In C# ist dies so nicht möglich, aber es gibt eine andere elegante Methode, einen eigenen Destruktor zu erstellen:


class TestClass
{
// Dispose Method
void Dispose()
{
  //Dispose Statements
}

// Destructor
~TestClass
{
  Dispose();
}
}

Zu beachten gilt es, dass eine Klasse nur einen Destruktor besitzen darf und dieser nicht vererbt oder überladen werden kann. Ein direkter Aufruf eines Destruktors ist nicht geplant, für das gibt’s den GC (Garbage Collector).

DotNetZip Library: flache Struktur + Mac Filter

Veröffentlicht in .net Stuff von dotlab am Mai 11, 2009
Tags: , ,

Um Benutzern zu ermöglichen, mehrere Files auf einmal auf den Webserver zu übertragen, gibt es zwei Möglichkeiten: via client-side Code (Java Applet, Flash etc..) à la Facebook eine Fileauswahl zu entwickeln, oder Zip Files über das normale Upload Control zu übertragen und auf dem Server entsprechen zu behandeln. Da unsere App auch in restriktiven Umgebungen laufen muss, in denen Java Applets und Flash nicht immer gerne gesehen werden, war die Auswahl der geeigneten Methode relativ einfach.. :-)

Um die Zips auf dem Server zu verarbeiten, setzen wir die DotNetZip Library ein ( http://www.codeplex.com/DotNetZip ). Hier der Samplecode für eine Methode, die allfällige Ordnerstrukturen im Zip ignoriert und einfach alle Files in einen Folder entpackt. Mit Mac Os X gezippte Files enthalten jeweils einen ganzen Stapel an Resource Fork Files, die für uns nicht relevant sind und deshalb auch gleich gefiltert werden:


   Protected Sub Extract()
        Dim file As UploadedFile = RadUpload1.UploadedFiles(0)
        Dim targetFolder As String = Server.MapPath(RadUpload1.TargetFolder)
        Dim targetFileName As String = Path.Combine(targetFolder, file.GetNameWithoutExtension() + file.GetExtension())

        Try
            Dim zip As ZipFile = ZipFile.Read(targetFileName)
            For Each e As ZipEntry In zip
                'extract all files in a single folder, ignore existing folder structure
                Dim s As String = e.FileName
                Dim pathend As Integer = s.LastIndexOf("/") + 1
                Dim filename As String = s.Substring(pathend)
                e.FileName = filename

                'filter mac resource files
                If Not (e.FileName.StartsWith("._")) Then
                    e.Extract(targetFolder, True)
                    counterFiles = counterFiles + 1
                End If
            Next
            zip.Dispose()

        Catch ex As Exception
            Response.Write(ex.ToString)
        End Try
End Sub

SQL 2005 Tabelle in eine andere DB kopieren

Veröffentlicht in SQL Stuff von dotlab am Dezember 31, 2008

Wer nur kurz eine Tabelle von einer Datenbank in eine andere kopieren will, kann dies über das folgende SQL Statement tun:

SELECT * INTO NeueTabelle FROM AlteDB.dbo.AlteTabelle

Das coole daran ist, dass die neue Tabelle nicht manuell angelegt werden muss. Die Methode funktioniert allerdings nur, wenn sich beide DBs auf dem gleichen Server befinden!

ASP.net DefaultButton im Panel mit FF3/Safari

Veröffentlicht in .net Stuff von dotlab am Dezember 12, 2008
Tags: , , , ,

Wer auf einer ASPX Seite mehrere Controls (.ascx) laufen lässt, ist vielleicht schon auf die Problematik gestossen, dass in mehreren Controls Eingaben des Benutzers notwendig sind. Wird die Eingabe innerhalb eines Controls mit Enter bestätigt, feuert anstelle des gewünschten Click Events jedoch ein beliebiger Button auf der Seite.

Nebst der Möglichkeit, dieses Problem mit eigenem Javascript zu umgehen, existiert seit ASP.net 2.0 eine weitaus elegantere Möglichkeit: Das DefaultButton Property im Form-Tag. Hier wird einfach die ID eines Buttons innerhalb der Form eingetragen.

Bei mehreren Controls funktioniert dies jedoch nicht mehr korrekt, da mehrere DefaultButtons definiert werden müssten (einer pro Control). Um das Problem zu umgehen, wird jedes einzelne Control in ein asp:panel gepackt, denn auch das Panel Control verfügt über das entsprechende DefaultButton Property.

Beispiel:


<asp:panel id="panel1" runat="server" DefaultButton="btnSend">

<asp:textbox id="tb1" runat="server" />

<asp:button id="btnSend" runat="server" text="Send">

</asp:panel>

Wird nun nach der Eingabe eines Strings in die Textbox Enter gedrückt, feuert automatisch der Click Event des Default Buttons. Ganz simpel also.

Es gibt allerdings eine etwas merkwürdige Einschränkung: Wird als DefaultButton ein Button vom Typ LinkButton eingetragen, funktioniert die ganze Geschichte in FF3 und Safari leider nicht mehr. Verwendet man einen normalen Button, wird der richtige Event in allen Browsern gefeuert.

Firefox 3 langsam mit Visual Studio 2005

Veröffentlicht in .net Stuff von dotlab am Dezember 1, 2008
Tags: , , ,

Um bei Webprojekten die Crossbrowser-Kompatibilität zu überprüfen, ist zwangsläufig die Betrachtung der Pages in mehreren Browsern notwendig. Wird das Projekt kompiliert und mit dem lokalen ASP.NET Development Server ausgeführt, startet das Projekt standardmässig im Internet Exporer. Kopiert man nun die Url und versucht die Seite in FireFox 3 zu laden, dauert der Ladevorgang aussergewöhnlich lange.

Hier die Lösung für das Problem: in FireFox 3 muss lediglich IPv6 deaktiviert werden. Um dies zu tun, einfach in der Adresszeile “about:config” eingeben und mit einem Doppelklick auf networks.dns.disable.ipv6 den Wert auf true setzen. Nun funktioniert das Projekt gleich schnell wie im IE.

Heureka!

iPhone Update 2.2 released!

Veröffentlicht in Allgemein von dotlab am November 21, 2008
Tags: , ,

Endlich, ab sofort steht via iTunes das Update des iPhone Betriebssystems zur Verfügung. Die neue Version 2.2 bietet nebst neuen Möglichkeiten wie Google Street View vor allem eine lange ersehnte Option: das Deaktivieren der Auto-Korrektur. Was beim Schreiben von Test Messages zu (teilweise) lustigen Ergebnissen führte, war mit der Zeit einfach nur noch lästig. Darum: schön, dass die Wünsche der Anwender gehört wurden. Thumbs up for this one!

SQL 2005 Express auf Windows Server 2008 64-bit

Veröffentlicht in .net Stuff von dotlab am September 1, 2008
Tags: , ,

Unser neuer Stage Server läuft auf Basis einer 64-bit Windows 2008 VM. Um die Kompatibilität mit dem Livesystem zu wahren, waren wir gezwungen, einen SQL Server 2005 einzusetzen. Auf dem Stage Server ist die Express Edition für uns absolut ausreichend. Jedoch liess sich diese Version nicht ohne Weiteres installieren, die folgende Warnung wurde während dem Setup ausgegeben:

“64-bit ASP .Net is Registered. Required 32-bit ASP .Net to install Microsoft Reporting Service 2005 (32.bit)”

Die Lösung liegt darin, als Administrator die Kommandozeile zu öffnen und folgenden Befehl auszuführen:

cscript %SystemDrive%\inetpub\AdminScripts\adsutil.vbs set w3svc/AppPools/Enable32bitAppOnWin64 1
Et voilà, die Installation lief anschliessend sauber durch.

IE7 extrem langsam auf IBM/Lenovo T60 mit Vista Business

Veröffentlicht in Allgemein von dotlab am August 4, 2008
Tags: , , ,

Auf meinem Firmenrechner (IBM/Lenovo T60 mit Vista Business) wurde der Internet Explorer 7 immer langsamer. Mittlerweile wurde es äusserst mühsam, da alle unsere .net Applikationen für den IE entwickelt werden und natürlich auch Visual Studio 2005 rsp. der Development Server intensiven Gebrauch von dem Browser machen. Nachdem ich bereits eine Neuinstallation des gesamten Systems in Betracht gezogen habe, fand ich unter Zubehör/Systemprogramme zufällig die Verknüpfung zum Start des IE7 ohne jegliche Add-ons. Et voilà: der IE7 war wieder flink wie am ersten Tag.

Der Missetäter war im Ausschlussverfahren schnell ausgemacht: Lenovo installiert ein Add-on namens “CPwmIEBrowserHelper Object”. Dieses kann ohne Probleme deaktiviert werden!

Es finden sich reichlich Beschreibungen des Add-ons im Netz, aber um’s kurz zu machen: es handelt sich dabei um das Lenovo Password Manager Add-on.

Nächste Seite »