Web Debugging Proxy

Wow, cooles Tool, dieser Charles:

Charles is a web proxy (HTTP Proxy / HTTP Monitor) that runs on your own computer. Your web browser (or any other Internet application) is then configured to access the Internet through Charles, and Charles is then able to record and display for you all of the data that is sent and received.

Und der kann sogar SSL-Verbindungen als Klartext darstellen:

Charles can be used as a man-in-the-middle HTTPS proxy, enabling you to view in plain text the communication between web browser and SSL web server.

Charles does this by becoming a man-in-the-middle. Instead of your browser seeing the server’s certificate, Charles dynamically generates a certificate for the server and signs it with its own root certificate (the Charles CA Certificate). Charles receives the server’s certificate, while your browser receives Charles’s certificate. Therefore you will see a security warning, indicating that the root authority is not trusted. If you add the Charles CA Certificate to your trusted certificates you will no longer see any warnings – see below for how to do this.

Hammer, so gehen bestimmt auch Geheimdienste vor!

Kostenloser Windows-HTTP-Proxy-Server

Kleiner Tipp, wenn Ihr mal zum Testen einen HTTP-Proxyserver benötigt:

CC Proxy

Dieser Proxy kann maximal 3 Benutzer unterstützen, was zum Testen ja völlig reicht. In meinem Fall habe ich ihn direkt auf meinem Test-Windows-7 in einer Vmware installiert und im Internet Explorer dann den Proxy angegeben.

Testumgebung

Um den Proxy einfach für lokale Tests zu konfigurieren, wie folgt vorgehen:

proxy-01
proxy-02
proxy-03

In Internet Explorer dann in den Einstellungen:

proxy-04

Internetagentur Göppingen

Wissen Sie schon, an wen Sie sich wenden können, wenn Sie eine professionelle Agentur und einen Dienstleister für die Konzeptionierung, die Gestaltung, die Programmierung und die Vermarktung (SEO) Ihres Webauftritts suchen? Natürlich uns, die Zeta Software GmbH aus dem schönen Stauferpark in Göppingen! Wir sind Ihre sympathische Internetagentur im Kreis Göppingen, die mit cleveren Lösungen und super Service bei Ihnen punkten kann!

Seit über 10 Jahren erfolgreich am Markt etabliert und trotzdem stets aktive und rege am Puls der Zeit um neue Technologien, Designs, Trends und Endgeräte zu erforschen und zu nutzen. Sie erhalten bei uns eine Vielzahl von fokusierten Dienstleistungen:

  • Beratung bei der Planung Ihres Internetauftritts.
  • Gestaltung moderner Websites im Responsive Design.
  • Unterstützung und Beratung bei der Analyse und Durchführung von Suchmaschinenoptimierung (SEO).
  • Platzieren von Aktivitäten im Social-Media-Umfeld.
  • Programmierung interaktiver (Business-)Anwendungen im Web.
  • Entwicklung von mobilen Anwendungen für SmartPhones.

Nutzen Sie das Engagement in Ihrer Umgebung, kontaktieren Sie einfach mal unsere sympathischen, hochmotivierten Mitarbeiter und lassen Sie sich gerne zeigen, was wir alles so „aufm Kasten“ haben.

Praxistipp: Whiteboard reinigen mit Mundwasser

Heute zufällig eine Sache ausprobiert und für so gut befunden, dass sie hier verbloggt gehört:

Unsere Whiteboards im Büro haben die Eigenschaft, dass die darauf geschriebenen Notizen, trotz eigens passend angeschafter Stifte, nach einer Weile mit den trocken-Schwämmen nur schwer noch weg gehen.

Bisher habe ich halt eine Nitroverdünnung oder ähnlich giftiges Zeugs verwendet um die gröbsten Reste zu entfernen.

Heute nun bin ich durch Zufall auf die Idee gekommen, Mundwasser zu nehmen!

Wichtig dabei nach meiner Meinung, dass es sich um Mundwasser (oder „Mund Wasser“, wie die Marketing-Profis das nennen) mit Alkohol handelt.

Damit habe ich dann die Tafel geputzt und es ging ganz hervorragend ab das Zeugs!

Also vollste Empfehlung meinerseits. Als Nebeneffekt habt Ihr auch noch einen schönen Minzgeruch im Büro.

Nützlicher Zusatztipp: Die gebrauchten Küchentücher/Taschentücher nach dem Abwischen in einem verschlossenen Plastikbeutel entsorgen, sonst riecht der ganze Müll und seine Umgebung heftig nach Minze, wie heute bei uns aufm Klo den ganzen Tag.

Fixing „A dynamic link library (DLL) initialization routine failed.“ error on Windows 8

Just fixed an issue with our Zeta Producer 11 that occurs only on the brand new Windows 8. The German error message was:

Die Datei oder Assembly „ZetaHtmlTidy.dll“ oder eine Abhängigkeit davon wurde nicht gefunden. Eine DLL-Initialisierungsroutine ist fehlgeschlagen. (Ausnahme von HRESULT: 0x8007045A)

Translated to English it was:

System.IO.FileLoadException ‚A dynamic link library (DLL) initialization routine failed. (Exception from HRESULT: 0x8007045A)‘

The DLL in concern was a mixed Managed/Unmanaged C++ assembly that wrapped the popular HTML Tidy C sources into a .NET-usable assembly.

So my first idea was that some CRT DLLs were missing:

  • msvcm90.dll
  • msvcp90.dll
  • msvcr90.dll
  • Microsoft.VC90.CRT.manifest

But all were present, even the well-known Dependency Walker/Viewer did not help any further.

Since version 10 of our application worked and version 11 did not work and brought the above error, I was clueless. The main difference was:

  • Version 10 was installed into „C:\Program Files (x86)\Zeta Producer 10“.
  • Version 11 was installed into „C:\Users\YourName\AppData\Local\Zeta Producer 11″ (to bypass administrative setup permissions).

When I moved Version 10 also below the „C:\Users\…“ folder, the error also occurred!

So the cause was not a missing assembly but some kind of (weird?) policy thing.

Some further digging/googling finally lead to the solution on Stack Overflow. The solution was to add some more App.config settings.

My previous, non-working App.config file contained:

<startup>
    <supportedRuntime version="v2.0.50727"/>
    <supportedRuntime version="v4.0"/>
</startup>

My new, working App.config file was:

<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v2.0.50727"/>
    <supportedRuntime version="v4.0"/>
</startup>

So it seems that setting „useLegacyV2RuntimeActivationPolicy“ to „true“ finally switched something to allow for loading mixed-mode DLLs from local folders. Doh!

MySQL-Datenbanken auf einen anderen Server umziehen

Da ich jetzt festgestellt habe, dass es eine doofe Idee ist, MySQL-Datenbanken durch schlichtes XCOPY-Deployment auf einen neuen Server zu verschieben (InnoDB-Tabellen werden scheinbar nur teilweise verschoben), habe ich diesen Artikel hier gefunden, der beschreibt, wie es geht:

How to Back Up and Restore a MySQL Database

Prinzipiell ganz einfach, alles via MySQL-Befehlszeile:

  1. Auf Quellserver ein mysqldump.exe-Aufruf auf die zu verschiebende Datenbank.
  2. Das Ergebnis (SQL-Datei) via FTP auf den Zielserver kopieren
  3. Auf dem Zielserver via phpMyAdmin eine neue, leere Datenbank als Ziel anlegen
  4. Auf dem Zielserver via mysql.exe die kopierte SQL-Datei einlesen.

Fertig.

Programmatically resize a column in a Windows Forms property grid control

Using the standard Microsoft .NET 2.0 WinForms PropertyGridControl control, I was looking for a way to set the size of the two columns (one for the labels, one for the values) so that I can control better how the values are displayed.

After some research with ILSpy on the .NET sources, I found a way to use with reflection. The following helper method can be used for this task:

public static void ResizePropertyGridSplitter(
    PropertyGrid propertyGrid,
    int labelColumnPercentageWidth)
{
    var width =
        propertyGrid.Width*(labelColumnPercentageWidth/100.0);

    // Go up in hierarchy until found real property grid type.
    var realType = propertyGrid.GetType();
    while (realType!=null && realType != typeof(PropertyGrid))
    {
        realType = realType.BaseType;
    }

    var gvf = realType.GetField(@"gridView",
        BindingFlags.NonPublic |
        BindingFlags.GetField |
        BindingFlags.Instance);
    var gv = gvf.GetValue(propertyGrid);

    var mtf = gv.GetType().GetMethod(@"MoveSplitterTo",
        BindingFlags.NonPublic |
        BindingFlags.InvokeMethod |
        BindingFlags.Instance);
    mtf.Invoke(gv, new object[] { (int)width });
}

Call the function and pass your PropertyGrid instance and width values between e.g. 10 and 90 to resize the first column to the given percentage value.

E.g.:

ResizePropertyGridSplitter( myPropGrid, 75 );

If you specify a too small or too large value, the PropertyGrid seems to use the minimum/maximum possible, based on your passed value.