Tuesday, May 4, 2010

45 Szenarien für mehr Sicherheit im Alltag

45 Szenarien für mehr Sicherheit im Alltag

Mit insgesamt 45 Situationen schafft IRBI ein Grundverständnis für Bedrohungen und das richtige Verhalten im Umgang mit diesen. "Wir bieten derzeit drei Tests mit jeweils 15 Szenarien“, so Tom Köhler, Direktor Strategie Informationssicherheit & Kommunikation bei Microsoft Deutschland. "Damit decken wir eine Reihe von Alltagssituationen ab, in denen viele Nutzer heute gar nicht über Sicherheitsaspekte nachdenken. Auch erfahrene Nutzer können hier üben – vor allem, sich die Zeit zu nehmen, um genau hinzusehen und eine Situation zu analysieren." Microsoft hat im ersten Halbjahr 2010 sein Angebot ausgebaut und einen weiteren Test, speziell zum Thema Internetbetrug entwickelt und veröffentlicht.

In der neuen, zweiten Version von IRBI gibt es neben einer Silverlight-basierenden Lösung nun auch eine reine HTML-Darstellung, die ohne weitere Softwareinstallation nutzbar ist. Zudem ist nun neben der Anmeldung per CardSpace-Technologie auch ein sicheres Login über Windows Live ID möglich.

IRBI als Schulungsplattform für Unternehmen

Microsoft stellt Unternehmen IRBI ab Ende Mai auch als kostenfreie Version zur lokalen Installation zur Verfügung. Diese können die Schulungsplattform dann entsprechend ihrer Anforderungen anpassen, mit Inhalten bestücken und im Intranet publizieren, um ihre Mitarbeiter mit eigenen Szenarien zu schulen. "Jedes Unternehmen hat eigene Sicherheitsanforderungen und unterschiedliche Systemvoraussetzungen", so Köhler. "Umso wichtiger ist es, seinen Mitarbeitern ein leicht verständliches Schulungssystem an die Hand zu geben, mit dem sie sich mit speziellen Vorschriften und allgemeinen Sicherheitsvorkehrungen vertraut machen können. Das Verständnis für die Maßnahmen wird so deutlich stärker gefördert als durch die Aushändigung eines Systemnutzungshandbuchs." Um weitere Schulungsszenarien zu schaffen, stellt Microsoft IRBI auch anderen Webseitenbetreibern zur Verfügung, welche die Plattform in ihre Angebote einbinden wollen.

Den Internet Risk Behaviour Index finden Sie unter https://www.irbi.de.

IRBI Simulationsplattform

Die IRBI Simulationsplattform nutzt nachgebaute Screenshots unterschiedlichster Websites und Anwendungen, um so beispielhaft Situationen im Internet-Alltag nachzustellen. So wird gezeigt, wie wichtig das Studieren von Datenschutzbestimmungen und AGBs – nicht nur auf Gewinnspielseiten - ist, wie man verhindert, dass die eigene E-Mail-Adresse von Spambots ausgelesen wird oder wie man mehrere E-Mail-Adressen kontext-abhängig einsetzt, um sich vor Spam im privaten Postfach zu schützen.

Viele Gefahren im Internet lassen sich durch richtiges Verhalten vermeiden. Grundlage der Entwicklung von IRBI ist die Verbindung von fallbasierter und handlungsorientierter Didaktik, welche die LMU zu einem Pionier des E-Learning gemacht hat. Werner Degenhardt, Akademischer Direktor an der Fakultät für Psychologie und Pädagogik an der LMU München, erklärt: "Es bringt nichts, stur auswendig zu lernen, welche Seiten sicher sind und welche nicht, zumal es unmöglich ist, auf dem neuesten Stand zu bleiben. Wir setzen deshalb darauf, übertragbare Alltagssituationen herzustellen und so die Nutzer zu schulen, wie man sich in bestimmten Situationen verhalten sollte." Das Schulungskonzept hat sich bereits in der ersten Version von IRBI bewährt, wie Studien an der LMU gezeigt haben. Das Sicherheitsverhalten von Benutzern kann mit IRBI "erheblich verbessert werden", so Degenhardt.

Training für mehr Sicherheit im Computeralltag


Microsoft veröffentlicht neue Version 2.0 des Internet Risk Behaviour Index (IRBI)

Unterschleißheim, 4. Mai 2010. Microsoft hat seine Simulationsplattform für Online-Sicherheit und Privacy, den IRBI (Internet Risk Behaviour Index), erweitert und bietet ab sofort auch eine HTML-Version unter http://www.irbi.de an. IRBI wurde gemeinsam mit Psychologen und Pädagogen der Ludwig-Maximilians-Universität (LMU) München entwickelt und simuliert Alltagssituationen, die sich mit dem sicheren Umgang mit Computern und dem Internet befassen. Im Zentrum stehen dabei Online-Sicherheit, Schutz privater Daten wie die sichere Verwaltung von Benutzerkonten oder Datenschutzaspekte in sozialen Netzwerken sowie Internet-Betrug. Bei der Überarbeitung des Angebots wurde Benutzerfeedback aufgegriffen und so die Bedienung verbessert. Zudem stellt Microsoft IRBI nun auch Unternehmen zur Verfügung, die damit – neben den mitgelieferten Inhaltspaketen – auch eigene Schulungsszenarien entwickeln und unternehmensintern publizieren können.

Wednesday, April 7, 2010

protected override object LoadPageStateFromPersistenceMedium()










MailUriHelper

bpc = new BindingParameterCollection();

factory = binding.BuildChannelFactory(bpc);
listener = binding.BuildChannelListener(MailUriHelper.CreateUri(ChannelName, ""), bpc);

factory.Open();
output = factory.CreateChannel(new EndpointAddress(MailUriHelper.Create(ChannelName, DestinationEmailAddress)));

Page.EnableViewStateMac-Eigenschaft

Page.EnableViewStateMac-Eigenschaft


Ruft einen Wert ab, der angibt, ob ASP.NET den Ansichtszustand der Seite mit einem Nachrichtenauthentifizierungscode (MAC, Message Authentication Code) überprüfen soll, wenn die Seite vom Client zurückgesendet wird.

Namespace: System.Web.UI
Assembly: System.Web (in System.Web.dll)
Syntax
VBC#C++F#JScript

[BrowsableAttribute(false)]
public bool EnableViewStateMac { get; set; }
J#

/** @property */
/** @attribute BrowsableAttribute(false) */
public boolean get_EnableViewStateMac()
/** @property */
/** @attribute BrowsableAttribute(false) */
public void set_EnableViewStateMac(boolean value)


Friday, March 5, 2010

Delphi-Training


Der Kurs kann auch auf Deutsch durchgeführt werden. Kontaktieren Sie uns bitte für Ihren Termin.
Level 1
1.0 Introduction to Delphi
1.1 Delphi™ Overview
1.2 Windows Programming
1.3 Presentation Strategy
2.0 The Delphi
 Working Environment2.1 SKI Style
2.2 The Help System
2.3 The 6 Principle Windows
3.0 Configuring Delphi

3.1 Configuring the Main Window
3.2 Configuring the Form Designer
3.3 Configuring the Code Editor
3.4 Configuring the Object Inspector training
4.0 Working in Delphi

4.1 Creating a New Project or Group
4.2 The Form & Frame Designers
Level 2
1.0 Object Inspection1.1 Properties of Object Inspector
1.2 Events
1.3 Selecting Multiple Components & Finding Components
2.0 The Object TreeView
2.1 Selecting, Moving & Adding Objects
3.0 The VCL
3.1 Component Palette Organization & Content
3.2 How the Hierarchy Works
3.3 How the Help System Works
4.0 Visual Programming
4.1 Opening & Closing an Application
4.2 Accessing Data
4.3 Data Module
4.4 The Form Wizard & Using Multiple Forms Together
Level 3
1.0 Queries1.1 Overview of Queries
1.2 Selecting a Table
1.3 Selecting Specific Fields
1.4 One-to-Many Relationships
2.0 Other DB Controls
2.1 DBEdit
2.2 DBCtrlGrid
2.3 DBListBox
2.4 DBComboBox
2.5 DBLookupComboBox
3.0 Persistent Fields
3.1 Creating Persistent Fields
3.2 Creating Constraints
3.3 Visual Attributes
3.4 Required & Read-Only Properties
3.5 FieldName, Origin, & Name
4.0 Special Fields
4.1 Lookup Fields
4.2 Calculated Fields
Level 4
1.0 Form Layout & Design1.1 Aligning & Sizing Tools
1.2 The Align & Anchor Properties
1.3 Page Control
2.0 Grid Appearance
2.1 Using the Grid Editor
3.0 Adding Images & Text
3.1 Images & Text within the Database training
3.2 Images & Text from Files
4.0 Building the User Interface
4.1 Menus
4.2 Speedbars
4.3 Toolbars & Coolbars
4.4 Tanimate
5.0 Adding Action
5.1 CL Programming Overview
Level 5
1.0 The Code Editor1.1 What Delphi™ is Doing for You?
1.2 Editing Features
1.3 Code Insight
1.4 Code Explorer
1.5 Message Pane
1.6 Local Menu
2.0 Object Pascal Structure
2.1 The Files Used in Object Pascal
2.2 Program Structure
3.0 Native Object Pascal Types
3.1 Native Types
4.0 User Defined Types & Declarations
4.1 Simple User Defined Types
4.2 Class Types
Level 6
1.0 Taking Action with Object Pascal1.1 White Space
1.2 Tokens
1.3 Comments
1.4 Compiler Directives
1.5 Operators
2.0 Command Syntax
2.1 Expressions
2.2 Statements
2.3 Sub-Routines training
2.4 Control Syntax
3.0 Data Manipulation Tasks
3.1 Canceling Edits & Deleting Records
3.2 Posting Records
3.3 Inserting & Editing Records
3.4 Opening a Database
3.5 Calculated Fields
3.6 SQL Builder
Level 7
1.0 Database Component1.1 Design Time Tools
1.2 Runtime Techniques
2.0 ADO
2.1 Introduction to ADO
2.2 ADO Connections
2.3 ADO DataSet
2.4 ADO Table
2.5 ADO Queries
3.0 Quick Reports
3.1 Creating a Quick Report
3.2 Creating a Page Header
3.3 Creating a Column Header
3.4 Creating a Detail Band
Level 8
1.0 DeBugging1.1 Introduction to Debugging
1.2 Parameters
1.3 Setting Breakpoints
1.4 Trace Into
1.5 Run to
1.6 The Call Stack
1.7 Tracing into the VCL
1.8 Using a Watch
1.9 Application Source
1.10 Evaluate Modify Window
1.11 The Inspect Window
1.12 Breakpoints
1.13 Output Debug Strings
1.14 Debugger Options
2.0 Exception Handling
Level 9
1.0 The Action Manager1.1 Using the Action Manager
1.2 Action Toolbar
1.3 Action Menu
1.4 Associating Images
1.5 Creating a Sidebar
1.6 User Preferences
1.7 Enabling Actions
1.8 Embedded Dialog Boxes
1.9 Augmenting Standard Actions
2.0 Runtime Instantiation
2.1 Auto Creating Forms
2.2 Explicit Instantiation of Form
2.3 Conserving Resources
2.4 Using ShowModal
2.5 Splash Screen
2.6 Instantiating Components
2.7 Adding Action to Instantiated Objects
2.8 Working with Properties
Level 10
1.0 Application Events
1.1 Application Event Object
1.2 Handling Application Events
1.3 Using Resource Strings
2.0 Multi-threading
2.1 Sorting Demo
2.2 Using the TThread Object
2.3 Creating a New TThread
2.4 Using a TThread Descendant
2.5 Polymorphism
2.6 Summary of Sorting Demo
2.7 Front-end to the Background Query Demo
2.8 Using a TThread Descendent
3.0 Drag & Drop Technique
3.1 Drag & Drop Demo
3.2 Setting Component Properties for Drag & Drop
3.3 Drag & Drop Event Handlers
Level 11
1.0 Basic Component Creation1.1 Overview of Component Creation
1.2 Selecting the Ancestor Component
1.3 Redeclaring Properties
1.4 Overriding the Constructor
1.5 Formatting the DateTime String
1.6 Internal Fields
1.7 Adding Properties
1.8 Adding an Owned Object
1.9 Dynamically Adjusting the Component
1.10 Installing the Component
1.11 Changing the Ancestor Class
1.12 Adding an Icon
2.0 A Pseudo-Visual Component
2.1 Creating a Descendant of the Hint Window
2.2 Creating the New Hint Window
2.3 Instantiating the New Hint Window Class
2.4 Displaying a Hint
2.5 Cleaning Up
2.6 Using This New Component)
Level 12
1.0 Creating Property & Component Editors1.1 The TPie Component
1.2 Component & Property Editors training
2.0 Creating a Tray-Notification Icon
2.1 Introduction to Tray-Notification Icons
2.2 Creating the TTrayNotifyIcon
2.3 The TIcon Manager
2.4 Using the TrayNotificationIcon
Der Kurs kann auch auf Deutsch durchgeführt werden.

Thursday, March 4, 2010

"C# 2010" Schulung - 3 Tage





Dauer der "C# 2010" Schulung

  • 3 Tage

  Voraussetzungen

  • Geringe Programmiererfahrung sind von Vorteil.

  Vergleichen Sie auch

  • Unsere anderen C# Schulungen (5 Tage) - oder unsere C# 2008 Schulungen

  Inhalte der "C# 2010" Schulung

  • Einführung in C# 2010
    (C-Sharp) und .NET (Dot-Net)
    • Gegenüberstellung von C#, C++
      und Java
    • Common Language Runtime (CLR),
      "managed code" und "managed data"
    • Common Type System (CTS),
      Common Language Specification
    • Microsoft Intermediate
      Language (MSIL)
    • Überblick über die .NET
      Framework Class Library
  • Einführung in die
    Programmiersprache C# 2010
    • Kontrollstrukturen,
      Operatoren, Datentypen, Structures
    • Arrays, Strings, Collections,
      Namensräume, Unsafe Code
    • Memory-Management, Referenzen,
      Garbage Collection
    • Delegates und Events
  • Objektorientierte
    Programmierung mit C# 2010
    • Klassendefinition, Methoden,
      Attribute, Properties, Zugriffsmodifizierer
    • Konstruktoren, Destruktoren,
      Vererbung, Polymorphie, Schnittstellen/Interfaces
    • Generische Klassen (Templates,
      Generics), partielle Datentypen
    • anonyme Methoden, Enumeratoren
      mit "Yields"
  • Übersicht: Entwicklung von
    Software auf Komponentenbasis mit C# unter .NET
    • Kommunikation von
      Softwarekomponenten unter .NET, Assemblies und Reflection
    • Einführung in Webservices,
      Einführung in Remoting
    • Interoperabilität von COM mit
      .NET
  • Übersicht: Programmierung
    grafischer Benutzeroberflächen mit Windows Forms und WPF
    • Fenster, Dialoge, Controls,
      Zeichnen, GDI+
    • Menüs, Splitter, Property
      Pages, Ereignisse, Internationalisierung
  • Übersicht: Programmierung von
    Webanwendungen mit ASP.NET
    • Sessionmanagement und
      Formulare unter ASP.NET
  • Übersicht: ADO.NET
    • Einführung in das
      ADO.NET-Modell
    • Databinding und XML
      Unterstützung in ADO.NET
  • Weitere Themen
    • .NET 3.0 und .NET 3.5 SP 1
    • Übersicht über die neuen .NET
      Spracherweiterungen: Lambda Ausdrücke, anonyme Methoden, Extension Methods
    • LINQ, WPF, WF, WCF, Entity
      Framework
    • ASP.NET Data Services, ASP.NET
      Ajax, AJAX Control Toolkit
    • .NET 4.0 Neuerungen


  Preis der Schulung "C# 2010"

  • 1050,00 € zzgl. MwSt./Person (max. 5 Teilnehmer, um Ihren Lernerfolgt zu
    garantieren)

  Nächster Termin

Thursday, February 25, 2010

das "Netz der unbegrenzten Möglichkeiten" Zitat aus dem Opera Buch von R. Steyer.

Wenn Amerika in der Vergangenheit das »Land der unbegrenzten Möglichkeiten« genannt wurde, passt zum Internet die Beschreibung »Netz der unbegrenzten Möglichkeiten«. Das Internet ist heutzutage zum Bestandteil des täglichen Lebens geworden und dennoch immer noch absolut »hipp«. Obwohl man sich schon lange an das Internet gewöhnt hat, überrascht es immer auf das Neue mit ungeahnten Möglichkeiten. Es ist spannend und unterhaltsam auf der einen Seite, aber auch extrem nützlich für denjenigen, der es richtig zu nutzen versteht.


Weiterlesen unter :http://online-lernen.softwareacademy.de/Home/Details/Einleitung_1

Wednesday, February 24, 2010

Das Vorwort des Opera 5.x Buches ….

Herzlich Willkommen zum Surfen im Internet mit dem Opera-Browser. Dem an sich schon genialen World Wide Web ist mit diesem Browser ein Surfbrett an die Seite gestellt worden, das Seinesgleichen sucht. Während die etablierten Platzhirsche bei den Browsern immer fetter werden, stellt der norwegische Opera-Browser der Firma Opera Software AS ein schlankes und dennoch unvergleichlich leistungsfähiges Konzept bereit, mit dem das Surfen im Internet zum reinen Vergnügen wird.

So beginnt das Lesevergnügen des Opera –5 Buches auf den Seiten der SoftwareAcademy.de

Lesen Sie weiter unter http://online-lernen.softwareacademy.de/Home/Details/Vorwort_0

Tuesday, February 23, 2010

Friday, January 22, 2010

Silverlight-Kurs - 3 Tage, 1.999,- EUR Wiesbaden, Mainz, Bingen

Was ist Silverlight?
A.Silverlight Übersicht
B.Geschichte
I.Microsoft-Technologien zu Silverlight
C.Introducing Silverlight
I.Silverlight Architektur
II.Silverlight-Versionen
III.Silverlight Hosting
IV.Supported-Plattformen
V.Supported-Browser
VI.Future-Plattformen
2.What 's neu in .NET Framework 3.5-A.Overview
B.Windows Presentation Foundation (WPF) I.The Extensible Application Markup Language (XAML)
C.Windows Communication Foundation (WCF) I.Web Service Technologies
II.Windows Communication Foundation (WCF)
III.WCF-Beispiel
D.Windows Workflow Foundation (WF)
E.Windows CardSpace
F.Language Integrated Query (LINQ)
G.LAB: Training Tool mit WPF und WCF
3. Die Silverlight Framework-A.Overview-I.Silverlight im Vergleich zu WPF
B.Installing Silverlight
C.Silverlight-Tools
D.Silverlight Sprachen I.Dynamic Language Runtime (DLR)
II.JavaScript
III.C#
IV.Visual Basic / VBx
V.IronPython
VI.IronRuby
E.Windows Live Services
F.Example Implementierungen I.Microsoft PopFly
G.Silverlight ASP.NET-Steuerelementen I.The Asp: Silverlight Control
II.The Asp: MediaPlayer Control
H.Expression Blend
I.Accessing das HTML-DOM von Silverlight
J.Accessing Silverlight von JavaScript
K.Embedding Schriftarten
L.Going Vollbild
M.Creating eines Silverlight-I.The-Silverlight-Anwendungsprojekts
II.Designing die XAML
III.Wiring auf die Schaltfläche
IV.Silverlight Project Architecture
N.Creating eine Silverlight-Animation
O.LAB: Erstellen einer einfachen Silverlight-Anwendung
4. Silverlight-Steuerelemente A.Overview
B.Layout Controls I.Canvas Control
II.StackPanel Control
III.Grid Control
C.User Interface Controls I.Border Control
II.Button Control
III.Calendar Control
IV.Checkbox Control
V.DatePicker Control
VI.HyperlinkButton Control
VII.Image Control
VIII.RadioButton Control
IX.RepeatButton Control
X.ScrollViewer Control
XI.Slider Control
XII.TextBlock Control
XIII.Textbox Control
XIV.ToggleButton Control
D.User-Steuerelemente
E.Custom-Steuerelemente
F.Designing User Interfaces I.Skinning-Steuerelemente und Vorlagen
II.Visual State Manager (VSM)
G.LAB: Erstellen einer Silverlight Data Entry Form
5. Vernetzung In Silverlight-A.Overview
B.Sockets-Programmierung
C.Service Oriented Architecture-I.Serialization
II.Web-Services
III.Windows Communication Foundation (WCF)
D.Other-Netzwerk-Protokolle I.Plain Old XML (POX)
II.JavaScript Object Notation (JSON)
III.Representational State Transfer (REST)
E.Syndication Protokolle I.Really Simple Syndication (RSS)
II.ATOM
F.Windows Azure und Live Services
G.Lab: Networking In Silverlight
6. Zugreifen auf Daten, die mit Silverlight A.Storing Data in Code-I.Variables
II.Collections
B.Working mit XML
C.Language Integrated Query (LINQ)
D.Isolated Storage
E.Data Bindung
F.Lab: Accessing Data In Silverlight
Inhouse-Kurs: http://silverlight-schulung.softwareacademy.de/

Thursday, January 21, 2010

Schulung Delphi - Schulungen in Kylix - Delphi Crashkurse - Delphi Workshops - Dreamweaver Schulung - Delphi Softwareentwicklung Frankfurt Wiesbaden Mainz

Schulung Delphi - Schulungen Kylix - Delphi Trainings - Delphi Workshops - Delphi Crashkurse - Delphi Präsentationen mit ausgebildeten Pädagogen auch in Kleinstgruppen und Inhouse - außerdem Delphi Datenbank Software Entwicklung Beratung und Coaching beim Datenbankdesign sowie Unterstützung bei der Portierung auf Delphi z.B. Pascal -> Delphi, Fortran -> Delphi, Clipper -> Delphi, dBase -> Delphi usw.

Tags: Delphi Schulungen - Delphi Workshops - Kylix Schulung - C++Builder Schulung - Delphi Seminare Trainings und Präsentation - Delphi Softwareentwicklung und Datenbankprogrammierung - Training Clipper - Client-Server Datenbanken - Analyse Beratung Entwicklung

Softwareentwickler / Delphi-Entwickler (m/w)

Softwareentwickler / Delphi-Entwickler (m/w)

•In einem hoch innovativen internationalen Top-Team mit internationaler Kundschaft arbeiten
•Ideen und Impulse für die Entwicklung und Weiterentwicklung unserer Lösungen für Softwaremanagement und –Automation im Microsoft Windows Umfeld einbringen
•Viel Know-how aufbauen und selbständig arbeiten
•Arbeitsplatz mit spannenden Perspektiven in Dübendorf, 10% Reisetätigkeit
Ihre spannende Herausforderung:

Sind Sie ein begeisterter Delphi-Programmierer (m/w), der/die Spaß daran hat, von der ersten Stunde an dabei zu sein, wenn es darum geht, gemeinsam mit verschiedenen Entwicklerteams an unseren führenden Lösungen für Softwaremanagement und -Automation im Microsoft Windows Umfeld für unsere internationale Kundschaft mitzuarbeiten? Einem Projekt, in dem die Software Management Module praxisorientierte Lösungen bieten, mit denen sich Windows Systeme vom Notebook bis hin zum Server, unternehmensweit erkennen, installieren, konfigurieren, mit Sicherheits-Patches aktualisieren, überwachen, sichern und wiederherstellen lassen? Dann wartet ein breites Spektrum auf Sie: Programmieren, Anforderungen an die Software erarbeiten, Architektur erstellen und an Design, Planung und Umsetzung mitwirken. Genauso sind Ihre fundierte Softwaredesign- und Architektur-Erfahrung und Ihre Kreativität in punkto Features und Check-Ups gefragt. Wie stellen Sie die Qualität kompromisslos sicher – von Anfang an? Indem Sie z.B. die Bedürfnisse des Benutzers und die Gebrauchstauglichkeit der Software in benutzerorientierten, interaktiven Prozessen einbinden, wobei Sie auch mal einige Tests selbst durchführen. Und durch den täglichen Austausch mit Testern und Entwicklern ebenso wie durch enge Abstimmungen mit dem Helpdesk-Team – und natürlich mit unseren internationalen Entwicklungsteam in Südafrika . Spannend genug für Sie? Ist es auch!

Dann prüfen Sie jetzt, ob auch Ihr Profil zu uns passt:

Studium oder Ausbildung im IT-Bereich mit 3 bis 5 Jahren Berufserfahrung als Entwickler (m/w)
Klasse wäre es, wenn Sie bereits 3 Jahre Erfahrung als Delphi-Entwickler (m/w) vorweisen können
In jedem Falle haben Sie Grundkenntnisse über COM Programmierung, Multithreading und Services
Interaktive Entwicklung ist Ihnen ebenso vertraut wie der sichere Umgang mit verschiedenen Applikationen
Starkes Engagement und Interesse an unserer Software setzen wir voraus
Kommunikativ wie Sie sind, verfügen Sie über fließende Englisch- und Deutschkenntnisse
Gerne arbeiten Sie selbstständig und bewältigen anspruchsvolle Aufgaben
Was wir Ihnen noch zu bieten haben:

Sie können davon ausgehen, dass wir generell viel in die fachliche und persönliche Weiterentwicklung unserer Mitarbeiterinnen und Mitarbeiter investieren und alles tun, damit sie sich in unserem Umfeld ohne große Hierarchieebenen wohlfühlen. Neben intensiven Trainings lernen Sie alles, was Sie brauchen, im Training-on-the-Job. Darüber hinaus eröffnen wir Ihnen die Perspektive, sich je nach Talent und Neigung in verschiedenen Bereichen weiterzuentwickeln. Auch die sonstigen Rahmenbedingungen in unserem dynamischen, wachsenden Unternehmen werden Ihnen gut gefallen.

So machen Sie noch heute den ersten Schritt – bewerben Sie sich jetzt

Wednesday, January 20, 2010

Delphi programmierer sucht aufträge

Software-Entwicklung / Programmierung
Beratung / Consulting
Coaching / Schulung / Training
Projektmanagement / -leitung / Organisation / Koordination

Fachlicher Schwerpunkt: Softwarearchitekt Delphi / C# / VB.NET / ASP.NET / VBA

Festanstellung kommt in Betracht, aber freiberufliche Mitarbeit bevorzugt

Voraussetzung für Festanstellung: Festeinstellung ab 70K EUR Brutto Jahreseinkommen

Ausbildung:

Diplom Visual Basic.net (VB.NET) Programmierer (ILS)
Einsatzort:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Innerhalb von Deutschland

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
--Deutschland: komplett
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Außerhalb von Deutschland

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



[EUROPA - EU-MITGLIEDSSTAATEN]



--komplett in: Österreich

[EUROPA - NICHT EU-LÄNDER]

--komplett in: Schweiz

Fremdsprachen:
Deutsch
Englisch

Hardware:

PC
Betriebssysteme:
MS-DOS
Windows

Windos 2003 Server, Windows XP
Programmiersprachen:
Basic: vb.net
C#

Delpi: 6, 7, 2005, 2007
Java
JavaScript
Makrosprachen: VBA
Modula-2
Pascal
PHP
c#, asp.net, vb.net, Flex (Actionscript)
Datenbanken:
Access
BDE
DAO
Interbase
MS SQL Server
MySQL
ODBC
Oracle
Paradox
SQL
dBase, NexusDB, FireBird, Cache (Caché)

Datenkommunikation:
Internet, Intranet
LAN, LAN Manager
Router
SNMP
TCP/IP
Windows Netzwerk
Produkte/Standards/Erfahrungen:
Visual Studio 2003
Microsoft Net

Delphi

XML

UML

OOP

OOD

MS-Office

MS-Publisher

LAN

Internet

HTML

Flash

Paint Shop Pro



Branchen:

- Industrie

- Handel

- Internet

- Musik

- Unternehmensberatung

- Betriebswirtschaft

- EDV

- Banken

- Chemie

- Automotive

- Automobil

- Healthcare

- Medizin



Projekte:

Dealer Management System (DMS)

Ein japanischer Automobilhersteller

hat im Jahr 2008 damit begonnen, ein komplett neues Warenwirtschaftsystem für

ca. 500 Autohäuser in Deutschland zu entwickeln.

Als externer Mitarbeiter ("technische Projektleitung") bestanden meine Aufgaben u. a. aus



• Erstellung Architektur – Konzept (Multitier: DB, Server-Applikation,

Client)

• Dokumentation via UML

• Umsetzung von Design Patterns

• Erstellung DB-Modell

• Schulung der Programmierer in aktuellen Softwaretechniken und

Dokumentation via UML



Das gesamte System ist von mir als skalierbares, wieder verwendbares

Framework multilingual und für den Einsatz in mehreren europäischen Ländern

konzipiert worden. Es enthält bereits grundlegende Funktionen wie

Rechte- und Benutzerverwaltung, komplexe Fenstertechniken und

Datenbank-Services, so dass es auch in anderen Bereichen sofort einsetzbar ist.



Projektsprache ist Englisch.



Zeitraum

05/2008 – 12/2009



Kenntnisse / Methoden / Tools

MySQL, UUID, MDA, OOP, UML, DesignPatterns, PHP, Zend Framework, Adobe Flex 3,

Actionscript 3, AMFPHP, RemoteObject

----------





Laborinformationssystem (LIS)

In freiberuflicher Mitarbeit bei der Firma xxx aus Mannheim habe ich die

Bereitstellung und Installation eines LIS Server-Systems, sowie die Anbindung

verschiedener Laborautomaten daran realisiert und die technische

Teilprojektleitung übernommen.



Zeitraum

01/2008 – 6/2008



Kenntnisse / Methoden / Tools

Windows 2003 Server, SQL, Oracle, Citrix, RS232, NPort-Server, TCP/IP, LAN,

JavaScript, HL7

----------





Softwareanalyse

Im Vorfeld einer etwaigen Neuentwicklung habe ich in Zusammenarbeit mit der

xxx GmbH aus Berlin für einen Automobilhersteller ein Gutachten

eines bestehenden Soft- und Hardwaresystems (deutschlandweit mehr als 500

angeschlossene Autohäuser) erstellt. Ziel war die Erschaffung einer Bewertungs- und

Entscheidungsgrundlage.



Zu den Aufgaben gehörten u. a.

- Anforderungsanalyse und Prozessanalyse in mehreren Autohäusern

deutschlandweit sowie in der Verwaltung und angeschlossene

Tochter-Unternehmen (Bank, Versicherung)

- Quellcode Review

- Analyse der Hardwarearchitektur (Serverfarm)

- Vorstellung moderner Technologien der Softwareentwicklung

- Erstellung und Vorführung von Präsentationen

- Erstellung eines Gutachtens mit Handlungsempfehlung



Unterstützend haben mehrere Hochschulen (teilweise unter meiner Leitung)

mitgewirkt.



Zeitraum

06/2007 - 12/2007



Kenntnisse / Methoden / Tools

Visual Paradigm (UML), TCP/IP, LAN, Actionscript, Flash, Flex, C#/.net,

Webservice, verteilte Anwendungen

----------





Medizintechnik

Für ein weltweit führendes Unternehmen in der Medizintechnik und Labor-EDV

(Laborinformationssysteme) habe ich als Technischer Projektleiter folgende

Aufgaben wahrgenommen:



- Konzeption und Planung Einsatz von Servern und med. Geräten in Krankenhäusern

- Netzwerkplanung

- Schnittstellenanpassung zwischen verschiedenen Softwaresystemen

- Installation von Serversoftware (LIS)



Zeitraum

09/2006 - 06/2007



Kenntnisse / Methoden / Tools

Cache, Oracle, LIS, Medizintechnik, HL7, Win2003

----------





Software zur Erstellung von Rätseln

Für ein führendes Unternehmen in der Rätselbranche (große Tageszeitungen,

Illustrierte, etc.) wurde eine vorhandene Client/Server-Softwarelösung

modernisiert und in eine mehrschichtige, verteilte Lösung überführt.



Meine Aufgaben waren:



- OOP-Konzeption und Planung

- Neues Design der Oberfläche

- Erstellung von WYSIWYG-Editoren für Kreuzwort-, Waben- und andere Rätsel

- Vereinfachung des Workflows

- Redaktionelle Arbeiten über das Internet mit einer Windows-Software

ermöglichen

- Entwicklung einer Webanwendung zur Rätselerstellung für Endkunden



Zeitraum

03/2006 - 08/2006



Kenntnisse / Methoden / Tools

Delphi 7, MySQL, SQL, RemoteObjects (RemObjects), OOP, OOD, InfoPower, UML

----------





Komplettlösung für Unternehmen im KFZ-Teile-Handel und Werkstätten

Für ein Unternehmen aus dem Saarland war ich bei der Weiterentwicklung

einer Client-Server-Anwendung im KFZ-Bereich behilflich.

Folgende Punkte gehörten u. a. zu meinen Aufgaben:



- Autoteilekatalog-Anbindung (Silverdat/Coparts/TecDoc, etc.) über DDE bzw. COM

- Implementierung der Differenzbesteuerung von Gebrauchtfahrzeugen

- Import-Funktionen

- Erweiterung des Funktionsumfangs und Oberflächendesign



Zeitraum

01/2006 - 03/2006



Kenntnisse / Methoden / Tools

Delphi 6, MySQL, DDE, COM, List & Labels, XML, Verschlüsselung (Blowfish)

----------





Unternehmensmanagement-Software

In Zusammenarbeit mit einer Universität aus NRW, einem großen deutschen

Kreditinstitut (Bank) und einer Softwarefirma aus Düsseldorf wurde eine

Software zur Entwicklung von Unternehmensstrategien erstellt. Meine Aufgabe

war ein weiteres Modul zur Erfassung von Unternehmensdaten

('Planprozessunterstützung') zu entwickeln.

Das gesamte Projekt wurde in einer 3-Tier-Anwendung (OOP) realisiert

(Database -Provider / Dataholder, Object - Modell / Geschäftslogik und

Anwendungsschicht).



Zeitraum

10/2005 - 12/2005



Kenntnisse / Methoden / Tools

Delphi 2005, ACCESS, SQL-Server, SQL, ADO, VirtualTreeView

----------





Gebäudedaten-Erfassung

Für ein Unternehmen in Köln habe ich an der Internationalisierung einer

bestehenden Softwarelösung zur Erfassung von Gebäudedaten mitgearbeitet.

Kern der Arbeit war der Austausch von einsprachigen Standard - und

Datenbank -komponenten gegen multilinguale. Die gesamte Oberfläche der

Software musste überarbeitet werden.



Zeitraum

08/2005 - 10/2005



Kenntnisse / Methoden / Tools

Delphi 6, Paradox, BDE, SQL

----------





WebShop-Lösung unter Windows

Für die Firma Stellirini Deutschland GmbH habe ich unterstützend bei

einem FaceLifiting einer bereits vorhandenen Software-Lösung mitgewirkt.



Zeitraum

07/2005 - 09/2005



Kenntnisse / Methoden / Tools

Delphi 7, Borland Database Engine (BDE), PHP , FTP, HTTP, SQL

----------





Internet Relay Chat (IRC) inkl. Video/Audio-Streaming

Für die Firma Xplus Agency (www.xplus-agency.de) habe ich einen IRC-Client

inkl. Video/Audio-Chat (WebCam) implementiert. Ziel war, durch Verschmelzung

von IRC- und Messengerfunktionen (Video / Audio-Streaming) ein marktführendes

Produkt im Bereich Internet-Communication in bester Qualität zu erhalten.

Zusätzlich würde eine Anbindung an ein bekanntes Forensystem realisiert.



Zeitraum

04/2005 - 07/2005



Kenntnisse / Methoden / Tools

Delphi 7, Internet Relay Chat (IRC) Protocol (RFC 1459), Microsoft WDM Image

Capture (Win32), GSM 06.10, AVI, MPEG, JPG, TCP/IP, UDP, PHP

----------





Messstellen Datenbank

Für eine Tochterfirma des Chemie-Unternehmens DEGUSSA habe ich eine vorhandene

Datenbank zur Erfassung der Daten von Messstellen in einer

Chemie-Anlage weiterentwickelt und erweitert.
Ziel war es, jederzeit einen Überblick über Störungen an den Messstellen und über längere Perioden hinweg eine Übersicht über alle Rückmeldungen zu erhalten, um höchste Qualitätssicherung zu gewährleisten.



Zeitraum

08/2004 - 03/2005



Kenntnisse / Methoden / Tools

MS ACCESS, VBA (Visual Basic for Applications)

----------


Flash-Präsentation

Für das Bildungsministerium eines deutschen Bundeslandes habe ich eine Flash-Präsentation zur Unterstützung eines Vortrages bzgl. der Zusammenarbeit mit der südafrikanischen Provinz Eastern Cape auf der Grundlage bereits vorhandener Printmedien erstellt.

Zeitraum

11/2004 - 01/2005

Kenntnisse / Methoden / Tools

SWISH (Flash-Clone), HTML, DTP, PaintShopPro

----------

Abrechnungsmodul Provisionen

Für eine Unternehmensberatung wurde in eine bereits vorhandene Client/Server Software ein komplexes Abrechnungsmodul zur erechnung von Provisionen der Mitarbeiter/Vertriebspartner implementiert. Zusätzlich wurde ein Upload der aufbereiteten Daten ins Internet entwickelt.

Zeitraum

07/2003 - 08/2004



Kenntnisse / Methoden / Tools

Delphi 6, Interbase, Firebird, SQL, TCP/IP, FTP, PHP, PDF, MySQL, IBObjects,

WPTools

Alle Funktionen und Datenstrukturen in Delphi wurden rekursiv implementiert

----------

Plattform zur multimedialen Texterstellung

Für ein Projekt an einer deutschen Universität wurde eine multimedia-gestützte

Plattform zur Erstellung wissenschaftlicher Texte entwickelt. Ziel war das

Erstellen von Texten mit Hilfe von multimedialen Vorlagen (Videos, Bilder,

Grafiken) in PDF zu vereinfachen.
Zeitraum

02/2003 - 06/2003

Kenntnisse / Methoden / Tools

Delphi 6, PDF, JPG, AVI

----------
Warenwirtschaftssystem

Für ein Unternehmen in der EDV-Branche habe ich ein komplettes Warenwirtschaftssystem (Faktura, Lagerbestandsführung, Kunden- und Lieferantenlisten, Barcode-Erfassung) inkl. WebShop-Export und Großhandels-Import erstellt.
Zeitraum

01/2000 - 01/2002
Kenntnisse / Methoden / Tools

MS-ACCESS, HTML, PHP, FTP
----------

Softwareentwicklung und Netzwerkplanung

Als Gesellschafter einer 3 Personen - GbR habe ich oftwareentwicklung (MS-Access) und Netwerkplanung für mittelst. Unternehmen durchgeführt. Zusätzlicher Schwerpunkt war die Erstellung von Internetseiten.
Zeitraum

08/1998 - 09/1999



Kenntnisse / Methoden / Tools

MS-ACCESS, HTML, Router, Switch, TCP/IP, LAN/WAN

----------

Weitere Tätigkeiten

Internetseitenerstellung (in c# / asp.net)

VBA-Excel Automatisierung für Steuerberater

VBA-Word Automatisierung für mittelst. Unternehmen (Steuerberatung)
VBA-Excel Automatisierung für Konstruktionsbüro (E-Technik)

SMS-Tool für ein mittelst. Unternehmen (Delphi)

Schulungen in MS-Office & Internet im Auftrag des Landes NRW

MySQL-Datenbankentwicklung für mittelst. Unternehmen

Win2003 Server Administration

Mitarbeit Realisierung einer Info-Base für medizinische Geräte (Delphi, Nexus)

Eigene Softwaretools, z.B. Synchronisations-Software, Gehörbildung, Mathematik-Lernprogramm 9. Klasse (Satz des Pythagoras), etc.

PDF Sparkle for Silverlight kostenloser Download

PDF Sparkle for Silverlight is a fully managed C# library for Silverlight 3.0 designed to create industry standard PDF documents dynamically with API calls.

PDF Sparkle for Silverlight is a very simple, yet powerful PDF generation component. It provides a functionality similar to the original .NET System.Drawing.Graphics class, but for every page of the PDF document being created.
Top Features:
•Easy to use API (similar to GDI+)
•Bookmarks and Hyperlinks
•PDF viewer preferences
•Custom PDF properties
•128-bit Encryption
•Image alpha channels
•RGB, CMYK and Grey PDF color schemes
•True Type font embedding and subsetting
•Clipping areas (Rectangular, Polygonal, Elliptical and Complex paths)
•General transformation matrix (Translation, Rotation, Skew and other transformations)
•Pen styles, widths, colors, caps and joins
•SolidColor, LinearGradient, RadialGradient and Texture brushes
•Path composition (Segments of joined lines and Bezier curves)
•Lines, Rectangles, Ellipses, Polylines, Polygons, Arcs, Chords and Pies
•Bezier curves and Splines
System Requirements:
•PC with an Intel or compatible Pentium 600 MHz or higher processor
•Silverlight 3.0
•Minimum of 256 Mb of RAM (512 and more recommended)
•Memory requirements vary according to the nature of the project

Sunday, January 10, 2010

was sind Arrays?

Ein Array ist eine Ansammlung oder Sammlung von mehreren Objekten gleichen Typs. In einem Array kann man beliebig viele Datentypen mit ihren Werten und Objekten speichern.

AlphaBlend-Funktion

Diese Funktion kopiert ein Bitmap von einem Device auf ein anderes Device, wobei ein Alphawert angegeben werden kann, der das Bitmap durchscheinen lässt.

Declare Function AlphaBlend Lib "msimg32.dll" ( _
ByVal hdcDest As Long, _
ByVal xDest As Long, _
ByVal yDest As Long, _
ByVal WidthDest As Long, _
ByVal HeightDest As Long, _
ByVal hdcSrc As Long, _
ByVal xSrc As Long, _
ByVal ySrc As Long, _
ByVal WidthSrc As Long, _
ByVal HeightSrc As Long, _
ByVal Blendfunc As Long) As Long

Saturday, January 9, 2010

Spam

FROM: James Williams
Grosvenor Square
London, W1E2LQ
United Kingdom
DEAR Sir/Madam,
The inspiration to contact you is simply divine providence; I am making this proposition because I have to seek the partnership of a reliable person to help me actualize this project. I am Davison Frank, attorney/solicitor and investment consultant based in ENGLAND, UNITED KINGDOM.
While I was attending a business luncheon in Berlin, Germany I got introduced to a renowned German businessman and property mogul, Mr. Andreas Schranner (of the blessed memory). He engaged my services as attorney and investment consultant and my primary assignment was to spearhead his investment forays in the ENGLAND. Three months later I invited him to ENGLAND and under my professional guidance and based on my advice he made a fixed deposit of 17, 800, 000, 00 (Seventeen Million, Eight Hundred Thousand United States Dollars).
This deposit was for 2 years and upon maturity I made effort to contact my client but I could not reach him or any member of his family.  I was forced to travel to Germany and there I got the tragic news that on July 31 2000, my client Mr. Andrea’s schranner, his wife Maria, and their two children perished in the air France Concorde New York bound flight; Please Click here and find out what happened to the family 

I have made efforts to locate any member of his family since then (at least with strong biological links to my late client) for the claim of the fund without success. The search to find a close relation is one that has consumed much of my time and resources. The institution is asking me to either present a next of kin to late Mr. Andreas Schranner or forfeit the deposit. My proposal is to package and present you as next of kin to late Mr. Andreas Schranner and process the fixed deposit and transfer the fund to you for our mutual benefit. My capacity as solicitor/investment consultant to my late client gives me the discretion to package and transfer the deposit to you. After completion of the transaction, I will give you 35% for your effort, 65% for me.
I considered this a better step than allowing the fund to be confiscated by the bank after awhile because all my  findings indicates that the entire family of Late Schranner was consumed in the said  air disaster.
I will wait for your reaction and response and then together we can jumpstart this project and nurture it to reality.  Please get in touch with me by my email.  You are also advised to send to me your full information as below:
1. YOUR FULL NAME
2. YOUR MOBILE TELEPHONE AND FAX NUMBER.
3. YOU’RE MAILING ADDRESS.
4. YOUR AGE AND OCCUPATION.
5. YOUR COMPANY NAME (IF YOU HAVE EXISTING COMPANY)
I await your response.
Bar. James Williams

Java Schulung: eine Klasse in Java

Eine Klasse in Java

 

public class Sparbuch {

public void auszahlen( float betrag )

{ ...

}

public void einzahlen( float betrag )

{ ...

}

public void berechneZinsen()

{ ...

}

private float saldo;

private float zinssatz;

}

Für jede Klasse wird in

Java eine eigene Datei

angelegt.

Beispiel: Sparbuch.java

Operationen,

(Methoden, Routinen)

Attribute

Blockanfang

   

Java Schulung Kapselung

Kapselung

Kapselung

Kapselung bedeutet, daß auf alle nicht exportierten Eigenschaften eines Objekts von außen nicht direkt zugegriffen werden kann.

• Wird die konkrete Repräsentation des Zustands verborgen, spricht man auch vom Geheimnisprinzip (Information Hiding, nach [Parnas72]).

• Kapselung heißt auch, daß die Signatur und das abstrakte Verhalten einer Operation bekannt ist, die Implementation aber verborgen bleibt.

Nicht alle oo Programmiersprachen realisieren die Kapselung von Zustand und Implementationen geeignet.

Java Schulung: Abstrakte Datentypen

Abstrakte Datentypen

• Klassen sind die logische Erweiterung des Konzepts des ADT.

• In prozeduralen Sprachen werden ADT's durch Records (Pascal),

Structs (C), Common-Blöcke (Fortran) oder Copy-Strecken

(Cobol/PL1) realisiert.

• Dies sind jedoch lediglich reine Datencontainer.

• In der Objektorientierung werden diese ADT's um die Deklaration der

möglichen, erlaubten Manipulationen erweitert.

Klasse Daten + Methoden

• Ein Objekt ist eine Instanz einer Klasse

– Der entsprechende Speicherplatz für die Daten ist alloziiert und die

Methoden können auf diese zugreifen

Java Schulung: Agenda: Java Grundlagen

Agenda: Java Grundlagen

• Java Syntax

• Java Datentypen

• Kontrollstrukturen

• Klassen und Objekte

• Überschreiben/Überladen von Methoden

• Sichtbarkeit

• Behandlung von Ausnahmen (Exceptions)

• Die wichtigsten Java Pakete

RegexMatchEvaluator

RegexMatchEvaluator
RegexMatchEvaluator stellt eine Erweiterung der Regex-Methode Replace dar.
Um den RegexMatchEvaluator zu verwenden, benötigt man eine Instanz von MatchEvaluator. Diese Klasse befindet sich im gleichen Namespace wie Regex und wird folgendermaßen instanziert:

MatchEvaluator myEvaluator = new MatchEvaluator([Methode]);



Außerdem braucht man eine Methode mit einem String als Rückgabewert:



C#-Code:



public string ReplaceMatch(Match m)
{
[IF-Anweisungen]
return [Ersetzung];
}



(Sollten Sie dieses Beispiel in einer Konsolenanwendung ausprobieren, so fügen Sie im Methodenkopf vor „string“ das Schlüsselwort static ein.)

Den Parameter [Methode] bei der Instanzierung ersetzt man in diesem Beispiel mit ReplaceMatch, da dies der Name der Methode mit String-Rückgabe ist.


Das Pattern, das wir bisher dem Regex-Konstruktor bekannt gegeben haben, wird erst jetzt der Replace-Methode übergeben. Das Ersetzen mit der statischen Replace-Methode sieht allgemein so aus:



C#-Code:



string [Variablenname] = Regex.Replace([Zu ersetzender String], [Pattern], [MatchEvaluator-Instanz]);



Beispiel:

In diesem einfachen Beispiel werden alle Beistriche durch eine leere Zeichenkette ("") ersetzt. Da der Ersatzstring unabhängig vom Treffer gleich bleibt, ist in diesem Fall die Verwendung von MatchEvaluator nicht besonders sinnvoll, denn die gleiche Aufgabe ließe sich auch einfacher mit der Replace-Methode durchführen.



C#-Code:



MatchEvaluator myEvaluator = new MatchEvaluator(ReplaceMatch);

string output = Regex.Replace("H,a,l,l,o", ",", myEvaluator);



Und die Methode:



C#-Code:



public string ReplaceMatch(Match m)

{


return "";


}



Die Variable output würde „Hallo“ enthalten, da von der Methode ReplaceMatch jeder gefundene Beistrich mit einer leeren Zeichenkette ersetzt wird.

Lösung mit der Replace-Methode von Regex:



C#-Code:



Regex.Replace("H,a,l,l,o", ",", "");



(Allgemein:



C#-Code:



Regex.Replace([ZuErsetzen], [Pattern], [Ersatz]);



)

Sinnvoll wird der MatchEvaluator, wenn wir Suchtreffer mit einem flexiblen String ersetzen möchten.


Beispiel:


- Ziel: Wir wollen alle „ae“ zum Umlaut „ä“, alle „oe“ zu … umwandeln


- Wir erstellen eine Instanz von MatchEvaluator mit dem Namen myEvaluator und übergeben dem Konstruktor den Namen der folgenden Methode:


- Methode:



C#-Code:



public string ReplaceMethode(Match m)
{
switch (m.Value)
{
case "ae":
return "ä";
case "oe":
return "ö";
case "ue":
return "ü";
case "Ae":
return "Ä";
case "Oe":
return "Ö";
case "Ue":
return "Ü";
default:
return "";
}
}



(Den default-Zweig im Switch-Case-Konstrukt brauchen wir, damit alle Codepfade einen Wert zurückgeben, wie es der Compiler haben will.)

- Durchführen der Ersetzung mit der Replace-Methode (Pattern: [aou]e):


string ersetzterString = myRegex.Replace("Franz faehrt von Muenchen nach Oesterreich, um einen Baer zu suchen.", "[aou]e", myEvaluator, RegexOptions.IgnoreCase);


- String nach der Ersetzung: Franz fährt von München nach Österreich, um einen Bär zu suchen.


- Erklärung: Alle ae, oe und ue im String werden je nach Treffer mit ä, ö oder ü ersetzt. Aufgrund von RegexOptions.CaseInsensitive trifft Regex auch Ae, Oe und Ue. (Bei jedem Treffer (Match) wird die Methode ReplaceMethode aufgerufen und der Treffer mit dem Rückgabewert der Methode ersetzt.)


(Weitere sinnvolle Ersetzungen wären, dass die Klasse, in der sich die Methode befindet, eine statische Int-Variable mit dem Ausgangswert 0 enthält. Diese Variable wird bei jedem Aufruf der Methode inkrementiert (um den Wert 1 erhöht) und als Ersetzungsstring zurückgegeben. Siehe: http://msdn2.microsoft.com/de-de/library...tor(VS.80).aspx)

regex Validieren von numerischen Benutzereingaben

Anmerkung zum Validieren von numerischen Benutzereingaben
Natürlich ermöglichen es reguläre Ausdrücke, zu überprüfen, ob ein String eine Zahl ist. Jedoch gibt es viele Eigenschaften, die zum Beispiel bei einer Kommazahl berücksichtigt werden müssen: Zu Beginn kann optional ein Plus- oder Minuszeichen stehen, das Komma kann vorkommen, muss aber nicht, es darf nicht das erste Zeichen oder letzte Zeichen sein und höchstens einmal vorkommen, weiters muss jedes Zeichen, das kein Komma oder Plus-/Minuszeichen ist, eine Ziffer sein, … All dies ließe sich noch erledigen, erfordert aber bereits ein relativ komplexes Muster. Und dann gibt es bei einigen Zahlentypen noch eine Eigenschaft, welche fast unmöglich zu berücksichtigen ist: Int hat eine Länge von 32 Bit. Zu lange Zahlen führen bei der Konvertierung zur Ausnahme OverflowException. Daher sollte man zur Validierung von numerischen Benutzereingaben auf Regex verzichten und die vom .NET-Framework (ab .NET 2.0) bereitgestellten Methoden nutzen: Zur Überprüfung, ob eine Zeichenfolge zu Int konvertiert werden kann, gibt es Int32.TryParse und für Double Double.TryParse.

Was ist Regex?

1. Was ist Regex

Regex ist die Abkürzung für „Regular Expressions“, zu Deutsch: „Reguläre Ausdrücke“. Wikipedia definiert Reguläre Ausdrücke als eine Zeichenkette, die der Beschreibung von Mengen beziehungsweise Untermengen von Zeichenketten mit Hilfe bestimmter syntaktischer Regeln dient. Regex ist ein mächtiges Werkzeug zum Validieren und Bearbeiten von Zeichenketten.

2. Verwendung von Regex in C#

Um Regex in einem C#-Programm nutzen zu können, muss zunächst der Namespace System.Text.RegularExpressions eingebunden werden: using System.Text.RegularExpressions; Um die Ausdrücke zu testen, erstellt man dann eine Instanz der Klasse Regex. Allgemein sieht dieser Befehl so aus: Regex myRegex = new Regex("[Pattern]"); Unter Pattern versteht man ein Muster, welches die Voraussetzungen beschreibt, wie eine gültige Zeichenkette auszusehen hat. Das Pattern kann beispielsweise beschreiben, dass eine Zeichenfolge nur gültig ist, wenn diese nur aus Zeichen von A – Z besteht. Oder, wenn diese nur Buchstaben, Ziffern und Strichpunkte enthält. Anstelle von [Pattern] übergibt man dem Konstruktor das Suchmuster als String. Um zum Beispiel nur Zahlen zuzulassen, wäre folgendes Pattern geeignet: ^[0-9]*$
Auf die Pattern werde ich in 4. Syntax von Regex näher eingehen. Anmerkung: Es wird empfohlen, bei komplexen Ausdrücken vor dem einleitenden Anführungszeichen des Pattern-Strings ein @-Zeichen zu setzen. Der Präfix @ bewirkt, dass im String vorkommende Anführungszeichen und umgekehrte Schrägstriche (Backslashes) weniger verwirrend angegeben werden können: Anführungszeichen, die im Pattern vorkommen, verdoppelt man, umgekehrte Schrägstriche können normal angegeben werden. Ohne @ müsste man vor einem Anführungszeichen einen umgekehrten Schrägstrich einfügen, umgekehrte Schrägstriche müsste man verdoppeln. (Wenn das Pattern zur Laufzeit definiert wird (z. B. bei Eingabe des Patterns in ein Textfeld während der Programmausführung), so gibt man Anführungszeichen und umgekehrte Schrägstriche normal an.) Die Instanz von Regex wird also folgendermaßen generiert: Regex myRegex = new Regex("^[0-9]*$"); Um zu überprüfen, ob das Suchmuster mit den gegebenen Daten (Inhalt von textBox1) übereinstimmt und anschließend das Ergebnis in eine Bool-Variable zu speichern, wäre folgende Befehlszeile notwendig: bool bedingungWahr = myRegex.IsMatch(textBox1.Text);

Regex check Currency value

The following code example illustrates the use of a regular expression to check whether a string has the correct format to represent a currency value. Note the use of enclosing ^ and $ tokens to indicate that the entire string, not just a substring, must match the regular expression.


#using <System.dll>

using namespace System;
using namespace System::Text::RegularExpressions;
int main()
{

// Define a regular expression for currency values.
Regex^ rx = gcnew Regex( "^-?\\d+(\\.\\d{2})?$" );

// Define some test strings.
array<String^>^tests = {"-42","19.99","0.001","100 USD"};

// Check each test string against the regular expression.
System::Collections::IEnumerator^ myEnum = tests->GetEnumerator();
while ( myEnum->MoveNext() )
{
String^ test = safe_cast<String^>(myEnum->Current);
if ( rx->IsMatch( test ) )
{
Console::WriteLine( "{0} is a currency value.", test );
}
else
{
Console::WriteLine( "{0} is not a currency value.", test );
}
}
}

This application connects to NNTP servers and downloads and combines

//------------------------------------------------------------------------------
//  <copyright from='2004' to='2005' company='Jerremy Koot and William Archbell'>
//    Copyright (c) Jerremy Koot and William Archbell. All Rights Reserved.
//
//    Please look in the accompanying license.htm file for the license that 
//    applies to this source code. (a copy can also be found at: 
//    http://nzb.wordtgek.nl/license.htm)
//  </copyright>
//-------------------------------------------------------------------------------
//
// File:    NNTP.cs
//
// Purpose: This application connects to NNTP servers and downloads and combines
//          messages that are listed in the NZB files that are supplied by the user.
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Net.Security;
using System.Text;
using System.Collections;
using System.Security.Authentication;
namespace NZB_O_Matic
{
	public class NNTPClient : TcpClient
	{
		private string m_Group;
		private int m_FirstMessage;
		private int m_LastMessage;
		private int m_EstimatedMessageCount;
		private bool m_PostingIsAllowed;
		private bool m_Connected = false;
		//variables/enums for stuff I added/changed
		private int m_ArticlePointer = 0;
		public enum Mode { MODE_READER, MODE_STREAM };
		private enum ArticlePart { WHOLE, HEAD, BODY };
        private string m_Hostname;
        private Stream m_Stream;
        private bool m_UseSSL = false;
		/// <summary>
		/// Is posting to the server allowed.
		/// </summary>
		public bool PostingAllowed
		{
			get
			{
				return m_PostingIsAllowed;
			}
		}
		/// <summary>
		/// Is the underlying socket still connected?
		/// </summary>
		public new bool Connected
		{
			get
			{
				return Client.Connected && m_Connected;
			}
		}
		private string ReadLine( StreamReader r)
		{
			try
			{
				return r.ReadLine();
			}
			catch( IOException io)
			{
				if( io.InnerException is SocketException)
				{
					SocketException se = (SocketException)io.InnerException;
					if( se.ErrorCode == 10060)
						Close();
					throw se;
				}
				else
					throw io;
			}
		}
		private void WriteLine( StreamWriter w, string s)
		{
			try
			{
				w.WriteLine( s);
			}
			catch( IOException io)
			{
				if( io.InnerException is SocketException)
				{
					SocketException se = (SocketException)io.InnerException;
					if( se.ErrorCode == 10060)
						Close();
					throw se;
				}
				else
					throw io;
			}
		}
		/// <summary>
		/// Open a new connection to a NNTP server.
		/// </summary>
		/// <param name="hostname">Hostname of server.</param>
		/// <param name="port">Port to connect to on server.</param>
		public void Connect( string hostname, int port, bool ssl)
		{
			frmMain.LogWriteInfo("Connecting to (" + hostname + ":" + port + ")");
            m_Hostname = hostname;
            m_UseSSL = ssl;
			base.Connect( hostname, port);
			m_Connected = true;
			Stream s = GetStream();
			StreamReader r = new StreamReader( s);
			string response;
			response = ReadLine( r);
			Global.ConnectionLog.LogLine( "{0}|R|{1}", System.Threading.Thread.CurrentThread.Name, response);
			if( !response.StartsWith("2"))
			{
				m_Connected = false;
				base.Close(); // Close this connection
				frmMain.LogWriteInfo("Failed to connect to (" + hostname + ":" + port + ")");
				throw new Exception( response);
			}
			if( response.StartsWith("200") )
				m_PostingIsAllowed = true;
			if( response.StartsWith("201") )
				m_PostingIsAllowed = false;
			m_Group = "";
			frmMain.LogWriteInfo("Connected to (" + hostname + ":" + port + ") with code " + response.Split(' ')[0]);
		}
		/// <summary>
		/// Close connection to NNTP server.
		/// </summary>
		public new void Close()
		{
			Stream s = GetStream();
			StreamWriter w = new StreamWriter( s);
			w.AutoFlush = true;
			// Quit NNTP
			Global.ConnectionLog.LogLine( "{0}|W|{1}", System.Threading.Thread.CurrentThread.Name, "QUIT");
			try
			{
				WriteLine( w, "QUIT");
				WriteLine( w, "QUIT");
				WriteLine( w, "QUIT");
				WriteLine( w, "QUIT");
			}
			catch
			{
			}
			m_Connected = false;
			base.Close();
		}
		
		/// <summary>
		/// Authenticate user with connected server.
		/// </summary>
		/// <param name="username">Username</param>
		/// <param name="password">Password</param>
		public void AuthenticateUser( string username, string password)
		{
			string response;
			Stream s = GetStream();
			StreamWriter w = new StreamWriter( s);
			StreamReader r = new StreamReader( s);
			if(w == null || r == null)
				throw new Exception("Stream could not be opened.");
			w.AutoFlush = true;
			frmMain.LogWriteInfo("Authenticating with server.");
			Global.ConnectionLog.LogLine( "{0}|W|{1} {2}", System.Threading.Thread.CurrentThread.Name, "AUTHINFO USER ", username);
			WriteLine( w, "AUTHINFO USER " + username);
			response = ReadLine( r);
			Global.ConnectionLog.LogLine( "{0}|R|{1}", System.Threading.Thread.CurrentThread.Name, response);
			frmMain.LogWriteInfo("Server responded with code: " + response.Split(' ')[0].Trim());
			frmMain.LogWriteInfo("Server message: " + response.Remove(0, response.Split(' ')[0].Length).Trim());
			Global.ConnectionLog.LogLine( "{0}|W|{1} **********", System.Threading.Thread.CurrentThread.Name, "AUTHINFO PASS ");
			WriteLine( w, "AUTHINFO PASS " + password);
			response = ReadLine( r);
			Global.ConnectionLog.LogLine( "{0}|R|{1}", System.Threading.Thread.CurrentThread.Name, response);
			frmMain.LogWriteInfo("Server responded with code: " + response.Split(' ')[0].Trim());
			frmMain.LogWriteInfo("Server message: " + response.Remove(0, response.Split(' ')[0].Length).Trim());
			if(response.StartsWith("482") || response.StartsWith("502"))
				throw new Exception("Authentication failed");
			if(!response.StartsWith( "281"))
			{
				frmMain.LogWriteError("Standard authentication failed, trying generic.");
				Global.ConnectionLog.LogLine( "{0}|W|{1} {2} **********", System.Threading.Thread.CurrentThread.Name, "AUTHINFO GENERIC ", username);
				WriteLine( w, "AUTHINFO GENERIC " + username + " " + password);
				response = ReadLine( r);
				Global.ConnectionLog.LogLine( "{0}|R|{1}", System.Threading.Thread.CurrentThread.Name, response);
				frmMain.LogWriteInfo("Server responded with code: " + response.Split(' ')[0].Trim());
				frmMain.LogWriteInfo("Server message: " + response.Remove(0, response.Split(' ')[0].Length).Trim());
				if(response.StartsWith("502"))
					throw new Exception("Authentication failed");
				if(!response.StartsWith( "281"))
				{
					frmMain.LogWriteError("Generic authentication failed, trying simple.");
					Global.ConnectionLog.LogLine( "{0}|W|{1}", System.Threading.Thread.CurrentThread.Name, "AUTHINFO SIMPLE");
					WriteLine( w, "AUTHINFO SIMPLE");
					response = ReadLine( r);
					Global.ConnectionLog.LogLine( "{0}|R|{1}", System.Threading.Thread.CurrentThread.Name, response);
					frmMain.LogWriteInfo("Server responded with code: " + response.Split(' ')[0].Trim());
					frmMain.LogWriteInfo("Server message: " + response.Remove(0, response.Split(' ')[0].Length).Trim());
					Global.ConnectionLog.LogLine( "{0}|W|{1} **********", System.Threading.Thread.CurrentThread.Name, username);
					WriteLine( w, username + " " + password);
					response = ReadLine( r);
					Global.ConnectionLog.LogLine( "{0}|R|{1}", System.Threading.Thread.CurrentThread.Name, response);
					frmMain.LogWriteInfo("Server responded with code: " + response.Split(' ')[0].Trim());
					frmMain.LogWriteInfo("Server message: " + response.Remove(0, response.Split(' ')[0].Length).Trim());
					if(response.StartsWith("452"))
						throw new Exception("Authentication failed");
					if(!response.StartsWith("250"))
					{
					}
					else
					{
						return;
					}
				}
				else
				{
					return;
				}
			}
			else
			{
				return;
			}
			frmMain.LogWriteError("Client failed to authenticate with server.");
			throw new Exception(response);
		}
		/// <summary>
		/// Select a newsgroup on connected server.
		/// </summary>
		/// <param name="group"></param>
		public void SelectGroup( string group)
		{
			// No need to reselect the group if we're already in it
			if( group == m_Group)
				return;
			
			string response;
			Stream s = GetStream();
			StreamWriter w = new StreamWriter( s);
			StreamReader r = new StreamReader( s);
			w.AutoFlush = true;
			Global.ConnectionLog.LogLine( "{0}|W|{1} {2}", System.Threading.Thread.CurrentThread.Name, "GROUP", group);
			WriteLine( w, "GROUP " + group);
			response = ReadLine( r);
			Global.ConnectionLog.LogLine( "{0}|R|{1}", System.Threading.Thread.CurrentThread.Name, response);
			if( response.StartsWith( "211"))
			{
				string[] MessageNumbers;
				MessageNumbers = response.Split( ' ');
				m_EstimatedMessageCount = int.Parse( MessageNumbers[1]);
				m_FirstMessage = int.Parse( MessageNumbers[2]);
				m_LastMessage = int.Parse( MessageNumbers[3]);
				m_Group = group;
				frmMain.LogWriteInfo("Group selection (" + group + ") succeded with code: " + response.Split(' ')[0]);
			}
			else
			{
				m_EstimatedMessageCount = -1;
				m_FirstMessage = -1;
				m_LastMessage = -1;
				m_Group = "";
				frmMain.LogWriteError("Group selection (" + group + ") failed with code: " + response.Split(' ')[0]);
				throw new Exception( response);
			}
		}
		/// <summary>
		/// Download an entire article.
		/// </summary>
		/// <param name="articlenum">Number of article to download.</param>
		/// <returns></returns>
		public string DownloadArticle( int articlenum)
		{
			return GetArticlePart("ARTICLE " + articlenum, ArticlePart.WHOLE);
		}
		/// <summary>
		/// Download an entire article.
		/// </summary>
		/// <param name="articleid">Unique ID of article to download.</param>
		/// <returns></returns>
		public string DownloadArticle( string articleid)
		{
			articleid = articleid.Trim();
			if(articleid.StartsWith("<") && articleid.EndsWith(">"))
				return GetArticlePart("ARTICLE " + articleid, ArticlePart.WHOLE);
			return GetArticlePart("ARTICLE <" + articleid + ">", ArticlePart.WHOLE);
		}
		/// <summary>
		/// Download the currently selected article.
		/// </summary>
		/// <returns></returns>
		public string DownloadArticle()
		{
			if(m_Group == "")
			{
				frmMain.LogWriteError("No newsgroup selected.");
				throw new Exception("No newsgroup selected.");
			}
			if(m_ArticlePointer <= 0)
			{
				frmMain.LogWriteError("Current pointer to article is not valid.");
				throw new Exception("Current pointer to article is not valid.");
			}
			return GetArticlePart("ARTICLE", ArticlePart.WHOLE);
		}
		/// <summary>
		/// Download an article header.
		/// </summary>
		/// <param name="articlenum">Number of article header to download.</param>
		/// <returns></returns>
		public string DownloadHeader( int articlenum)
		{
			return GetArticlePart("HEAD " + articlenum, ArticlePart.HEAD);
		}
		/// <summary>
		/// Download an article header.
		/// </summary>
		/// <param name="articlenum">Unique ID of article header to download.</param>
		/// <returns></returns>
		public string DownloadHeader( string articleid)
		{
			articleid = articleid.Trim();
			if(articleid == "")
			{
				frmMain.LogWriteError("Failed to retrieve header: Empty article ID was selected.");
				throw new Exception("Failed to retrieve header: Empty article ID was selected.");
			}
			if(articleid.StartsWith("<") && articleid.EndsWith(">"))
				return GetArticlePart("HEAD " + articleid, ArticlePart.HEAD);
			return GetArticlePart("HEAD <" + articleid + ">", ArticlePart.HEAD);
		}
		/// <summary>
		/// Download header of currently selected article.
		/// </summary>
		/// <returns></returns>
		public string DownloadHeader()
		{
			if(m_Group == "")
			{
				frmMain.LogWriteError("Failed to retrieve header: No newsgroup selected.");
				throw new Exception("Failed to retrieve header: No newsgroup selected.");
			}
			if(m_ArticlePointer <= 0)
			{
				frmMain.LogWriteError("Failed to retrieve header: Current pointer to article is not valid.");
				throw new Exception("Failed to retrieve header: Current pointer to article is not valid.");
			}
			return GetArticlePart("HEAD", ArticlePart.HEAD);
		}
		/// <summary>
		/// Download an article body.
		/// </summary>
		/// <param name="articlenum">Number of article body to download.</param>
		/// <returns></returns>
		public string DownloadBody( int articlenum)
		{
			return GetArticlePart("BODY " + articlenum, ArticlePart.BODY);
		}
		/// <summary>
		/// Download an article body.
		/// </summary>
		/// <param name="articlenum">Unique ID of article body to download.</param>
		/// <returns></returns>
		public string DownloadBody( string articleid)
		{
			articleid = articleid.Trim();
			if(articleid == "")
			{
				frmMain.LogWriteError("Failed to retrieve body: Empty article ID was selected.");
				throw new Exception("Failed to retrieve body: Empty article ID was selected.");
			}
			if(articleid.StartsWith("<") && articleid.EndsWith(">"))
				return GetArticlePart("BODY " + articleid, ArticlePart.BODY);
			return GetArticlePart("BODY <" + articleid + ">", ArticlePart.BODY);
		}
		/// <summary>
		/// Download header of currently selected article.
		/// </summary>
		/// <returns></returns>
		public string DownloadBody()
		{
			if(m_Group == "")
			{
				frmMain.LogWriteError("Failed to retrieve body: No newsgroup selected.");
				throw new Exception("Failed to retrieve body: No newsgroup selected.");
			}
			if(m_ArticlePointer <= 0)
			{
				frmMain.LogWriteError("Failed to retrieve body: Current pointer to article is not valid.");
				throw new Exception("Failed to retrieve body: Current pointer to article is not valid.");
			}
			return GetArticlePart("BODY", ArticlePart.BODY);
		}
		//delegates/events for article part retrieval
		public delegate bool OnReceivedArticleLineDelegate( int line, int bytes);
		public event OnReceivedArticleLineDelegate OnReceivedArticleLine;
		/// <summary>
		/// Internal function for retrieving article parts.
		/// </summary>
		/// <param name="towrite">String to write to server.</param>
		/// <returns></returns>
		private string GetArticlePart(string towrite, ArticlePart artpart)
		{
			string response;
			Stream s = GetStream();
			StreamWriter w = new StreamWriter( s);
			StreamReader r = new StreamReader( s, System.Text.Encoding.GetEncoding("iso-8859-1"));
			w.AutoFlush = true;
			Global.ConnectionLog.LogLine( "{0}|W|{1}", System.Threading.Thread.CurrentThread.Name, towrite);
			WriteLine( w, towrite);
			response = ReadLine( r);
			Global.ConnectionLog.LogLine( "{0}|R|{1}", System.Threading.Thread.CurrentThread.Name, response);
			//check positive responses
			if( ( response.StartsWith( "220") && artpart == ArticlePart.WHOLE) || 
				( response.StartsWith( "221") && artpart == ArticlePart.HEAD)  || 
				( response.StartsWith( "222") && artpart == ArticlePart.BODY))
			{
				bool Done = false;
				int LineCount = 0;
				StringBuilder Body = new StringBuilder( 256*1024 );
				do
				{
					response = ReadLine( r);
					if( OnReceivedArticleLine != null)
						Done = !OnReceivedArticleLine( LineCount+1, response.Length);
					if( response == ".")
					{
						Done = true;
					}
					else
					{
						if( response.StartsWith( ".."))
							response = response.Remove(0,1);
						Body.Append( response);
						Body.Append( "\r\n");
						LineCount++;
					}
				} while( !Done);
				return Body.ToString();
			}
			bool validResponse = true;
			try
			{
				int.Parse( response.Split(' ')[0]);
			}
			catch
			{
				validResponse = false;
			}
			if( !validResponse)
			{
				frmMain.LogWriteError("The server gave back an invalid response, closing connection.");
				Close();
			}
			if(artpart == ArticlePart.WHOLE)
				frmMain.LogWriteError("Failed to retrieve article with code: " + response.Split(' ')[0]);
			else if(artpart == ArticlePart.HEAD)
				frmMain.LogWriteError("Failed to retrieve article header with code: " + response.Split(' ')[0]);
			else if(artpart == ArticlePart.BODY)
				frmMain.LogWriteError("Failed to retrieve article body with code: " + response.Split(' ')[0]);
			throw new Exception("Unexpected response from server: " + response);
		}
		/// <summary>
		/// Set NNTP mode values.
		/// </summary>
		/// <param name="toSet">Mode to be set.</param>
		public void SetMode(Mode toSet)
		{
			string response;
			Stream s = GetStream();
			StreamWriter w = new StreamWriter( s);
			StreamReader r = new StreamReader( s);
			w.AutoFlush = true;
			switch(toSet)
			{
				case Mode.MODE_READER: //apparently this should be the first thing passed after 
					//connect and authentication, possible performance boost
					frmMain.LogWriteInfo("Setting client mode to reader.");
					Global.ConnectionLog.LogLine( "{0}|W|{1}", System.Threading.Thread.CurrentThread.Name, "MODE READER");
					WriteLine( w, "MODE READER");
					response = ReadLine( r);
					Global.ConnectionLog.LogLine( "{0}|R|{1}", System.Threading.Thread.CurrentThread.Name, response);
					if(response.StartsWith("200"))
					{
						frmMain.LogWriteInfo("Client mode was succesfully set to reader with code: " + response.Split(' ')[0]);
						m_PostingIsAllowed = true;
						return;
					}
					else if(response.StartsWith("201"))
					{
						frmMain.LogWriteInfo("Client mode was succesfully set to reader with code: " + response.Split(' ')[0]);
						m_PostingIsAllowed = false;
						return;
					}
					throw new Exception("Unexpected response from server: " + response);
				case Mode.MODE_STREAM: //this is for news servers, but added for completion (it's in RFC)
					return;
			}
			frmMain.LogWriteInfo("An invalid client mode was specified to be set.");
			throw new Exception("Specified mode to be set is invalid.");
		}
		/// <summary>
		/// Get a list of available newsgroups from connected server.
		/// </summary>
		/// <returns></returns>
		public ArrayList GetNewsgroups()
		{
			string response;
			ArrayList groups = new ArrayList();
			Stream s = GetStream();
			StreamWriter w = new StreamWriter( s);
			StreamReader r = new StreamReader( s);
			w.AutoFlush = true;
			frmMain.LogWriteInfo("Retrieving newsgroups from server.");
			Global.ConnectionLog.LogLine( "{0}|W|{1}", System.Threading.Thread.CurrentThread.Name, "LIST");
			WriteLine( w, "LIST");
			response = ReadLine( r);
			Global.ConnectionLog.LogLine( "{0}|R|{1}", System.Threading.Thread.CurrentThread.Name, response);
			
			if(!response.StartsWith("215"))
			{
				frmMain.LogWriteError("An unexpected response was recieved from the server: " + response);
				throw new Exception("Unexpected response from server: " + response);
			}
			
			do
			{
				response = ReadLine( r);
				if( response != null)
				{
					groups.Add(response.Trim());
				}
			} while( response != null);
			
			frmMain.LogWriteInfo("Groups were succesfully recieved, total count: " + groups.Count);
			return groups;
		}
		/// <summary>
		/// Check if an article exists on connected server.
		/// </summary>
		/// <param name="articlenum">Number of article to check.</param>
		/// <returns></returns>
		public bool ArticleExists(int articlenum)
		{
			return StatArticle("STAT " + articlenum);
		}
		/// <summary>
		/// Check if an article exists on connected server.
		/// </summary>
		/// <param name="articleid">Unique ID of article to check.</param>
		/// <returns></returns>
		public bool ArticleExists(string articleid)
		{
			articleid = articleid.Trim();
			if(articleid == "")
			{
				frmMain.LogWriteError("Failed to perform STAT: Empty article ID was selected.");
				throw new Exception("Failed to perform STAT: Empty article ID was selected.");
			}
			if(articleid.StartsWith("<") && articleid.EndsWith(">"))
			{
				return StatArticle("STAT " + articleid);
			}
			return StatArticle("STAT <" + articleid + ">");
		}
		/// <summary>
		/// Check if currently selected article exists on connected server.
		/// </summary>
		/// <returns></returns>
		public bool ArticleExists()
		{
			if(m_Group == "")
			{
				frmMain.LogWriteError("Failed to perform STAT: No newsgroup selected.");
				throw new Exception("Failed to perform STAT: No newsgroup selected.");
			}
			if(m_ArticlePointer <= 0)
			{
				frmMain.LogWriteError("Failed to perform STAT: Current pointer to article is not valid.");
				throw new Exception("Failed to perform STAT: Current pointer to article is not valid.");
			}
			return StatArticle("STAT");
		}
		/// <summary>
		/// Internal function to perform STAT on an article.
		/// </summary>
		/// <param name="towrite">String to write to server.</param>
		/// <returns></returns>
		private bool StatArticle(string towrite)
		{
			string response;
			ArrayList groups = new ArrayList();
			Stream s = GetStream();
			StreamWriter w = new StreamWriter( s);
			StreamReader r = new StreamReader( s);
			w.AutoFlush = true;
			Global.ConnectionLog.LogLine( "{0}|W|{1}", System.Threading.Thread.CurrentThread.Name, towrite);
			WriteLine( w, towrite);
			response = ReadLine( r);
			Global.ConnectionLog.LogLine( "{0}|R|{1}", System.Threading.Thread.CurrentThread.Name, response);
			if(response.StartsWith("2"))
			{
				return true;
			}
			return false;
		}
        public new Stream GetStream()
        {
            if (m_Stream == null || !Connected)
            {
                if (! m_UseSSL)
                {
                    m_Stream = base.GetStream();
                }
                else
                {
                    SslStream s = new SslStream(base.GetStream(), true);
                    try
                    {
                        s.AuthenticateAsClient(m_Hostname);
                        m_Stream = s;
                    }
                    catch (AuthenticationException e)
                    {
                        Console.WriteLine("SSL Connection Failure: {0}", e.Message);
                        Close();
                        m_Stream = null;
                    }
                }
            }
            return m_Stream;
        }
	}
}
 
Blogverzeichnis - Blog Verzeichnis bloggerei.de Blog Suche