Fehlermeldung „Klasse unterstützt keine Automatisierung“ beheben

In einem .NET-Programm (Zeta Producer, logisch) in dem ich Microsoft Active Scripting verwendet habe, kam beim Verwenden einer neuen Klasse (Zugriff aus einem VBScript auf diese Klasse) die Fehlermeldung:

Klasse unterstützt keine Automatisierung

Bzw. in Englisch:

Class does not support Automation

Die Lösung war dann ganz einfach, ich hatte die Klasse als „internal“ markiert, anstatt als „public„.

Falsch:

[ComVisible(true)]
internal sealed class MyClass
{
}

Richtig:

[ComVisible(true)]
public sealed class MyClass
{
}

So einfach ist das, nach nur 4 Stunden habe ich es schon erkannt.

Pizza

Wow, schön luftig und seltsamerweise ist das Backpapier verglüht, obwohl es ganz neu war.

Schmecken hat es gut sein tun gewesen. Oder so ähnlich.

Buddhismus

Heute kam in SWR Leute ein Gespräch mit Andreas Altmann. Er hat kurz auch über den Buddhismus gesprochen.

Was ich bis dahin gar nicht wusste, weil ich mich auch nicht damit beschäftigt hatte, ist, dass es sich nicht um eine Religion im westlichen Sinne handelt und das es auch keinen Gott gibt und so Quatsch. Vielmehr ist jeder Mensch für sein Handeln selbst verantwortlich.

Oder um es aus Wikipedia zu zitieren:

Buddha selbst sah sich weder als Gott noch als Überbringer der Lehre eines Gottes. Er stellte klar, dass er die Lehre, Dhamma (Pali) bzw. Dharma (Sanskrit), nicht aufgrund göttlicher Offenbarung erhalten, sondern vielmehr durch eigene meditative Schau (Kontemplation) ein Verständnis der Natur des eigenen Geistes und der Natur aller Dinge gewonnen habe. Diese Erkenntnis sei jedem zugänglich, der seiner Lehre und Methodik folge. Dabei sei die von ihm aufgezeigte Lehre nicht dogmatisch zu befolgen. Im Gegenteil warnte er vor blinder Autoritätsgläubigkeit und hob die Selbstverantwortung des Menschen hervor. Er verwies auch auf die Vergeblichkeit von Bemühungen, die Welt mit Hilfe von Begriffen und Sprache zu erfassen, und mahnte gegenüber dem geschriebenen Wort oder feststehenden Lehren eine Skepsis an, die in anderen Religionen in dieser Radikalität kaum anzutreffen ist.

Das finde ich eine saugute Einstellung! Ich glaube ich werde mal versuchen, ob ich zu dieser Philosophie eine für mich praktische und nützliche Herangehensweise finden kann.

Spannende Sache!

Willy Astors Ingwer-Orangen-Honig-Tee

Vor kurzem habe ich ein Video über Willy Astor gesehen.

In einer Einstellung steht er in seiner Küche und erzählt unter anderem, wie wahnsinnig gerne er Ingwer-Tee trinkt. Er führt es dann auch gleich vor, wie er ihn zubreitet.

Er hat dazu Inger in eine Teekanne gerieben, dann Orangen ausgepresst und dazu geben, anschließend Honig und schließlich kochendes Wasser hinzugefügt.

Und da ich experimentierfreudig bin, habe ich zunächst meinen Freund den Rosenzuechter gebeten es auszuprobieren (oder hat er es von selbst getestet?), anschließend habe ich es gestern selbst ausprobiert.

Rosenzuechter fand es scheußlich, ich fand es weltklasse! Mein „Rezept“ frei-Schnauze sah ungefähr so aus:

  • Ca. die Menge von 1 Teelöffel fein geriebener, frischer Inger
  • Eine halbe Orange
  • Ein Teelöffel Honig
  • Wasser für ca. 2 Tassen

Nach dem Übergießen habe ich es so 5 Minuten ziehen lassen und dann durch ein feines Papierfilter in die Tasse gießen.

Hat im Mund einen süßlichen Geschmack und dann beim Schlucken einen schön scharfen Nachgeschmack.

Lecker lecker 🙂

Automatically restart Microsoft IIS if website is not available

To automatically restart the Microsoft Internet Information Services (IIS) web server if a website is not available, you need:

  • Administrative access to your web server.
  • The WGET command line utility.
  • A text editor like Notepad to create a batch script file.
  • the Task Scheduler to make the batch script run every n Minutes (e.g. every 10 Minutes)

The batch file I created for one of my own web servers looks like:

@REM ==============================================
@REM Automatically restart IIS if website is not available.
@REM (Checks for a sub string in a page of the website).
@REM
@REM Created 2011-10-28, Uwe Keim uk@zeta.li
@REM ==============================================

@REM Remove any existing previous downloads.
del d:\scripts\index.html

@REM Change drive and folder so that WGET stored in a
@REM well-defined location.
D:
cd d:\scripts

@REM Download file.
D:\scripts\wget.exe ^
    --timeout=30 ^
    --tries=1 ^
    http://www.my-server.com/index.html 

@REM Search for the term in the previously downloaded file.
find /I /C "Some String On Website" d:\scripts\index.html

@REM Restart IIS if string is not found.
IF ERRORLEVEL 1 iisreset /RESTART /TIMEOUT:120 /REBOOTONERROR

Please note the following:

  • WGET downloads the URL to a file with the same file name („index.html“ in my above example)
  • The scheduled task must be created to run with an administrative user.
  • The scheduled task must have the „Run with highest privileges“ checkbox set, because IISRESET only runs with administrative privileges.

Error Message „The directory service is unavailable“ when querying ApacheDS LDAP Server

Quick note to myself: An error message

The directory service is unavailable (English)
Der Verzeichnisdienst ist nicht verfügbar (German)

when querying an LDAP ApacheDS server can be caused by the wrong authentication type.

The full exception trace was:

System.Runtime.InteropServices.COMException occurred
ErrorCode=-2147016689
at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
at System.DirectoryServices.DirectoryEntry.Bind()
at System.DirectoryServices.DirectoryEntry.get_AdsObject()
at System.DirectoryServices.DirectorySearcher.FindAll(Boolean findMoreThanOne)
at System.DirectoryServices.DirectorySearcher.FindAll()

In my code, I did a call to

var de =
  new DirectoryEntry(
    @"LDAP://localhost:10389/ou=users,ou=someou,dc=domain,dc=com",
    @"uid=admin, ou=system",
    @"********",
    AuthenticationTypes.Secure);

which failed. After I changed it to

var de =
  new DirectoryEntry(
    @"LDAP://localhost:10389/ou=users,ou=someou,dc=domain,dc=com",
    @"uid=admin, ou=system",
    @"********",
    AuthenticationTypes.None);

everything worked as expected.