Friday, January 22, 2010
Silverlight-Kurs - 3 Tage, 1.999,- EUR Wiesbaden, Mainz, Bingen
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
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)
•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
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 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?
AlphaBlend-Funktion
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/changedprivate 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;}elsethrow 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;}elsethrow 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 connectionfrmMain.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 NNTPGlobal.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 itif( 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 retrievalpublic 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 responsesif( ( 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 boostfrmMain.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;}}}