Archiv der Kategorie: Allgemein

Allgemeine Dinge so rund um das Leben und Interessensgebiete die in keine Kategorie passen…

Größte Ordner / Platzfresser auf der Festplatte finden

Problem

Auf einmal ist die Festplatte voll und man verbringt Stunden damit im Windows-Explorer nach den Platzfressern zu suchen. Auch die Powershell-Befehle sind nicht wirklich hilfreich oder zu kompliziert, als dass man hier schnell Abhilfe schaffen könnte. Man beginnt Programme zu deinstallieren, Daten zu löschen die man gar nicht löschen möchte, durchstöbert temporäre Dateien, löscht die Größten Dateien und hat dann endlich 3 GB frei. Aber wo sind die restlichen 200 GB hin?

Ansatz

Eine ausgezeichnete grafische Abhilfe schafft das Programm Sequoia View, welches kostenlos auf der Internetseite der technischen Universität Eindhofen heruntergeladen werden kann, mit sogenannten Cushion Treemaps.

Lösung

Auf einmal habe ich festgestellt, dass der Microsoft IIS Server aktiviert ist und seit Monaten Gigabytegroße LOG-Files speichert (großer Kasten im Screenshot).

Beurteilung

Dieses Programm spart sehr viel Arbeit. Es lohnt sich in diesem Fallle nicht unbedingt Windows-Boardmittel zu verwenden.

Mirror

Zur Unterstützung des Uni-Projektes, biete ich meine Seite als Download-Mirror gerne an.

Internetabdeckung der Mobilfunkanbieter Telekom, Vodafon, EPlus und O2

Intention

Da ich jeden Tag durch längere Autofahrten auf der A7 zwischen Melsungen und Fulda auf das mobile Internet zurückgreife, musste ich mich über die schlechte Internetabdeckung von ePlus ärgern. 2 Blackberry-Inhaber die mit meiner Fahrtgemeinschaft fahren, hatten über die Firma einen Telekomvertrag. Diese schienen in fast allen Gebieten auf der A7 schnelles Internet zur Verfügung zu haben. Doch gibt es da Statistiken?

Netzabdeckungsseiten der Anbieter

http://www.vodafone.de/privat/hilfe-support/netzabdeckung.html
http://www.t-mobile.de/funkversorgung
http://eis03sn1.eplus-online.de/geo/portal/gsm?javax.portlet.events=url%28pid_JGIS-Overview-Portlet%252Fmd_view%252Fst_normal%29

Grafischer Vergleich

Eigenbewertung der Grafik

Wenn man davon ausgeht, dass die Grafiken die reelle Internetabdeckung der Mobilfunkanbieter anzeigt, müsste die Telekom die beste Netzabdeckung auf der A7 zwischen Fulda und Melsungen haben.

C#.NET: LDAP Zugriff

Aufgabenstellung

In größeren Firmen kann über das LDAP-Protkoll auf Personendaten und -informationen zugegriffen werden. Die kann z.B. für eine Authentifizierung per Singlesignon genutzt werden.

Ansatz

Möchte man diesen Dienst nutzen, muss man zunächst wissen auf welchem Server im Unternehmen ein solcher Dienst angeboten wird. Dies könnte z.B. ein Active Directory Server (Windows Server) oder ein Lotus Notes Server (notesldap) sein.

Zunächst benötigt man den Import:

using System.DirectoryServices;

Lösung

private void button1_Click(object sender, EventArgs e)
{
    DirectoryEntry DirEntry = new DirectoryEntry();
    {
        DirEntry.Path = "LDAP://notesldap.it.company.com";
        DirEntry.AuthenticationType = AuthenticationTypes.ServerBind;
    }
    Console.WriteLine(DirEntry.Name);

    DirectorySearcher search = new DirectorySearcher(DirEntry);
    {
        // Tweak this to refine your search
        search.Filter = "(sn=Karpenstein)";
        // I limit my results while I tweak          
        search.SearchScope = SearchScope.Subtree;
    }
    try
    {
        foreach (SearchResult result in search.FindAll())
        {
            if (result != null)
            {
                DirectoryEntry de = result.GetDirectoryEntry();
                textBox1.Text += "===================================="+br();
                textBox1.Text +=
                "User: \t\t" + de.Properties["uid"].Value.ToString() + br() +
                "objectclass:\t\t" + de.Properties["objectclass"].Value.ToString();

                IDictionaryEnumerator ide = de.Properties.GetEnumerator();
                ide.Reset();

                try
                {
                    while (ide.MoveNext())
                    {
                        PropertyValueCollection pvc = ide.Entry.Value as 
                                               PropertyValueCollection;

                        textBox1.Text += ide.Entry.Key.ToString();
                        textBox1.Text += pvc.Value;
                    }
                }
                catch (Exception sdf)
                {
                    textBox1.Text += sdf.Message;
                }
                
                //textBox1.Text += "location:\t\t" + de.Properties["location"].
                                              Value.ToString() + br();
                //textBox1.Text += "maildomain:\t\t" + de.Properties["maildomain"].
                                              Value.ToString() + br();

                textBox1.Text += "sn:\t\t" + de.Properties["sn"].
                                            Value.ToString() + br();
                //textBox1.Text += "dominocertificate:\t\t" + 
                    de.Properties["dominocertificate"].
                                             Value.ToString() + br();
                textBox1.Text += "mail:\t\t" + de.Properties["mail"].
                                             Value.ToString() + br();
                textBox1.Text += "l:\t\t" + de.Properties["l"].
                                            Value.ToString() + br();
                textBox1.Text += "displayname:\t\t" + de.Properties["displayname"].
                                            Value.ToString() + br();
                textBox1.Text += "givenname:\t\t" + de.Properties["givenname"].
                                           Value.ToString() + br();
                //textBox1.Text += "dc:\t\t" + de.Properties["dc"].
                                           Value.ToString() + br();
                //textBox1.Text += "dn:\t\t" + de.Properties["dn"].
                                           Value.ToString() + br();
                textBox1.Text += "cn:\t\t" + de.Properties["cn"].
                                            Value.ToString() + br();
                textBox1.Text += "====================================";
            }
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message.ToString());
    }
    finally
    {
        search.Dispose();
        DirEntry.Close();
    }
}

Workflow Patterns – Teil 1

Workflows

Was ist ein Workflow?

Grundsätzlich ist ein Workflow erstmal nichts technisches. Es geht hierbei meistens (so auch hier) um Formulare, die in einem Unternehmen mehrere Abteilungen und Stationen durchlaufen. Ob das Formular auf einem Papier oder in einer rechnergestützten Anwendung realisiert wurde, spielt dabei vorerst keine Rolle.

Mithilfe von Workflows können Personen gemeinsam an Dokumenten arbeiten. Organisationen können einheitliche Geschäftsprozesse einhalten und die Effizienz und Produktivität der Organisation verbessern, indem die Aufgaben und Schritte einzelner Geschäftsprozesse verwaltet und harmonisiert werden. Auf diese Weise können sich die Personen, die diese Aufgaben ausführen, auf die Arbeit selbst und nicht auf die Verwaltung des Workflows konzentrieren.

Papiergebundene Workflows haben im Vergleich zu rechnergestützten Workflows den Nachteil, dass sich die folgenden Fragen nicht beantworten lassen:

  • Wo befindet sich das Dokument?
  • Wer bearbeitet es?
  • Wer hat es schon bearbeitet?
  • Kann ich das Dokument schnell zurückholen?
  • Wann wurde es in Umlauf gebracht?
  • Wurde ein Datum überschritten?

Ein Workflow ist eine inhaltlich abgeschlossene, zeitlich und sachlogisch zusammenhängende Folge von Schritten, die zur Bearbeitung eines betriebswirtschaftlich relevanten Objektes notwendig sind und deren Funktionsübergänge von einem Informationssystem gesteuert werden.

Abgeschlossenheit: Ein Workflow definiert einen Arbeitsablauf mit einer Abfolge von Aktivitäten innerhalb einer Organisation. Die Abfolge beginnt an einem bestimmten Punkt und endet auch an einem solchem. Es gibt daher einen Initiator eines Workflows und eine Aktion, die am Ende definiert, was als nächstes passieren soll.

Zeitlicher Ablauf: Ein Workflow kann an einem Zeitpunkt 1 beginnen und an einem Zeitpunkt 5 aufhören. Wenn dies der Fall ist, existieren 5 Workflowpositionen.

Sachlogik:
Sachlogik dient dazu..

  • Aktionen zu validieren und Eingabefehler auszuschließen
  • den zeitlichen Ablauf anhand bestimmter Kriterien zu beeinflussen
  • Workflowpositionen nach Notwendigkeit wegfallen oder hinzukommen zu lassen
  • Schritte die automatisierbar sind durch definierte Logik durch den Workflow eigenständig erledigen zu lassen

In der Regel ist das betriebswirtschaftliche Objekt ein Formular, welches zum Einsammeln von Daten gedacht ist.

Wo werden Workflows verwendet und welchem Zweck dienen Sie?

Workflows werden überall dort verwendet, wo durch einen strukturierten Arbeitsablauf transparenz und Arbeitsersparnis erreicht werden kann. Arbeitsersparnis erhält man in der Regel durch den niedrigeren Koordinationsaufwand, die Transparenz hingegen durch die Möglichkeit den Status eines Workflows abzufragen (an welcher Workflowposition hängt es – wen muss ich ansprechen – wer ist verantwortlich?). Normalerweise würde man anfangen rumzutelefonieren, bei wem ein Dokument gerade liegt. Dies kann über eine Suchfunktion ínnerhalb des Informationssystems realisiert werden.

Wer braucht Workflows?

Personen, die …

  • … über Dokumente wie Formulare Informationen/Daten über mehrere, in der Organisation verteilte einsammeln und nicht die Zeit haben hinter einem Dokument hinterherzutelefonieren.
  • … den Verbleib eines Dokumentes genau nachvollziehen müssen
  • … nicht das Gesamt-Know-How eines Arbeitsprozesses besitzen und auf andere Personen angewiesen sind.
  • … einen Prozess mit erheblichem Aufwand optimieren möchten
  • … gerne mehr Zeit haben.

Welche Realisierungsmöglichkeiten gibt es für Worfklows?

  • Papiergebundene Workflows
  • Web-Workflows
  • Native Workflows
  • Systemintegrierte Workflow (z.B. SAP Workflow)

Wie plant man einen Workflow?

  • Entscheidung für die Implementierung eines Workflows
  • Anforderungserfassung
  • Definition von Zielen und des Optimierungspotentials
  • Festlegung der Workflowinfrastruktur
    • Präsentationsformen: Web/Windows/Mobil
    • Kommunikationstechniken für Beachrichtigungen: z.B. eMail: SMTP-Server, personifizierter Posteingang kombiniert mit eMail-Nachricht …
    • Benötigte Services/Dienste: Z.B. Bestände bei SAP abrufen…
  • Festlegung der Workflowtechnologie
    • Client-Server-Lösung
      • Web-Anwendung: Three-Tier-Architektur mit: Adobe Flex 3/FluorineFX/MS SQL Server
      • Mobil-Anwendung: Android App und iPhone App
    • Stand Alone Lösungen
      • Office Dokumente die sich per eMail versenden
  • Festlegung der Workflowarchitektur
    • Aufgaben, bzw. Rollen
      • Was für Tätigkeiten werden in dem Geschäftsprozess erledigt? Hier leiten sich die Rollen ab…
      • Eine Rolle ist eine Aufgabe, die eine Person in einem Unternehmen hat.
    • Ablauf
      • Reihenfolge: Welche Informationen müssen vor dem Erreichen einer Aufgabe/Workflowposition erfasst sein?

Workflow-Patterns

Workflow-Patterns sind bestimmte Entwurfsmuster, die in Workflow-Projekten immer wieder anzutreffen sind. Workflow-Patterns bestehen aus Workflow-Positionen und Workflow-Abläufen.

Workflow-Positionen

Eine Workflowposition dient der Vorlage, Bearbeitung und Bestätigung von Daten, die über ein Formular eingesammelt werden. Die Workflowposition kann einer Person, oder einer Gruppe von Personen zugeordnet sein.

Zeitliche Abfolgen

Zeitliche Abfolgen legen fest, wann eine Person das Dokument erhält und zu welchem Zeitpunkt.

Logische Abfolgen

Eine logische Abfolge wird nur dann abgearbeitet, wenn ein vorheriges Ereignis / eine vorherige Logikprüfung erfolgreich war und durch eine optionale Workflowpositionen durch die Abfolge erreicht wird.

Vorgänger- und Nachfolgerbeziehungen

Benötigt eine Person Daten von einer anderen, ist die Person, die die Daten benötigt, der Nachfolger der Person, die die Daten in das Formular eingibt. Es gibt hier also eine zeitliche Abhängigkeit, die durch Vorgänger- und Nachfolgebeziehungen defniert werden. Man versucht dabei so viele Positionen parallel abzuarbeiten, wie das möglich ist.

Workflow-Abläufe

Serialisierte Workflowabläufe

Einer nach dem anderen (bsp. Excel-Dokument das bei Bearbeitung immer gesperrt wird).
Vorteile:
* Klarer strukturierter Ablauf.
Nachteile:
* Es geht viel Zeit während der Bearbeitung verloren, wenn keine Daten vom Vorgänger benötigt werden (informelle Abhängigkeit zum Vorgänger).
* Keine parallele Abarbeitung möglich, da immer gesperrt.

Parallele Workflowabläufe

Es können mehrere Personen gleichzeitig an einer Workflowposition auf den Workflow zugfreifen. Erst wenn alle Personen bestätigt haben, läuft der Workflow weiter.

Fortsetzung folget (Workflow Patterns – Teil 2 inklusive Codebeispiele)

OLE DB Zugriff: C# auf MDB (Microsoft Access Datenbank) mit JET Treiber

Selektionsanweisung mit Parametern

public ArrayList getWeekPlan(string kapno, string woche)
{
   ArrayList weekPlan = new ArrayList();

   OleDbConnection conn = new OleDbConnection(
   "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\\\pfad1\\db.mdb");

   try
   {

      conn.Open();
      OleDbCommand comm = new OleDbCommand();
      comm.Connection = conn;
      comm.CommandText = "SELECT [Datum],[KapazitätNo] "+
      "FROM [qry_TagesAnsichtMengen] WHERE [KapazitätNo]=@kapno "+
      "AND [DINKW]=@woche";

      comm.Parameters.AddWithValue("kapno", kapno);
      comm.Parameters.AddWithValue("woche", woche);
      
      OleDbDataReader reader = comm.ExecuteReader();
      
       while (reader.Read())
       {
          WeekPlanVO vo = new WeekPlanVO();
          vo.datum = reader.GetValue(0).ToString();
          vo.menge = reader.GetValue(1).ToString();
          weekPlan.Add(vo);
        }
   }
   catch (Exception e)
   {
     WeekPlanVO vo = new WeekPlanVO();
     vo.datum = e.Message;
     vo.menge = e.Message;
     weekPlan.Add(vo);
     return weekPlan;
   }
   finally
   {
      conn.Close();
   }
  return weekPlan;
}

Manipulationsanweisung ohne Parameter

public string updateDetailDate(DateTime neuesDatum, DateTime altesDatum, 
string neueKW, string alteKW, string kapazitaet, string material, string beleg)
{
  OleDbConnection conn = new OleDbConnection(
  "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\\\pfad1\\db.mdb");

  
  try
  {
     conn.Open();
     OleDbCommand comm = new OleDbCommand();
     comm.Connection = conn;
     comm.CommandText = "UPDATE qry_Details_Akt SET [changed]=Now(), DinkW=" + neueKW + 
      ", WEWA_C='" + DateWrapper.GetServerDate(neuesDatum) + "', WEWA_C_OLD='" +
     DateWrapper.GetServerDate(altesDatum) + "' WHERE Beleg='" + beleg + 
     "'AND DinkW=" + alteKW + " AND Material='" + material + "' AND KapazitätNo=" + 
     kapazitaet;

     comm.ExecuteNonQuery();
  }
  catch (Exception e)
  {
      return e.Message+' '+e.StackTrace;
  }
  finally
  {
      conn.Close();
  }

  return "ok";
}

Spießer-Zensuren in Wikimedias

Faszinierend wieviele freiwillige Autoren bei Wikipedia unentgeltlich ihre Arbeit verrichten. Die Idee einer freien Kollaborationsanwendung / eines „Gedankentempels“ (Zitat von Jimmy Wales, Gründer von Wikipedia) scheint allerdings mit der Diskussion nach Sinnhaftigkeit von Artikeln und deren Existenzberechtigung zu stehen und zu fallen. Nachdem die Administratoren ihre Rechte bekommen haben um Artikel zu löschen, entpuppen sich viele als nervöse, bewaffnete Moralapostel mit dem Finger am Abzug. Das scheint bei einer Enzyklopädie erstmal sinnvoll. Lieber kein Artikel zusätzlich, als ein schlechter Artikel zusätzlich…

Aber wieso wird bei Stupipedia und Uncyclopedia Satire zensiert? Ich saß mit einem Bekannten in der Sylvesternacht am Tisch und trank ein Gläschen Eierlikör. Dieser kam auf die Idee dem Getränk den Namen „Hoden Brandy“ zu geben, was wir zunächst witzig fanden. Die Idee, man könne einen satirischen Artikel darüber verfassen, scheiterte schon nach der Artikelanlage.

Bei Uncyclopedia haben wir uns einen festen User registriert und den Artikel „Hodenbrandy“ angelegt. Nachdem die Sektion „Definition“ verfasst wurde, in der wir lediglich einige Sätze mit Andeutungen auf „Eierlikör“ schrieben, war der Artikel bereits beim zweiten oder dritten Mal speichern verschwunden. Wir dachten uns: „Okay, da dachte wohl jdm. das wär ein Spam-Artikel“… Also versuchten wir ihn nochmals anzulegen, allerdings war der Artikel gesperrt. Wir legten einen zweiten Artikel „Hoden Brandy“ (auseinander mit Leerzeichen) an. Kurz danach wurde unser Benutzer gesperrt.

Anschließend versuchten wir unser Glück auf Stupipedia. Wir kopierten den Text, den wir mit dem Wiki-Markup bereits vorsorglich in Notepad zwischengelagert hatten, hinein. Kurz danach kam der erste Kommentar „grenzwertig“. Durch das Setzen des „In-Use“-Tags erklärten wir, dass wir noch am Arbeiten sind, und den Artikel überdenken. Wir erstellten eine lustige Visio-Grafik mit einem Kaizen-Diagramm über den Produktionsprozess des Brandys… Ca. 10 Minuten später wurde der Artikel gelöscht, da es sich angeblich um einen sexistischen Inhalt handele.

Der Artikel war im vgl. zu anderen Satiren weder sexistisch noch eklig oder hätte es gerechtfertigt unseren Benutzer zu sperren. Es wurde niemand persönlich angegriffen, da auch keine Person
angesprochen wurde. Wenn man sich die Sprüche von Michael Mittermeier oder Mario Barth anhört, vernimmt man gelegentlich tollerierte sexistische Inhalte. Aber die Beschreibung von Eierlikör unter dem Namen „Hoden Brandy“ ist an Harmlosigkeit kaum zu überbieten.

Auf der einen Seite bewundere ich das Engagement der Administratoren, auf der anderen Seite ärgere ich mich über die Spießigkeit und frage mich ob eine längere Tätigkeit auf diesem Gebiet zu Abgestumpftheit führt. Die Interpretation der Richtlinien wird häufig am eigenen Maßstab festgemacht. Was die Erhaltung von Artikeln und den Umgang mit der Arbeit von fremden Personen betrifft, wünschte ich mir hier etwas Professionalität. Auf den Löschen-Button ist schnell geklickt und die Arbeit von Stunden zerstört.

Auf der anderen Seite kann man wirklich über die Sinnhaftigkeit von Satire in Uncyclopedia/Stupipedia streiten 😉 …
Definiert Wikipedia die Satire als „eine Spottdichtung, die mangelhafte Tugend oder gesellschaftliche Missstände anklagt“, sollte sie hier gegen ihr eigenes Rahmenwerk eingesetzt werden.

Hier ein netter Versuch – ein satirischer Artikel über den Vorfall bei den Stupidedia Administratoren:
http://www.stupidedia.org/stupi/Stupidedia_Administrator

… mal schauen wie langer er sich hält, er soll ab 11. Januar gelöscht werden, unten sieht man wie sich die Administratoren aufregen XD …