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

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.

Headset GN9350 an Telefon Alcatel 4039 betreiben

Seit mehreren Jahren habe ich ein DECT-Headset GN9350. Das betreiben wir an einer Alcatel-Anlage mit einem Endgerät 4039.

Da ich von Zeit zu Zeit immer wieder mal neu konfigurieren muss, hier für mich als Erinnerung mal die Anleitung, was zu tun ist beim Konfigurieren:

  • Alles verkabeln.
  • Einstellung im LC-Display auf „MSH“ und dann „OK“ drücken, so dass der Stern „*“ neben dem „MSH“ angezeigt wird.
  • Den Telefon-Setup-Schiebeschalter (A-G) auf „A“ stellen.
  • Die Lautstärke im LC-Display am besten auf „7“ (von 12) stellen.

Wichtige Hinweise:

  • Im Telefon muss als Rufton Standard, Nature oder Cold River eingestellt sein, damit eine Signalisierung des Ruftons im Headset statt findet. Dies geht über Menü > Einstellung > Rufton > Intern / extern
  • Außerdem müssen folgende Optionen auf „aus“ gestellt sein: Menü > Einstellung > Telefon > Intern / extern > weitere Optionen > Kein Ton, Progressiv, Pieptöne.

Die Anleitung gibt’s auch so ähnlich als PDFEin Handbuch zum GN Netcom GN9350 findet sich hier.

Verstopftes Senseo-Sieb säubern

Unsere Senseo-Kaffemaschine hat vor kurzem noch groß gedröhnt und dann beim Kaffee-durch-das-Sieb-Drücken kam nix mehr raus.

Nach kurzem Googlen war das Sieb wohl verstopft. Tipps gingen von neu kaufen, über „mit Nadel durchstechen“ bis hinzu „in Essig-Essenz einlegen“.

Da ich keine Essig-Essenz hatte, habe ich folgende Schritte unternommen:

  1. Aus dem Sieb das innere schwarze Plastikteil mit dem Sieb drin rausdrücken.
  2. Das Sieb über Nacht in Balsamico-Essig einlegen.
  3. Am nächsten Tag den Sieb in eine große Kaffeetasse legen.
  4. Ein Spülmaschinen-Tab hinzugeben.
  5. Entkalkungssalz für Spülmaschinen großzügig in die Tasse geben.
  6. Im Wasserkocher Wasser zum Kochen bringen.
  7. Das kochende Wasser in die Tasse geben.
  8. Gut umrühren.
  9. Eine Stunde ziehen lassen.
  10. Für weitere paar Stunden stehen lassen.
  11. Alles in die Mikrowelle geben, mit einer Untertasse abdecken.
  12. Für 5 Minuten in der Mikrowelle erhitzen.
  13. Gut umrühren.
  14. Nochmals ein paar Stunden ziehen lassen.
  15. Sieb aus der Tasse entnehmen.
  16. Unter fließendem Wasser gut abspülen.
  17. Dabei mit Bürste gut in alle Ecken, damit die Chemie raus geht.
  18. In den Siebhalter einsetzen.
  19. Kaffe durchlassen.

Um es kurz zu machen: Danach hat alles wieder gut funktioniert. Ich hatte ganz zu Beginn schon mit einer Nadel das Sieb gut bearbeitet, hätte ich mir ggf. auch sparen können.

Wohl bekommt’s!

Handling WM_MOVING in Windows Forms

Just a quick snippet:

public class FormWithWmMoving :
    Form
{
    private const int WM_MOVING = 0x0216;

    private static readonly object EVENT_MOVING = new object();

    public event EventHandler Moving
    {
        add { Events.AddHandler(EVENT_MOVING, value); }
        remove { Events.RemoveHandler(EVENT_MOVING, value); }
    }

    public class MovingEventArgs : EventArgs
    {
        private readonly Rectangle _rectangle;

        public MovingEventArgs(
            Rectangle rectangle)
        {
            _rectangle = rectangle;
        }

        public Rectangle Rectangle
        {
            get { return _rectangle; }
        }
    }

    protected virtual void OnMoving(MovingEventArgs e)
    {
        var h = (EventHandler)Events[EVENT_MOVING];
        if (h != null)
        {
            h(this, e);
        }
    }

    protected override void WndProc(ref Message m)
    {
        if (m.Msg == WM_MOVING)
        {
            var r = (Win32NativeMethods.RECT)Marshal.PtrToStructure(m.LParam, typeof(Win32NativeMethods.RECT));
            var rectangle = new Rectangle(r.left, r.top, r.Bounds.Width, r.Bounds.Height);

            var args = new MovingEventArgs(rectangle);
            OnMoving(args);
        }

        base.WndProc(ref m);
    }
}

Hope this is helpful someday to me or others.