Acronyms
 Top Next
AAA Autentication, Authorisation and Accounting.
ADO ActiveX Data Objects. Also ADO.NET
AMD Advanced Micro Devices.
ADSI Active Directory Services Interface.
ADSL Asymmetric Digital Subscriber Line.
AJAX Asynchronous JavaScript and XML. (APC June '06 Pg 100)
ARP Address Resolution Protocol. (RFC 826)
ASP Active Server Page.
ATM Asynchronous Transfer Mode (622Mbps) (WAN Protocol).
AVVID Architecture for Vioce Video & Integrated Data
BAM Business Activity Monitoring (BizTalk)
BAS Business Activity Service (BizTalk)
BDE Borland Database Engine.
BDP Borland Data Provider.
BDSL Business grade Digital Subscriber Line.
BPEL Business Process Execution Language.
BRSS Bill Reporting Self Serve (Telstra product)
CAS Code Access Security.
CDMA Carrier Detect Multiple Access.
CDMA Code Division Multiple Access.
CDO Collaboration Data Objects
CGI Common Gateway Interface. Predessesor to ISAPI
CHAP Challenge-Handshake Authenication Protocol.
CIFS Common Internet File System.
CIPT Cisco IP Telephony
CLR Common Language Runtime (Eg .NET).
CLS Common Language Specification.
COM Component Object Model. (component based technology)
CORBA Common Object Request Broker Architecture. (component based
technology)
CRM Customer Resource (or Relations) Management.
CSD Circuit Switched Data.
CSS Cascading Style Sheet.
CSV Comma-Separated Values.
CTI Computer Telephony Intergration.
DAO Data Access Objects.
DCOM Distributed COM. (component based technology over a network).
DDL Datel Dedicated Line (Telstra Service)
DDS Digital Data Service.
DLT Digital Linear Tape
DOM Document Object Model.
DNS Domain Name Server.
DRM Digital Rights Management.
DSLAM DSL Access Multiplexer.
DTD Document Type Definition.
EAP Extensible Authentication Protocol. (See KB0064)
EBS Enchanced Billing Service (EBS)
ETL Extract Transform Load.
ETSI European Telecommunications Standards Institute. (Created 1988).
EVDO Evolution Data Only or Evolution Data Optimised. Provided by Telstra to all
major metro areas.
EVDV Evolution Data and Voice.
FDDI Fiber Distributed Data Interface
FR Frame relay (simple version of HDLC) (45Mbps) Packet switched (WAN
Protocol)
FRA Fixed Radio Access.
FQDN Fully Qualified Domain Name.
GAC Global Assembly Cache.
GIF Graphical Interchange Format.
GPRS General Packet Radio Service. (2.5 Generation).
GPS Global Positioning System.
GSM Global System for Mobile communications (Slower than CDMA).
GUID Global Unique ID.
GXA Global XML Web Services Architecture.
HDCP High-bandwidth Digital Copy Protection. Copy protection for high-definition video signals from next generation DVD playrs/HD video files.
HDLC High level data link control (WAN Protocol).
HDSL High Rate Digital Subscriber Line.
HSRP Hot Standby Router Protocol.
HTML Hypertext Markup Language.
HTTP Hypertext Transfer Protocol.
HWS Human Workflow Services (BizTalk)
IANA Internet Assigned Numbers Authority.
ICT Information Communication Tecnology.
IDE Integrated Development Environment.
IDE Integrated Drive Electronics.
IEEE Institute of Electrical and Electronic Engineers.
IETF Internet Engineering Task Force.
IFS Installable File System.
IGMP Internet Group Management Protocol.
IL Intermediate Language.
IMAP Internet Mail Access Protocol.
IP Internet Protocol.
ISA Internet Security & Acceleration Server
ISAPI Internet Server Application Programming Interface.
ISP Internet Service Provider.
ISS Internet Information Services.
ISDN Integrated Services Digital Network (128Kbps BRI, 2Mbps PRI) (Circuit
switched- WAN Protocol).
ISP Internet Service Provider.
IVR Interactive Voice Response.
JIT Just In Time.
JPEG Joint Photographic Experts Group
JSP Java Server Page.
KDC Key Distribution Centre.
LAPB Link Access Procedure Balanced (X.25 – 2Mbps – Packet switched) (WAN
Protocol).
LAN Local Area Network.
LDAP Light-weight Directory Access Protocol.
LDAPS LDAP over SSL
LLTD Link Layer Topology Discovery. Network protocol for mapping Network
Topology. Available with Windows Vista. Same layer as TCP/IP (Layer 3?)
LSS Line Spectrum Sharing. Allows once carrier to provide telephony and another to provide broadband over a single copper line. See ULL.
LTO Linear Tape Optn
MDAC Microsoft Data Access Components.
MDN Message Disposition Notification
MVC Model View Controller
MIME Multipurpose Internet Mail Extensions.
MIS Mobile Information Server
MPLS Multi Protocol Label Switching
MSIL Microsoft Intermediate Language.
MVS Managed Voice Solutions.
NAC Network Access Control.
NDSS National Diabetes Services Scheme
NEBS Network Equipment/Building System.
NGWL Next G Wireless Link (Telstra product)
NNTP Network News Transfer Protocol.
NSAPI Netscape Server API
NTLM New Technology (NT) LAN Manager.
NTP Network Time Protocol (See KB0010).
ODAC Oracle Data Access Components. Click here
ODBC Open DataBase Connectivity.
ODT Oracle Development Tools
OLE Object Linking & Embedding.
OSI Open System Interconnect.
OWA Outlook Web Access.
QoS Quality of Service.
P2V Physical to Virtual (VM-Ware)
PAP Password Authentication Protocol
PIR Post Implementation Review
POTS Plain old telephone service (56Kbps) (Circuit switched).
PPP Point-to-point protocol (WAN Protocol).
PSTN Public Switched Telephone Network.
PTP Point-To-Point
RADIUS Remote Authentication Dial In User Service. (See KB0064)
RADSL Rate Adaptive Digital Subscriber Line (WAN Protocol).
RARP Revers ARP.
RPC Remote Procedure Call.
RSS Really Simple Syndication.
(http://www.webreference.com/authoring/languages/xml/rss/intro/)
RSVP Resource-Reservation Protocol
RTTI Runtime Type Information
SATA Serial Advanced Technology Attachment
SCCP Skinny Client Control Protocol (Skinny)
SDN Switched Data Network.
SDSL Single Line Digital Subscriber Line (WAN Protocol).
SFP Small Form-factor Profile
SHSDL Symmetric High speed Digital Subscriber Line (WAN Protocol).
SIP Session Initiation Protocol.
SLDC Simple data link control (WAN Protocol).
SLIP Serial Line Interface protocol (WAN Protocol).
SMB Server Message Block.
SMS Short Message Service.
SMTP Simple Mail Transfer Protocol.
SOAP Simple Object Access Protocol. (http://www.w3.org/2002/ws/)
SONET Synchronous optical network (10,000Mbps).
SRST Survivable Remote Site Telephony.
SSID Service Set Identifier. This should be hidden on a wireless network to
improve security.
SSL Secure Sockets Layer
TCP Transmission Control Protocol.
TDMA Time Division Multiple Access - A type of Time-Division multiplexing.
UAT User Acceptance Test
UDDI Universal Description, Discovery & Integration.
UDP User Datagram Protocol.
ULL Unbundled Local Loop. Telstra leases unconditioned copper line to
competitors from their own DSLAM to the customer premises. See LSS.
URI Uniform Resource Identifier.
URL Uniform Resource Locator. Eg hyperlink or shortcut.
V2P Virtual to Physical (VMWare)
VBA Visual Basic for applications
VBS Visual Basic script
VDSL Very High rate digital subscriber line.
VGDL Voice Grade Dedicated Line.
VIN Virtual Infrastructure Node (See VM-Ware)
VOB Video Object (DVD file format)
VoIP voice over Internet Protocol.
VPN Virtual Private Network.
WAN Wide Area Network.
WAP Wireless Access Protocol.
WCDMA Wireless CDMA.
WCF Windows Communication Foundation (Formally known as Indigo)
WEP Windows Equivalent Protocol
WEP Wired Equivalent Privacey
WiMAX Worldwide Interoperability for Microwave Access. (IEEE 802.16)
WINS Windows Internet Naming Server
WML Wireless Markup Language.
WPA WiFi Protected Access.
WPAD Web Proxy Auto Detect.
WSDL Web Services Description Language (A XML Document that describes a
web service).
WSE Web Services Enchancements.
X.25 Protocol suite for WANs using PSTN or ISDN (describing the Physical,Data & Network layers).
XLS Extensible Stylesheet Language.
XHTML Extensible HTML
XML Extensible Markup Language.
XSD XML Definition Language (http://www.w3.org/TR/xmlschema-0/).
XSLT Extensible Stylesheet Language Transformations.

Updated 2/3/10


Downloads
 Previous Top Next
.NET for Linux
http://www.go-mono.com

AVG AntiVirus
http://free.grisoft.com/

EtherReal
http://www.etherreal.com

FireFox
http://getfirefox.com

Google Desktop Search
http://desktop.google.com

Help Maker
http://www.vizacc.com

Hotbabe
http://dindinx.net/hotbabe

HTML Validator
http://www.validator.w3.org

Kiwi Syslog http://www.kiwisyslog.com/software_downloads.htm#Download%20Now

Konfabulator
http://www.konfabulator.com/download

MSDE 2000A
http://www.microsoft.com/sql/msde/downloads/downloads.mspx

MOM 2005 (Trial): http://www.microsoft.com/Mom/workgroup/evaluation/trial/default.mspx

RealAudio Player
http://www.narpa.org/realaudio.htm

Samurize
www.samurize.com

SharePoint Services: http://www.microsoft.com/downloads/thankyou.aspx?familyId=efdc7227-549c-4de1-a063-783f71a8bb2b&displayLang=en

Spybot - Search & Destroy
http://www.spybotinfo

Visual Studio Help Integration Kit:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/htmlhelp/html/hwmscExtendingNETHelp.asp

Windows AntiSpyware Beta
http://www.microsoft.com.au

WinPcap
http://winpcap.polito.it

ZoneAlarm
http://www.zonelabs.com.au

updated 16/9/7


Ports
http://www.chebucto.ns.ca/~rakerman/port-table.html#Table
Service | TCP | UDP | Comments
FTP data | 20 |  |
FTP command | 21 |  |
SSH | 22 |  | Secure Shell
Telnet | 23 |  | Telnet
SMTP | 25 |  |
WINS | 42 |  |
DNS | 53 |  |
Finger | 79 |  |
HTTP | 80 |  | HTTP
POP3 | 110 |  | Post Office Protocol 3
NNTP | 119 |  |
RPC | 135 | 135 | Microsoft RPC locator service. DCOM Service control manager/Remote Procedure Call service
SNMP | 161 |  |
SNMP Trap | 162 |  |
LDAP | 389 | 389 | Lightweight Access Protocol
HTTPS | 443 |  | Secure HTTP (SSL)
SMTPS | 465 |  | Secure SMTP
LDP | 515 | 515 | Line Printer Daemon
LDAPS | 636 | 636 | Secure LDAP
Doom | 666 | 666 | Network Game
VMWare | 902 |  | Remote control & viewing of virtual machines
FTPS-DATA | 989 |  | Secure FTP Data
FTPS | 990 |  | Secure FTP Control
TELNETS | 992 |  | Secure Telnet
IMAPS | 993 |  | Secure IMAP
IRCS | 994 |  | Secure IRC
POP3S | 995 |  | Secure POP3
SOCKS | 1080 |  | Internet proxy
OpenVPN | 1194 | 1194 |
Kazaa | 1214 | 1214 | Peer-to-peer file sharing
MS SQL-Server | 1433 |  |
Citric ICA | 1494, >=1023 | 1604, >=1023 |
Oracle | 1521 |  |
H323 | 1720 | 1720 |
PPTP VPN | 1723 |  | Used together with protocol 47 - GRE.
MSN Messenger | 1863 |  | Instant messaging
cPanel | 2082 |  |
cPanel | 2083 |  | SSL cPanel
Webmail | 2096 |  | SSL Webmail
MySQL | 3306 |  |
RDP | 3389 |  | Remote desktop Protocol.
RWW | 4125 |  | Remote Web Workplace
Microsoft Remote Administrator | 4899 |  |
Yahoo Messenger | 5050 |  |
SIP | 5060 | 5060 | Session Initiation Protocol
SIPS | 5061 |  | Secure SIP
pcAnyware | 5631 | 5632 |
VNC Client | 5500 |  | Listening Client
VNC Applet | 5800 |  | Java Applet client
VNC Server | 5900 |  | Server (Open this port on a machine you want to access)
VNC Server | 5901 |  | Display 1
VNC Server | 5902 |  | Display 2
HTTP Proxy | 8080 |  |

updated 15/12/9


RFC's
See http://www.ietf.cnri.reston.va.us
http://www.rfc-editor.org/rfc/rfc???.txt

RFC822 Standard for the format of ARPA Internet text messages.
RFC826 Ethernet Address Resolution Protocol.
RFC854 TELNET Protocol Specification
RFC855 TELNET Option Specifications
RFC856 TELNET Binary Transmission
RFC857 TELNET Echo Option
RFC858 TELNET Suppress Go Ahead Option
RFC859 TELNET Status Option
RFC860 TELNET Timing Mark Option
RFC861 TELNET Extended Options: List Option
RFC959 FTP.
RFC1521 MIME.
RFC1700 Assigned Numbers
RFC1918 Address Allocation for private Internets.
RFC1945 HTTP Standard.
RFC2616 HTTP/1.1
RFC2236 Internet Group Management Protocol v2.
RFC3261 SIP
RFC3330 Special-Use IPv4 Address space.


APC001 - Windows Boot.ini

Windows Boot.ini
APC August 2004 - Describes the switches in the BOOT.INI file, and how they can be employed to troubleshoot problems


APC002 - Custom cool

Custom cool
· APC November 2004 Pg 110 - Tired of looking at the same old desktop icons? This article demonstrates how Seroius Samurize can revolutionise your computing lifestyle.
· Download at www.samurize.com


APC003 - Windows and the widgets

Windows and the widgets
· APC January 2006 Pg 102. Desktop widgets are a key feature to be launched in Windows vista. But you can get a hold of them now with Konfabulator.

http://www.konfabulator.com/download


APC004 - Hive and Seek

Hive and Seek
· APC June 2005 Pg 115. How you see the registry and windows sees it are two different things.


APC005 - XBOX Media Centre

XBOX Media Centre
· APC January 2005 Pg 107. If you think media centre PCs are over priced for what they offer, you can achieve a similar result using an Xbox.


APC006 - Learn to love Big Brother

Learn to love Big Brother
· APC March 2005 Pg 99. Having trouble with networking? This article shows you how to setup a monitor program that provides a summary of what's gone wrong.


APC007 - The prime SUSpects

The prime SUSpects
· Software Update Service is a great way for businesses to streamline update distribution across their networks.


APC008 - Intoducting Joomla

Introducing Joomla
· APC March 2006 Pg 112. Getting you head around a Content Management System can be a life-changing experience.

· Download XAMPP (Apache + MySQL, PHP and a few other interesting things) from http://www.apachefriends.org/en/xampp.html . Get the self extracting EXE. Execute the EXE (Saved in Apache under the Install folder) and extract the files to the folder where you ultimately want Apache to run. Eg d:\apache\. Once extracted execute the apache\xampplite\setup_xampp.bat.

· Download Joomla from http://www.joomla.org . (Saved in Joomla under the Install folder) Extract the zipped files to a folder called joomla under the htdoc folder, created in the step above. eg d:\Apache\xampplite\htdoc\joomla. Once extracted execute the d:\apache\xampplite\xampp_start.exe. You should now be able to access the website.

Note: You will need to shutdown the IIS service. If you want to start IIS, you will need to close the APache service by executing xampp_stop.exe.

· Access the web site at http://127.0.0.1/joomla. The pre-installation screen should come up. If all status are green, click on Next. Click Next on the license screen.

Host Name: localhost
MySQL User Name: root
MySQL Password: {leave blank}
MySQL Database Name: joomla
MySQL Table Prefix: {leave as jos_}

Click on Next

Site Name: The Home of Joomla.

Click on Next

URL: http://server_name/joomla
Path: {leave as is}
Your-Email: {enter your email address - eg rthomas@fsma.com.au)
Admin Password: {change to something meaningful}

Click on Next

· Delete the Apache\xampplite\htdoc\joomla\installation folder

· Joomla templates can be downloaded from http://templates.joomlaya.com

See mastering Joomla , Part 1 (APC June 06).


APC009 - Mastering Joomla, Part 1

Mastering Joomla, Part 1
· APC June 2006 Pg 112. Building a web site with a proper content management system behind it is now within reach of most.

· The first part of the article talks about installing Joomla on a web hosted site. If you want to install it locally see APC March 2006 - Introducing Joomla .

· Login to http://yoursite/joomla/administrator as admin & go to Global Configuration.
· Set the time zone under the local settings tab & set the appropriate time zone.
· Set Linked titles to yes under the Content tab. This will turn titles of content items into hyperlinks.
· Set item Rating/Voting to show.
· Click on the Meta data tabe & set the site description in the first text box.
· Check the make unwriteable after saving check box & click on the save icon.

See: http://extensions.joomla.org

Updated: 14/5/6


APC010 - Mastering Joomla, Part 2

Mastering Joomla, Part 2
· APC July 2006 Pg 110. Taking a look at the sites structure. This month we will have a look at Joomla's "managers", find out how to create categories and sections, modify menus, produce content items and add images.

· Joomla can organise content into sections and categories. Sections are directories that are used to group content. Categories are subdirectories which contain specific items. So when you create a new content item (an article, FAQ or letter), you must assign it to a particular category in a particular section.

· To create a new section, open Joomla's Control Panel and click on the Section Manager button. Once the section manager opens, click on New in the top right hand corner. All you need to do now is a new section is enter a little bit of information about it. Fill out the Title, Section Name and select an image to represent the section. What ever you put into the Title field will end up being shown on the web site (front end) as the section heading. And what every you enter for the database and the back end.

· Set Access Level to public if you everyone to be able to read it, otherwise set it to registered if only registered members can see it. If you set the Access level to Special, only the authors, editors, publishers, managers, administrators and super administrator will be able to access it. Make sure that published is set to yes and give your section a little description. Click on save once done.

· To create a new category, go back to the control panel and click on the category manager button and click on news.

· To create a new content item, from the control panel, click on the Add New Content button. You should see two big text boxes. In the first box (intro text) you will need to type an introductory portion of your article. This will appear on the front page (or on the appropriate section page) and entice users to read the whole article. In second box (main text) you should type the rest of your text. Once finished, select the appropriate section and category. Give your article a title. To view it in full, click on the preview button. Finally, on the right hand side, click on Show on Front page. - then click on save.

· Joomla has a media manager which can be used to upload and organise image files. To run it click on the Media Manager in the control Panel. To create a directory in Media Manager type a name you would like to use in the create directory text box & click on the create directory button. If you wish to use your images in content items, they will have to be put under the /stories directory or subsequent subdirectories.

· The menu manager is very flexible. You cna link entire sections, categories or individual items, not to mention things like components. To modify the main menu, click on the Menu Manager button in Control Panel, then click on the appropriate Edit Menu button under Menu Items. To publish/hide the menu item, click on the publish icon next to the entry. The reordering can be used to change the order of the menus. To create a new menu button, click on new. A different page will open and you will see a gallery of choices. You can link to a section or a category or an individual item.

Updated: 24/7/6


APC011 - Joomla Templates

Joomla Templastes
· APC August 2006 Pg 118. Explains how to add templates to the CMS.

· Templates, like other Joomla extensions, come packaged in a ZIP file. You can Google for them or visit www.apcstart.com/joomla0806

· To install a template, in the Administrator Console click on Installers > Template - Site. click on Browse and navigate to the template ZIP file. Finally click on Upload & Install. To enable the new template, click on Site > Template Manager > Site Templates. Select the radio button next to the template and click on default.
updated 23/8/6


APC012 - Live Mesh
· APC August 2009 Pg 51. Reviews Live Mesh (8/10).

updated 8/2/10


APC013 - 10 Indispenseable Protable Programs

updated: 31/5/10


DE0001 - Incompatible type: 'method pointer and regular procedure' - explained
http://delphi.about.com/cs/adptips2003/a/bltip1003_5.htm

When you are creating components at run time, and want to assign a procedure to an event handler of a component,You will get the next error:
Incompatible type: 'method pointer and regular procedure'.

The problem is that a method pointer (OnClick) needs to be a procedure of an object (like TForm), not a regular procedure.

One way around is to create an object to define the procedure. You can start by creating a dummy class...

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

type
TEventHandlers=class // create a dummy class
procedure ButtonClick(Sender:TObject) ;
end;

var
Form1: TForm1;
EvHandler:TEventHandlers;

implementation

{$R *.dfm}
procedure TEventHandlers.ButtonClick(Sender: tObject);
begin
ShowMessage('hi');
end;

procedure TForm1.FormCreate(Sender: TObject);
var
aButton:TButton;

begin
aButton:=TButton.Create(nil);
aButton.OnClick:=EvHandler.ButtonClick;
Button1.OnClick:=EvHandler.ButtonClick;
end;

end.

27/5/6


DE0002 - IIS File Permissions

APC March 2005 Pg 94: Turbo-charged Broadband
User | Permissions
Domain Administrator | Full Control
Local Administrators Group | Full Control
Creator Owner Group | Special Permissions
Everyone Group | Full Control
Local Internet Guest Account (IUSR_MACHINENAME | Modify, R&E, List, Read, Write
Domain RTHOMAS | Full Control
SYSTEM Group | Full Control
Local Users Group | R&E, List, Read, SP


DE0003 - Debugging IIS Apps
· Set the application permission to high. The application should now appear as a COM+ application. Go to Component services > Computers > My Computer > COM+ Applications. IIS{Default Web Site//Root/CallLog}. From the General tab, copy the Application ID and on the Identity Tab, set application account to "Interactive user - The current logged on user".

· Back in Delphi go to "Run Parameters" (Ie Run > Parameters). Set the parameters as follows:-

· Host Application: c:\windows\system32\dllhost.exe
· Parameters: /ProcessID: Past application ID here
Eg. {B9795642-AD30-4F3E-9489-5CCB2156159F}

If all is OK, then when you run the application (F9), it should keep running until either the a break point is reached or the IIS service is stoped.

If the COM+ application has to be deleted then, the "Disable Delete" option on the Advanced tab needs to be unchecked.


DE0004 - Calling a Procedure Progamatically

procedure TEventHandlers.ButtonClick(Sender: tObject);
begin
  ShowMessage('hi');
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  aButton:TButton;

begin
  aButton:=TButton.Create(nil);
  aButton.OnClick:=EvHandler.ButtonClick;
  Button1.OnClick:=EvHandler.ButtonClick;
end;


DE0005 - Basic ODBC Access

Place a Database, Query, DataSource & a Grid on a form....

  //No Session object defined
  Session.SQLHourGlass:=False;

  //tDataBase
  DataBase1.LoginPrompt:=False;
  Database1.DatabaseName:='MEMBERS';
  Database1.Params.Add('USER NAME=russell');
  Database1.Params.Add('PASSWORD=russell');

  //tQuery
  Query1.DatabaseName:='MEMBERS';
  Query1.SQL.Add('SELECT * FROM FT_USERS');
  Query1.Open;

  //tDataSource
  DataSource1.DataSet:=Query1;

  //tDBGrid
  DBGrid1.DataSource:=DataSource1;


DE0006 - ASP.NET Web Forms With Oracle Using C#Builder & BDP

http://www-128.ibm.com/developerworks/db2/library/techarticle/0307swart/0307swart.html

1. You will need to have the Borland Developer Studio (BDS) installed & IIS (or Cassini). You will also need to have a Borland Data Provider for Oracle Installed. (Eg bdpora.msi from Core Labs)

2. Start the BDS & start a new ASP.NET application. Ie File > New > ASP.NET Web Application C# Builder. Enter a application name, location select IIS as the server.

3. Once the project has been created, go into IIS & make sure that it is running ASP.NETY version 1.1. On the Virtual Directory tab, click on the Create button, to generate an application.

4. Drop a dbConnection component onto the Web Form. Right click the component & select the Connection Editor. Click on add to create a new connection. From the Add new Connection dialog box, select Oracle as the provider & gove the connection a meaningful name. Eg RTK. Click OK. Set the database, user name & password (Ie rtk.fsma, russell & russell). Test the connection.

5. Drop a dbAdapter onto the Web Form. Right click the component & select Configure Data Adapter. On the Data Adapter Configuration dialog box, unselect the the INSERT, DELETE & UPDATE options. On the SELECT tab, enter a valid SQL Select command. Eg "SELECT * FROM FT_USERS". Click the Dataset Tab & select the option to create a new dataSet. Eg dataSet1. Click the Preview Data tab & click refresh to see the data. Click OK & you should see the dataset has been created on the form. Set the active property to True.

6. Drop a DataGrid component onto the Web Form. set its DataSource property to DataSet1 & the DataMember property to the table name in the SQL statement. You can quickly format the grid by right clicking on the grid component and selecting Auto format.

7. Next you need to bind the data to the grid at run time. Double click on the web form and place the following code into the Page_Load event.

private void Page_Load(object sender, System.EventArgs e)

{

  // Put user code to initialize the page here.

  if (!IsPostBack)

    dataGrid1.DataBind();

}

8. Now you can save, compile & run the project.

See Code WebForm1.aspx


DE0007 - Displaying Animated GIF
· In Delphi, select component -> Install Component.

· Browse to the location of gifimage.gif. Note: Can install into existing package (eg dclusr.dpK)

Updated 16/11/9


KB0000 - Building Help Files
· Download HelpMaker (AVHelp72002.ex) from http://www.vizacc.com and install.

· To view *.chm files loaded on a web server, you may need to apply a registry hack. http://support.microsoft.com/kb/892675/

REGEDIT4

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HTMLHelp]

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HTMLHelp\1.x\ItssRestrictions]

"MaxAllowedZone"=dword:00000003

Note: The higher the value, the greater the access

This needs to be set on each computer that request access the file.

Updated 21/1/8


KB0001 - Selecting a line on a Nokia phone

KB0001 - Selecting a line on a Nokia phone (21/12/05)
 Previous Top Next
· To change the line on a Nokia Phone, hold down the # key for 3 seconds


KB0003 - ADSL Info

http://www.internode.on.net/adsl2/

APC March 2005 Pg 94: Turbo-charged Broadband
ADSL2 | 5.5Km | 256kbit/s / 128kbit/s
ADSL2 | 2.3Km | 10Mbit/s / 1Mbit/s
ADSL2+ | 1Km | 15Mbit/s / 3Mbit/s
ADSL2+ | 1.5Km | 15Mbit/s / 1Mbit/s
ADSL2+ | 2.3Km | 10Mbit/s / 1Mbit/s

· Adam Internet is using ETSA's fiber to provide bandwidth to exchanges.

· ADSL2 extends the reach of original DSL by 500m.

APC May 2005 Pg 17: Broadband barriers smashed
· ADSL distance extension extends the reach of DSL from 4km to 20km from the exchange. The technology uses micro-DLSAM small enough to fit in street pits, power poles or at customers home.

· Optus is in final stages of approval to roll out its own ADSL network.

· Agile (Internode's sister company), recently announced a rollout of ADSL DSLAMs to 47 exchanges, giving most customers 10-12Mbit/s. iiNet announced a 200 exchange ADSL-1 rollout, offering up to 8Mbit/s - The max ADSL-1 standard allows. iiNet will trial ADSL2 right away.

APC November 2005 Pg 83: 20Km ADSL gets green light
· Telstra has completed trials DSL extender technology, that will allow it to provide ADSL up to 20km from the exchange using micro sized DSLAMs that can be daisy chained together.

APC February 2006 Pg 75:
· ADSL2+ can reach theoretical downloads speeds of 24Mbit/s and upload speeds of 0.8 to 1Mbit/s. Download speeds reduce to around 2Mbit/s and less for distances of 5Km or more.

· ADSL2+ was launched March 2005, but as at December 2005, ADSL2+ is only available from Internode & iiNet. Telstra plans to have most exchanges ADSL2+ enabled by mid 2006. AAPT has no plans to roll out ADSL2+ at this stage!

· Cable Internet provided by Telstra & Optus has theoretical downloads speeds of 10Mbit/s and upload speeds of 256Kbit/s

· Broadband over power lines can deliver 20Mbit/s over distances greater than 5Km.

· Intels's WiMax (802.16e): Broadband over wireless. Up to 20km from the tower. Uses an industry standard that will also allow users to roam between towers. See KB0005.

· Independent broadband price monitor: http://broadbandchoice.com.au

updated: 30/1/6


KB0004 - Greasemonkey

· APC February 2006 Pg 13: Greasemonkey is a Firefox plug-in that allows users to modify content and look of web pages to suit their own needs. Users can remove banner adds, add Google search box to Yahoo! home page, for Gmail to use a secure connection.
· http://greasemonkey.mozdev.org/


KB0005 - Wireless Broadband
APC December 2004 Pg 17: Exchange: Eric Hamilton
· - 802.11 - Wireless LAN.
- 802.11b: 11Mbps in the 2.4GHz band (With fall back)
- 802.11g: 20+ Mbps (54Mbps) in the 2.4GHz band
- 802.15.3 - Low distance transmissions. Like Bluetooth but much faster (250Mbit/s over 10m)
- 802.15.4 ("Zigby") - Very low speed, low range & low power
- 802.16 - City-wide broadband.
· Fixed wireless broadband available 2006. WiMax available 2007.
· WiMax 802.16-2004 - fixed wireless up to 10Mbit/s (Replaces 802.16a, 802.16b, and 802.16c)
WiMax 802.16e - For small hand-held devices moving up to 120Km/h.

APC May 2005 Pg 17: Broadband barriers smashed
· iBurst switched on its wireless broadband network in Melbourne servicing inner-city suburbs. They plan to ramp up the network speed to 8Mbit/s to keep up with ADSL
· Optus & Telstra continuing their trials of wireless broadband.

APC November 2005 Pg 13: OZ gets WiMax first!
· Intel will fund wireless broadband provider Unwired's network across Australia in 2006. Unwired to switch from proprietary Navini Ripwave wireless broadband to Intel's WiMax (802.16e).
· WiMax will be built into laptops from 2007. Expansion cards for laptops & desktops will be available before then.
· WiMax real-life speeds will be lower than 50km coverage and 70Mbit/s but faster than Wi-Fi, which is 11Mbit/s and already broadband

APC April 2006 Pg 68: Wireless broadband road tests!
· GPRS is roughly equivalent to dialup speeds. (Wireless Dialup, not wireless Broadband).
· 3G/WCDMA/UMTS: 384Kb/s on 3G mobile networks
· 1XRTT: 144Kb/s on whole Telstra CDMA network
· 1XEV-DO: 300-600Kb/Sec on upgraded Telstra CDMA network otherwise 144Kb/s
· 802.11b/802.11g/WiFi: Built into most laptops and used in wireless hotspots.
· Vodaphone & Optus share their 384Kb/s 3G network and fallback to GPRS networks at no extra cost
· 3 charge $1.65 when you 1.65/MB usage fee to roam from their 3G network onto Telstra's GPRS (dialup speed) network
· IBurst still only in Melbourne, Sydney, Canberra, Brisbane & GoldCoast. Check http://snipurl.com.Lz8f


KB0006 - VoIP Info
· APC November 2004 Pg 100: VoIP and save
· APC March 2005 Pg 91: All you can VoIP
· APC May 2005 Pg 24: Glitch-free VoIP
· APC November 2005 Pg 14: VoIP price war
· APC March 2006 Pg 57: VoIP providers

updated 7/2/6


KB0007 - OSI Network Model
Layer | Name | PDU |
7 | Application | - | API to network calls:- FTP/HTTP/SMTP/DNS etc
6 | Presentation | - | Encryption/Decryption ASCII
5 | Session | Data | start/stop/manage data flow
4 | Transport | Segments | Error detection/Flow control
3 | Network | Packets/ Datagrams | Routing & IP addresses.
2 | Data Link | Frames | MAC addresses & NICs. Switches
1 | Physical | Bits | Physical H/W & electrical signals. Hubs

IEEE 802.2 – Logical link control (LLC)
IEEE 802.3 – Carrier Sense Multi Access/Collision Detect (CSMA/CD) MAC (Ethernet)
IEEE 802.4 – Token bus MAC
IEEE 802.5 – Token ring MAC

Unicasts are sent from one computer to another.
Broadcasts are sent to all computers on a network segment (local network)
Multicasts are sent to all multicast enaqbled computers. Used for video conferencing & ghost broadcasts etc.

WAN Protocols
HDLC/FR/PPP/ISDN/SLDC/LAPB/HDSL/SDSL/ADSL/VDSL/RADSL/POTS/SONET/
ATM – Asynchronous Transfer Mode (622Mbps)

updated 31/1/6


KB0008 - BigPond runs into SP2 firewall
The firewall in SP2 blocks Telstra's BigPond Cable 'heartbeat' by default. The heartbeat requires your computer to respond to Telstra every 7 minutes or the connection is dropped. The SP2 firewall can be configured to let the data through, and BigPond has published a FAQ page explaining the necessary steps at http://www.apcmag.com/info/bigpondSP2

Updated 31/1/6


KB0009 - Web Services

· The World Wide Web is more and more used for application to application communication. The programmatic interfaces made available are referred to as Web services. The goal of the Web Services Activity is to develop a set of technologies in order to lead Web services to their full potential. http://www.w3.org/2002/ws/

Note: The XML Protocol Activity was incorporated in the Web Services Activity in January 2002.


KB0010 - Net Time
Basic Operation of the Windows Time Service:
http://support.microsoft.com/kb/q224799/

How to configure an authoritative time server in Windows 2000

http://support.microsoft.com/kb/q216734/

How to configure an authoritative time server in Windows Server 2003
http://support.microsoft.com/kb/816042/

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters\Type

Used to control how a computer synchronizes.
Nt5DS = synchronize to domain hierarchy or manually configured source
NTP [default]= synchronize to manually configured source
NoSync = do not synchronize time

It is important to remember that only the PDC emulator (FISMO role) should time sync to an external source. All other domain controllers sync to the PDC emulator and all W2K domain clients will sync to the DC that authenticates them.

Executing “w32tm /resync” or “w32tm /resync /rediscover” forces the server to access the external time server (as can be seen with etherpeek)

Registry entries for the W32Time service:

http://support.microsoft.com/kb/q223184/

Using NET TIME for all Workstations and Servers

http://support.microsoft.com/kb/q120944/

Using TIMESERV to Set and Synchronize Time

http://support.microsoft.com/kb/q232255/

W32Time client does not fail over to secondary NTP servers by FQDN:
http://support.microsoft.com/default.aspx?scid=kb;en-us;285641

NTP Servers:
http://www.microsoft.com/resources/documentation/Windows/2000/server/reskit/en-us/Default.asp?url=/resources/documentation/windows/2000/server/reskit/en-us/cnet/cnfe_opt_oesf.asp

Time synchronization may not succeed when you try to synchronize with a non-Windows NTP server in Windows Server 2003:

http://support.microsoft.com/default.aspx?scid=kb;en-us;875424

A List of the Simple Network Time Protocol Time Servers That Are Available on the Internet

http://support.microsoft.com/kb/262680#XSLTH4178121122120121120120

Configuring the Windows Time Service
http://www.windowsnetworking.com/articles_tutorials/Configuring-Windows-Time-Service.html

Time Servers:-
time.windows.com - 207.46.130.100
time.nist.gov - 192.43.244.18
ntp.syd.connect.com.au – 192.189.54.33
ntp.adelaide.edu.au - 129.127.40.3 (* Use this one)

Microsoft Solutions for Security
http://www.mvatcybernet.com/Windows%20Server%202003/Windows%20Server%202003%20Security%20Guide.pdf

Notes:-

NET TIME \\FSMAAD02 /QUERYSNTP

Should return “The current SNTP value is: time.windows.com,0x1”

Their are 2 verions if w32tm (2000 & XP). One used - for command
switches, one uses '-' the other uses '/'

      w32tm /dumpreg

To display the current time Zone settings use:

      w32tm /tz

To change the Time servers without having to restart the w32time service (This will restart the cluster service)….

      w32tm /config /syncfromflags:manual /manualpeerlist:nts_server

      w32tm /config /update

      w32tm /resync /rediscover (forces a sync to the new server)

If you receive “The computer did not resync because no time data was available.” It means that it didn’t get a response from the external server. Try a different server. Time.windows.com doesn’t appear to work.!

Stratums:

1 - Locally connected hardware clock (optional) or Internet time server (optional)

2 - PDC Emulator in forest root domain

3 - Other domain controllers in forest root domain or PDC Emulators in child domains

4 - Workstations and member servers in forest root domain or Other domain controllers in child domains

5 - Workstations and member servers in child domains


KB0011 - LinkSys 802.11b Wireless Router Setup
· Settings:
o        Default Password: admin (No use rname)
o        Firmware revision: 1.50.11
o        MAC Address: 00-12-17-25-51-EB

· Initial setup: http://192.168.1.1

· Setup – Basic Setup:
o        Local IP Address: 192.168.254.2/255.255.255.0
o        Local DHCP Server: Disabled

· Setup – Advanced routing:
o        Transmit RIP: Disabled
o        Receive RIP: Disabled
o        Route table:-

0.0.0.0 0.0.0.0 192.168.254.1 1 LAN
192.168.254.0 255.255.255.0 0.0.0.0 1 LAN

· Wireless – Basic Wireless Settings:
o        Wireless Network Name (SSID): linksys thomas
o        Wireless channel: 11-2.467GHZ
o        Wireless SSID Broadcast: Disabled (Enable to make setting up of clients easier then disable once they are working OK. Once disabled, you wont be able to auto detect the network)

· Wireless – Security
o        Wireless Security: Enabled
o        Security Mode: WEP
o        Default Key: 1
o        Wireless Encryption Level: 128 bit
o        Paraphrase: latitude (2d 9a 1d 3a 0b 6e 16 3f 6d 81 ab 1a a3)

· Wireless – Network Access
o        Restrict Access
o        MAC 01: 0012172551EA (PC)
o        MAC 02: 0014bF75BA07 (Linksys PCMCIA card - ver. 3)

· Wireless Network Name (SSID): linksys thomas

· SSID Broadcast: disabled. (Have the SSID enabled while configuring the wireless network & then disable it).

Wireless Network Settings

Print this document and store it in a safe place for future reference. You may need these settings to add additional computers and devices to your network.

Wireless Settings

Network Name (SSID): linksys thomas
Network Key (WEP/WPA Key): e2377d1576d44de49cb35d2bac
Key Provided Automatically (802.1x): 0
Network Authentication Type: open
Data Encryption Type: WEP
Connection Type: ESS
Key Index:

To enable File and Printer Sharing on this computer, run the Network Setup Wizard.

To set up your Internet connection, follow the instructions from your Internet Service Provider (ISP).

Note: The Password on the iPhone/iTouch is the WEP Key!

Updated: 24/1/10


KB0012 - NetGear Dialup Router Setup
1. Connect to the router using Hyperterm, 9600,8,1,n

2. Password=1234 & setup as follows:-

1. General Setup
System Name=XXX_rtr (Where XXX = Store abbr. All in lower case)

3. Ethernet Setup
2. TCP/IP and DHCP
Client IP pool starting address=192.168.x.224 (Where x = Store No.)
Size of client IP pool = 31
Primary DNS = 192.168.200.203
Secondary DNS = 192.168.200.202

IP Address = 192.168.x.1 (Where x = Store No.)
IP Subnet marsk = 255.255.255.0
RIP Direction = None

4. Internet Access Setup
ISP’s Name = Three letter abbr. For store.
PRI Phone# =82245300 For SA stores or 98040510 for VIC stores (1456 prefix for Optus)
(Note: If problems connecting: Remove the 1456 prefix – This is to use optus)
My Login = Three letter abbr. For store
My Password = oicur_in_2
Single user account = no
Idle Timeout = 0
Updated: 7/9/1


KB0013 - Introduction to XML
http://www.agnisoft.com/white_papers/xml_delphi.asp
msdn.microsoft.com/xml

What is XML? It's a language. It is written is plain text - in a certain format. The "format" is used to structure the data so it makes it more readable than your average shopping list. Let's take an example: A list of books that you would want to display, for instance, could be shown in a paragraph listing the book name, the author and an abstract. In XML, you would describe such a listing as:

<BOOK Name="Tomorrow won't be like yesterday">
<Author> Pres Enttense </Author>
<Abstract>
If you're worried about not getting enough done today, you're wasting your time. Don't lose your hair because your boss needs to play golf tomorrow. Golf can wait. It's a boring game anyway.
</Abstract>
</BOOK>

The parts between the "<" and the ">" is a "tag". Which means it isn't something that's part of the data itself, but something that describes what the data means. The piece of XML above reveals that there's a book named "Tomorrow won't be like yesterday", whose author is Pres EntTense and there's an abstract given. Now you can extract the fields you want and present it in your application. But before we go ahead, let's discuss how XML is structured.

XML Structure.

The prolog.
First, you need to be able to say "what follows is an XML document". Otherwise, a program wouldn't be able to tell it from anything else. You would add a prolog like so:

<?xml version="1.0"?>

The only difference between the prolog and an XML tag is the "?" that's between the angle brackets.
The Document Element
Each XML document describes something - and this something is depicted as a base tag inside which all the other data goes in. In our example above, a book was the document element, so the XML was surrounded by <BOOK> and </BOOK>. If we had two or more books we'd have to use:

<BOOKS>
  <BOOK>
  ...
  </BOOK>
  <BOOK>
  ...
  </BOOK>
</BOOKS>

and <BOOKS> is the document element here. Every XML document needs one and exactly one document element.

Document Content
A document can various types of content

1. Elements
2. Attributes
3. Comments

Elements
A "tag" is an element. In our example above, BOOK, Author, Abstract are XML elements. Each element in XML should have starting and ending tags - for any tag X there must be a <X> and a </X> with the </X> coming after the <X>. In HTML, such a restriction is not imposed, so we sometimes find <p> tags which don't have a corresponding </p> tag.

Text between the element start and end tags is called the CDATA of the element. In,
<Soup> Today's special is the lobster soup </Soup>
The Soup element is described by the text between the tags, which is the CDATA. Sometimes, it's not necessary to have CDATA, like in <BR> tags in HTML. So one has to write.

<BR></BR>

everytime, which is quite redundant. XML provides an abbreviated way to handle this: for elements with no CDATA, it's valid to start and end an element with a slash before the ending >, like <BR/>

Attributes

Attributes are properties of elements, which come inside the element tag, just after the element name. In,

<Product Name="Borland Delphi" Version="5"/>

Name and Version are attributes of the element Product. The attributes have values, as seen above. This kind of granularity can also be achieved by using sub-elements, since the above XML could be written as:

<Product>
  <Name>Borland Delphi</Name>
  <Version>5</Version>
</Product>

There's no real rule of thumb about which to use when. A general guideline would be to use attributes when the text is small and manageable, and sub-elements for larger texts or when the text may need to contain other sub-elements.

Comments
Comments in XML are just like HTML comments, starting with "<!--" and ending with "-->". Anything in the middle is ignored (even if there are any element tags in there, they will not be processed)

Document Type Definition (DTD)
XML, as we've seen, is just structured text. Since it is so, it needs to be parsed, and many parsers have been written for this purpose. Some ground rules need to be followed, such as:

a) always end an element tag. You can use only <TAG/>, <TAG></TAG> or <TAG>content</TAG>.

b) Maintain that there is only one document element surrounding the XML.

c) XML is case sensitive. So <Element> is not the same as <ELEMENT>

d) Use quotes when giving attribute values. Although

<img src=myimg.gif>

is valid in HTML, it is not in XML. It should be:

<img src="myimg.gif"/>

These ground rules form the basis for "well formed XML". But If you need to even define the structure of the XML, like which tag should follow which, what tags are allowed etc. you will need to describe that in a separate document, called a Document Type Definition (DTD).

Document Type Definition (DTD).

A DTD is also a text document. A DTD for our example above would be:

<!ELEMENT BOOK (Author | Abstract)>
<!ATTLIST BOOK Name CDATA>
<!ELEMENT Author (#PCDATA)>
<!ELEMENT Abstract (#PCDATA) #REQUIRED>

The first <!ELEMENT part defines an XML Element, in this case the <BOOK> XML element. The latter part of the same line (Author|Abstract) says that a BOOK tag contains either Author or Abstract tags. The <!ATTLIST part defines the Name attribute of the BOOK tag.The rest of the tags define the other elements in the XML.
An XML document can specify the DTD that defines it - like:

<?xml version="1.0"?>
<!DOCTYPE BOOK SYSTEM "book-structure.dtd">
<BOOK>
...
</BOOK>

Note:(book-structure.dtd is a text file containing the dtd).

An XML that is well formed AND conforms to a DTD, it is said to be "valid XML". The XML that is used in this paper is not valid XML - DTDs have not been used anywhere, for clarity and space.

XML Schemas
An aside: DTDs were the first standard for defining XML. But a different parser has to be written for parsing a DTD, since a DTD does not conform to XML rules. XML schemas is a newer (although not yet a standard) approach, which uses valid XML to define another XML document. The format is different from a DTD, and supports some more data types. I won't delve into XML Schemas in this paper.

XML and databases
This demonstrates a structured set of data in plain text – so you can extract out the fields you want and present it in your application. Just like a table in a database, without the baggage of logging in, security, connection management and the like. And it's all plain text, so it's readable. XML is really extensible, unlike a table in a database - you can extend an XML to show master-detail relationships quite easily:

<Customer name="International Operations">
  <Order No="1110">
    <Item Code="500-1100" Quantity="5"> </Item>
    <Item Code="200-1000" Quantity="10">
    </Item>
  </Order>
  <Order No="400">
    <Item Code="510-1100" Quantity="3"> </Item>
    <Item Code="200-1000" Quantity="25">
    </Item>
  </Order>
</Customer>

This is a list of orders and the corresponding items. A file like this can be transmitted to a client over the Internet by email or using TCP/IP sockets. This can be used just like a database by the client, since the fields are neatly marked by tags. All of this, without the client having to own a license of the database server. Don't get me wrong: XML is not meant to replace database servers. It's going to complement them. You will still need optimized data storage, server side indexes, stored procedures and security - something XML will not address in the form it is now. (I wonder if this statement will remain sensible by the time this article is presented)

XML data can easily be passed over a network to a client who could choose to show it in a set of TDBGrids in a fat-client application. The same information can be formatted and shown in a Web Browser. (Internet Express does this job really well) You can even send XML to a customer-his payment system can now integrate with yours, all he needs to do is parse the XML, get a list of orders/items, confirm receipt, and generate payment information - all the customer needs to do is to sign the check. (If it were so easy...) And finally, the customer sends the payment information to you - again in XML - so you can directly import the details into your application for your information and later reconcile it with your bank statements.

Where does XML fit in?

Your client-server application consists of data being exchanged between your client and server. Data is exchanged in a format that you would not be aware of, which limits your application's scalability. If you used XML as the data exchange format, you could easily scale your client to a remote client – by simply implementing a data transport mechanism. You could use TCP/IP and have users accessing the server over the Internet, for instance.

In many enterprises, most user access consists solely of data reads. Instead of having all your users run client applications capable of reading and writing data, you can "web-enable"your server application by developing a web server application – an MTS component or an Enterprise Java Bean – that would connect to your server using TCP/IP or DCOM, get data in XML format and format it to emit HTML. This way all users can just log on to the Intranet site for reads. Later, you can even have other applications use this method to read data from the same server application and you will only need to understand the XML format returned. This makes it quite simple to build distributed applications.

Does this require that you give up developing applications using the BDE/ADO ? Or clients using data-aware controls? No. You will still use BDE/ADO on your desktop and Intranet Multi-tier applications.

See KB0014 - Introduction to XLS

updated: 7/2/6


KB0014 - Introduction to XSL

http://xmlfiles.com/xsl/

XSL - The Style Sheet of XML?

HTML pages uses predefined tags, and the meaning of these tags is well understood: <p> means a paragraph and <h1> means a header, and the browser knows how to display these pages.

With XML we can use any tags we want, and the meaning of these tags are not automatically understood by the browser: <table> could mean a HTML table or maybe a piece of furniture. Because of the nature of XML, there is no standard way to display an XML document.

In order to display XML documents, it is necessary to have a mechanism to describe how the document should be displayed. One of these mechanisms is Cascading Style Sheets (CSS), but XSL (eXtensible Stylesheet Language) is the preferred style sheet language of XML, and XSL is far more sophisticated than the CSS used by HTML.

XSL - More than a Style Sheet

XSL consists of two parts:

· a method for transforming XML documents

· a method for formatting XML documents

If you don't understand the meaning of this, think of XSL as a language that can transform XML into HTML, a language that can filter and sort XML data and a language that can format XML data, based on the data value, like displaying negative numbers in red.

XSL - What can it do?

XSL can be used to define how an XML file should be displayed by transforming the XML file into a format that is recognizable to a browser. One such format is HTML. Normally XSL does this by transforming each XML element into an HTML element.

XSL can also add completely new elements into the output file, or remove elements. It can rearrange and sort the elements, test and make decisions about which elements to display, and a lot more.

A JavaScript Solution

It is not always desirable to include a stylesheet reference in the XML file, and the solution will not work in a non XML aware browser.

A much more versatile solution would be to use a JavaScript to do the XML to HTML transformation.

By using a JavaScript we are more open for these possibilities:

n Allowing the JavaScript to do browser specific testing

n Using different style sheets according to browser and/or user needs

That's the beauty of XSL. One of the design goals for XSL was to make it possible to transform data from one format to another, supporting different browsers and different user needs.

XSL transformation on the client side is bound to be a major part of the browsers work tasks in the future, as we will se a growth in the specialized browser marked (think: Braille, Speaking Web, Web Printers, Handheld PCs, Mobile Phones .....).

Transforming XML to HTML on the client

Here is the simple source code needed transform the XML file to HTML on the client

<html>
  <body>
    <script language="javascript">
    // Load XML
    var xml = new ActiveXObject("Microsoft.XMLDOM")
    xml.async = false
    xml.load("cd_catalog.xml")

    // Load the XSL
    var xsl = new ActiveXObject("Microsoft.XMLDOM")
    xsl.async = false
    xsl.load("cd_catalog.xsl")

    // Transform
    document.write(xml.transformNode(xsl))
    </script>

  </body>
</html>

The first block of code creates an instance of the Microsoft XML parser (XMLDOM), and loads the XML document into memory. The second block of code creates another instance of the parser and loads the XSL document into memory. The last line of code transforms the XML document using the XSL document, and writes the result to the HTML document.

Transforming XML to HTML on the Server

Here is the simple source code needed transform the XML file to HTML on the server:

<html>
  <body>
    <%
      'Load the XML
      set xml = Server.CreateObject("Microsoft.XMLDOM")
      xml.async = false
      xml.load(Server.MapPath("cd_catalog.xml"))

      'Load the XSL
      set xsl = Server.CreateObject("Microsoft.XMLDOM")
      xsl.async = false
      xsl.load(Server.MapPath("cd_catalog.xsl"))

      Response.Write(xml.transformNode(xsl))
    %>
          </body>
        </html>

(The example is an ASP file, and the code is a VBScript.)

The first block of code creates an instance of the Microsoft XML parser (XMLDOM), and loads the XML file into memory. The second block of code creates another instance of the parser and loads the XSL document into memory. The last line of code transforms the XML document using the XSL document, and returns the result to the browser.

You can use XSL to Sort/Filter & Conditional If.

updated: 7/2/6


KB0015 - Introduction to ASP

http://www.w3schools.com/asp/asp_intro.asp

· ASP is a program that runs inside IIS

· An ASP file is just the same as an HTML file

· An ASP file can contain text, HTML, XML, and scripts

· Scripts in an ASP file are executed on the server

· An ASP file has the file extension ".asp"

· When a browser requests an ASP file, IIS passes the request to the ASP engine. The ASP engine reads the ASP file, line by line, and executes the scripts in the file. Finally, the ASP file is returned to the browser as plain HTML

· The advantages of using ASP instead of CGI and Perl, are those of simplicity and speed

· Provides security since your ASP code can not be viewed from the browser

· Since ASP files are returned as plain HTML, they can be viewed in any browser

· You can run ASP on your own PC without an external server. To do that, you must install Internet Information Services (IIS) on your PC.

updated: 7/2/6


KB0016 - Introduction to SOAP
http://delphi.about.com/gi/dynamic/offsite.htm?zi=1/XJ&sdn=delphi&zu=http%3A%2F%2Fwww.agnisoft.com%2Fsoap%2Fbinarytransfer.htm

What is Soap?

Soap stands for Simple Object Access Protocol.

"SOAP is a lightweight protocol intended for exchanging structured information in a decentralized, distributed environment. SOAP uses XML technologies to define an extensible messaging framework, which provides a message construct that can be exchanged over a variety of underlying protocols. The framework has been designed to be independent of any particular programming model and other implementation specific semantics."

This definition really gets to the heart of what SOAP is about today. SOAP defines a way to move XML messages from point A to point B. It does this by providing an XML-based messaging framework that is 1) extensible, 2) usable over a variety of underlying networking protocols, and 3) independent of programming models. Let's discuss each of these three characteristics in a bit more detail.

The SOAP messaging framework facilitates exchanging XML messages in heterogeneous environments where interoperability has long been a challenge.

Soap, in its current form, is a method for RPC (Remote Procedure Calls) over a network. (Yes, it is also used a way to transfer documents around as XML, but I'll leave that out for now)
Let me explain. Imagine you have this service that would return a stock quote given a stock symbol. It sends some data to the Nasdaq web page and scrapes the returned HTML to give you the result. Now, to allow other developers to use it inside of their applications, you might make this into a component that uses the Internet to access the quote information. Works great, except suddenly Nasdaq changed their web page layout. You're going to have to redo all the logic and send an update to every single developer that used your component! And they have update all THEIR users. If this happens with any regularity, you're going to get some really furious developers. And we all know how dangerous developers can be. You don't want to end up with a printout of a horse's head in your bed, do you?

What's the alternative? Think about this...all you need is to expose a function that takes a stock symbol (string) and return a stock quote (float or double). So, wouldn't it be easy if you simply allowed your developers to somehow call this function over the internet? Great! So what, you say, we've had COM and Corba and Java that has done this for ages...that's true, but they have their disadvantages. With COM, remote configuration is not trivial. Also you have to open so many ports on your firewall, something sysadmins are not too keen to do. You're going to have to forget about non Windows users. Linux users do need stock quotes too, you know.

SOAP is a standard (which means that everyone will do things differently) that allows you to describe such a "remote" function call, and the way you would return the results. So what you would do is to put your Stock Quote function in an application that's somehow accessible over a network (an ISAPI app on your web server, for instance) and it would get calls that are "SOAP formatted". You would then validate the inputs, run your function and return the results in another SOAP formatted packet. And this can be done even over HTTP, so you don't have to open a few dozen ports on your firewall. Simple isn't it?

What this paper is about...

This is the first of a series of papers on SOAP that we at Agni Software are writing. This particular paper will concentrate on giving you an idea of what SOAP is about, and how you can write applications in Delphi 6 that will call SOAP servers. In the next paper, I will describe how you can write your own Soap Servers and Clients, using Delphi.

In future articles I will describe how to make your SOAP server accessible to users of other SOAP toolkits like MS SOAP, .NET, PocketSoap and Apache.

Soap and XML
In order to make SOAP not so simple for you and I, we need to add XML. So instead of a function name and parameters, we now need to have a complicated XML envelope that is designed to confuse you. But don't get scared yet. There's more, and you should see the full picture before you start thinking this is complicated. (It is.)
If you don't know what XML is, stop right here and read my paper on XML at http://www.agnisoft.com/white_papers/xml_delphi.asp.
All Soap packets are formatted as XML. What does this mean? Let's see. Take a look at this function: (Pascal)

function GetStockQuote( Symbol : string ) : double;

Looks great, but the problem is - it's Pascal. How does a Java programmer benefit by giving this seemingly simple definition? Or someone who works on VB? We need something everyone can understand, even VB users. So we give them XML containing the same information (parameters, stock quote values etc You create a SOAP "envelope" - which is basically your function call, wrapped as XML so that any application on any platform can understand it. Let's now see a SOAP call looks like:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema" >
<SOAP-ENV:Body>
<ns1:GetStockQuote xmlns:ns1="urn:xmethods-quotes">

<SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<symbol xsi:type="xsd:string">IBM</symbol>
</ns1:GetStockQuote>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

How informative! We see here that SOAP is getting more and more simple. Well, that was the fun part. Now I'm going to tell you how to understand this soap call, because, well, because you're reading this and I'm writing this and I can pretty well write what I want to.

The Tags Revealed
The first "tag" you see is the <SOAP-ENV:Envelope ... > tag. This tag is an outer shell to the SOAP packet, giving you various namespace declarations you don't care about, but your average programming language or parser does. The namespaces are defined so that further "prefixes" to tags such as "SOAP-ENV:" or "xsd:" make sense to a parser.
The next tag is <SOAP-ENV:Body> . (We've skipped a tag that is not shown here - the <SOAP-ENV:Header> tag. It's not in this particular Soap envelope, but if you want to read more about it, go to the SOAP specification at http://www.w3.org/TR/SOAP/ ) The <SOAP-ENV:Body> tag is a placeholder that starts off the actual SOAP call.
Coming next is the <ns1:GetStockQuote ...> tag. The tag name, GetStockQuote, is the function to be called. In Soap lingo, this is called an operation. So GetStockQuote is the operation that needs to be executed. ns1 is a namespace, which points to urn:xmethods-quotes in this case.
A small note about namespaces: A namespace is a way to qualify an XML tag - for instance you cannot have two variables with the same name in one procedure, but it's ok if they're in two different procedures. So the procedure is a "namespace" - all names are unique within it. Similarly, XML tags can be scoped inside namespaces, so that, given a namespace and a tag name, you can uniquely identify and find a tag. We will point a namespace to a URI (Uniform Resource Identifier), in order to make sure that "my NS1 is not the same as yours". In our example above, NS1 is the alias for a namespace which points to urn:xmethods-quotes.
You'll also notice an encodingStyle attribute - this attribute specifies how a soap call is serialized. Within the <GetStockQuote> tag lie the parameters. In our simple case, we only have one parameter. Which is the <symbol> tag. You'll notice that there's this extra little thing next to the tag :
xsi:type="xsd:string"
This is approximately how XML defines types. (Note the clever use of the word "approximately" when making a absurdly general statement about a technology that might mutate the minute I put this paper on the web) What this particular statement means is: the type, as defined in the xsi namespace, which you would have noticed is declared in the <SOAP-ENV:Envelope> tag, is xsd:string. Which in turn is a string, as defined in the xsd namespace, again defined earlier. (I'm sure Lawyers love this stuff)
Inside of the <symbol> tag there's the boring little "IBM". This is the value of the parameter symbol to the GetStockQuote function.
Beyond this, like good people, we close our XML tags.
That's about the SOAP packet, which defines a "call" to a SOAP server. The soap server, using the support of complex XML parsers, nuclear missiles and the mir space station, decodes the call and figures that you want to get a stock quote. It then quickly fetches the stock quote and sends you back a packet like so:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
<SOAP-ENV:Body>
<m:GetStockQuoteResponse xmlns:m="urn:xmethods-quotes">
<Price>34.5</Price>
</m:GetStockQuoteResponse>
</SOAP-ENV:Body>

</SOAP-ENV:Envelope>

This, after removing all the envelopes, the gift-wrap and the embellishments, simply tells you that the price of the IBM stock was 34.5.
Most commercial servers would return a LOT more information than just that, of course, like in what currency, last traded price etc. And would perhaps return a more accurate value of the IBM stock.
So we now know what a soap server expects, and what to send back. Now HOW do we send such information? You could use any transport. The most well discussed case is HTTP. I'm not going to explain what that is, except it's what your web browser uses to communicate with those web sites you go to.
You would make an HTTP request such as:

POST /StockQuote HTTP/1.1
Host: www.stockquoteserver.com
Content-Type: text/xml; charset="utf-8"
Content-Length: nnnn
SOAPAction: "Some-URI"

...the soap request packet here...
The only other point of significance here is the SoapAction header. This header indicates the intent of a request, and it is mandatory. Each SOAP server could have multiple functions, and it could decide to use the SoapAction header to figure out which function is being called. Also, firewalls and server multiplexers can filter content using this header.
The soap response from the HTTP server will be as follows:
HTTP/1.1 200 OK
Content-Type: text/xml; charset="utf-8"
Content-Length: nnnn

...Soap Response packet here...

Why HTTP? For one, network administrators do not have to worry about opening separate ports for SOAP calls...a web server would do the job, and port 80 is usually opened to the world to handle incoming web requests. The other advantage is that web servers are usually extensible using CGI, ISAPI or other native modules. This extensibility allows us to write a module that will handle a SOAP request, while not affecting any other web content.
That's all for now, folks
This, I hope, has been a reasonably understandable description of SOAP. If you're still here, and want to know more, we'll have some more articles on Soap, WSDL and other such four letter words coming up soon.

Meanwhile, feel free to mail me with your questions, suggestions and any praise. If you think this article sucks, email me at yousuck@nowhere.com. All other mail can be sent to shenoy@agnisoft.com.
Has this page been helpful to you? Suggestions? Comments? Let us know!

Links: (all links open in new windows)
The SOAP Specification: http://www.w3.org/TR/SOAP
Microsoft's paper on SOAP: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsoap/html/understandsoap.asp
The Developmentor SOAP FAQ: http://www.develop.com/soap/soapfaq.htm
Shiv Kumar's Introduction to Web Services: http://www.matlus.com/scripts/website.dll/Tutorials?DelphiWebServices&WhatAreWebServices&1
Alessandro's SOAP with Delphi page: http://www.msdelphi.com/Articles/SOAP/Using%20SOAP%20with%20Delphi.htm

Last updated: 29 September 2001.
Copyright © 2000-2001 Agni Software Private Limited


KB0017 - FAQ On Blackhole Servers

http://www.iana.org/faqs/abuse-faq.htm

FAQ on "Blackhole Servers"

Q1: What are the blackhole servers?

A1: The "blackhole" Servers, "blackhole-1.iana.org" and "blackhole-2.iana.org", are an obscure part of the Internet infrastructure. People are sometimes puzzled or alarmed to find unexplained references to them in log files or other places. This FAQ tries to explain what these servers do, and why you may be seeing them. Specifically, these servers are part of the Domain Name System (DNS), and respond to inverse queries to addresses in the the reserved RFC 1918 address ranges:

10.0.0.0 - 10.255.255.255
172.16.0.0 - 172.31.255.255
192.168.0.0 - 192.168.255.255

See: RFC 1918

These addresses are reserved for use on private intranets, and should never appear on the public internet. The 192.168.0.0 addresses are especially common, being frequently used in small office or home networking products like routers, gateways, or firewalls.

Q2. What is "prisoner"

A2. "prisoner" is a blackhole server.

Q3: What are "inverse queries?

A3: With normal ("forward") queries the domain-name system responds with an address (e.g., "192.0.34.162") when given a name are (e.g., "www.iana.org"). Inverse ("reverse") queries do the reverse – the domain name system returns the name ("www.iana.org") when given the address ("192.0.34.162"). While inverse queries are rare from a human perspective, some network services automatically do an inverse lookup whenever they process a request from a particular IP address, and consequently they form a significant part of DNS network traffic.

Q4: Why do we need the blackhole servers?

A4: Strictly speaking, we don't need the blackhole servers. However, DNS clients will sometimes remember the results from previous queries (that is, "good" answers to queries are cached), and the blackhole servers are configured to return answers that DNS clients can cache. This allows the clients to rely on their cached answers, instead of sending another query, which in turn reduces the overall amount of traffic on the Internet. Since the RFC 1918 addresses should never be used on the public Internet, there should be no names in the public DNS that refer to them. Hence, an inverse lookup on one of these addresses should never work. The IANA blackhole servers respond to these inverse queries, and always return an answer that says, authoritatively, that "this address does not exist". Because of the caching noted above, this is far better than simply not responding at all, so the blackhole servers are provided as a public service.

Q5: How busy are the blackhole servers?

A5: While rates vary, the blackhole servers generally answer thousands of queries per second. In the past couple of years the number of queries to the blackhole servers has increased dramatically. It is believed that the large majority of those queries occur because of "leakage" from intranets that are using the RFC 1918 private addresses. This can happen if the private intranet is internally using services that automatically do reverse queries, and the local DNS resolver needs to go outside the intranet to resolve these names. For well-configured intranets, this shouldn't happen. Users of private address space should have their local DNS configured to provide responses to inverse lookups in the private address space.

Q6: But it looks like the blackhole servers are attacking my network/host. Could it be that a hacker has taken over the servers, and is attacking other systems?

A6: No system is totally safe from hackers, and the blackhole servers are no exception. However, the effect you are seeing very likely has another cause. Because of their special function, there are a number of reasons why the blackhole servers may appear in your logs or elsewhere that have nothing to do with hacking. DNS configuration, especially in an environment where the RFC 1918 addresses are being used, can be tricky. Firewall configurations can make things even more complicated. If, for example, your system is configured to allow all outgoing packets, but to block most incoming packets, then it may be that your DNS client is in fact sending inverse queries to the blackhole servers, but blocking (and logging) the returning answers.

It is also true that other activities of hackers can make the blackhole servers show up in your logs. It is possible to construct network packets with forged source addresses that are in the RFC 1918 ranges. A hacker, for example, could construct a packet that appears to come from 192.168.35.35 and send it to your network. Sometimes there are large-scale denial-of-service attacks that use a flood of such "spoofed" packets. The result might be a large number of queries coming to the blackhole servers, which may themselves be overloaded with query traffic. Under conditions of heavy load, the servers may drop packets, and not respond correctly to some queries. This may cause odd messages to appear in the error logs of either the attacking or the attacked host. (In large scale "distributed denial of service" attacks, many systems are taken over by hackers, and these systems are used to attack some victim. The owners of the attacking systems may not even be aware that they have been taken over by a hacker.)

Q7: OK, maybe you aren't attacking me. What can I do about the messages in my logs?

A7: The best way solve this problem is to set up DNS on your local network. Unfortunately, this can be complicated, and may not in practice be possible. If you are using operating systems from Microsoft, you might want to look at <http://support.microsoft.com/default.aspx?scid=kb;EN> . (Please note that the blackhole servers used to be located at isi.edu).

Q8: Is there anything more than just logs at issue?

A8: Possibly. But you should make every effort to fix the problem from your end, because episodes of overload to the blackhole servers are becoming more common, and that can have more serious consequences. See, for example, <http://www.shmoo.com/mail/fw1/apr99/msg00946.html> .

updated: 8/2/6


KB0018 - Sample WSDL
Sample WDSL files cambe accessed at http://www.xmethods.com/

Note: Use wdslimp.exe to create a delphi class from the wdsl file.

Eg wdslimp -P filename.wsdl

If you are using IE you can view WSDL inside the browser. Some of the elements you should be aware of are...

1. The <message> element. The name attribute contains the name of the method with the word Request added to it. This is part of the spec. This is not the element that really tells you the name of the method however. That comes later

2. the <part> element's name attribute tells you the name of the parameters while the type attribute tells you the type of the parameters.

3. Next, take a look at the next <message> element. The name attribute has the name of the method with the word Response at the end of it. Once again, this is as per spec.

4. Under this element the <part> element's name attribute tells you what is being returned and the type attribute tells you the type of this return value.

5. The next important element is the <operation> element. This is the element that really gives you the remote method name. In this case SendMail.

6. The <soap:operation> element has an attribute called soapAction. You'll see this mentioned once again later in this tutorial. The value of this attribute is generated for you automatically by the Delphi 6 SOAP framework. In particular by the TWSDLHTMLPublish component at the server end. This is the component that actually generated this WSDL file in the first place.(if you examine the URL for this WSDL file, you'll notice that it points to an action in the ISAPI.)

7. The <service> element and it's name attribute are the next elements to look at. We'll see these again when building the client later. In particular, when populating the THTTPRIO component's Service and Port properties.

Right at the start of this WSDL file, you'll see some namespaces being declared. In I.E. they will be highlighted in red. Namespaces are declared as attributes of an element. In this case the <definitions> element like

xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"

This declaration now gives us a namespace called soap. Further down in the WSDL file there are a few elements that start with the word soap. For example, <soap:operation>. This is really the <operation> element in the soap namespace. You can tell this by the virtue of the fact that there is a : (colon) between the word soap and operation. Hope that makes some sense at this point.


KB0019 - Web Services Overview (ASP.NET)
Ref: Pro ASP.NET 2.0 in C# 2005 Pg 1088

Web Services Overview
Web services are a new technology that aims to extend component object (Eg COM, CORBA, JavaBeans, & .NET components) technology to the web. Essentially, a web service is a unit of application logic (a component) that can be remotely invoked over the internet.

Web services represent the next logical step in the evolution of component-based distribution technologies.

Note: A Web service does NOT support bidirectional communication. Ie a Web service can not call back to a client after the client closes the connection, where as DCOM & CORBA can do this. Also .NET to .NET can use remoting.

Finding a Web Service
In a simple application you may already know the URL of the web service. If so, you can hard-code or place it in a configuration file. No other steps required.

Alternatively, to find a web service at run time or to find all web services provided by a trading partner, you need to use discovery to programmatically locate the web service.

DISCO (abbreviation of discovery): The DISCO standard creates a single file that groups a list of related web services. The file can then be published on a WEB server.

UDDI: Is a centeralised directory where web services are published. To retrieve information from a UDDI directory or register your components, you use a web service interface.

DISCO is only supported by Microsoft & many companies are unlikely to take up UDDI.

You can download a .NET component to search UDDI directories at http://msdn.microsoft.com/library/en-us/uddi/uddi/portal.asp

Describing a Web Service
For a client application to know how to access a web service, the client must know what methods are available, what parameters each method uses, and what the data type of each parameters is. The WSDL is an XML-based language that describes all these details.

Accessing a Web Service
To communicate with a web service, you need a way to create request & response messages that can be parsed and understood on any platform. SOAP is the XML-based language you use to create these massages. HTTP is usually used as the transport for SOAP. Other transports can include SMTP.

Exposing a Web Service
You need to as the System.Web.Service.Webmethod attribute to each method you want to expose as a part of the web service. This web service instructs ASP.NET to make each method available for inspection and remote invocation.

public class EmployeesService
{
    [WebMethod()]
    public int GetEmployeesCount()
    {...}

    [WebMethod()]
    public DataSet GetEmployees()
    {...}
}

This two simple changes complete the transformation from your class into a web service. However, the client still has no entry point into the Web Service. Ie there is no way for another application to trigger the web methods. To allow this you need to create an .asmx file that exposes the web service.

ASP.NET implements web services as text files with the .asmx extension. Eg

<%@ WebService Language="C#" Class="EmployeesService" %>


KB0020 - IIS Anonymous Access Issue

Why does IE prompt for user credentials when using a FQDN but not with a NetBios name?

http://www.windowsitpro.com/Article/ArticleID/48989/48989.html

A. This is a problem with the Web browser configuration. Because this URL has a Fully Qualified Domain Name (FQDN), Microsoft Internet Explorer (IE) processes it as an Internet rather than an intranet site, which means auto-authentication is disabled. (If you typed in just the server name, not the FQDN then you would not be prompted to authenticate.)

To resolve the problem, add the URL of the virtual server to IE's "Local intranet" zone, by following these steps:

1. From the Tools menu in IE, select Options.

2. Click the Security tab.

3. Select "Local intranet" and click Sites.

4. Click Advanced.

5. In the "Add this Web site to the zone" field, type the name of the virtual server Web site and click Add. Click OK to all dialog boxes.

Resolving IIS Anonymous Access settings

http://technet2.microsoft.com/WindowsServer/en/Library/764d5c12-261e-4bb4-bd6d-a394f61054041033.mspx

By default, Internet Information Services (IIS) impersonates a special IIS local user account. Since this account is local to the IIS computer (unless it is a domain controller), it cannot be authenticated by other computers in the network and is treated as an anonymous user.

Active Server Page (ASP) applications and scripts run under IIS, and by default impersonate the IIS local user for any Message Queuing operations, including queries to Active Directory. Since anonymous users no longer belong to the Everyone group in Windows Server 2003 family, these queries fail, and ASP applications and scripts cannot locate, create, and delete queues. In addition, an anonymous user cannot open a queue for remote read, and you cannot read messages from queues that do not belong to the IIS computer using ASP.

You can resolve this issue in either of the following ways:
• | Using a domain user account instead of the IIS local user account for Anonymous Access. The account must have the required permissions for the Message Queuing operation, for example access to Active Directory.
• | Disable Anonymous Access. Trust the IIS computer for delegation to allow multiple hops in communicating with a domain controller. Note that this option will not resolve remote read limitations.

Check that the Enable Integrated Windows Authentication option is selected on the Security settings in IE.

Updated: 10/2/6


KB0021 - Click Once Technology
http://msdn.microsoft.com/msdnmag/issues/04/05/clickonce

.deployment & .manifest files.


KB0022 - Telstra Network Feature Codes

http://www.accesscomms.com.au/codes.htm

Legend
FAT = Feature Access Tone
RVA = Recorded Voice Announcement
PIN = Personal Identification Number
AXE = Ericsson Exchange
S12 = Alcatel Exchange

"Easycall" and "Faxstream Duet" are registered trademarks of Telstra Corporation Limited

Feature | Activate | Cancel | Variables (Time/PIN or Numbers) | Status
Last Number Redial (AXE Only) | 0 # |  |  |
Call Return | * 10 # |  |  |
Multiple Number - Second Line Number | * 11 * 2 # |  | * 11 * 2 # (2nd dial tone) * 21 phone number # |
Faxstream Duet - Second Line Number | * 11 * 3 # |  |  |
Call Forwarding Timed | * 16 # (RVA) | # 16 # (RVA) | * 87 PIN * (RVA) 9 * (RVA) ? | * # 16 # (RVA)
Call Forwarding Immediate - Variable | * 21 phone number # | # 21 # |  | * # 21 # (RVA)
Call Forwarding Immediate - Fixed | * 21 # | # 21 # |  | * # 21 # (RVA)
Call Forwarding on Busy - Variable | * 24 phone number # | # 24 # |  | * # 24 # (RVA)
Call Forwarding on Busy - Fixed | * 25 # | # 25 # |  | * # 25 # (RVA)
Password Control |  |  | * 30 old PIN * new PIN * new PIN # (RVA) |
CND blocking per call (mobile phone) | # 31 # phone number |  |  | Check "phone/settings" menu.
CND sending per call (mobile phone) | *31# phone number |  |  | Check "phone/settings" menu.
CND blocking per call (fixed-line phone) | 1831 phone number |  |  | * # 1831 # (RVA)
CND sending per call (fixed-line phone) | 1832 phone number |  |  | * # 1831 # (RVA)
Call Control - Predefined | * 33 PIN # | # 33 PIN # |  | * # 33 # (RVA)
Auto Call Back | Recall * 37 # (RVA) | # 37 # (RVA) |  | * # 37 # (RVA)
Call Waiting | * 43 # (FAT) | # 43 # (FAT) |  | * # 43 # (RVA)
Call Waiting over-ride per call (AXE Only) | * 44 phone number |  |  |
Abbreviated Dialling Individual and Group | * 51 abv code number # | # 51 abv code # |  |
Delayed Hotline | * 53 hot line number # | # 53 # |  | * # 53 # (RVA)
Call Forwarding on No Answer - Variable | * 61 phone number # | # 61 # | * 61 phone number * time in secs # | * # 61 # (RVA)
Call Forwarding on No Answer - Fixed | * 62 # | # 62 # | * 62 * time in secs # | * # 62 # (RVA)
Include Line in Hunt Group | * 76 # | # 76 # |  | *#76 # (RVA)
Changing Redirect List for Selective Call Forwarding |  |  | * 87 PIN * (RVA) 4 * (RVA) ? |
Smart (Selective) Ring | * 88 # (RVA) | # 88 # (RVA) | * 87 PIN * (RVA) ? * (RVA) ? | * # 88 # (RVA)
Selective Call Forwarding | * 92 # (RVA) | # 92 # (RVA) |  | * # 92 # (RVA)


KB0023 - Writing A SOAP Server in Delphi 7
http://www-128.ibm.com/developerworks/db2/library/techarticle/0212swart1/0212swart1.html

http://www.matlus.com/scripts/website.dll/Tutorials?DelphiWebServices&BuildingYourFirstWebservice&3

http://www.xmethods.com/

See KB0018 - Sample WSDL

Building the Windows SOAP Server Application

Start by building the server on Windows and then building a client on Linux. (You can do it the other way around if you want -- or build both on either Windows or Linux.)

1. For the Windows SOAP server, start Delphi 7 Enterprise, do File > New > Other, and go to the Web Services tab of the Object Repository (see Figure 1 ).

Figure 1. Delphi 7 Object Repository

2. To build a DataSnapTM application as cross-platform Web service, double-click on the SOAP Server Application icon, which starts the corresponding wizard (see Figure 2 ).

Figure 2. Creating a new SOAP Server Application

3. Using Delphi 7 (on Windows), you can now select from an ISAPI/NSAPI DLL, Apache 1.x or 2.x DLL, CGI executable, or Web App Debugger executable. You can use the latter to debug the application from within the Delphi IDE (but you cannot deploy it-you must change it to one of the other targets to deploy the Web server application). Using Kylix 3 (on Linux), you can select an Apache Dynamic Shared Object (DSO) file, a CGI executable, or a Web App Debugger executable. For this example, select a CGI executable, but for real-world usage you might want to select a more efficient Apache or ISAPI/NSAPI DLL. After you've made your choice, click OK.

4. A new SOAP Server Application and SOAP Web Module is generated for you. But before you can take a closer look, you get a popup dialog asking if you want to create an interface for the SOAP module right now (see Figure 3 ).

Figure 3. Because you're building a special DataSnap SOAP server, click No

Click No, because you're not interested in building a regular Web service application right now. Instead, you want to build a special DataSnap SOAP Server.

As you can see in Figure 4 , the SOAP Web module already contains three components:

· THTTPSoapDispatcher: Dispatches all requests that have /soap in the PathInfo. It then hands the request over to THTTPSOAPPascalInvoker. This component really handles the bulk of the process.

· THTTPSoapPascalInvoker: Interprets a SOAP request message and executes the corresponding invokable interface.

· TWSDLHTMLPublish: Interprets a SOAP request message and executes the corresponding invokable interface.

See the online help for more details about these components; basically, they perform all the SOAP and WSDL "plumbing" for your DataSnap SOAP Server, so you can now focus on the database tables and not worry about the rest.

When you build a WebService, it is your job to:

1. Define an Interface.

2. Implement this interface in a class.

3. Register the interface and class with the invocation registry.

The Delphi SOAP framework handles the rest of it for you...

1. Parsing the SOAP envelope.

2. Instantiating the required class.

3. Calling the required method and passing the received (parsed) parameters to it

4. Getting back a result from the method.

5. Putting the result back in a SOAP response envelope and sending it back out.

6. If there is an exception it constructs a SOAP Fault packet instead

Note: By selecting SOAP Server application, The /ProcessID parameter is automatically set for you. The output directory is also set.

5. Save the SOAP Web module in file SWebMod.pas and the entire project in D7DB2CGI.dpr (which will result in D7DB2CGI.exe).

Note: Declare ISAPIApp before ISAPIThreadPool. This overcomes the Received content of invalid Content-Type setting error.

6. Now add a SOAP Data Module to connect to the DB2 database (using the second icon in the WebServices tab of the Object Repository; see Figure 1 again). In the SOAP Data Module Wizard, you only have to specify the name of your new data module;name it D7DB2SAMPLE to indicate that you're still using the DB2 SAMPLE database like last time (see Figure 5 ). This will add IAppServer, IAppServerSOAP & Imodule to the SOAP Port Types.

7. Save the SOAP Data Module in SDataMod.pas. Because you want to mimic the application you've built before, this time as a DataSnap SOAP server, you must again use dbExpressTM data-access components and a TDataSetProvider here, and continue inside the DataSnap SOAP client with a TSOAPConnection and TClientDataSet component.

8. Using dbExpress again, first drop a TSQLConnection component on the SOAP Data Module. Set its ConnectionName property to DB2Connection, check the connection parameters (see if User_Name and Password have values), and finally set the LoginPrompt property to False. If you can then set the Active property to True without problems, you know that you can make a connection to the DB2 SAMPLE database.

SOAP Server

After the application is deployed correctly, run the Web service executable from inside a Web browser. This shows information about the services available in the SOAP server (see Figure 7 for the complete listing).
Figure 7. Service Info for the D7DB2CGI Web service

Note that there are no fewer than four services (or interfaces) implemented by your Web service. The first three point to the same "service," namely the DataSnap SOAP Web module, which exposes itself to the outside world using the IAppServer, IAppServerSOAP, and ID7DB2SAMPLE interfaces.

If you add /WSDL to the URL, you get the WebService Listing itself (see Figure 8). WSDL (Web Services Description Language) is a formal way to let the SOAP server expose its capabilities to SOAP clients that want to use it.

Figure 8. WebService listing for D7DB2CGI

For your SOAP server, you can get the formal WSDL specification if you add the name of the interface after the /WSDL in the URL. So for the IAppServer interface, the URL to get the WSDL is http://localhost/cgi-bin/D7DB2CGI.exe/wsdl/IAppServer.

Building the Windows SOAP Client

Once you have the WSDL (or the URL to produce the WSDL), you can write a SOAP client to access the SOAP server.

1. Start Delphi and create a new application

2. To make the connection to the SOAP server, use a TSOAPConnection component. Set the URL propert to the URL that you used for the SOAP Server Application, but now specify soap instead of wsdl (if you pass /wdsl, you get the the Web Services Description Language; if you pass /soap, you send a request to the server). So the URL property in my case is http://rthomas/soap/d7db2cgi.exe/soap/IAppServer.

3. Next, drop four TClientDataSet components, and call them cdsEMP, cdsEMP_ACT, cdsEMP_PHOTO, and cdsEMP_RESUME, followed by four TDataSource components called dsEMP, dsEMP_ACT, dsEMP_PHOTO, and dsEMP_RESUME, where each TDataSource component is connected to the corresponding TClientDataSet component.

4. Now, double-click on the cdsEMP component to start the Fields Editor. Right-click inside the Fields Editor and select Add All Fields. As a result, you not only see all fields from the Employee table, but also three special fields called SQLtblEMP_RESUME, SQLtblEMP_PHOTO, and SQLtblEMP_ACT. These three fields are of type TDataSetField, and are in fact "nested datasets," because they contain the detail records (for RESUME, PHOTO, and ACT) that belong to the current master employee record. They're inside that same record, packaged into one entity-making it convenient to receive, and convenient to use to apply updates (which you'll do in a moment again).

5.

updated 7/3/6


KB0024 - Indigo
· Programming the Indigo API's is essentially programming WEB Services.
· Indigo will feature some BizTalk functionallity (Web Services & Messaging)
· Microsoft plans to "Mirror" Webshpere software


KB0025 - Windows 2000 Routing

Enabling IP Routing

By default, IP routing is disabled. To enable IP routing, you must allow the computer to forward IP packets it receives. This requires a change to the Windows 2000 system registry.
When you enable the Routing and Remote Access service for IP routing,
this registry entry is made automatically.

To enable IP routing

1 .From the Start menu, click Run.

2.Type regedt32.exe or regedit.exe, and then click OK.

3.In a registry editor, navigate to
HKEY_LOCAL_MACHINE \SYSTEM\CurrentControlSet\Services\Tcpip \Parameters

4. Select the " IPEnableRouter" entry (by defining as value : 1 ) :

5. To enable IP routing for all network connections installed and used by this computer, assign a value of 1.
To do this in regedit.exe, right-click the entry, and then click Modify.
In regedt32.exe, click on the wanted entry, click on Edit, and then click on the appropriate menu choice.

6.Close the registry editor.


KB0026 - Changing Windows MTU

ADSL requires a MTU of 1460 for the underlying technology to properly process packets, so the following needs to be set on Cisco routers:-

int dialer1

 ip mtu 1460

However, by default Windows uses an MTU of 1,500 and if an application sets the don't fragment bit (DF) the packet wont get through. To get around the problem you force the router to fragment packets greater than 1,420 bytes by setting the following:-

int e0

ip tcp adjust-mss 1420

You can reduce the size of the MTU windows uses with the following registry hack:-

HK_LM\SYSTEM\CurrentControlSet\Service\TCPIP\Parameters\Interfaces\{GUID for network settings - check IP addr\

Add a DWORD entry called MTU and set its value to 1300 dec (514 hex).

A reboot is required.

You can test if unfragmented packets are routed by using ping from the

ping ipaddr -f -i 1472

Note: icmp adds 28 bytes overhead.

updated 16/7/7


KB0027 - Clearing Outlook nickname cache
· Close Outlook
· Search for *.NK2 files (they may be hidden) and either rename to another extension or delete them

updated 25/3/6


KB0028 - Joomla Tips & Tricks
Running IIS & Apache on same server
· Note: It looks as if Joomla can run under IIS. Further investigation required.
· Assign 2 IP addresses to one NIC
· Change IIS so that it listens on one address only. By default it listens on all IP addresses. Do this for WWW & FTP
· Modify the apache httpd.conf file in the apache/conf folder.

· Set the Listen Parameter to point to the other IP address
eg. Listen 192.168.254.4:80

· Disable the SSL service by commenting out the following lines:-

LoadModule ssl_module modules/mod_ssl.so

Include conf/extra/httpd-ssl.conf

Connection to the Joomla DB
· To connect to the Joomla DB Use the following DOS command (No password):-

mysql -u root -p

· From the mysql> prompt use the following command:-

connect joomla

· Joomla Tables:-

jos_users

Stopping/Starting IIS/Apache
· Stop IIS: net stop w3svc
Start IIS: net start w3svc
Stop Apache: xampp_stop
Start Apache: xampp_start

Accessing Joomla
http://127.0.0.1/joomla
http://127.0.0.1/joomla/administrator (Username: admin)

Changing Joomla IP
Edit the configuration.php file & set the $mosConfig_live_site parameter
Note: You will need to convert this file to ascii. (bin2ascii)

Updated: 27/6/6


KB0029 - Databases
· MySQL
· PostgreSQL
· SQLite
· Oracle
· SQL Server
· DB2
· Firebird


KB0030 - Installing MRTG
Installing MRTG (Multi Router Trafic Grapher) on Windows

· Install Perl. I used ActivePerl 5.8.4 build 810 (available from http://www.activestate.com/products/activeperl/ ) & used the default settings. Remember to reboot after the install.

o        Check that the install was a success by doing an echo path and seeing that perl has been included.

o        Execute echo print “Hello World”|perl

· Install MRTG into \mrtg.

o        Create a directory called mrtgdata in the mrtg directory. Ie \mrtg\mrtg-2.10.15\mrtgdata

· Create a MRTG config file (mrtg.cfg):-

o        Go to the bin directory of mrtg (c:\mrtg\bin) and execute

perl cfgmaker w.x.y.z –output mrtg.cfg

where w.x.y.z is the ip address of the SNMP device you are going to monitor.

Note: SNMP needs to be running on the router – See below.

o        Edit the mrtg.cfg file and append the following lines:-

RunAsDaemon: Yes
Interval: 5

o        You will also need to set the work dir to (this line will be commented out with a #):-

WorkDir: c:\mrtg\mrtg-2.10.15\mrtgdata
WorkDir: d:\inetpub\mrtg (Mspiggy)

· Running MRTG as a service

o        Copy mrtgcron.bat to the mrtg bin directory. Edit the file and set the directory paths.

Set DIR_BIN="C:\mrtg\bin"
Set DIR_WORK="C:\inetpub\wwwroot\mrtg"
Set PERL="C:\perl\bin\perl.exe"

REM Make Index file
%PERL% %DIR_BIN%\indexmaker --columns=1 mrtg.cfg > %DIR_WORK%\default.htm

REM Analyze
%PERL% %DIR_BIN%\mrtg mrtg.cfg

o        Install FireDaemon

o        Settings as follows:-

· Short Name: mrtg
· Display name: mrtg
· Description: mrtg
· Working directory: c:\mrtg\mrtg-2.10.15\bin
· Executable: mrtgcron.bat

· To enable SNMP on the cisco router the following commands need to be entered.

snmp-server community public RO
snmp-server location site-location
snmp-server contact Russell
snmp-server enable traps tty

updated 4/7/6


KB0031 - Installing Kiwi Syslog on Windows

· Download the Kiwi Syslog Service Daemon from http://www.kiwisyslog.com/software_downloads.htm#Download%20Now

· Run the Kiwi_Syslogd_Service.exe

· Register by entering the application by following the notes in the kiwi_syslog_daemon_15.txt file.

· Run the syslog Service manager.

o        From the manage option in the tool bar select the “Install syslogd service”

o        From the manage option in the tool bar select the “Start thel syslogd service”

· Setup a filter by clicking on rules and right clicking on filters. Select add filter.
o        Set the field to “Message Text”
o        Set Include to the text in the message field you want to capture (Include double quotes). Click the “S” button for subtext & the “C” button for case sensitive.

Updated 22/6/5


KB0032 - Installing SNORT

· Install WinPCap 3.01 (alpha)

· Install SNORT 2.2, with the following options:-
o        Do not log to a DB
o        Install a components
o        Install to c:\snort

· Test snort by executing snort –l \snort\log –c \snort\etc\snort.conf –A console from the bin directory.

· Edit the etc\snort.conf file
o        Set HOME_NET to 192.168.0.0/16
o        Set DNS_SERVERS to [192.168.200.250/32,192.168.200.237/32]
o        Comment out all the include $RULE_PATH/ lines

If you want the alerts from snort e-mailed then follow these steps:-

· Install EventSentry.
o        SMTP Server: beaker.fsma.com.au
o        SMTP Sender:
o        SMTP Receiver: rthomas@fsma.com.au
o        Start EventSentry at Login: Yes
o        Complete App

· Create a batch file with the following line in it.

Snort –l \snort\log –c \snort\etc\snort.conf –E

Where: l = Log file
c = Use rules file
E = Alert messages to NT Event Log

· Add the batch file to FireDaemon
o        Install FireDaemon

· To run snort as a service then execute:-

Snort /INSTALL /SERVICE –c:\snort\etc\snort.conf –l:\snort\log

If you want the alerts from snort logged to a syslog then follow these steps:-

· Edit the etc\snort.conf file so that you have the following entry…

Output alert_syslog: host=hostname.com.au, LOG_AUTH LOG_ALERT

· To run snort as a service then execute:-

Snort /INSTALL /SERVICE –c \snort\etc\snort.conf –l \snort\log –s

Updated 22/9/5


KB0033 - Installing Software Update Service (SUS) On Windows
· Obtain the SUS install program (SP1) – SUS10SP1.EXE ( http://www.microsoft.com/downloads/details.aspx?FamilyID=a7aa96e4-6e41-4f54-972c-ae66a4e4bf6c&displaylang=en )

· If you want to hack the install so that it doesn’t have to run on a server do the following:-

o        Extract the sussetup.msi program by executing

Sus10sp1.exe /T:c:\sus /c

o        Convert the sussetup.msi to xml by executing. You will need to have installed msi2xml.

Msi2xml sussetup.msi

o        Edit the xml file and remove the ROW containing the text “You must be running Windows Server”. Save the xml file.

o        Convert the sussetup.xml to sussetup.msi by executing

Xml2msi sussetup.msi

· Execute sussetup on the server that will be running sus. Will require ISS to be installed.

· Extract the sussetup.msi program by exuting

Sus10sp1.exe /T:c:\sus /c

updated 11/2/5


KB0034 - VMWare ESX Licensing

VMware Virtual Infrastructure is the ultimate product bundle for Commercial Virtualization. The bundle includes:

- 4 ESX Virtual Infrastructure Nodes for 2 Processor,

Note: ESX installs on "bare metal, while GSX is installed as an application.

- Virtual Center Management Server,

- Physical to Virtual (P2V) Assistant 2 Starter Edition,

- Gold Support/Subscription.

1. You need to license ESX for the number of processors for each host you want to run ESX on. Dual-core processors count as a single processor.

2. (Optional) vSMP add-in, allows you to create virtual dual-cpu VMs. This has to be purchased for any ESX host that you want this functionality for.

3. (Optional) vMotion add-in, When purchased in conjunction with VirtualCenter will allow you to move a VM from one ESX host to another without service disruption, 1 per ESX host.

One of the coolest and one of the best features of ESX. However, you have to be connected to a SAN. If you are going to be running on local disks then you will not be able to use this.

4. (Optional) VirtualCenter Agent, Allows the ESX host to be managed by virtualCenter, 1 per ESX host.

5. (Optional) VirtualCenter, one of theses licenses is needed to manage all ESX servers from a central location. Also used with vMotion above. Only 1 license required.

6. Licenses 1-4 can be bundled together as VIN (Virtual Infrastructure Node) at a significant savings.

updated 6/7/6


KB0035 - VMWare VirtualCentre
· Central Management console
· Server provisioning
· Virtual machine dashboard
· VMotion technology
· Secure access management


KB0036 - Telnet server registry hack

REGEDIT4

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\TelnetServer]

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\TelnetServer\1.0]

"NTLM"=dword:00000001

updated 8/7/6


KB0037 - Windows Update Errors

http://windowsupdate.microsoft.com/

notepad %SYSTEMROOT%\Windowsupdate.log

· 0x80072EFD - Check that port 443 (Secure HTTP - SSL) isn't blocked.

· 0x8024402C - Workstation is behind a ISA server. Create a rule on the ISA server under "Site and Content Rules" to allow anyone (anonymous) to access the Microsoft update sites. Ie add update.microsoft.com to the valid sites.

· 0x80072EE2 - Issue with XP. Unable to find a resolution. Try bypassing proxy server & going direct through firewall.

· 0x8DDD0009 - Uninstall & Reinstall Windows installer 3.1.

updated 24/7/6


KB0038 - Wireless Network Security
· Run some sort of encryption. WPA2 is better than WPA. WPA is better than WEP. WEP is better than nothing.

· Don't broadcast your SSID. If you switch off broadcasting SSID then your SSID will only by sent unencrypted with data packets rather than being continually broadcasted. This will make your network less visible.

· Enable MAC filtering.

· Wireless Sniffers:
· NetStumbler: www.netstumbler.com
· Kismet: http://www.kismetwireless.net/

802.11b - The first wireless standard to market, it operates within the 2.4GHz band and offers theoretical 11Mbit/s transfer speeds.

802.11a - Designed to address bandwidth limitations of 802.11b, it moved up into the 5Ghz band & bumped the theoretical throughput to 54Mbit/s

802.11g - combined the best from a & b and combined range with speed while still in the 2.4GHz band. Added WPA support.

802.11n - Due to be ratified by Nov 2006. plans to increase bandwidth to 200Mbit/s & remain compatible with a/b &g.

19/7/6: While driving from Brooklyn Pk to Clear View, using NetStumbler, I detected 85 networks, 25 of which were running no encryption.

updated 19/7/6


KB0039 - Testing a SMTP Server

· Telnet to the server on port 25. You should get a response starting with 220. When entering text you may not see anything being typed.

· Enter 'helo'. You should get a message back starting with a 250

· Enter 'rset'. You should get a message back starting with a 250

· Enter 'mail from:email_address@domain.com', where email_address@domain.com is the from email address. You should get a message back starting with a 250

· Enter 'rcpt to:email_address@domain.com', where email_address@domain.com is the to email address. You should get a message back starting with a 250

Note: If you get a 550 message, then your SMTP server is not an open SMTP relay.

· Enter 'data'. You should get back a message starting with 354

· Use the following for a valid email format...

from:sender@domain1.com

to:receiver@domain2.com

subject: subject

text line1

text line 2

· End with 2 x CR and a '.'. You should get back a message starting with a 250.

· Enter 'quit' to send the message & quit.

updated 20/7/6


KB0040 - Raid

http://en.wikipedia.org

RAID 0 (common)

· Data is split over 2 or more disks with no parity

· Normally used to increase performance.

Note: A RAID 0 can be created with disks of differing sizes, but the storage space added to the array by each disk is limited to the size of the smallest disk—for example, if a 120 GB disk is striped together with a 100 GB disk, the size of the array will be 200 GB (ie. 2 times the size of the smallest: 100GB).

RAID 0 implementations with more than two disks are also possible, however the reliability of a given RAID 0 set is equal to the average reliability of each disk divided by the number of disks in the set. That is, reliability (as measured by Mean Time To Fail (MTTF) or Mean Time Between Failures (MTBF)) is roughly inversely proportional to the number of members—so a set of two disks is roughly half as reliable as a single disk. The reason for this is that the file system is distributed across all disks. When a drive fails the file system cannot cope with such a large loss of data and coherency since the data is "striped" across all drives. Data can be recovered using special tools. However, it will be incomplete and most likely corrupt.

RAID 1 (common)

· Data is mirrored on a set of two or more disks.

· Normally used to increase reliability.

RAID 2 (no longer implemented)

A RAID 2 stripes data at the bit (rather than block) level, and uses a hamming code for error correction. The disks are synchronized by the controller to run in perfect tandem. This is the only original level of RAID that is not currently used. Extremely high data transfer rates are possible.

RAID 3 (rare)

A RAID 3 uses bye-level striping with a dedicated parity disk. RAID 3 is very rare in practice. One of the side effects of RAID 3 is that it generally cannot service multiple requests simultaneously. This comes about because any single block of data will by definition be spread across all members of the set and will reside in the same location, so any I/O operation requires activity on every disk.

RAID 4 (rare)

A RAID 4 uses block-level striping with a dedicated parity disk. RAID 4 looks similar to RAID 3 except that it stripes at the block, rather than the byte level. This allows each member of the set to act independently when only a single block is requested. If the disk controller allows it, a RAID 4 set can service multiple read requests simultaneously.

RAID 5 (common)

A RAID 5 uses block-level striping with parity data distributed across all member disks. RAID 5 has achieved popularity due to its low cost of redundancy. Generally, RAID 5 is implemented with hardware support for parity calculations.

Every time a block is written to a disk in a RAID 5, a parity block is generated within the same stripe. A block is often composed of many consecutive sectors on a disk. A series of blocks (a block from each of the disks in an array) is collectively called a "stripe". If another block, or some portion of a block, is written on that same stripe the parity block (or some portion of the parity block) is recalculated and rewritten. For small writes, this requires reading the old data, writing the new parity, and writing the new data. The disk used for the parity block is staggered from one stripe to the next, hence the term "distributed parity blocks". RAID 5 writes are expensive in terms of disk operations and traffic between the disks and the controller.

The parity blocks are not read on data reads, since this would be unnecessary overhead and would diminish performance. The parity blocks are read, however, when a read of a data sector results in a CRC error. In this case, the sector in the same relative position within each of the remaining data blocks in the stripe and within the parity block in the stripe are used to reconstruct the errant sector. The CRC error is thus hidden from the main computer. Likewise, should a disk fail in the array, the parity blocks from the surviving disks are combined mathematically with the data blocks from the surviving disks to reconstruct the data on the failed drive "on the fly".

This is sometimes called Interim Data Recovery Mode. The computer knows that a disk drive has failed, but this is only so that the operating system can notify the administrator that a drive needs replacement; applications running on the computer are unaware of the failure. Reading and writing to the drive array continues seamlessly, though with some performance degradation. The difference between RAID 4 and RAID 5 is that, in interim data recovery mode, RAID 5 might be slightly faster than RAID 4, because, when the CRC and parity are in the disk that failed, the calculation does not have to be performed, while with RAID 4, if one of the data disks fails, the calculations have to be performed with each access.

In RAID 5, where there is a single parity block per stripe, the failure of a second drive results in total data loss.

The maximum number of drives in a RAID 5 redundancy group is theoretically unlimited, but it is common practice to limit the number of drives. The tradeoffs of larger redundancy groups are greater probability of a simultaneous double disk failure, the increased time to rebuild a redundancy group, and the greater probability of encountering an unrecoverable sector during RAID reconstruction. As the number of disks in a RAID 5 group increases, the MTBF can become lower than that of a single disk. This happens when the likelihood of a second disk failing out of (N-1) dependent disks, within the time it takes to detect, replace and recreate a first failed disk, becomes larger than the likelihood of a single disk failing. RAID 6 is an alternative that provides dual parity protection thus enabling larger numbers of disks per RAID group.

RAID 5 implementations suffer from poor performance when faced with a workload which includes many writes which are smaller than the capacity of a single stripe; this is because parity must be updated on each write, requiring read-modify-write sequences for both the data block and the parity block. More complex implementations often include non-volatile write back cache to reduce the performance impact of incremental parity updates.

In the event of a system failure while there are active writes, the parity of a stripe may become inconsistent with the data; if this is not detected and repaired before a disk or block fails, data loss may ensue as incorrect parity will be used to reconstruct the missing block in that stripe; this potential vulnerability is sometimes known as the "write hole". Battery-backed cache and other techniques are commonly used to reduce the window of vulnerability of this occurring.

RAID 6 (Not common)

A RAID 6 extends RAID 5 by adding an additional parity block, thus it uses block-level striping with two parity blocks distributed across all member disks.

RAID 6 is inefficient when used with a small number of drives but as arrays become bigger and have more drives the loss in storage capacity becomes less important and the probability of two disks failing at once is bigger. RAID 6 provides protection against double disk failures and failures while a single disk is rebuilding. In the case where there is only one array it makes more sense than having a hot spare disk.

The user capacity of a RAID 6 array is n-2, where n is the total number of drives in the array.

RAID 6 does not have a performance penalty for read operations, but it does have a performance penalty on write operations due to the overhead associated with the additional parity calculations.

RAID 0+1 (Common)

A RAID 0+1 (also called RAID 01, though it shouldn't be confused with RAID 1) is a RAID used for both replicating and sharing data among disks. The difference between RAID 0+1 and RAID 1+0 is the location of each RAID system — it is a mirror of stripes.

RAID 10 (or 1+0 -Common)

A RAID 10, sometimes called RAID 1+0, or RAID 1&0, is similar to a RAID 0+1 with exception that the RAID levels used are reversed—RAID 10 is a stripe of mirrors.

RAID 30 (Not common)

RAID level 30 is also known as striping of dedicated parity arrays. It is a combination of RAID level 3 and RAID level 0. RAID 30 provides high data transfer rates, combined with high data reliability. RAID 30 is best implemented on two RAID 3 disk arrays with data striped across both disk arrays. RAID 30 breaks up data into smaller blocks, and then stripes the blocks of data to each RAID 3 raid set. RAID 3 breaks up data into smaller blocks, calculates parity by performing an Exclusive OR on the blocks, and then writes the blocks to all but one drive in the array. The parity bit is created using the Exclusive OR is then written to the last drive in each RAID 3 array. The size of each block is determined by the stripe size parameter, which is set when the RAID is created.

Advantages

RAID 30 can sustain one to four drive failures while maintaining data integrity if each failed disk is in a different RAID 3 array.
Offers highest level of redundancy and performance

Disadvantages
Very costly to implement

RAID 100 (RAID 10+0)

A RAID 100, sometimes also called RAID 10+0, is a stripe of RAID 10s. RAID 100 is an example of plaid RAID, a RAID in which striped RAIDs are themselves striped together. :
RAID 50 (RAID 5+0)

A RAID 50 combines the straight block-level striping of RAID 0 with the distributed parity of RAID 5. This is a RAID 0 array striped across RAID 5 elements.

updated: 17/7/6


KB0041 - Setting Relays in Exchange 2003

http://support.microsoft.com/kb/895853/

To add SMTP relays to Exchange 2003:-
1. Open the Exchange System Manager in MMC.
2. Expand the following object...
administrative groups\
first administrative group\
servers\
(server name)\
protocols\
smtp\
3. Open the properties of the Default SMTP Virtual Server
4. Click on the Relay button an add the Relay servers as required.

updated 30/8/6


KB0042 - Product Keys
Acrobat 7 (Standard) | S/N: 1016-1956-4781-7209-7987-3706
Acrobat 7 (Professional) | S/N: 1118-1084-4122-0849-9311-8491
Age Of Mythology | TPQM9-PX8TJ-W3WH3-CMW9H-V4P4D
Audit Wizard 6.3 | 4XGHY-Y53C4-H5VY6-G7N49-PFLF9
AutoCAD LT | S/N & CD Key: 05722-018108-4602A
Borland Enterprise Server 5.1 | S/N: xvy2-qee4n-c?qbk Auth Key: 7pj-d?z
Borland Developer Studio 2006 | S/N: Y?SX-82X84C-AWACYM-64UK Auth key: WXH-N2J
C# Express | Rego Key: W0DW5GNC2MXN2H
Delphi 5 | S/N: 100-003-6114 Auth: e2x1-91x0
Delphi 7 (Pro Edition) | S/N: X9SH-9T9HNA-7U2ADQ-BSSB Auth Key: U4X-MSK
Dream Weaver 3 | HS45EE-5030480010
EtherPeek (5.0) | tba
EtherPeek (4.2.1) | B60XB-CD18J-XZKHZ
HDK 3.5 | S/N: WNZQPQWP-HDK
HDK 4 | S/N: W4N688Q7-HDK
Kylix 3 | S/N: SZ72-ZXD7MS-8WGEEE-2Q4D Auth Key: 26U-6DD
Nero | S/N: 1A23-0006-7130-1204-8976-4901 1A23-0006-7130-1204-8976-4901
Office XP (With Front Page) | D32KR-DK283-R77FQ-JQVTY-KWP2Q FM9FY-TMF7Q-KCKCT-V9T29-TBBBG
Office 2000 (Small Business Edition) | TW2RX-PPYX4-MW4FQ-YVYDQ-7CCCQ
Office 2002 (Professional) | D32KR-DK283-R77FQ-JQVTY-KWP2Q
Office 2003 Genuine (Professional) Includes InfoPath | GWH28-DGCMP-P6RC4-6J4MT-3HFDY
Office 2003 EOM (Professional) Use 50 times before activation. | VHY9G-8M8FH-2RR9W-YKRCF-Q49V6
Partner Resource DVD (VS2003) | VSIPA
Pinnacle Studio 8 | S/N: 4515645432
Pinnacle Studio 9+ | JADQC-ABBAA-FOPOP-AAAAI-AAODL
Pinnacle Studio 12 Ultimate | JBSKT-ABBAA-BKLKK-KIAAO-BZMEI
Project 2007 | HVM4T-GR7R6-WC7G2-9MXVM-PD3RB GQ8JT-6M2TB-Q9C9V-G76Q9-J3W7W
Publisher 2000 SR1 | JHRJ4-C8KYM-22YYV-2FQ6W-YRMQJ
Publisher 2002 (Professional) | H37BJ-7B9D9-X8GFF-DHG7H-RXKVW
Smart Architect LT Pro | 4C19-2F45-86DB-67DC
SQL Server (Developer Edition) | QRDRJ-7PMBG-V28M4-R3HC4-TWX66
SQL Server (Visual Studio 2003) | TY49W-GG4VJ-T2FY3-JD9KG-HHHKY
The SIMs II | DKSS-YCA2-ZO11-SSP7-3AFH
The SIMs Deluxe Edition | 2503-0660580-4510785-1310
The SIMs Hot Date | 2503-4929227-9134553-3770
The SIMs House Party | 2504-2037189-4278467-4146
The SIMs Livin' Large | 2500-8258105-4163760-6376
The SIMs Vacation | 2501-0301283-3376579-5742
Visio 2000 (Enterprise Edition) | PMH3D-TTC6H-X3F2Y-YCWP2-CCGWD
Visio 2002 SR-1 (Upgrade) | H37BJ-7B9D9-X8GFF-DHG7H-RXKVW
Visio 2007 (Standard Edition) | JQQDQ-DMCVB-H3TK6-RDDHB-KDBYJ
Visual Studio 2003 (Pro) | MDJ96-92WBM-MDMX6-RV3CY-B8VD6
Visual Studio 2005 (Pro) | M3QRR-MRM9F-2KJ8R-84J2P-WJYB3
Windows XP (Professional) | JJB9G-GXVB2-VGM26-83GFH-VHMB8 K7DJ2-CD27B-TGCYT-3PWX8-Y7T7W
Windows 95 (OEM) | 22696-OEM-0014252-66403
Windows 98 SE | GYXVW-77CYC-KV2HT-X4P9T-X92WW TPWD6-3KC6C-V4DJY-Y4C4H-8D6VT
Windows 2000 Pro | RH446-7P26C-V7G2W-7CBPD-7XH33
Windows 2000 Server (OEM) | PWCB7-8C9VJ-TQG8D-PBQQ7-MQVX4
Windows 2000 Server (Genuine) | XFRFK-HH6TV-VYW29-8289H-RXHX8 J3PQC-TPCKY-GGDPG-FFMT3-4GBM8
Windows 2003 (Enterprise Edition) | BT3F3-M2F6F-VKQPG-2FX3Q-CGDHQ
Windows 2003 (Standard Edition) | V2PWH-X89KD-FQ2WC-T32P9-6JH8Q Requires activation after 30days.
Windows 2003 | PDTX7-D9CRB-H2RH9-PR9QR-7BK2Y V343B-RKRXG-CGKVB-HG7TV-RQPTM

updated 9/6/10


KB0043 - Cisco CCO Login

fsma/{domain admin password}


KB0044 - HTTP Status codes

http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
Status | Reason
100 | Coninue
101 | Switching Protocols
200 | OK
201 | Created
202 | Accepted
203 | Non-Authoritive Information
204 | No Content
205 | Reset Content
206 | Partial Content
300 | Multiple Choices
301 | Moved Permanently
302 | Found
303 | See Other
304 | Not Modified
305 | Use Proxy
306 | (Unused)
307 | Termporary redirect
400 | Bad request
401 | Unauthorised
402 | Payment rejected
403 | Forbidden
404 | Non fount
405 | Method not allowed
406 | Not acceptable
407 | Proxy Authentication required
408 | Request timed out
409 | Conflict
410 | Gone
411 | Length Required
412 | Precondition failed
413 | Request Entry Too Large
414 | Request URI Too Long
415 | Unsupported Media Type
416 | Request Range Not Satisfiable
417 | Exception Failed
501 | Not Implemented
502 | Bad Gateway
503 | Service Unavailable
504 | Gateway Timeout
505 | HTTP Version not supported


KB0045 - .NET Tips
To change the .NET version on a virtual directry:-

1. From the directory of the .NET version you want to change to (eg C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322), execute the following:-
aspnet_regiis -s W3SVC/1/root/Virtual Directory

2. To confirm the version has changed, open IIS in a MMC & from the properties of the Virtual Directory, click on the ASP.NET tab and check the version.

Note: Borland Development Studio 2006 installs .NET SDK 1.1.

To reinstall .NET execute aspnet_regiis -i

updated 29/10/6


KB0047 - Installing Visual Studio 2005

· Install Visual Studio 2005.

· Apply the Visual Studio 2005 Team Suite Service Pack 1 (VS80-KB915364-X86-ENU.exe) available at www.microsoft.com/downloads . 7.78MB

· Optional:- Install the Visual Studio 2005 Web Application Projects (WebApplicationProjectSetup.msi) available at http://download.microsoft.com/download/9/0/6/906064ce-0bd1-4328-af40-49dca1aef87c/WebApplicationProjectSetup.msi

· Install the Oracle 10g Developer Tools (ODT) from the ODT Install CD. This should be installed into the existing 10g client. Select the Oracle Data Access components (10.2.0.2.20) option. Note, this will also install the Oracle Data Provider (ODP).

· Optional:- Install the Ajax tools. (ASPAJAXExtSetup.msi & ASPAJAXCTP.msi). This will create a new ASP.NET Ajax-Enabled template in the File > New > Web Site folder.

updated 8/1/8


KB0048 - Configuring IIS Windows Integrated Authentication
· Locate and then change to the directory that contains the Adsutil.vbs file. By default, this directory is C:\Inetpub\Adminscripts.

· Type the following command, and then press ENTER:

cscript adsutil.vbs set w3svc/NTAuthenticationProviders "NTLM"

· To verify that the NtAuthenticationProviders metabase property is set to NTLM, type the following command, and then press ENTER:

cscript adsutil.vbs get w3svc/NTAuthenticationProviders

· The following text should be returned:

NTAuthenticationProviders : (STRING) "NTLM"

updated 13/8/7


KB0049 - Installing MSDE 2000

· Execute MSDE2000A.EXE. This will extract files to C:\MSDERelA by default.

· Run:-
setup.exe SAPWD="password"

from the C:\MSDERelA folder. The SAPWD= sets the System Administrator Password for MSDE. BLANKSAPWD=1 specifies a blank System Administrator Password.

If the install complains about an invalid instance then MSDE has already been installed. Go to Add/Remove programs in the control panel to uninstall. Alternately you can specify another instance with the INSTANCENAME= switch

· Reboot the PC once installed. Check that the SQL Server manager is running in the task bar.

· Install MSDE 2000 SP4 by executing SQLSERVER.MSDE-KB884525-SP4-x86-ENU.EXE. This will extract file to C:\SQL2KSP4\MSDE by default.

· Run:-

setup /upgradesp sqlrun

from the c:\SQL2KSP4\MSDE folder. If the System Administrator password has not been set, you will need to include the BLANKSAPWD=1 switch.

Notes:-
MSDE=Microsoft SQL Server Desktop Engine (Not Developer Edition). Developer Edition ships with Visual Studio.

MSDE is now replaced by SQL Server 2005 Express Edition

MSDE does not have a GUI to manage. You need to run osql from the command prompt.
updated 6/9/7


KB0046 - Removing the Oracle Client

· Delete the c:\oracle directory.

· Delete the c:\program files\oracle directory.

· Remove the HK_LM\SOFTWARE\Oracle from the registry.

updated 8/11/6


KB0050 - Installing OptiView

· Install MSDE 2000 SP4

· Install OptiView & select Master OptiView Console Install. Software key is

1947-2382-5834-1163

Notes:
Installs an database instance of MSDE called OVConsole & Apache TomCat Webserver.

updated 6/9/7


KB0051 - Managing MSDE

· See:-
http://support.microsoft.com/default.aspx/kb/325003

· You manage MSDE with the OSQL unility located in
C:\Program Files\Microsoft SQL Server\80\Tools\Binn

· osql -E connects you to the local, default instance of MSDE by using windows authentication. You need to execute go after each command.

· To change the SA password from null, execute the following:-

sp_password @old=null, @new='password', @loginame='sa'

updated 6/9/7


KB0052 - Accessing The Console Screen using RDP
· Execute mstsc /v:server_name /console

updated 8/1/8


KB0053 - Generating a GUID

· From Delphi press <CTRL> + <SHIFT> + <G>

updated 22/1/8


KB0054 - Wireless Modes

Mode | Band Width | Freq
802.11A | 54Mbps | 5Ghz
802.11B | 11Mbps | 2.4GHz
802.11G | 5-Mbps | 2.4Ghz
802.11N | TBA | TBA

Note: 802.1x - Network Access Control

updated 22/1/8


KB0055 - APC Network Management Card

To set the IP of the Network Management Card remotely from a Windows computer on the same subnet use the following example:-

To define 192.168.200.91 as the IP address of a Management Card with 00 c0 b7 63 9f 67 as its MAC address, ander the following Windows command:-

arp -s 192.168.200.91 00-c0-b7-63-9f-67

Then use Ping with a size of 113 bytes to assign the IP address defined by the ARP command.

ping 192.168.200.91 -l 113

Verify that you can connect, using Telnet. and apc as the user name and password.

Click here for the APC User's Guide Network Management Card.
Click here for the APC Management Card Reference Guide.
Click here for the APC Installation and Quick-Start Network Management Card manual.

** Warning: Only ever connect the APC comms cable to the UPS otherwise you will risk shutting the UPS down. **

The batteries in the UPS should last 10 years, however it is advisable to replace them after 8.

** Warning: Before bypassing the UPS with the APC bypass switch, you need first set the UPS into bypass mode by flicking the bypass switch on the rear of of the UPS

Updated 20/1/10


KB0056 - D-Link DNS-323

To obtain guest access (read only) use the following command:-

  net use \\rthomas-backup\volume_1-1 guest /user:guest

To obtain super-user access (read/write) use the following command:-

  net use \\rthomas-backup\volume_1 **password** /user:rthomas

Updated 18/7/8


KB0057 - My Internode Account

My Details:
Client# C1258715
Web Hosting Service ID: K1698578
Email Address: david_thomas@internode.on.net
POP3/IMAP Server: mail.internode.on.net
SMTP Server: mail.internode.on.net
Primary DNS Server: 192.231.203.132
Secondary DNS Server: 192.231.203.3
NTP Server: ntp.internode.on.net
NNTP (News): news.internode.on.net
Mail Account Name: david_thomas?
Mail Password: ?
Web Mail URL: https://webmail.internode.on.net
Web Mail Config: https://mailconfig.internode.on.net
Chap username: david_thomas@internode.on.net
Chap password: g8q27sjcw

NakedExtreme ADSL2+ Site Address:
3/5 Byrnes St
BROOKLYN PARK SA 5032

Internode Service ID: B2317009
Internode Client Number: C1258715
IP address for your service: 203.122.194.93
Domain name server addresses: 192.231.203.132 192.231.203.3
DNS Domain Name: internode.on.net
Mail server name (POP and SMTP) mail.internode.on.net

PPP Configuration Details
Username: rthomas@internode.on.net
Password: 36kq5q5cx

Contacting Internode:
URL: http://www.internode.on.net/contact/
Support Number: 08 8228 2999
Support Email: support@internode.on.net

Updated 15/3/10


KB0058 - Remote shutdown

shutdown /r /m \\remote_ip

Updated 2/9/8


KB0059 - File Properties in Explorer
Note: Name, Size, Type and Modified settings are enabled by default.

To change the details displayed, on the View menu, click Choose Details. In
the Choose Details dialog box, click to select or clear the items you want
to view.

To change the order of the columns, in the Choose Details dialog box, click
Move Up or Move Down.

You can also left click and drag columns to any order you want.

You can also right click the column header and select and unselect Details.

You can also right click the column header, scroll down and select More...

Updated 2/9/8


KB0060 - Cisco DSL Mode
To dsiplay what mode a Cisco ADSL (837/877) router is running use the following IOS command:-

       show dsl interface atm 0

Look for the line that has:- DSL Mode:-

If the router is running ADSL2+, it will display something like 'ITU G.992.5 (ADSL2+) Annex A'
If the router is running ADSL, it will display something like 'ITU G.992.1 (G.DMT)'

Updated 27/10/8


KB0061 - Oracle Commands

Create a new table
alter table
   table_name
add
   (
   column1_name column1_datatype column1_constraint,
   column2_name column2_datatype column2_constraint,
   column3_name column3_datatype column3_constraint
   );

Copy an Existing table
create table COPY_TABLE as select * from ORIG_TABLE;

Updated 24/8/10


KB0062 - How Do I Get the Security tab?

First, your hard drive must be formatted NTFS for this tab to show up.

Second, if you're running XP Pro, you must open Windows Explorer, go to Tools, Folder Options, View and uncheck Use Simple File Sharing.

Third, if you're running XP Home, Simple File Sharing is enforced by default and cannot be disabled. You must boot the computer into Safe Mode and log in with the Administrator account, in order to see the Security tab. A work around for XP Home, so that you don't have to enter Safe Mode, can be found here .

WARNING: Adjusting the permissions on a drive, file or folder can lock even the Administrator account out of that drive/file/folder. Deny Permissions take precedence over Allow Permissions, regardless of your group membership. Administrators are members of the User's group, by default. Uncheck Allow, rather than using Deny.

http://www.dougknox.com/xp/tips/xp_security_tab.htm

This page last updated 11/25/2005 21:16
All material © Doug Knox

Updated 25/1/9


KB0063 - Windows persistent route

Route add -p [network address] mask [subnet mask] [gateway] metric [value]

Eg

route -p add 192.168.199.0 mask 255.255.255.0 172.16.0.3

This tells the OS to route packets destined for 192.168.199.0 to go via 172.16.0.3. The -p option makes the route persistent in the routing table by adding a static route direct to the registry.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\PersistentRoutes\network,mask,gateway,metric

Eg

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\PersistentRoutes\192.168.199.0.255.255.255.0,172.16.0.3,1

You can remove the route with the route delete command & confirm the entry with the route print command.

Note: The above example needs to be set on the www server for the vpn cleint PCs to be able to access the www server.

Updated 3/9/9


KB0064 - 802.1X Network Access Control
802.1X is an IEEE standard for port-based Network Access Control. It is a part of the IEEE 802.1 group of networking protocols. It provides an authentication mechanism to devices wishing to attach to a LAN. It provides an authentication mechanism for devices wishing to attach to a LAN, establishing a point-to-point connection if authentication is successful. It is used for most 802.11 access points and is based on the Extensible Authentication Protocol (EAP).

The client that wants to be authenticated is called a supplicant. The actual server doing the authentication, typically a RADIUS server, is called the authentication server. And the device in between, such as a wireless access point, is called the authenticator.

http://en.wikipedia.org/wiki/802.1x

http://www.networkworld.com/research/2002/0506whatisit.html

Updated 7/5/9


KB0064 - RADIUS
RADIUS is a networking protocol the provides centralised Authentication, Authorisation and Accounting (AAA) for computers to connected and use a network service. RADIUS serves three functions:-

Authenticate users or devices before granting them access to a network.
Authorise those users or devices for certain network services
Account for the usage of those services.

The RADIUS server is usually a background process running on a UNIX or Windows machine.

http://en.wikipedia.org/wiki/RADIUS

Updated 7/5/9


KB0065 - Creating a Mail Merge from the Outlook Address Book
1. Go into Outlook contacts.

2. Select contacts by changing to current view to “By follow-up flag

3. Group the contacts you want to use by setting their flag status.

4. Once grouped highlight the contacts you want to use.

5. Select Tools -> Mail Merge...

6. Click “Only selected contacts” & set Merge to: to email & set message subject line:

7. Click OK

8. Create/edit document. Click the “Insert Merge Fields” icon to insert the merge field like the <<First Name>>

9. Click the “View Merged Data” button to check the format of the letter.

10. Once you happy with the email, click the merge to email icon & the email will be sent.

Updated 21/5/9


KB0066 - Configure Windows 7 IIS7

KB0066 - Configure Windows 7 IIS7 for ISAPI

Windows 7 IIS7 require some configurations to get ISAPI DLL works. It is not that straight forward compared to IIS 5.

· To Install IIS 7, go to Control Panel | Programs and Features | Turn on Windows features on or off. Under Roles, click Add roles & select "Web Server IIS" from the list. From the list of features make sure the following items are selected:-

· ISAPI Extensions under Application Development

· Windows authentication under Security

· Open IIS in the MMC

· Click the default website & select the Authentication feature. Disable Anonymous & Enable Windows authentication.

· From the "Manage Web Site", click Advanced settings & make sure Physical Path Credentials is left blank. Ie use pass thru authentication.

· Confirm you can access the website from a browser.

· Select the Handler Mappings feature from within IIS & add a script map:-

· Request Path: Eg htmlutils.dll

· Executable: Eg C:\inetpub\wwwroot\htmlutils.dll

· Name: Eg ISAPI-HTMLUtils

· Mapping: Invoke if request is mapped to File or Folder

· Verbs: All verbs

· Access: Executable

· Open the ApplicationHost.Config file & check that allowPathInfo="true" is included on each of the Handler Mappings.

· Confirm you can access the ISAPI DLL.

Updated 16/11/9


KB0067 - Consuming Web Services in Excel
· Install the Microsoft Office Web Services Toolkit (Ie XP for Office 2007 & 2003 for Office 2003).

· Open the Microsoft Visual Basic Editor (Eg Alt F11 in Excel or Word). go to Add-Ins -> Add-In Manager... & make sure Loaded/Unload & Load on Startup are selected against the Web Service Reference Add-In. This will activate the Web Service Reference under the tools option.

· From the tools menu, select Web Service Reference. Click the Web Service URL radio button & specify the URL to the Web Service WSDL (Eg http://www.fsma.com.au/socialclub/scws.dll/wsdl/ISocialClub). Then select the appropraite interface in the search results.

· A Class module this then automatically generated with wrapper calls to the Web Service.

· If you get a "Can't find project or library or library SoapClient30", go to Tools > References & Remove all dll's with "MISSING" for it. See http://www.roelvanlisdonk.nl/microsoft-excel-vba-compile-error-cant-find-project-or-library-soapclient30/

· Refer to the HelpWSR.htm that comes with the Microsoft Office Web Services Toolkit.

Updated 6/11/9


KB0068 - Provider cannot be found. It may not be properly installed
I experienced this issue while trying to get HTMLUTILS.DLL (A Delphi ISAPI) running on the ServiceDesk server (Winodws 2008). Found very little inofmation on the WEB.

The HTMUTILS.DLL had been converted to use ADO rather than ODBC to connect to the database.

I eventually resolved the issue by doing the following:-
· Add a fsma domain user to the administrators group on the on the web server.
· Browse to the htmlutils.dll page on the service desk webserver as that user & confirm all is now OK.
· Remove the user from the administrators group & confirm all is still working. Check that other users are able to browse OK.

Updated 16/11/9


KB0069 - Defining Multiple NetBIOS Names for a Machine

1. Start the registry editor (regedt32.exe)
2. Move to HKEY_Local_Machine\System\CurrentControlSet\Services\LanmanServer\Parameters
3. From the Edit menu select "Add Value"
4. Set the type to REG_SZ is you want one extra name or REG_MULTI_SZ if you want more than one and enter a name of OptionalNames. Click OK
5. You will then be prompted for a value. Enter the other name (or names if type REG_MULTI_SZ, one on each line) you want it to be known as and click OK.
6. Close the registry editor
7. Reboot the machine
8. Check by executing NBTSTAT -a original_netbios_name form a remote computer. There should be an entry for the optional name defined with a code <20> (20=File Server)

Updated 1/1/10


KB0070 - How NetBIOS name resolution really works

One of the important steps in trying to resolve IP problems is determining if name resolution is working. It seems simple enough: If you can connect to a computer by IP address and not by NetBIOS name, the problem is with name resolution. That is great, but what happens if NetBIOS name resolution is not functioning? To help you overcome this obstacle, I will explore the components of NetBIOS resolution and help isolate the cause of name resolution problems.

Which name are we talking about?
The first issue is determining the kind of name. In the Windows client world, there are two basic types of names. The first kind is a name for IP addresses. Host name resolution uses a host’s file and DNS for resolution. The second kind of name is the NetBIOS name, which is used for Windows (SMB) type sharing and messaging. These are the names that are used when you are mapping a drive or connecting to a printer. These names are resolved either by using an LMHosts file on the local machine or WINS server, or by broadcasting a request.

Just to muddy the waters, Microsoft allows IP host names to be used as a substitute for NetBIOS names. Although the net effect is making it easier to resolve names, the substitution strategy makes troubleshooting problems more difficult. You not only have to troubleshoot all of the NetBIOS name resolution options, but you must also troubleshoot the IP host name resolution. The best way to determine what is broken in NetBIOS name resolution, however, starts with understanding how NetBIOS name resolution works.

How NetBIOS names work
NetBIOS names are located through a series of steps that begins with checking the local cache. You then check an LMHosts file and, lastly, progress into a broadcast message that looks for the name (that is, unless the default actions have been changed). Before you begin, you need to understand the four kinds of resolution that NetBIOS does natively.

First resolution: The first resolution mechanism is not really a resolution mechanism at all. It is an internal cache that is in each Windows machine. This cache is populated by previous name resolution attempts and by a special option in the LMHosts file (described next). The idea behind the cache is that, if the software needed to resolve the name once, it is quite likely that it will soon need to do so again. If you need to resolve the name again, the name is cached in order to improve responsiveness and limit network traffic. In order to reduce the possibility that the cache will become invalid because too much time has passed since the name was resolved, the cache has a limited lifetime, typically 10 minutes. However, entries put into cache by the LMHosts file option never expire. It is also important to have a limited lifetime for the cache to minimize the amount of memory used for caching. Although in today’s world of 512-MB desktop computers this may seem odd, it was a real concern when the NetBIOS naming strategy was developed and we were still dealing with conventional (640K) memory.

Second resolution: The second resolution method is where the LMHosts file is consulted to see if there are any NetBIOS names that match the NetBIOS name being queried. In its simplest form, the LMHosts file contains an IP address and a host name. In addition to the IP address and NetBIOS name, you have two more options. The first option is #PRE, which causes the entry to be cached into memory. This has little effect in today’s environment. The second option, #DOM (domain), is used to associate the computer with a NetBIOS domain name. This can be helpful if you are trying to find a domain controller to log into. The LMHosts file is located in %SYSTEMROOT%\SYSTEM32\DRIVERS\ETC. Typically, %SYSTEMROOT% is the C:\WINNT directory.

Third resolution: The third resolution mechanism used by the local computer to resolve the NetBIOS name involves consulting one or more naming servers. In most cases, the naming server contacted is a Windows Internet Naming Server (WINS). Technically, you could create a NetBIOS naming server that is not a WINS server, but it is rarely done. The NetBIOS naming server standard is an open standard controlled by RFC 1001 and RFC 1002. Each computer contacts the WINS server upon startup and provides the computer’s IP address, as well as its name. It stores this information into a database that may be replicated with other WINS servers. The WINS server also verifies that the name is not already in use. The database maintained by the WINS server is queried each time a client computer asks it to resolve a NetBIOS name. The WINS server can either resolve a name or not. There is no delegation of authority with a WINS server. Multiple WINS servers can be listed in the client configuration for consultation. In this case, the last WINS server to respond will be consulted. It is assumed to be a copy of all of the other WINS servers listed in the client configuration. The client will cycle through the list of its WINS servers until it locates one that is responsive.

Fourth resolution: The fourth and final resolution method is to broadcast for the NetBIOS name. The computer broadcasts a special packet that is received and processed by all machines on the network. The packet then requests that the computer identify itself. This is effective within a local network but is ineffective across routers, which do not forward broadcast packets. This means that the broadcast NetBIOS name resolution method does not work across routers. It can only be used for computers within the same IP subnet. Another problem with broadcast resolution is that it takes time from every computer. Finally, broadcast resolution requires that the packet be transmitted to every computer on a subnet. This can effectively eliminate the usefulness of a switch, which is designed to prevent computers from seeing traffic that is not destined for them. Since a broadcast is by definition destined for every computer on the subnet, it must be broadcast to every computer. As the amount of broadcast traffic increases, the switches tend to behave more like hubs—passing on every packet to every connected computer. The tendency to broadcast is one of the reasons that NetBIOS is not well liked in networking circles.

While the preceding is the default order, the order itself can be controlled via a node type attribute. The node type controls the order of resolution for the computer and the types of resolution consulted. The node type can never prevent the local cache from being consulted first, nor can it prevent the LMHosts file from being consulted. It only controls the behavior of the resolving computer with regard to when it will broadcast and when it will use a WINS server.

The node type can be set to only three modes. The first mode, B-mode, only uses the cache, LMHosts and broadcast. It will not try to use the WINS server. The second mode, P-mode, never broadcasts. It only uses the cache, LMHosts file, and WINS server. The final mode, H mode, or hybrid mode, behaves as described above by checking the LMHosts file and the WINS server, and then broadcasting. Hybrid mode is the default mode for all Windows workstations that have not had another node type provided via configuration or via DHCP.

Types of NetBIOS names
Although we typically think just of computer names, there are many different kinds of NetBIOS names that you may need to resolve. Obviously, computer names need to be resolved to locate shared folders and printers. However, the names of logged-in users may also need to be resolved. The NetBIOS system allows you to send messages to users in addition to being able to attach to shared drives and printers; this requires that the system be able to resolve user names into IP addresses as well.
In addition, Windows domain names must be resolved. When a user attempts to log into a domain, the computer must contact a domain controller for the domain to verify the user account. The domain name is registered in a special way by all of the domain controllers within a domain so that the client will know which machines it can contact to validate username and password.

The way that these multiple name types are resolved is by recording a value in the 16th position of a registration. NetBIOS names have a fixed 16-byte format; however, Microsoft reserves the last byte for name type identification. This allows for registration of multiple types of names without redefining the standard to include a separate type field. This is important for a standard that was developed a long time ago and that had a substantial amount of deployed code. To give you an idea of the broad range of name types that exist in NetBIOS land, a list of some of the types of names and their codes are shown in Figure A.

Figure A
Humber (Hex) | Usage
00 | Workstation,Domain Name
01 | Messenger (Workstation)
03 | Messenger (User)
06 | Remote Access Server
1F | NetDDE
20 | File Server
21 | Remote Access Server Client
22 | Microsoft Exchange Interchange
23 | Microsoft Exchange Store
24 | Microsoft Exchange Directory
87 | Microsoft Exchange MTA
6A | Microsoft Exchange IMC
1B | Domain Master Browser
1C | Domain Controllers
1D | Master Browser

Resolving across the network
One of the most frequent problems that organizations have is managing NetBIOS name resolution across networks. Name resolution problems on local networks are often not visible because NetBIOS can resolve names via broadcast. Of course, broadcasting is not an option in networks attached to each other via routers. In local networks, even if other name resolution options fail, they may be masked by broadcast name resolution.

Of course, you can use LMHosts to handle cross-network name resolution; however, the administrative burden of doing this is prohibitive. This means that cross-network name resolution requests are almost always handled by WINS, which is tricky on its own.

If you are having problems resolving host names remotely, but not locally, you may need to review the details of how WINS works. Fortunately, Peter Parsons has full details on WINS and how to troubleshoot it in the article "Troubleshoot WINS on your Windows 2000 server." Before going that route, however, we need to test to see what the actual problem is.

Testing NetBIOS name resolution
The tool to use for testing NetBIOS name resolution is NBTStat, which is short for NetBIOS over TCP/IP Status. This comes from the fact that originally NetBIOS used the NetBEUI protocol for transport. Today, most environments are only running NetBIOS naming across TCP/IP. This is frequently abbreviated NBT.

The first thing to do with NBTStat is to input “NBTStat –a <hostname>,” where <hostname> is the name that you are trying to resolve. NBTStat will display how that name was resolved on each network connection on your computer. This is helpful in several ways. First, the name resolution occurs without any other actions, so it is clear whether the name is resolving or not. Other techniques for determining whether name resolution is working may be testing more than just name resolution. Second, if the problem that you are trying to troubleshoot is one where the wrong address appears to have been received, it is possible to determine which adapter will lead to the wrong answer.

After running the NBTStat command, you may receive one of three results. First, the answer is correct and everything is working—at least for the moment. Second, the answer is incorrect. In other words, the wrong IP address is returned. Third, the answer is that there was no answer. The name did not resolve at all.

If the server returned the correct IP address for the name, then whatever problem that leads you to research the NetBIOS naming services is either broken or the problem you are troubleshooting is intermittent. If you get the wrong answer, you need to investigate the LMHosts file on the local machine in the %SYSTEMROOT%\SYSTEM32\DRIVERS\ETC directory, the WINS server’s registration database, and finally, the settings of the computers on the network.

If there is no answer, you must determine how you expected the name to be resolved. If either LMHosts file should have contained the answer or the WINS server should have contained the appropriate record, then you must review those sources. If, however, you anticipated that the answer would come from the other computer being on the network and responding to the broadcast for the name request, then either the computer is not responding to the broadcast name requests or it is never receiving it. The most likely cause of it not responding to a broadcast name request is because it is not on the same subnet as the computer making the request.

When resolving names with NBTStat, remember you can always try to resolve a name for a given IP address. This strategy can be helpful if you are unsure of the address and are trying to verify that the address returned is correct. The syntax of the command is “NBTStat –A <ip address>” where <ip address> is the IP address to test. The results will be the names registered to that IP address. If you resolve a name, then try to resolve the IP address without getting the same name, you know that your LMHosts file or WINS server contains a bad record for the NetBIOS name you have specified.

All about cache
As we discussed above, in order to reduce the amount of name resolution traffic, each machine keeps a cache of the names that it has resolved previously. This cache is consulted before any other name resolution mechanism. This works well in most cases, but in cases where you have corrected an IP address that was wrong, it could be a problem. However, clearing the cache is easy. Just type “NBTStat –R.” This will clear the cache. If you want to confirm that the cache was cleared, you can type “NBTStat –c” to display the cache. By manually clearing the resolver cache, you can test your fixes.

NetBIOS to DNS
Microsoft muddied the water when it allowed IP host names to be used to resolve NetBIOS names. Although the option has been removed from Windows 2000 and above, it is still a possible consideration when debugging clients. When enabled, the option causes the system to attempt to resolve NetBIOS names via DNS resolution. Therefore, in cases where you are getting incorrect IP addresses back from NetBIOS after having checked both the LMHosts file and WINS servers, you will have to troubleshoot IP host name resolution. For more information on NetBIOS and Windows 2000 see "Speed up Windows 2000 by eliminating NetBIOS."

Browsing problems
Name resolution and browsing the network would seem to be closely related. If you can resolve all of the names on a network, then you should be able to browse the network. While this appears on the surface to be true, it is not. The mechanism for browsing is unrelated to the name resolution process.

http://articles.techrepublic.com.com/5100-10878_11-5034239.html

Updated 1/1/10


KB0071 - Check IP

checkip.dyndns.com
Updated 1/1/10


KB0072 - Dynamic DNS

www.no-ip.com dynupdate.no-ip.com
www.dyndns.com members.dyndns.org

Updated 2/1/10


KB0073 - Clear Java Cache

· Double click the Java Icon in Control Panel. Click Delete Files... under Temporary Internet Files.

· The Delete Temporary Files dialog box appears. Click OK.

4/1/10


KB0074 - Outlook "Cant Create File" error

If you ever run into the error Outlook: “Can’t Create File” error when opening Attachment

Outlook has a problem where it’s temp folder can only handle 100 wave files. To fix;

· Open regedit
· Search for OutlookSecureTempFolder
· That registry key will point to a temp internet files folder
· Open that folder and delete all wav files

8/1/10


KB0075 - Default APC PowerChute Authentication Phrase

"admin user phrase"

8/1/10


KB0076 - Internet Explorer serves up unknown file type

Execute:- regsvr32 msxml3.dll

8/1/10


KB0077 - Making a Gantt Chart with Excel

http://www.youtube.com/watch?v=CW_wGSFavTc

8/1/10


KB0078 - Creating Symbolic Link File Extensions in Windows

Creating symbolic links.

Download and install HardLinkShellExt_win32.exe from http://schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html

To create a symbolic link from the Source folder to a folder under the Destination folder, right click on the Source folder and select "Pick Link Source"

Then navigate to the Destination folder, right click & select Drop As... & Select Junction. The Source folder will then appear as a folder under the Destination folder.

Note: The security permissions on the Destination folder are picked up from the the Source Folder, not inherited from the parent folder.
22/2/10


KB0079 - Process Hacker

APC February 2010 Pg 96 - Optimise & touble shoot.

http://processhacker.sourceforge.net

14/1/10


KB0080 - Phase Relay Definition

Phase Monitor Relays are sometimes called 3 Phase Monitors, Three Phase Monitor Relays, Phase Loss Relays, Single Phase Relays, Phase Sequence Relays, Protective Relays, Motor Protection Relays or Phase Failure Relays. They provide motor protection against premature equipment failure caused by voltage faults on 3 Phase systems. These devices are designed to be compatible with most Wye or Delta systems. In Wye systems, a connection to a neutral is not required. Phase Monitor Relays protect against unbalanced voltages or single phasing regardless of any regenerative voltages.

http://www.macromatic.com/products/phase-monitor-relays.html
14/1/10


KB0081 - ORA-12154 TNS:could not resolve

http://www.easywebtech.com/artical/TNScouldnotresolve.html

15/11/9


KB0082 - Monitor Cisco routers and switches using the IOS environment command

http://blogs.techrepublic.com.com/networking/?p=611

Updated 15/11/9


KB0083 - ImgBurn

ImgBurn is a lightweight CD / DVD / HD DVD / Blu-ray burning application that everyone should have in their toolkit!

http://www.imgburn.com/

updated 13/11/9


KB0084 - BgInfo

How many times have you walked up to a system in your office and needed to click through several diagnostic windows to remind yourself of important aspects of its configuration, such as its name, IP address, or operating system version If you manage multiple computers you probably need BGInfo. It automatically displays relevant information about a Windows computer on the desktop's background, such as the computer name, IP address, service pack version, and more. You can edit any field as well as the font and background colors, and can place it in your startup folder so that it runs every boot, or even configure it to display as the background for the logon screen.

Because BGInfo simply writes a new desktop bitmap and exits you don't have to worry about it consuming system resources or interfering with other applications.

http://technet.microsoft.com/en-us/sysinternals/bb897557.aspx

updated 8/2/10


KB0085 - Toad for MySQL

http://www.mysql.com/products/connector/

Updated 8/2/10


KB0086 - The Basics Of Fiber Optic Cable

Single Mode Fiber (SMF)
Distance: WAN
Colour: Yellow

Cable is a single strand (most applications use 2 fibers) of glass fiber with a diameter of 8.3 to 10 microns that has one mode of transmission. Single Mode Fiber with a relatively narrow diameter, through which only one mode will propagate typically 1310 or 1550nm. Carries higher bandwidth than multi-mode fiber, but requires a light source with a narrow spectral width. Synonyms mono-mode optical fiber, single-mode fiber, single-mode optical waveguide, uni-mode fiber.

Multi-Mode Fiber (MMF)
Distance: LAN
Colour: Orange/Light blue

Cable has a little bit bigger diameter, with a common diameters in the 50-to-100 micron range for the light carry component (in the US the most common size is 62.5um). Most applications in which Multi-mode fiber is used, 2 fibers are used (WDM is not normally used on multi-mode fiber). POF is a newer plastic-based cable which promises performance similar to glass cable on very short runs, but at a lower cost.

http://en.wikipedia.org/wiki/Multi-mode_optical_fiber
updated 15/2/10


KB0087 - Copying a Cisco IOS using XModem
Issue the copy xmodem: flash:filename command on the switch.

Here is an example:

switch: copy xmodem: flash:c3560-advipservicesk9-mz.122-25.SEE4.bin
Begin the Xmodem or Xmodem-1K transfer now...
CCC

From the HyprerTerminal winodw, choose Transfer -> Send File

Choose the Xmodem protocol in the Send File dialog box and click Browse in order to select the IOS image (.bin file) that you want to download.

The XModem file transfer begins. This can take up to 3 hours depending on the size of the image.

http://www.cisco.com/en/US/products/hw/switches/ps628/products_tech_note09186a0080169696.shtml

updated 22/2/10


KB0088 - Hot Standby Router Protocol (HSRP)

http://www.cisco.com/en/US/tech/tk648/tk362/technologies_tech_note09186a0080094afd.shtml

Hot Standby Router Protocol (HSRP) is a Cisco proprietary redundancy protocol for establishing a fault-tolerant default gateway, and has been described in detail in RFC 2281. The Virtual Router Redundancy Protocol (VRRP) is a standards-based alternative to HSRP defined in IETF standard RFC 3768. The two technologies are similar in concept, but not compatible.

The protocol establishes a framework between network routers in order to achieve default gateway failover if the primary gateway should become inaccessible,[1] in close association with a rapid-converging routing protocol like EIGRP or OSPF. By multicasting packets, HSRP sends its hello messages to the multicast address 224.0.0.2 (all routers) using UDP port 1985, to other HSRP-enabled routers, defining priority between the routers. The primary router with the highest configured priority will act as a virtual router with a pre-defined gateway IP and will respond to the ARP request from machines connected to the LAN with the mac address 0000.0c07.acXX where XX is the group ID in hex. If the primary router should fail, the router with the next-highest priority would take over the gateway IP and answer ARP requests with the same mac address, thus achieving transparent default gateway fail-over.
HSRP and VRRP are not routing protocols as they do not advertise IP routes or affect the routing table in any way.
HSRP and VRRP on some routers have the ability to trigger a failover if one or more interfaces on the router go down. This can be useful for dual branch routers each with a single serial link back to the head end. If the serial link of the primary router goes down, you would want the backup router to take over the primary functionality and thus retain connectivity to the head end.

show standby

nso-switch#sh standby
Vlan1 - Group 1
  State is Active
    8 state changes, last state change 4d04h
  Virtual IP address is 192.168.200.1
  Active virtual MAC address is 0000.0c07.ac01
    Local virtual MAC address is 0000.0c07.ac01 (v1 default)
  Hello time 3 sec, hold time 10 sec
    Next hello sent in 2.176 secs
  Preemption enabled, delay min 5 secs
  Active router is local
  Standby router is 192.168.200.96, priority 99 (expires in 9.056 sec)
  Priority 105 (configured 105)
    Track object 1 state Up decrement 10
  Group name is "FAILOVER" (cfgd)

2/3/10


KB0090 - Avamar Backup and Recovery

Provider: EMC

http://www.emc.com/avamar

29/4/10


KB0091 - Stay Secure With SABSA

SABSA (the Sherwood Applied Business Security Architecture) is a proven framework and methodology used by numerous organisations around the world for Enterprise Security Architecture and Service Management. SABSA has continually evolved since its inception in 1995 and is now the security approach of choice for commercial organisations and Governments alike for meeting needs including Risk Management, Information Assurance, Governance, and Continuity Management.
SABSA ensures that your organisation's security needs are being met and that security services are designed, delivered and supported as an integral part of your operational and IT management infrastructure, not just as a 'bolt-on' layer of appliances, applications and services.

Although copyright-protected, SABSA is an open-use methodology, not a commercial product.

29/4/10


KB0092 - Opening Outlook OFT Files Through IIS

On the IIS server add the following MIME Type:-

Extension: .oft
MIME type: application/oft

On the client machines, apply the following registry hack:-

· Create the following registry key:- "HKEY_CLASSES_ROOT\MIME\Database\Content Type\application/oft"

· Add the following string values:-
CLSID=Outlook.Template
Extension=.oft

.Reg file format:-

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\MIME\Database\Content Type\application/oft]

"CLSID"="Outlook.Template"

"Extension"=".oft"

updated: 18/5/10


KB0093 - F-Secure Online Antivirus

http://www.tinyurl.com/4rfmo

updated 31/5/10


KB0094 - Trip Wire IDS

http://tripwire.com

Runs under Linux

updated 31/5/10


KB0095 - Process Explorer

http://www.tinyurl.com/ys2zq2

updated 31/5/10


KB0096 - Oracle Login

Username: rthomas@fsma.com.au
Password: readyt0g0

updated: 10/6/10


KB0097 - NetFlow

NetFlow is a network protocol developed by Cisco to run on Cisco IOS devices for collecting IP traffic information. Devices with Netflow enabled generate netflow records; these are exported from the router using UDP or SCTP (Stream Control Transmission Protocol) packets and collected using a netflow collector.

NetFlow is an IETF information standard (RFC 3954) and has been superseded by Internet Protocol Flow Information eXport (IPFIX). Based on NewFlow Version 9, IPFIX is the industry standard with RFC 5101, 5102 etc.

Updated 11/6/10


KB0098 - Hotmail Account

rkt18@hotmail.com.au

Password: hondavtr1000

rkt30@hotmail.com.au

Password: vtr10000

Updated 4/7/10


KB0099 - Windows XP Process Baseline
The following is a list of the processes running on my work XP PC, that was generated from SOE.

updated: 27/9/10


KB0100 - Building My Workstation

Building My Workstation – Updated 7/2/7

1. Set IP address to 192.168.200.216 (Set Static IP address on DHCP server)

2. Turn off Windows Firewall.

3. Set Business & Private address book folder properties to show folder as address book in Outlook.

4. Enable “Allways check spelling before sending” in Outlook. Tools > Options > Spelling.

5. Setup signature in Outlook for new messages & replies/forwards. Tools > Options > Mail Format

Russell THOMAS
Network Administrator
National Pharmacies
52 Gawler Place
Adelaide 5000
Ph: 08 8223 0352, Fax: 08 8359 3507
Web: www.nationalpharmacies.com.au

6. Copy \russell\ directory. Give IUSR_RTHOMAS R/W access to \russell\ for FTP & HTTP access.

7. Setup desktop to point to index.htm

8. Install adminpak.msi

9. Install Terminal Services Client. (Create install disks from Terminal services server. Programs -> Administrative Tools -> Terminal Services Client Creator

10. Add IIS component (with FTP selected) through Add windows components in Add/Remove programs in the control panel. Requires access to i386 directory.

? Set ftp root to c:\russell
? Allow write.

11. Install the following:-

? Proxy firewall client. \\bert\mspclnt\MS_FWC.MSI
? Etherpeek.
? Delphi
? ISX (From D5)
? Visio
? Oracle Client
? Oracle Developer Tools (ODT)
? Citrix Client
? VNC Server/Client
? HelpMaker
? Dot NET Framework 2.0 (dotnetfx20.exe)
? Toad for MySQL (Service Desk Access)

12. Scheduled Tasks:-

? Footytips
? ROH (Add2Schtasks.cmd)
? Roster (Add2Schtasks.cmd)
? CiscoMonitor
? CopyC2H.cmd (Add2Schtasks.cmd)
? Contig (Disk defrag utility)

updated: 8/11/10


KB0101 - Melbourne IT

www.melbourneit.com.au/cc/myaccount/login

**************************************************
Account Holder's Name: Russell Thomas
Account Login: RKTHOMAS
Account Password: zz.....
**************************************************

teamgunt.com.au and ifrog.co are both registered with MelbourneIT using one of Dalla's ABN's:-

11 068 041 246 (DALLAS NEWTON)

See KB0104 DND Propergation Check
Updated: 26/12/10


KB0102 - NetObjects Fusion 10

License Number: NFW-1000-R-314-86669-21685

updated: 26/10/10


KB0103 - Eicar test string
Test your antivirus system using the Eicar string. It's a text file that all antivirus engines should pick up, no matter hot it's wrapped or compresses. Get if from http://www.eicar.org/download/eicar.com.txt

X5O!P%@AP[4\PZX54(P^)7CC)7}$H+H*

Updated: 2/11/10


KB0104 - DNS Propagation check

Use http://www.whatsmydns.net to check DNS propagation.


KB0105 - Building My Web Server
Building My Web Server – Updated 27/12/10

1. Install Windows 2003 Server Enterprise Edition & format entire partition at NTFS
Create a NTFS Partition of at least 10GB.
Standards & Formats: English (Australia)
Location: Australia
Name: Russell Thomas
Organisation: iFrog
Product Key: BT3F3-M2F6F-VKQPG-2FX3Q-CGDHQ
Licensing mode: Per Device or per user
Computer name: IFROG-WWW
Administrator password: zz...
Time Zone: Adelaide (GMT+9:30)
2. Once the OS has been loaded create a NTFS Primary partition and assign it to the D: drive (Note that the CD letter may need to be reassigned).

3. Install the Ethernet Driver by first expanding R56484.EXE (Russell\install\drivers\dell), then updating the Ethernet controller driver through the device manager & point to the dell\drivers\R56484\Win2K

4. Install the Audio Driver by first expanding R71579.EXE (Russell\install\drivers\dell).

5. Set the ip to 10.10.10.2/24 & the default gateway to 10.10.10.1. Internode's DNS servers are:- 192.231.203.132 & 192.231.203.3

6. Go to http://www.update.microsoft.com and install the updates. This will include Service Pack 2, which includes Windows Firewall

7. Copy the i386 folder to D:\

8. Create the following users:-
rthomas
teamgunt
ifrog
david

9. Install vcredist_x86.exe and HardLinkShellExt_Win32.exe from \Russell\Install\Link Shell Execution

10. Install IIS Including FTP and SMTP. Make sure you allow http (tcp port 80), ftp server (tcp port 21) & ftp data (tcp port 20) through the firewall.

11. Create a new FTP site that isolates uses. Right click the FTP Sites folder & select New -> FTP Site. Set the properties as follows:-

Description: FTP Server
IP Address to use for the FTP Site: (All unassigned)
TCP Port: 21
FTP User Isolation: Isolate Users
Path: d:\inetpub\FTPRoot
(This folder contains the folder LocalUsers with sub folders for each user)
Permissions: Read & Write

Stop & delete the Default FTP site, then start the new FTP site.

12. Set the ftp root to d:\inetpub\ftproot & give write prermission. Disable anonymous access.

13. Create Junction links from the users home ftp folders to the wwwroot folder.

14. In IIS 6.0 you will need to add any ISAPI DLLs (eg HTMLUTILS.DLL) to the Web Server Extensions folder under the IIS Server. Give the Internet Guest Account modify access to the htmlutils.dat file.

15. Set the SMTP options as follows:-
Badmail directory: d:\inetpub\mailroot\badmail
Relay restrictions: allow 10.10.10.2
Add TCP Port 25 (SMTP) to the firewall exception

16. Install the E-mail Services windows component then add POP3 service to the MMC. Set the POP3 options as follows:-
Root Mail Directory: d:\inetpub\mailroot\Mailbox
Require SPA for all client connections: True
Add the user@domains:
info@ifrog.co
rthomas@ifrog.co
members@teamgunt.com.au
sales@teamgunt.com.au
russell@teamgunt.com.au

17. Start the Microsoft POP3 service.

18. Open Outlook express & create the following accounts:-
rthomas@ifrog.co
info@ifro.co
russell@teamgunt.com.au
members@teamgunt.com.au
Set logon using SPA
Create a rule to forward to rthomas@fsma.com.au
Set Check for new messages every 1 min.

19. Install DotNet 2 from \Russell\Install\DotNet\FrameWorks

20. Install MySQL & Toad for MySQL

21. Install MonintorIF & set output folder to d:\inetpub\wwwroot\ifrog\russell

22. Install ?

updated: 27/12/10


KB0106 - Rebuilding David's Dell Inspiron 1501 Laptop

1. Make sure you have the Blue Dell DVD - "DVD for Reinstalling Dell Portable and Dell XPS Computer Software" and the green Reinstallation CD - Microsoft Windows XP Professional (Service Pack 2).

2. Boot from the green OS CD & select entire partition (115GB)

Standards & Formats: English (Australia)
Location: Australia
Name: David Thomas
Organisation: Home
Computer name: DAVID-LAPTOP
Administrator password: zz...
Time Zone: Adealide (GMT+9:30)
3. Enable Automatic Updates when prompted.

4. Set the following users when prompted:-
1. David
2. Mum
3. Andrew
4. Sam
5. Ellen

5. Log into the computer using one of the accounts insert the Blue Dell DVD - "DVD for Reinstalling Dell Portable and Dell XPS Computer Software" & allow the ResourceCD install process to start.

6. Unzip & Install the following Drivers from the Blue Dell DVD - "DVD for Reinstalling Dell Portable and Dell XPS Computer Software":
1. d:\zipfiles\R151517 (WLAN Card setup)
2. d:\zipfiles\R134779 (Audio)
3. d:\zipfiles\R114200 (Modem)

7. Connect to the Home wireless network

8. Go to http://www.update.microsoft.com and install the updates. This will include IE8.

9. Download and install AVG-Free

10. Install Office XP.

Updated 27/12/10


VBS Functions

abs | array | asc | atn
cbool | cbyte | ccur | cdate
cdbl | chr | cint | clng
conversions | cos | creatobject | csng
cstr | date | dateadd | datediff
datepart | dateserial | datevalue | day
derrived math | escape | eval | exp
filter | formatcurrency | formatdatetime | formatnumber
formatpercent | getlocal | getobject | getref
hex | hour | inputbox | instr
instrrev | int, fix | isarray | isdate
isempty | isnull | isnumeric | isobject
join | lbound | lcase | left
len | loadpicture | log | ltrim, rtrim and trim
maths | mid | minute | month
monthname | msgbox | now | oct
replace | rgb | right | rnd
round | scriptengine | scriptenginebuildversion | scriptenginemajorversion
scriptengineminorversion | second | setlocal | sgn
sin | space | split | sqr
strcomp | string | strreverse | tan
time | timer | timeserial | timevalue
typename | ubound | ucase | unescape
vartype | weekday | weekdayname | year


Create AD User
'*****************************************************************
'* Simple script to create a one off AD user account in the FSMA
'* domain.
'*****************************************************************

Option Explicit
On Error Resume Next

Dim objDomain,objUser

Set objDomain=GetObject("LDAP://dc=fsma,dc=com,dc=au")
Set objUser=objDomain.Create("user","cn=AdUserName")

'General TAB
objUser.Put "givenName","Russell"
objUser.Put "initials","K"
objUser.Put "sn","Thomas"
objUser.Put "displayname","Russell Thomas"
objUser.Put "description","User"
objUser.Put "physicaldeliveryofficename","ISD"
objUser.Put "telephonenumber","(08) 8223 0352"
objUser.Put "othertelephone","0412 042967"
'objUser.Put "Mail","rthomas@fsma.com.au"
objUser.Put "wwwhomepage","http://www.fsma.com.au"
objUser.Put "url","http://fsma.com.au"

'Address Tab
'objUser.Put "streedaddress",""
'objUser.Put "postofficebox",""
objUser.Put "l","Adelaide"
objUser.Put "st","SA"
'objUser.Put "postalcode",""
'Country/region (2 letter code)
objUser.Put "c","au"

'Account Tab
'objUser.Put "cn","Infomation Services"
objUser.Put "userPrincipalName","testuser@fsma.com.au"
objUser.Put "samAccountName","rthomas_test"

'Profile Tab
'objUser.Put "profilepath",""
objUser.Put "scriptpath","login.bat"
objUser.Put "homedrive","h"

'Telephones Tab
'objUser.Put "homedirectory","\\fsma\"
objUser.Put "homephone","(08) 1234 4321"
objUser.Put "Otherhomephone","(08) 1234 4322"
objUser.Put "pager","(08) 1234 4323"
objUser.Put "Otherpager","(08) 1234 4324"
objUser.Put "mobile","(08) 1234 4325"
objUser.Put "Othermobile","(08) 1234 4326"
objUser.Put "facsimiletelephonenumber","(08) 1234 4327"
objUser.Put "otherfacsimiletelephonenumber","(08) 1234 4328"
objUser.Put "ipphone","(08) 1234 4329"
objUser.Put "otheripphone","(08) 1234 4320"
'objUser.Put "Notes","notes" '????

'Organisation Tab
objUser.Put "title","Network Admiunistrator"
objUser.Put "department","982"
objUser.Put "company","National Pharmacies"

objUser.Put "scriptpath","login.bat"
objUser.SetInfo

Wscript.Echo("")
Wscript.Echo("Done!")


Get AD User
'*****************************************************************
'* Simple script to get an AD user account in the FSMA domain.
'*****************************************************************

Option Explicit
On Error Resume Next

Dim objRootDSE,objDomain,objUser

Set objRootDSE=GetObject("LDAP://rootDSE")

Set objDomain=GetObject("LDAP://" & _
    objRootDSE.Get("defaultNamingContext"))

Set objUser=objDomain.GetObject("user", _
    "CN=Russell Thomas,OU=Information Services")

Wscript.Echo("AllowLogon: " & objUser.AllowLogon)
Wscript.Echo("DistiguishedName: " & _
        objUser.Get("distinguishedName"))
Wscript.Echo("givenName: " & objUser.Get("givenName"))
Wscript.Echo("initials: " & objUser.Get("initials"))
Wscript.Echo("sn: " & objUser.Get("sn"))
Wscript.Echo("displayname: " &  objUser.Get("displayname"))
Wscript.Echo("description: " & objUser.Get("description"))
Wscript.Echo("physicaldeliveryofficename: " & _
        objUser.Get("physicaldeliveryofficename"))
Wscript.Echo("telephonenumber: " & objUser.Get("telephonenumber"))
'Wscript.Echo("othertelephone: " & objUser.Get("othertelephone"))
'Wscript.Echo("Mail: " & objUser.Get("Mail"))
Wscript.Echo("wwwhomepage: " & objUser.Get("wwwhomepage"))
'Wscript.Echo("url: " & objUser.Get("url"))

'Address Tab
'Wscript.Echo("streedaddress: " & objUser.Get("streedaddress"))
'Wscript.Echo("postofficebox: " & objUser.Get("postofficebox"))
Wscript.Echo("l: " & objUser.Get("l"))
'Wscript.Echo("st: " & objUser.Get("st"))
'Wscript.Echo("postalcode: " & objUser.Get("postalcode"))

'Country/region (2 letter code)
'Wscript.Echo("c: " & objUser.Get("c"))

'Account Tab
Wscript.Echo("cn: " & objUser.Get("cn"))
Wscript.Echo("userPrincipalName: " & _
        objUser.Get("userPrincipalName"))
Wscript.Echo("samAccountName: " & objUser.Get("samAccountName"))

'Profile Tab
'Wscript.Echo("profilepath: " & objUser.Get("profilepath"))
Wscript.Echo("scriptpath: " & objUser.Get("scriptpath"))
'Wscript.Echo("homedrive: " & objUser.Get("homedrive"))

'Telephones Tab
'Wscript.Echo("homedirectory: " & objUser.Get("homedirectory"))
'Wscript.Echo("homephone: " & objUser.Get("homephone"))
'Wscript.Echo("Otherhomephone: " & objUser.Get("Otherhomephone"))
'Wscript.Echo("pager: " & objUser.Get("pager"))
'Wscript.Echo("Otherpager: " & objUser.Get("Otherpager"))
Wscript.Echo("mobile: " & objUser.Get("mobile"))
'Wscript.Echo("Othermobile: " & objUser.Get("Othermobile"))
Wscript.Echo("facsimiletelephonenumber: " & objUser.Get("facsimiletelephonenumber"))
'Wscript.Echo("otherfacsimiletelephonenumber: " & objUser.Get("otherfacsimiletelephonenumber"))
'Wscript.Echo("ipphone: " & objUser.Get("ipphone"))
'Wscript.Echo("otheripphone: " & objUser.Get("otheripphone"))
'Wscript.Echo("Notes: " & objUser.Get("Notes"))

'Organisation Tab
Wscript.Echo("title: " & objUser.Get("title"))
Wscript.Echo("department: " & objUser.Get("department"))
Wscript.Echo("company: " & objUser.Get("company"))

'Terminal Services Profile
Wscript.Echo("TerminalServicesProfilePath: " & _
        objUser.TerminalServicesProfilePath)
Wscript.Echo("TerminalServicesHomeDirectory: " & _
        objUser.TerminalServicesHomeDirectory)
Wscript.Echo("TerminalServicesHomeDrive: " & _
        objUser.TerminalServicesHomeDrive)

Wscript.Echo("")
Wscript.Echo("Done.")


Update AD User
'*****************************************************************
'* Simple script to update an AD user account in the FSMA domain.
'*****************************************************************

Option Explicit
On Error Resume Next

Const ADS_PROPERTY_CLEAR=1
Const ADS_PROPERTY_UPDATE=2
Const ADS_PROPERTY_APPEND=3
Const ADS_PROPERTY_DELETE=4

Dim objDSE,objDomain,objUser

Set objDSE=GetObject("LDAP://rootDSE")

Set objDomain=GetObject("LDAP://" & _
    objDSE.Get("defaultNamingContext"))

Set objUser=objDomain.GetObject("user", _
 "CN=Russell Thomas,OU=Information Services")

objUser.Put "scriptpath","logon.bat"

objUser.TerminalServicesHomeDrive="H:"

'Use the following to clear a AD property
'objUser.PutEx ADS_PROPERTY_CLEAR,"scriptPath",vbNullString

objUser.TerminalServicesProfilePath="\\server\share\path"

objUser.SetInfo

Wscript.Echo("")
Wscript.Echo("Done.")


Domain Logon
'--Domain Logon.vbs
'  This script goes into the logon script from the fsma domain GPO as well as the netlogon share on the domain controllers
'
'26/11/04  RKT  Map P: drive using DFS
'06/05/05  RKT  Map to change \\fsmaad01 to \\cluster
'09/05/05  RKT  Force disconnect of drives before mapping
'04/08/05  RKT  Reg hack to update PDE host entry
'10/08/05  RKT  Removed refernce to CDO. Script was failing on TS05.
'02/02/06  RKT  Map Stores S: drive from \\Enterprise to \\Cluster
'
'http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/wsobjwshnetwork.asp

Option Explicit
On Error Resume Next

Dim wshShell,wshNetwork,wshSysEnv,ADSysInfo
Dim oFlds,oEmail,oPrinters,oDrives,oADUser,oNTUser,oGroup,ofso,oShare,oServer,oRootDSE,oDomain,oCon,oCMD,oOBJ,oRecordSet,oAdminGroup
Dim sPDEHost,sDefaultPrinter,sDomainContainer,sDrive,sProperties,sGroup,sUNC,sUser,sPassword,sou,sPath,sPrinterName
Dim i,iPos,iConf
Dim bCanAccessAD,bForce,bUpdateProfile,bIsStore

set wshShell  =wScript.CreateObject("WScript.Shell")
set wshNetwork=wScript.CreateObject("WScript.Network")
set ofso      =wScript.CreateObject("Scripting.FileSystemObject")
Set ADSysInfo =wScript.CreateObject("ADSystemInfo")
set wshSysEnv =wshShell.Environment("SYSTEM")
'Set oEmail    =CreateObject("CDO.Message")
'set iConf     =CreateObject("CDO.Configuration")
'Set oFlds     =iConf.Fields

bForce=True
bUpdateProfile=True

'Wait until the user is really logged in...
'strUserName = ""
'While strUserName = ""
'WScript.Sleep 100 ' 1/10 th of a second
'strUserName = WSHNetwork.UserName
'Wend

'10/5/5  - scan32 will create access errors if it doesn't have the appropriate permissions to the audit directory
'wshShell.Run "\\cluster\programs\audit\scan32.exe"
'07/09/05 - Added this command
wshShell.Run "\\Cluster\Programs\Audit\Scan\Scan32.exe"

if iGetOS>4 then
  set oRootDSE=GetObject("LDAP://RootDSE")
  'sDomainContainer=DC=fsma,DC=com,DC=au
  sDomainContainer=oRootDSE.Get("DefaultNamingContext")
  Set oDomain=GetObject("LDAP://" & sDomainContainer)

  bCanAccessAD=True
else
  bCanAccessAD=False
End IF

If bCanAccessAD Then
  'This is part is executed by 2000 machines
  'GetObject has 2 providers: WinNT (NT4) & LDAP (AD - 2000 etc)
  'The WinNT Provider in ADSI give you access to the NT4 directory service
  'Is provides access to the following objects: Domain, User, Group & Computer

  set oAdminGroup = GetObject("WinNT://fsma/administrators,group")
  set oNTUser     = GetObject("WinNT://fsma/" & WshNetwork.UserName & ",user")
  Set oADUser     = GetObject("LDAP://" & ADSysInfo.UserName)

  WScript.StdOut.Write "  Script Version: " & WScript.Name & " " & WScript.Version & vbcrlf

  WScript.StdOut.Write "  VBS Version: 5.5.11.2" & vbcrlf
  WScript.StdOut.Write "  Domain: " & WshNetwork.UserDomain & vbcrlf
  WScript.StdOut.Write "  Computer Name: " & WshNetwork.ComputerName & vbcrlf
  WScript.StdOut.Write "  User Name: " & WshNetwork.UserName & vbcrlf

  WScript.StdOut.Write "  User Class: " & oNTUser.Class & vbcrlf
  WScript.StdOut.Write "  NT4 ADS Path: " & oNTUser.ADspath & vbcrlf
  wScript.StdOut.Write "  AD ADS Path: " & oADUser.ADspath & vbcrlf
  WScript.StdOut.Write "  Full name: " & oNTUser.Fullname & vbcrlf
  WScript.StdOut.Write "  Description: " & ONTUser.Description & vbcrlf
  WScript.StdOut.Write "  Profile: " & oNTUser.Profile & vbcrlf

  If oAdminGroup.IsMember(oNTUser.ADsPath) then WScript.StdOut.Write "  You have Administrator rights!" & vbcrlf

  WScript.StdOut.Write vbcrlf

  '--Determine the users OU
  'FindOU(GetObject("LDAP://" & oRoot.Get("defaultNamingContext")))

  'Delete the quick launch icons from the stores task bar
  If InStrRev(LCase(oADUser.adspath),",ou=stores,",-1)<>0 Then DeleteQuickLaunch

  '--Create Home directory if it doesn't exist Everyone needs read permissions on \\cluster\data
  'If not ofso.FolderExists("\\cluster\data\users\" & WshNetwork.UserName) then
  '  WScript.Echo "  Creating \\cluster\data\users\" & WshNetwork.UserName
  '  Call ofso.CreateFolder("\\cluster\data\users\" & WshNetwork.UserName)
  'End If

  '--Grant Administrators full control of the directory
  WScript.StdOut.Write "  Assigning administrator rights to \\cluster\data\users\" & WshNetwork.UserName & vbcrlf
  'Call WshShell.Run("cacls " & "\\cluster\data\users\" & WshNetwork.UserName & " /e /g Administrators:F",0,True)
  '--Grant user change access to folder
  WScript.StdOut.Write "  Assigning user rights to \\cluster\data\users\" & WshNetwork.UserName & vbcrlf
  'Call WshShell.Run("cacls " & "\\cluster\data\users\" & WshNetwork.UserName & " /e /g " & WshNetwork.UserName &":C",0,True)

  '--Share the folder
  'set oServer=GetObject("WinNT://fsma/fsmaad01/LanmanServer")
  'set oShare=oServer.Create("fileshare",WshNetwork.UserName)
  'oShare.Path="D:\data\users\" & WshNetwork.UserName
  'oShare.Description="H: Drive"
  'oShare.MaxUserCount=-1 'Max users
  'oShare.SetInfo
  'set oShare=Nothing
  'set oServer=Nothing

  '--Map L: (Used by Finance One)
  Err.Clear
  sDrive="L:"
  If ofso.DriveExists(sDrive) Then WshNetwork.RemoveNetworkDrive sDrive,bforce,bUpdateProfile

  If InStrRev(LCase(oADUser.ADspath),",ou=finance,",-1)>0 Then
    sUNC="\\enterprise\f1"
    WshNetwork.MapNetworkDrive sDrive,sUNC,bUpdateProfile
    If Err Then
      WScript.StdOut.Write "  " & sDrive & " map to " & sUNC & " - FAILED!" & vbcrlf
    End If
  End If

  '--Map H: (Home)
  Err.Clear
  sDrive="H:"
  If ofso.DriveExists(sDrive) Then WshNetwork.RemoveNetworkDrive sDrive,bforce,bUpdateProfile

  sUNC="\\cluster\" & WshNetwork.UserName
  WshNetwork.MapNetworkDrive sDrive,sUNC,bUpdateProfile
  If Err Then
    WScript.StdOut.Write "  " & sDrive & " mapto " & sUNC & " - FAILED!" & vbcrlf
  End If

  '--Map L: (Used by Finance One)
  Err.Clear
  sDrive="L:"
  If ofso.DriveExists(sDrive) Then WshNetwork.RemoveNetworkDrive sDrive,bforce,bUpdateProfile

  If InStrRev(LCase(oADUser.ADspath),",ou=finance,",-1)>0 Then
    sUNC="\\enterprise\f1"
    WshNetwork.MapNetworkDrive sDrive,sUNC,bUpdateProfile
    If Err Then
      WScript.StdOut.Write "  " & sDrive & " map to " & sUNC & " - FAILED!" & vbcrlf
    End If
  End If

  '--Map P: (Programs)
  Err.Clear
  sDrive="P:"
  If ofso.DriveExists(sDrive) Then WshNetwork.RemoveNetworkDrive sDrive,bforce,bUpdateProfile
  sUNC="\\cluster\Programs"
  WshNetwork.MapNetworkDrive sDrive,sUNC,bUpdateProfile
  If Err Then
    WScript.StdOut.Write "  " & sDrive & " mapp to " & sUNC & " - FAILED!" & vbcrlf
  End If

  '--Map S: (Shared)
  Err.Clear
  sDrive="S:"
  if ofso.DriveExists(sDrive) Then WshNetwork.RemoveNetworkDrive sDrive,bforce,bUpdateProfile

  If InStrRev(Lcase(oADUser.ADspath),",ou=stores,",-1)>0 Then
    'Map the stores to the enterise - This can't be more than 40 characters long!
    '2/2/6: RT - Mape the stores S: from enterprise to cluster Home folder. Once bedded down change S: to the same as
    '            everyone else.
    '
    'sUNC="\\" & WshNetwork.UserName & "_enterprise\store\" & WshNetwork.UserName
    'WshNetwork.MapNetworkDrive sDrive,sUNC,bUpdateProfile
    'If Err Then
    '  WScript.StdOut.Write "  " & sDrive & " map to " & sUNC & " - FAILED!" & vbcrlf
    'End If

    sUNC="\\cluster\" & WshNetwork.UserName
    WshNetwork.MapNetworkDrive sDrive,sUNC,bUpdateProfile
    If Err Then
      WScript.StdOut.Write "  " & sDrive & " mapto " & sUNC & " - FAILED!" & vbcrlf
    End If
  Else
    'Map everyone else to cluster
    sUNC="\\cluster\shared"
    WshNetwork.MapNetworkDrive sDrive,sUNC,bUpdateProfile
    If Err Then
      WScript.StdOut.Write "  " & sDrive & " map to " & sUNC & " - FAILED!" & vbcrlf
    End If
  End If

  '-- Map Z: (Root of Cluster)
  Err.Clear
  sDrive="Z:"
  if ofso.DriveExists(sDrive) Then WshNetwork.RemoveNetworkDrive sDrive,bforce,bUpdateProfile

  If oAdminGroup.IsMember(oNTUser.ADsPath) then
    sUNC="\\cluster\root"
    WshNetwork.MapNetworkDrive sDrive,sUNC
    If Err Then
      WScript.StdOut.Write "  " & sDrive & " map to " & sUNC & " - FAILED!" & vbcrlf
    End If
  End If

Else
  'This is part is executed by Pre 2000 machines

  '--Map H: (Home)
  Err.Clear
  sDrive="H:"
  If ofso.DriveExists(sDrive) Then WshNetwork.RemoveNetworkDrive sDrive,bforce,bUpdateProfile
  sUNC="\\cluster\" & WshNetwork.UserName
  sUNC="\\cluster\shared"
  WshNetwork.MapNetworkDrive sDrive,sUNC
  If Err Then
    WScript.StdOut.Write "  " & sDrive & " map to " & sUNC & " - FAILED!" & vbcrlf
  End If

  '-- Don't worry about mapping L: drive to enterprise on pre 2K machines

  '--Map P: (Programs)
  Err.Clear
  sDrive="P:"
  If ofso.DriveExists(sDrive) Then WshNetwork.RemoveNetworkDrive sDrive,bforce,bUpdateProfile
  sUNC="\\cluster\Programs"
  WshNetwork.MapNetworkDrive sDrive,sUNC
  If Err Then
    WScript.StdOut.Write "  " & sDrive & " map to " & sUNC & " - FAILED!" & vbcrlf
  End If

  '--Map S: (Shared)
  Err.Clear
  sDrive="S:"
  if ofso.DriveExists(sDrive) Then WshNetwork.RemoveNetworkDrive sDrive,bforce,bUpdateProfile
  sUNC="\\cluster\shared"
  WshNetwork.MapNetworkDrive sDrive,sUNC
  If Err Then
    WScript.StdOut.Write "  " & sDrive & " map to " & sUNC & " - FAILED!" & vbcrlf
  End If
End if

'********************************************
'Display the drive mappings
'********************************************
WScript.Sleep 1000
Set oDrives = WshNetwork.EnumNetworkDrives
For i = 0 to oDrives.Count-1 step 2
  WScript.StdOut.Write "  Network drive " & oDrives.Item(i) & " is mapped to " & oDrives.Item(i+1) & vbcrlf
Next

'********************************************
' Move printers to cluster (9/5/5)
'********************************************
WScript.StdOut.Write vbcrlf
sDefaultPrinter=WshShell.RegRead("HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows\Device")
WScript.StdOut.Write "  Default Printer: " & sDefaultPrinter & vbcrlf
Set oPrinters = WshNetwork.EnumPrinterConnections
For i = 0 to oPrinters.Count - 1 Step 2
  WScript.StdOut.Write "  Printer port " & oPrinters.Item(i) & " is mapped to " & oPrinters.Item(i+1) & vbcrlf

  'Move any printers from AD01 to CLUSTER
  If LCase(Left(oPrinters.Item(i+1),11))="\\fsmaad01\" Then
    iPos=InStr(3,oPrinters.Item(i+1),"\")+1
    sPrinterName=mid(oPrinters.Item(i+1),iPos,Len(oPrinters.Item(i+1))-iPos+1)
    WshNetWork.RemovePrinterConnection "\\fsmaad01\" & sPrinterName
    WshNetWork.AddWindowsPrinterConnection "\\cluster\" & sPrinterName
    If LCase(sDefaultPrinter)=LCase(oPrinters.Item(i+1)) Then
      WshNetWork.SetDefaultPrinter "\\cluster\" & sPrinterName
    End If

    WScript.StdOut.Write "    " & sPrinterName & " now moved from fsmaad01 to cluster" & vbcrlf
  End If
Next

'********************************************
' Reg Hack to change PDE host entry (4/8/5)
'********************************************
sPDEHost=WshShell.RegRead("HKLM\SOFTWARE\FSMA\PDECOMW\FTP host")
if sPDEHost<>"" and sPDEHost<>"pde-host.fsma.com.au" Then
  WScript.StdOut.Write vbcrlf
  WScript.StdOut.Write "  Old PDE host: " & sPDEHost & vbcrlf
  WshShell.RegWrite "HKLM\SOFTWARE\FSMA\PDECOMW\FTP host","pde-host.fsma.com.au","REG_SZ"

  'Email me notification....
  'oFlds.Item("http://schemas.microsoft.com/cdo/configuration/sendusing")=2
  'oFlds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver")="192.168.200.231"
  'oFlds.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout")=10
  'oFlds.Update

  'Set oEmail.Configuration=iConf
  'oEmail.From="helpdesk@fsma.com.au"
  'oEmail.To="davery@fsma.com.au;dprior@fsma.com.au;rthomas@fsma.com.au"
  'oEmail.Subject="PDE Reg hack updated on " & WshNetwork.ComputerName & " (" & WshNetwork.UserName &") at " & now()
  'oEmail.TextBody=""
  'oEmail.Send

  sPDEHost=WshShell.RegRead("HKLM\SOFTWARE\FSMA\PDECOMW\FTP host")
  WScript.StdOut.Write "  New PDE host: " & sPDEHost & vbcrlf
End If

WScript.quit(0)

'Sub FindOU(oOBJ)
'  for each oUser in oOBJ
'  Select case oUser.Class
'    Case "user"
'      WScript.StdOut.Write "user: " & oUser.Name & " " & oOBJ.Name & vbcrlf
'      if oUser.samAccountName=WshNetwork.UserName then
'        Wscript.echo "container: " & oUser.adspath & " " & oUser.samAccountName
'        sou=oUser.adspath
'        i=Instr(sou,"OU=")
'        sou=Mid(sou,i+3)
'        i=Instr(sou,",")
'        sou=lcase(Mid(sou,1,i-1))
'        WScript.StdOut.Write oUser.samAccountName & ": " & sou & vbcrlf
'      end if
'    Case "organizationalUnit","container"
'      WScript.StdOut.Write "container: " & oUser.adspath & vbcrlf
'      FindOU(oUser)
'    Case "group"
'      WScript.StdOut.Write "group: " & oUser.Name & vbcrlf
'    Case "computer"
'      WScript.StdOut.Write "computer: " & oUser.Name & vbcrlf
'    Case else
'      WScript.StdOut.Write "?" & oUser.Name & vbcrlf
'    End Select
'  Next
'End Sub

Sub DeleteQuickLaunch()
  dim f1,folder,files,sPath

  sPath=WshShell.ExpandEnvironmentStrings("%USERPROFILE%") & "\Application Data\Microsoft\Internet Explorer\Quick Launch"
  If ofso.FolderExists(sPath) Then
    Set Folder=ofso.GetFolder(sPath)
    Set Files=Folder.Files
    For Each f1 in Files
      f1.Attributes=0
      f1.Delete
    Next
    set folder=nothing
    set files=nothing
    set sPath=nothing
    set f1=nothing
  End If
End Sub

Sub ShowErr(sMsg)
  WScript.StdOut.Write sMsg & vbcrlf & vbcrlf & "Please contact the IS helpdesk for assistance on Ext 366 or 08 8223 0366" & vbcrlf & vbcrlf & "Error Code=" & Hex(Err.Number) & " Error Source=" & Err.Source & vbcrlf & vbcrlf & Err.Description & vbcrlf & WScript.Name & " ver. " & WScript.Version & vbcrlf
  Err.Clear
End Sub

Function iGetOS
  Const OpenAscii      = 0
  Const FailIfNotExist = 0
  Const ForReading     = 1

  Dim sTempFile,fFile,sResult

  sTempFile=wshShell.ExpandEnvironmentStrings("%TEMP%") & "\OSver.tmp"
  wshShell.Run "%comspec% /c ver >" & sTempFile, 0, True

  set fFile=oFSO.OpenTextFile(sTempFile,ForReading,FailIfNotExist,OpenAscii)
  sResult=fFile.ReadAll
  fFile.Close

  Select Case True
    Case Instr(sResult,"Windows 95")>1:iGetOS=1
    Case Instr(sResult,"Windows 98")>1:iGetOS=2
    Case Instr(sResult,"Windows Millenium")>1:iGetOS=3
    Case Instr(sResult,"Windows NT")>1:iGetOS=4
    Case Instr(sResult,"Windows 2000")>1:iGetOS=5
    Case Instr(sResult,"Windows XP")>1:iGetOS=6
    Case Instr(sResult,"Microsoft Windows [Version 5.2.3790]")>1:iGetOS=7
    Case Else:iGetOS=99
  End Select
End Function


List AD Users
Option Explicit
On Error Resume Next

Dim objDomain,objConnection, objCommand, objRootDSE, strDNSDomain
Dim strDistinguishedName,strFilter, strQuery, objRecordSet
Dim objUser

Set objRootDSE=GetObject("LDAP://rootDSE")

Set objDomain=GetObject("LDAP://" & _
    objRootDSE.Get("defaultNamingContext"))

'Use ADO to search the domain for all users.
Set objConnection=CreateObject("ADODB.Connection")
Set objCommand=CreateObject("ADODB.Command")
objConnection.Provider="ADsDSOOBject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection=objConnection

'Determine the DNS domain from the RootDSE object.
strDNSDomain=objRootDSE.Get("defaultNamingContext")

strFilter="(&(objectCategory=person)(objectClass=user))"

strQuery="<LDAP://" & strDNSDomain & ">;" & strFilter _
  & ";sn,distinguishedName;subtree"

objCommand.CommandText=strQuery
objCommand.Properties("Page Size")=100
objCommand.Properties("Timeout")=30
objCommand.Properties("Cache Results")=False

'Enumerate all users. Write each user's Distinguished Name to the
Set objRecordSet=objCommand.Execute
Do Until objRecordSet.EOF
  Wscript.Echo("")
  strDistinguishedName=objRecordSet.Fields("distinguishedName")
  strDistinguishedName=left(strDistinguishedName, _
    Len(strDistinguishedName)-21)
  Wscript.Echo(strDistinguishedName)

  Set objUser=objDomain.GetObject("user", _
      strDistinguishedName)

  Wscript.Echo("AllowLogon: " & objUser.AllowLogon)
  Wscript.Echo("DistiguishedName: " & _
          objUser.Get("distinguishedName"))
  Wscript.Echo("givenName: " & objUser.Get("givenName"))
  Wscript.Echo("initials: " & objUser.Get("initials"))
  Wscript.Echo("sn: " & objUser.Get("sn"))
  Wscript.Echo("displayname: " &  objUser.Get("displayname"))
  Wscript.Echo("description: " & objUser.Get("description"))
  Wscript.Echo("physicaldeliveryofficename: " & _
          objUser.Get("physicaldeliveryofficename"))
  Wscript.Echo("telephonenumber: " & _
  objUser.Get("telephonenumber"))
'  Wscript.Echo("othertelephone: " & _
' objUser.Get("othertelephone"))
'  Wscript.Echo("Mail: " & objUser.Get("Mail"))
  Wscript.Echo("wwwhomepage: " & objUser.Get("wwwhomepage"))
'  Wscript.Echo("url: " & objUser.Get("url"))

  'Address Tab
'  Wscript.Echo("streedaddress: " & objUser.Get("streedaddress"))
'  Wscript.Echo("postofficebox: " & objUser.Get("postofficebox"))
  Wscript.Echo("l: " & objUser.Get("l"))
'  Wscript.Echo("st: " & objUser.Get("st"))
'  Wscript.Echo("postalcode: " & objUser.Get("postalcode"))

'Country/region (2 letter code)
'  Wscript.Echo("c: " & objUser.Get("c"))

  'Account Tab
  Wscript.Echo("cn: " & objUser.Get("cn"))
  Wscript.Echo("userPrincipalName: " & _
          objUser.Get("userPrincipalName"))
  Wscript.Echo("samAccountName: " & objUser.Get("samAccountName"))

  'Profile Tab
'  Wscript.Echo("profilepath: " & objUser.Get("profilepath"))
  Wscript.Echo("scriptpath: " & objUser.Get("scriptpath"))
'  Wscript.Echo("homedrive: " & objUser.Get("homedrive"))

  'Telephones Tab
'  Wscript.Echo("homedirectory: " & objUser.Get("homedirectory"))
'  Wscript.Echo("homephone: " & objUser.Get("homephone"))
'  Wscript.Echo("Otherhomephone: " & _
' objUser.Get("Otherhomephone"))
'  Wscript.Echo("pager: " & objUser.Get("pager"))
'  Wscript.Echo("Otherpager: " & objUser.Get("Otherpager"))
  Wscript.Echo("mobile: " & objUser.Get("mobile"))
'  Wscript.Echo("Othermobile: " & objUser.Get("Othermobile"))
  Wscript.Echo("facsimiletelephonenumber: " & _
  objUser.Get("facsimiletelephonenumber"))
'  Wscript.Echo("otherfacsimiletelephonenumber: " & _
'objUser.Get("otherfacsimiletelephonenumber"))
'  Wscript.Echo("ipphone: " & objUser.Get("ipphone"))
'  Wscript.Echo("otheripphone: " & objUser.Get("otheripphone"))
'  Wscript.Echo("Notes: " & objUser.Get("Notes"))

  'Organisation Tab
  Wscript.Echo("title: " & objUser.Get("title"))
  Wscript.Echo("department: " & objUser.Get("department"))
  Wscript.Echo("company: " & objUser.Get("company"))

  'Terminal Services Profile
  Wscript.Echo("TerminalServicesProfilePath: " & _
          objUser.TerminalServicesProfilePath)
  Wscript.Echo("TerminalServicesHomeDirectory: " & _
          objUser.TerminalServicesHomeDirectory)
  Wscript.Echo("TerminalServicesHomeDrive: " & _
          objUser.TerminalServicesHomeDrive)

  objRecordSet.MoveNext
Loop

objConnection.Close
Set objConnection=Nothing
Set objCommand=Nothing
Set objRootDSE=Nothing
Set objRecordSet=Nothing

Wscript.Echo ""
Wscript.Echo "Done"


C#0001 - To run the C# command line compiler

· Save code with cs extension

· From the command prompt type

csc code.cs

csc.exe exists in \WINDOWS\Microsoft.NET\Framework\v2.0.50727\

· To run a .NET EXE, the machine has to have the .NET runtime installed. Microsoft provides a program called dotnetredist.exe. It is known at the .NET Runtime Redistributable. You can install the runtime (not the SDK) on any flavor of Windows.

· To use the SDKI debugger, build your application with the /debug+ switch

csc /debug+ code.cs

Change to c:\program files\microsoft.net\frameworkSDK\GuiDebug & execute DbgCLR.exe. From the menu choose Debug > Program to debug. Enter the path of the EXE file you wish to debug. Press F11 to step into the program, F9 to set a break point, F10 to step over & F5 to run. If the debugger wont debug, then you probably didn't compile with the /debug+ switch.

updated 6/9/7


C#0002 - Basic Console Applications


App
//Teach Yourself C# in 21 days Pg 42
using System;
class App
{
  public static void Main()
  {
    int radius = 4;
    const double PI=3.14159;
    double area;

    area=PI*radius*radius;

    Console.WriteLine("Radius={0}, PI={1}",radius,PI);
    Console.WriteLine("The area is {0}",area);
  }
}


Calc.cs
//to compile as a DLL use the '/t:library' swtch
//ie csc /t:library calc.cs

using System;
public class Calc
{
      public static int Add(int x,int y)
    {
        return x + y;
      }
    public static int Subtract(int x, int y)
    {
        return x - y;
    }
}


Directory Services
using System;
using System.DirectoryServices;

class Prog
{
  public static void Main(string[] args)
  {
    // connect to AD
    DirectoryEntry de = new DirectoryEntry("WinNT://fsma/rthomas","administrator","password");

    foreach(DirectoryEntry child in de.Children)
    {
      Console.WriteLine(child.SchemaClassName + ": " + child.Name);
    }
  }

}


EnvApp
//Teach Yourself C# in 21 days Pg 42
using System;

class EnvApp
{
  public static void Main()
  {
    Console.WriteLine("===========================");
    Console.WriteLine(" Command: {0}", Environment.CommandLine);
    Console.WriteLine("Curr Dir: {0}", Environment.CurrentDirectory);
    Console.WriteLine(" Sys Dir: {0}", Environment.SystemDirectory);
    Console.WriteLine(" Version: {0}", Environment.Version);
    Console.WriteLine(" OS Vers: {0}", Environment.OSVersion);
    Console.WriteLine(" Machine: {0}", Environment.MachineName);
    Console.WriteLine("  Memory: {0}", Environment.WorkingSet);
    Console.WriteLine("===========================");

    string[] drives = Environment.GetLogicalDrives();
    for (int x = 0; x < drives.Length; x++)
    {
      Console.WriteLine("Drive {0}: {1}", x, drives[x]);
    }
    Console.WriteLine("===========================");
    Console.WriteLine("Path: {0}",Environment.GetEnvironmentVariable("Path"));
    Console.WriteLine("===========================");
  }
}


Event Log
//http://support.microsoft.com/kb/307024
using System.Diagnostics;
using System.Text.RegularExpressions;

class EventLog
{
  public static void Main()
  {
    string sSource;
    string sLog;
    string sEvent;

    sSource = "dotNET Sample App";
    sLog = "Application";
    sEvent = "Sample Event";

    if (!EventLog.SourceExists(sSource)) EventLog.CreateEventSource(sSource, sLog);
    EventLog.WriteEntry(sSource, sEvent, EventLogEntryType.Information, 234);
  }
}


Events
//Teach Yourself C# in 21 days Pg 456
using System;

delegate void CharEventHandler(object source,CharEventArgs e);

public class CharEventArgs:EventArgs
{
  public char CurrChar;
  public CharEventArgs(char CurrChar)
  {
    this.CurrChar=CurrChar;
  }
}

class CharChecker
{
  char curr_char;
  public event CharEventHandler TestChar;
  public char Curr_Char
  {
    get { return curr_char; }
    set
    {
      if (TestChar != null)
      {
        CharEventArgs args=new CharEventArgs(value);
        TestChar(this, args);
        curr_char = args.CurrChar;
      }
    }
  }
}

class Events
{
  public static void Main()
  {
    CharChecker tester=new CharChecker();
    tester.TestChar += new CharEventHandler(Drop_A);
    tester.Curr_Char = 'B';
    Console.WriteLine("{0}", tester.Curr_Char);
    tester.Curr_Char = 'r';
    Console.WriteLine("{0}", tester.Curr_Char);
    tester.Curr_Char = 'a';
    Console.WriteLine("{0}", tester.Curr_Char);
    tester.Curr_Char = 'd';
    Console.WriteLine("{0}", tester.Curr_Char);
  }

  static void Drop_A(object source, CharEventArgs e)
  {
    if (e.CurrChar == 'a' || e.CurrChar == 'A')
    {
      Console.WriteLine("Don't like 'a'!");
      e.CurrChar = 'X';
    }
  }
}


FirstASP.aspx
<%@ Page Language="C#" %>
<html>
  <head>
    <SCRIPT runat="server">
      protected void btnMyButton_Click(object Source,EventArgs e)
      {
        lblMyLabel.Text="The button was <b>clicked</b>!";
      }
    </script>
  </head>
  <body>
    <h3>Simple Web Form Example</H3>
    <form runat=server>
      <asp:Button id=btnMyButton runat="server" Text="My Button" onclick="btnMyButton_Click" />
      <br>
      <br>
      <asp:Label id=lblMyLabel runat=server />
    </form>
  </body>
</html>


frmQuote
//Teach Yourself C# in 21 days Pg 668
/// frmQuote.cs

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

//using QuoteService
namespace UsingQuotes
{
  /// <summary>
  /// Summary description for Form1.
  /// </summary>
  public class frmQuotes : System.Windows.Forms.Form
  {
    private Label  lblQuote;
    private Button btnGetQuote;
    private string CurrentQuote;

    private System.ComponentModel.Container components = null;

    public frmQuotes()
    {
      InitializeComponent();
    }

    /// <summary>
    /// Clean up any resources being used.
    /// </summary>
    protected override void Dispose( bool disposing )
    {
      if( disposing )
      {
        if (components != null)
        {
          components.Dispose();
        }
      }
      base.Dispose( disposing );
    }

    private void InitializeComponent()
    {
      this.lblQuote    = new Label();
      this.btnGetQuote = new Button();
      this.SuspendLayout();
      //
      // lblQuote
      //
      this.lblQuote.Location = new Point(16, 16);
      this.lblQuote.Name     = "lblQuote";
      this.lblQuote.Size     = new Size(256, 88);
      this.lblQuote.TabIndex = 0;
      this.lblQuote.Text     = "xxx";
      //
      // btnGetQuote
      //
      this.btnGetQuote.Location = new Point(88, 184);
      this.btnGetQuote.Name     = "btnGetQuote";
      this.btnGetQuote.Size     = new Size(112, 32);
      this.btnGetQuote.TabIndex = 1;
      this.btnGetQuote.Text     = "Get Quote";
      this.btnGetQuote.Click += new System.EventHandler(this.btnGetQuote_Click);
      //
      // frmQuotes
      //
      this.AutoScaleBaseSize = new Size(5, 13);
      this.ClientSize        = new Size(292, 230);
      this.Controls.AddRange(new Control[] { this.btnGetQuote,
                                                this.lblQuote});
      this.Name = "frmQuotes";
      this.Text = "Quotes";
      this.ResumeLayout(false);
    }

    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    static void Main()
    {
       Application.Run(new frmQuotes());
    }

    private void btnGetQuote_Click(object sender, System.EventArgs e)
    {
      CurrentQuote = "zzz";

      Quote myQuoteService = new Quote();

      try
      {
        CurrentQuote = myQuoteService.GetQuote();
      }
      catch ( Exception ex)
      {
        MessageBox.Show("Error getting quote: " + ex.Message,
                "error", MessageBoxButtons.OK,
                 MessageBoxIcon.Error);
      }
      lblQuote.Text = CurrentQuote;
    }
  }
}

Paste the following into verses.xml
<?xml version="1.0" encoding="utf-8" ?>
<quotes>
  <quote>Quote 1</quote>
  <quote>Quote 2</quote>
  <quote>Quote 3</quote>
  <quote>Quote 4</quote>
  <quote>Quote 5</quote>
  <quote>Quote 6</quote>
  <quote>Quote 7</quote>
  <quote>Quote 8</quote>
  <quote>Quote 9</quote>
  <quote>Quote 10</quote>
</quotes>


Graphics Test
//Teach Yourself C# in 21 days Pg 340
using System;
using System.Drawing;
using System.ComponentModel;
using System.Windows.Forms;

namespace GraphicsTest
{
  public class frmGraphics : System.Windows.Forms.Form
  {
    private Bitmap DrawingArea;  // Area to draw on.
    private Button btnCircle;
    private Button btnLine;
    private Button btnRectangle;
    private Button btnOK;
    private Button btn_Solid;

    private System.ComponentModel.Container components = null;

    private System.Random rnd;
    private Pen myPen;

    public frmGraphics()
    {
      InitializeComponent();
      rnd=new System.Random();
      myPen=new Pen(Color.Blue);
    }

    protected override void Dispose(bool disposing)
    {
      if(disposing)
      {
        if (components != null)
        {
          components.Dispose();
        }
      }
      base.Dispose( disposing );
    }

    private void InitializeComponent()
    {
      this.btnCircle=new System.Windows.Forms.Button();
      this.btnLine=new System.Windows.Forms.Button();
      this.btnRectangle=new System.Windows.Forms.Button();
      this.btnOK=new System.Windows.Forms.Button();
      this.btn_Solid=new System.Windows.Forms.Button();
      this.SuspendLayout();
      //
      // btnCircle
      //
      this.btnCircle.Location=new System.Drawing.Point(8,32);
      this.btnCircle.Name="btnCircle";
      this.btnCircle.Size=new System.Drawing.Size(40,40);
      this.btnCircle.TabIndex=0;
      this.btnCircle.Text="Circ";
      this.btnCircle.Click+=new System.EventHandler(this.btnCircle_Click);
      //
      // btnLine
      //
      this.btnLine.Location=new System.Drawing.Point(8,88);
      this.btnLine.Name="btnLine";
      this.btnLine.Size=new System.Drawing.Size(40,40);
      this.btnLine.TabIndex=1;
      this.btnLine.Text="Line";
      this.btnLine.Click+=new System.EventHandler(this.btnLine_Click);
      //
      // btnRectangle
      //
      this.btnRectangle.Location=new System.Drawing.Point(8,144);
      this.btnRectangle.Name="btnRectangle";
      this.btnRectangle.Size=new System.Drawing.Size(40,40);
      this.btnRectangle.TabIndex=2;
      this.btnRectangle.Text="Rect";
      this.btnRectangle.Click+=new System.EventHandler(this.btnRectangle_Click);
      //
      // btnOK
      //
      this.btnOK.Location=new System.Drawing.Point(296,296);
      this.btnOK.Name="btnOK";
      this.btnOK.TabIndex=0;
      this.btnOK.Text="OK";
      this.btnOK.Click+=new System.EventHandler(this.btnOK_Click);
      //
      // btn_Solid
      //
      this.btn_Solid.Location=new System.Drawing.Point(8,200);
      this.btn_Solid.Name="btn_Solid";
      this.btn_Solid.Size=new System.Drawing.Size(40,40);
      this.btn_Solid.TabIndex=3;
      this.btn_Solid.Text="Solid";
      this.btn_Solid.Click+=new System.EventHandler(this.btn_Solid_Click);
      //
      // frmGraphics
      //
      this.AutoScaleBaseSize=new System.Drawing.Size(5,13);
      this.ClientSize=new System.Drawing.Size(376,334);
      this.Controls.Add(this.btn_Solid);
      this.Controls.Add(this.btnOK);
      this.Controls.Add(this.btnRectangle);
      this.Controls.Add(this.btnLine);
      this.Controls.Add(this.btnCircle);
      this.FormBorderStyle=FormBorderStyle.Fixed3D;
      this.Name="frmGraphics";
      this.Text="Drawing";
      this.Load+=new System.EventHandler(this.frmGraphics_Load);
      this.Closed+=new System.EventHandler(this.frmGraphics_Closed);
      this.Paint+=new System.Windows.Forms.PaintEventHandler(this.frmGraphics_Paint);
      this.ResumeLayout(false);
    }

    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    public static void Main()
    {
       Application.Run(new frmGraphics());
    }

    private void btnLine_Click(object sender, System.EventArgs e)
    {
      Graphics oGraphics;
      oGraphics = Graphics.FromImage(DrawingArea);

      myPen.Color = Color.Blue;

      for ( int x = 1; x < 50; x++)
      {
        oGraphics.DrawLine(
                    myPen,
                    (int) rnd.Next(0, this.Width),
                    (int) rnd.Next(0, this.Height),
                    (int) rnd.Next(0, this.Width),
                    (int) rnd.Next(0, this.Height));
      }
      oGraphics.Dispose();

      this.Invalidate();
    }

    private void btnCircle_Click(object sender, System.EventArgs e)
    {
      Graphics oGraphics;
      oGraphics=Graphics.FromImage(DrawingArea);

      // get a radius for circle - up to 1/2 the width of form
      int radius=rnd.Next(0,(this.Width/2));

      for (int x=1; x<50; x++)
      {
        myPen.Color=Color.FromArgb(
               (rnd.Next(0,255)),
               (rnd.Next(0,255)),
               (rnd.Next(0,255)));

        oGraphics.DrawEllipse(
               myPen,
               rnd.Next(0, this.Width),
               rnd.Next(0, this.Height),
               radius, radius);
      }
      oGraphics.Dispose();

      this.Invalidate();
    }

    private void btnRectangle_Click(object sender, System.EventArgs e)
    {
      Graphics oGraphics;
      oGraphics = Graphics.FromImage(DrawingArea);

      myPen.Color = Color.Red;

      for (int x=1; x<50; x++)
      {
        oGraphics.DrawRectangle(
                     myPen,
                    (int) rnd.Next(0, this.Width),
                    (int) rnd.Next(0, this.Height),
                    (int) rnd.Next(5, this.Width),
                    (int) rnd.Next(5, this.Height));
      }
      oGraphics.Dispose();

      this.Invalidate();
    }

    private void btn_Solid_Click(object sender, System.EventArgs e)
    {
      Graphics oGraphics;
      oGraphics = Graphics.FromImage(DrawingArea);

      myPen.Color=Color.Chartreuse;

      for (int x=0; x<this.Width; x++)
      {
        oGraphics.DrawLine(myPen, x, 0, x, this.Height);
      }
      oGraphics.Dispose();

      this.Invalidate();
    }

    private void btnOK_Click(object sender, System.EventArgs e)
    {
      Application.Exit();
    }

    private void frmGraphics_Load(object sender, System.EventArgs e)
    {
      DrawingArea=new Bitmap(
                this.ClientRectangle.Width,
                this.ClientRectangle.Height,
                System.Drawing.Imaging.PixelFormat.Format24bppRgb);
      InitializeDrawingArea();
    }

    private void InitializeDrawingArea()
    {
      Graphics oGraphics;
      oGraphics = Graphics.FromImage(DrawingArea);

      myPen.Color = Color.AliceBlue;

      for (int x=0; x<this.Width; x++)
      {
        oGraphics.DrawLine(myPen,x,0,x,this.Height);
      }
      oGraphics.Dispose();

      this.Invalidate();
    }

    private void frmGraphics_Closed(object sender,System.EventArgs e)
    {
      DrawingArea.Dispose();
    }

    private void frmGraphics_Paint(object sender,
  System.Windows.Forms.PaintEventArgs e)
    {
      Graphics oGraphics;
      oGraphics=e.Graphics;
      oGraphics.DrawImage( DrawingArea,
                              0, 0,
                              DrawingArea.Width,
                              DrawingArea.Height);
      oGraphics.Dispose();
    }
  }
}


Guess
//Teach Yourself C# in 21 days Pg 16
using System;
using System.Drawing;
using System.Text;

public class Guess
{
  private static int getRandomNumber(int nbr)
  {
    if (nbr > 0)
    {
      Random Rnd = new Random();
      return (Rnd.Next(0, nbr));
    }
    else
    {
      return 0;
    }
  }

  private static void WriteStatus(string Guess, int nbr, string err)
  {
    Console.WriteLine("\n====================================");
    Console.WriteLine("Current Guess: {0}", Guess);
    Console.WriteLine("Number of Guesses: {0}", nbr);
    if (err != "") Console.WriteLine(err);
    Console.WriteLine("Enter a number from 1 to 1000");
    Console.WriteLine("======================================");

    return;
  }

  public static void Main(string[] args)
  {
    int WinningNumber = Guess.getRandomNumber(1000);
    int Guesses = 0;
    String Curr = "";
    int val = 0;
    string errMsg;
    bool cont = true;

    WriteStatus(Curr, Guesses, (string)"");

    while (cont == true)
    {
      Console.Write("\nEnter Guess: ");
      Curr = Console.ReadLine();

      try
      {
        val = Convert.ToInt32(Curr);
        Guesses += 1;
        if (val < 0 || val > 1000)
        {
          errMsg = "Number is out of Range...Try again.";
          WriteStatus(Curr, Guesses, errMsg);
        }
        else
        {
          if (val < WinningNumber)
          {
            errMsg = "You guessed low... Try again.";
            WriteStatus(Curr, Guesses, errMsg);
          }
          else if (val > WinningNumber)
          {
            errMsg = "You guessed high... Try again.";
            WriteStatus(Curr, Guesses, errMsg);
          }
          else
          {
            Console.WriteLine("\n\nCurrent Guess: {0}\n", val);
            Console.WriteLine("Number of guesses: {0}\n", Guesses);
            Console.WriteLine("You guesses correctly!!");
            cont = false;
          }
        }
      }

      catch (FormatException)
      {
        errMsg = "Please enter a valid number...";
        WriteStatus(Curr, Guesses, errMsg);
      }
    }
  }
}


Hello World
//Teach Yourself C# in 21 days Pg 17
class Helloworld
{
  public static void Main()
  {
    System.Console.WriteLine("Hello, World!");
  }
}


MyForm
//Teach Yourself C# in 21 days Pg 22
using System;
using System.Windows.Forms;

namespace HelloWin
{
  public class MyForm : Form
  {
    private TextBox txtEnter;
    private Label   lblDisplay;
    private Button  cmdOK;

    public MyForm()
    {
      this.txtEnter  =new TextBox();
      this.lblDisplay=new Label();
      this.cmdOK     =new Button();
      this.Text="My Hello Win App";
      this.txtEnter.Location=new System.Drawing.Point(16,32);
      this.txtEnter.Size=new System.Drawing.Size(264,20);
      this.lblDisplay.Location=new System.Drawing.Point(16,72);
      this.lblDisplay.Size=new System.Drawing.Size(264,128);
      this.cmdOK.Location=new System.Drawing.Point(88,224);
      this.cmdOK.Text="OK";
      this.cmdOK.Click+=new System.EventHandler(this.cmdOK_Click);
      this.Controls.AddRange(new Control[] {this.txtEnter,this.lblDisplay,this.cmdOK});
    }

    static void Main()
    {
      Application.Run(new MyForm());
    }

    private void cmdOK_Click(object sender,System.EventArgs e)
    {
      lblDisplay.Text=txtEnter.Text+"\n"+lblDisplay.Text;
    }
  }
}


Net Timer
//Teach Yourself C# in 21 days Pg 512
using System;
using System.Timers;

class NetTimer
{
  public static void Main()
  {
    Timer myTimer=new Timer();
    myTimer.Elapsed +=new ElapsedEventHandler(DisplayTimeEvent);
    myTimer.Interval=1000;
    myTimer.Start();

    while (Console.Read()!='q')
    {
      ; //do nothing...
    }
  }

  public static void DisplayTimeEvent(object source, ElapsedEventArgs e)
  {
    Console.Write("\r{0}", DateTime.Now);
  }
}


NumberIt
//Teach Yourself C# in 21 days Pg 38
using System;
using System.IO;

class NumberIT
{
  public static void Main(string[] args)
  {
    if (args.Length <= 0)
    {
      Console.WriteLine("\nYou Need to include a file name.");
    }
    else
    {
      StreamReader InFile = null;
      StreamWriter OutFile = null;

      try
      {
        InFile = File.OpenText(args[0]);
        OutFile = File.CreateText("outfile.txt");
        Console.Write("\nNumbering...");
        string line = InFile.ReadLine();
        int ctr=1;

        while(line!=null)
        {
          OutFile.WriteLine("{0}: {1}",ctr.ToString().PadLeft(3,'0'),line);
          Console.Write("..{0}..",ctr.ToString());
          ctr++;
          line=InFile.ReadLine();
        }
      }
      catch (System.IO.FileNotFoundException)
      {
        Console.WriteLine("Could not find {0}",args[0]);
      }
      catch (Exception e)
      {
        Console.WriteLine("Error: {0}",e.Message);
      }
      finally
      {
        if(InFile!=null)
        {
          InFile.Close();
          OutFile.Close();
          Console.WriteLine("...Done.");
        }
      }
    }
  }
}


Oracle
//http://www.aspfree.com/c/a/.NET/Using-Microsoft-dot-NET-and-C-sharp-with-Oracle-9i/2/
using System;
using System.Data;

//csc oracle2.cs /r:\oracle\product\10.2.0\client_1\odp.net\bin\2.x\oracle.dataaccess.dll
using Oracle.DataAccess.Client;
using Oracle.DataAccess.Types;

class test
{
    static void Main()
    {
        System.Console.WriteLine("Version: 8.1.14.0");

        //String oracleConnectionString = "User ID=fsma; Password=bobj; Data Source=rizzo:1521/dw";
        String oracleConnectionString = "User ID=russell; Password=russell; Data Source=rizzo:1521/rtk10";
        System.Console.WriteLine(oracleConnectionString.ToString());
        try
        {
            OracleConnection conn = new OracleConnection(oracleConnectionString);
            conn.Open();
            OracleCommand cmd = conn.CreateCommand();
            cmd.Connection=conn;
            cmd.CommandText="SELECT * FROM PHONES ORDER BY STORE";
            //cmd.CommandType=CommandType.StoredProcedure;
            cmd.CommandType=CommandType.Text;
            int i=1;

            OracleDataReader reader = cmd.ExecuteReader();
            while (reader.Read())
            {
                Console.WriteLine("{0} "+reader["STORE"]+": "+reader["PHONE_NO"],i);
                i++;
            }
        }
        catch(Exception e)
        {
            System.Console.WriteLine("Error: "+e.Message);
            System.Console.WriteLine("Error: "+e.StackTrace);
        }

        System.Console.WriteLine("Done!");
    }
}


QuoteService.asmx
<%@ WebService Language="C#" Class="JustCSharp.QuoteService.Quote" %>
// Teach Yourself C# in 21 days Pg 664
// To generate Quote Proxy source use:
// "\Program Files\Microsoft.NET\SDK\v1.1\Bin\wsdl" http://localhost/QuoteService.asmx?wsdl /out:QuoteProxy.cs
//
// Then to compile Quote Proxy source use:
// \windows\microsoft.net\framework\v2.0.50727\csc /t:library QuoteProxy.cs
//
using System;
using System.Web;
using System.Web.Services;
using System.Data;
using System.Text.RegularExpressions;

namespace JustCSharp.QuoteService
{
  public class Quote:WebService
  {
    [WebMethod]
    public string GetQuote()
    {
      DataSet dsQuotes=new DataSet();
  dsQuotes.ReadXml(Regex.Replace(Context.Request.PhysicalPath.ToString(),"QuoteService.asmx","verses.xml",RegexOptions.IgnoreCase));
      Random rnd=new Random();
      string strQuote=null;
      int QuoteRow=rnd.Next(1,dsQuotes.Tables[0].Rows.Count);
  strQuote+=Server.HtmlEncode(dsQuotes.Tables[0].Rows[QuoteRow][0].ToString());
      return strQuote;
    }
  }
}


Read Oracle DB
using System;
using System.Data;
using System.Data.OleDb;

public class ReadOracleDB
{
  public static void Main()
  {
    string sConnectionString="Provider=OraOLEDB.Oracle;User ID=russell;Password=russell;Data Source=rtk10.fsma;";
    string sSQL="SELECT * FROM FT_USERS ORDER BY USR_ID";
    int iCount=0;

    OleDbConnection myConnection=new OleDbConnection(sConnectionString);
    OleDbCommand myCommand=new OleDbCommand(sSQL, myConnection);
    myConnection.Open();

    OleDbDataReader myDataReader=null;
    myDataReader=myCommand.ExecuteReader();

    try
    {
      while (myDataReader.Read())
      {
        Console.WriteLine(iCount);
        if (myDataReader["USR_ID"].ToString() != null)
          {Console.WriteLine("USR_ID: " + myDataReader["USR_ID"].ToString());}
        Console.WriteLine("USR_GROUP: " + myDataReader["USR_GROUP"].ToString());
        if (myDataReader["USR_SURNAME"].ToString() != null)
          {Console.WriteLine("USR_SURNAME: " + myDataReader["USR_SURNAME"].ToString());}
        if (myDataReader["USR_PASSWORD"].ToString() != null)
          {Console.WriteLine("USR_PASSWORD: " + myDataReader["USR_PASSWORD"].ToString());}
        if (myDataReader["USR_WORKPHONE"].ToString() != null)
          {Console.WriteLine("USR_WORKPHONE: " + myDataReader["USR_WORKPHONE"].ToString());}
        if (myDataReader["USR_HOMEPHONE"].ToString() != null)
          {Console.WriteLine("USR_HOMEPHONE: " + myDataReader["USR_HOMEPHONE"].ToString());}
        if (myDataReader["USR_ADDR1"].ToString() != null)
          {Console.WriteLine("USR_ADDR1: " + myDataReader["USR_ADDR1"].ToString());}
        if (myDataReader["USR_ADDR2"].ToString() != null)
          {Console.WriteLine("USR_ADDR2: " + myDataReader["USR_ADDR2"].ToString());}
        if (myDataReader["USR_STATE"].ToString() != null)
          {Console.WriteLine("USR_STATE: " + myDataReader["USR_STATE"].ToString());}
        if (myDataReader["USR_PCODE"].ToString() != null)
          {Console.WriteLine("USR_PCODE: " + myDataReader["USR_PCODE"].ToString());}
        if (myDataReader["USR_GIVENNAME"].ToString() != null)
          {Console.WriteLine("USR_GIVENNAME: " + myDataReader["USR_GIVENNAME"].ToString());}
        if (myDataReader["USR_FINANCIAL"].ToString() != null)
          {Console.WriteLine("USR_FINANCIAL: " + myDataReader["USR_FINANCIAL"].ToString());}
        if (myDataReader["USR_LOCATION"].ToString() != null)
          {Console.WriteLine("USR_LOCATION: " + myDataReader["USR_LOCATION"].ToString());}
        if (myDataReader["USR_EMAIL"].ToString() != null)
          {Console.WriteLine("USR_EMAIL: " + myDataReader["USR_EMAIL"].ToString());}
        {Console.WriteLine("USR_DEFAULTSELECT: " + myDataReader["USR_DEFAULTSELECT"].ToString());}
        {Console.WriteLine("USR_DEFAULTMARGIN: " + myDataReader["USR_DEFAULTMARGIN"].ToString());}
        if (myDataReader["USR_HTMLEMAIL"].ToString() != null)
          {Console.WriteLine("USR_HTMLEMAIL: " + myDataReader["USR_HTMLEMAIL"].ToString());}
        if (myDataReader["USR_ADMIN"].ToString() != null)
          {Console.WriteLine("USR_ADMIN: " + myDataReader["USR_ADMIN"].ToString());}
        {Console.WriteLine("USR_FAVTEAM: " + myDataReader["USR_FAVTEAM"].ToString());}
        if (myDataReader["USR_HOMEMSG"].ToString() != null)
          {Console.WriteLine("USR_HOMEMSG: " + myDataReader["USR_HOMEMSG"].ToString());}

        Console.WriteLine("");
        iCount++;
      }

      myDataReader.Close();
      myConnection.Close();
    }
    catch (Exception ex)
    {
      Console.WriteLine(ex.Message.ToString() + "\r\n");
    }
  }
}


ReadVids
//Teach Yourself C# in 21 days Pg 638
//Requires Videos.mdb
using System;
using System.Data;
using System.Data.OleDb;

public class ReadVids
{
  public static void Main()
  {
    string myConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;User Id=;Password=;Data Source=Videos.mdb";
    string mySelectQuery="SELECT * FROM VIDEOS ORDER BY TITLE";
    decimal total=0;
    int count=0;

    OleDbConnection myConnection=new OleDbConnection(myConnectionString);
    OleDbCommand myCommand=new OleDbCommand(mySelectQuery,myConnection);
    myConnection.Open();
    OleDbDataReader myDataReader=null;
    myDataReader=myCommand.ExecuteReader();

    while(myDataReader.Read())
    {
      //Console.WriteLine("a " + myDataReader.GetString(0));
      //Console.WriteLine("b " + myDataReader.GetString(1));
      //Console.WriteLine("c " + myDataReader.GetString(2));
      //Console.WriteLine("d " + myDataReader.GetDecimal(3));

      Console.WriteLine(myDataReader.GetString(1).PadLeft(4, ' ')+" -
"+myDataReader.GetString(0)+" ("+myDataReader.GetString(2)+") -
{0:C}", myDataReader.GetDecimal(3));
      total+=myDataReader.GetDecimal(3);
      count++;
    }

    myDataReader.Close();
    myConnection.Close();
    Console.WriteLine("\nTOTAL: {0:C} AVG PRICE: {1:C}",total,total/count);
  }
}


Shape
//Teach Yourself C# in 21 days Pg 425
using System;

public interface IShape
{
  double Area();
  double Circumference();
  int Sides();
}

public class Square:IShape
{
  public int side;

  public double Area()
  {
    return ((double)(side*side));
  }

  public double Circumference()
  {
    return ((double)(4 * side));
  }

  public int Sides()
  {
    return 4;
  }

  public Square()
  {
    side=0;
  }
}

public class Shape
{
  public static void Main()
  {
    Square mySquare=new Square();
    mySquare.side=4;

    Console.WriteLine("Square Info...");
    displayInfo(mySquare);
  }

  static void displayInfo(IShape myShape)
  {
    Console.WriteLine("Area: {0}",myShape.Area());
    Console.WriteLine("Sides: {0}",myShape.Sides());
    Console.WriteLine("Circumfrence: {0}",myShape.Circumference());
  }
}


WebCals.asmx

WebCalc.asmx
<%@WebService Language="C#" Class="Calc"%>
using System;
using System.Web.Services;

public class Calc:WebService
{
  [WebMethod]
  public int Add(int x,int y)
  {
    return x+y;
  }

  [WebMethod]
  public int Subtract(int x,int y)
  {
    return x-y;
  }
}


WinGuess
//Teach Yourself C# in 21 days Pg 149
using System;
using System.Windows.Forms;
using System.Drawing;
using System.Text;

public class WinGuess:Form
{
  private Label lblTag1;
  private Button cmdGuess;
  private Label lblInfo;
  private TextBox txtEntry;
  private int WinningNumber=0;
  private int Guesses=0;

  public WinGuess()
  {
    InitializeComponent();
  }

  private void InitializeComponent()
  {
    WinningNumber=getRandomNumber(1000);
    this.Text="WinGuess";
    this.StartPosition=FormStartPosition.CenterScreen;
    this.FormBorderStyle=FormBorderStyle.Fixed3D;

    lblTag1=new Label();
    lblTag1.Text="Enter a number";
    lblTag1.Location=new Point(50,20);
    this.Controls.Add(lblTag1);

    lblInfo=new Label();
    lblInfo.Text="Enter a number between 0 and 1000.";
    lblInfo.Location=new Point(50,80);
    lblInfo.Width=200;
    lblInfo.Height=40;
    this.Controls.Add(lblInfo);

    txtEntry=new TextBox();
    txtEntry.Location=new Point(150,18);
    this.Controls.Add(txtEntry);

    cmdGuess=new Button();
    cmdGuess.Text="Try Number";
    cmdGuess.BackColor=Color.LightGray;
    cmdGuess.Location=new Point(((this.Width/2)-(cmdGuess.Width/2)),(this.Height-75));
    this.Controls.Add(cmdGuess);

    cmdGuess.Click+=new System.EventHandler(this.btnGuess_Click);
  }

  private int getRandomNumber(int nbr)
  {
    if (nbr > 0)
    {
      Random Rnd = new Random();
      return (Rnd.Next(0, nbr));
    }
    else
    {
      return 0;
      }
  }

  protected void btnGuess_Click(object sender,System.EventArgs e)
  {
    int val=0;
    StringBuilder tmpString=new StringBuilder();
    tmpString.Append("Current Guess: ");
    tmpString.Append(txtEntry.Text);
    tmpString.Append("\n");

    try
    {
      val=int.Parse(txtEntry.Text);

      tmpString.Append("Guesses: ");
      Guesses+=1;
      tmpString.Append(Guesses.ToString());
      tmpString.Append("\n");

      if(val<0||val>1000)
      {
        tmpString.Append("Number is out of range...Try again.\n");
        tmpString.Append("Enter a number from 0 to 1000");
      }
      else
      {
        if(val<WinningNumber)
        {
          tmpString.Append("You Guesses too low... Try again.\n");
          tmpString.Append("Enter a number from 0 to 1000");
        }
        else
        if(val>WinningNumber)
        {
          tmpString.Append("You Guesses too high... Try again.\n");
          tmpString.Append("Enter a number from 0 to 1000");
        }
        else
        {
          tmpString.Append("You guesses correctly!!");
        }
      }
    }

    catch(FormatException)
    {
      tmpString.Append("Please enter a valid number...\n");
      tmpString.Append("Enter a number from 0 to 1000");
    }
    finally
    {
      this.lblInfo.Text=tmpString.ToString();
      this.txtEntry.Text="";
    }
  }

  public static void Main(string[] args)
  {
    Application.Run(new WinGuess());
  }
}


XMLApp
//Teach Yourself C# in 21 days Pg 46
/// <summary>
/// This is a summary describing the class
/// </summary>
/// <remarks>
/// This is a longer comment that can be used to describe
/// the class
/// </remarks>
public class Xmlapp
{
  /// <summary>
  /// The Entry point for the application.
  /// </summary>
  /// <param name="args"> A list of command line arguments</param>
  public static void Main(string[] args)
  {
    System.Console.WriteLine("An XML Documented Program");
  }
}


NP0000 - Account Numbers

Telstra: 1388564000

18/11/09


NP0001 - Communication Process - System Failure

http://is/communicationprocess.pdf

6/8/09


NP0002 - Corum After Hourse Contact

NP0002 - Corum After Hours Contact

From: Helen Carter [mailto:Helen.Carter@corum.com.au]
Sent: Friday, 13 November 2009 5:18 PM
To: Peter Skuse
Subject: RE: Invoices / Worksheets

Hi Peter,

Would you mind circulating a reminder to all NP sites & support staff our dedicated NP HWM emergency numbers?

SA/NSW: 0423 828 942
Vic: 0423 828 945

A local state technician is rostered to carry this mobile 24/7; it does not excuse below but will greatly assist in assuring it does not occur again.

Regards,

Helen Carter • State Manager - SA & NT
Corum Health Services
16 Unley Road, Unley SA 5061
T 08 8208 5900 • F 08 8208 5999 • M 0434 658 820
helen.carter@corum.com.au • corumhealth.com.au

18/11/09


NP0003 - DC Generator

· Generator Rated at 348Amp per phase (not 375Kw)
· 25/11/9 ETSA upgraded fuses to DC to 400A per phase. (400*240*3)=288Kw
· DC was drawing 200a per phase from the generator when it was initially commissioned.
· DC used 10% fuel in 3 hours -> Should run OK for 24Hr. Has 1000L capacity tank. Mini Tankers will supply up to 1000L no problems.
· Fork lifts are charged out of business hours.
· Need to organise Thermograph test for DC power board every year (December?).

· 30/11/2009:
– Load test during normal working hours:-

test 1 test 2 test 3

Red phase 322 amps 318 amps 324 amps
White phase 345 amps 317 amps 328 amps
Blue phase 329 amps 322 amps 327 amps

- Load test after hours with no a/c turned on:-

Test 1 test 2 test 3

Red phase 138 amps 116 amps 107 amps
` white phase 115 amps 122 amps 101 amps
` blue phase 89 amps 102 amps 90 amps

- Load test after hours with a/c on

Test 1 test 2 test 3

Red phase 294 amps 297 amps 292 amps
White phase 298 amps 301 amps 296 amps
Blue phase 287 amps 293 amps 291 amps

NOTE: Inrush current spiked at 543amp on startup when A/C where turned on.

12/1/10


NP0004 - Drug Update

\\XXX-dsvr\ServerC\Program Files\Amfac\Amfac Healthlinks\eUpdate\Done

Move correct months update into

\\XXX-dsvr\ServerC\Program Files\Amfac\Amfac Healthlinks\eUpdate

If the drug files don't exist, they can be copied from another store.

The will need to exit dispense and go back into it. The stores need to follow these instructions

The stores shouldn't dispense while the update is occuring.

4/1/10


NP0005 - ESX Resource Pool
We now have 4x ESX Enterprise Licenses hosting 34 prod vms, below is a screen grab of the config with virtual centre, the latest config gives us total cpu resources of 61GHz and total memory 100GB.

10/8/09


NP0006 - Health Point VNC Password
Password: morse1
IP: 192.168.x.2
3/11/09


NP0007 - Kronos tips

1. Store Kronos users in AD live in the Store AD Users OU.

2. Helpdesk Kronos login:- helpdesk/local domain admin password

3. URL: http://fsmakronos01.fsma.com.au/wfc/applications/suitenav/navigation.do

4. If you get Java issues then run from a Terminal Server.

5. Non AD user Kronos user Password Reset:-
· Login to Kronos
· Under the MY GEINIES, click QuickFind
· In the Name or ID field, type the surname.
· Right click the user & select the people option.
· Click the User Information option & set the password/confirm password fields. Don't select the "Require password change at the next logon" field.

6. AD user Kronos user Password Reset:-
· Reset the user password in AD us usual. This passes through to Kronos immediately.
· If the user is still locked out checked the user is not locked out in Kronos. See step 5 above.

7. Files exported from Chris to Kronos are placed in the \\kronos\c$\kronos\interfaces\data\toKronos folder. You can check the employee.csv file to see if an employee exists.

8/1/10


NP0008 - MessageLabs ClientNet login details

https://clients.messagelabs.com/Login.aspx?ReturnUrl=%2fdefault.aspx

Username: FRI1267
Password: local domain admin

15/12/09


NP0009 - MimeSweeper

Vendor: Clearswift
Reseller: Dimension Data
Product Description:

Email security and content filtering software

· AV vendor agnostic

· Very flexible SMTP toolkit

· Architecture for complex infrastructures

Available for Windows 2003/2008 and VMware.

URL: http://www.telstra.com.au/secureaccess/manage.htm

Support: 1800 734 055

Note: Once a secondary user has been given access to an account it can take up to 5 working days to activate.

11/12/09


NP0010 - Natcom Admin Login

http://maggie.fsma.com.au:81/helium/login.aspx?lo=1

Username/Password: rthomas/rthomas

9/11/09


NP0011 - Service Desk User
User: sduser
Password: ePzjr3
9/11/09


NP0012 - System Shutdown - Email template

Hi Everyone,

Please be advised that power to 52 Gawler place will be shutdown from 8am - 12noon this coming Sunday, 26th July.
This means all computers systems will be shutdown within this timeframe. Systems to be affected include, but are not limited to:-

1. Merchant.
2. EFTPOS will fail back to backup modems which use the fax lines.
3. PDE orders cannot be transmitted (if required, please send PDE orders on Saturday afternoon prior to the servers being shut down on Sunday morning).
4. No email or internet access.
5. No remote VPN access.
6. No Kronos access.

22/7/9


NP0013 - Telstra's Online Services

User name: russellt
Business ID: tb735779
Password: my_standard_password

URL: http://www.telstra.com.au/secureaccess/manage.htm

Support: 1800 734 055

Note: Once a secondary user has been given access to an account it can take up to 5 working days to activate.

11/12/09


NP0014 - Till Wont Open

· Get store to check that the cash draw is connected to the receipt printer. Sometimes this pops out.

· You need to a shutdown of the till. (A reboot wont work). The store will need to power the till back on. Power cycling resets the printer.

4/1/10


NP0015 - Scripts Not Flowing To POS

· Check the c:\Arc directory on the store Dispense Server for *.XTN files. If files exist then reboot the store BOS.

4/1/10


NP0016 - Store Aquisition

NP0016 - Store Acquisition

· Click here for Pharmacy check list

· Click here for Optical check list

· Click here for Telstra change of Lessee. Email completed form to SACorpSDT@team.telstra.com

· Click here for the Internode IBC access form.

· Click here for the POS Installation check list

· Click here for pre install site audit check list.

· Peter will organise merchant numbers/TerminalID & pinpads with the bank.

12/1/10


NP0017 - Application installs

Project 2007: \\fsmaad02\software\Project2007\setup.exe /adminfile setup.msp

6/1/10


NP0018 - APC Output Relay Setup

The following is a screen shot of how the APC UPS Output relay needs to be configured so that RAA are able to monitor the UPS for an alarm condition.

The following is a screen shot of the UPS alarms that are monitored:-

7/1/10


NP0019 - Computer Room Monitoring

The data center temperatures and UPS's at the VSO, NSO & DC are monitored by the RAA.

In the event the DR is on UPS & the generator hasnt started, the Pulse system needs to be shut down. Click here for the procedures.

7/1/10


NP0020 - EFTPOS Pinpad

At the end of 2009 NP switched to St George & replaced the old Ingenico 328 Pinpads with Ingenico i5100. The new pinpads support signing & chip technology, however St George wont be ready to support the chip technology until March 2010.

Click here for the i5100 manual keying procedure.

8/1/10


NP0021 - Pulse Startup Procedures

Click here for the procedures.

8/1/10


NP0022 - EFTPOS TerminalD & Merchant Numbers

The TerminalID and Merchant numbers can be accessed on the POS via regedit. HK_LOCAL_MACHINE\SOFTWARE\CullenSoftwareDesign\EFTCLIENT\PINPAD.

Use NPAudit.exe to extract the EFTPOS data from the POS devices.

12/1/10


NP0023 - Internode Quick Refernce Guide

Click here for the Internode conact details Quick Reference Guide.

13/1/10


NP0024 - VESDA Isolation Procedures

http://is/procedures/VESDAIsolationProcedure.pdf

16/1/10


NP0025 - Configuring CallXpress
 Previous Top

http://is/procedures/ConfiguringCallXpressVoicemail.pdf

16/1/10


.topic 440
NTLM is now known as Intergrated Windows authentication and is also known as NT Challenge/Response authenication. The user name and password (credentials) are hashed before being sent across the network.

Integrated Windows authentication uses Kerberos v5 and NTLM authentication. If AD is installed on a DC running W2K server or W2K3 server and the client supports Kerberos v5 then Kerberos v5 is used otherwise NTLM authentication is used.

.topic 900
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace OracleDB
{
    /// <summary>
    /// Summary description for WebForm1.
    /// </summary>
    public class WebForm1 : System.Web.UI.Page
    {
        protected Borland.Data.Provider.BdpConnection bdpConnection1;
        protected Borland.Data.Provider.BdpCommand bdpSelectCommand1;
        protected Borland.Data.Provider.BdpDataAdapter bdpDataAdapter1;
        protected System.Data.DataSet dataSet1;
        protected System.Web.UI.WebControls.DataGrid dataGrid1;
        protected System.Data.DataTable dataTable1;
        protected System.Data.DataColumn dataColumn1;
        protected System.Data.DataColumn dataColumn2;
        protected System.Data.DataColumn dataColumn3;
        protected System.Data.DataColumn dataColumn4;
        protected System.Data.DataColumn dataColumn5;
        protected System.Data.DataColumn dataColumn6;
        protected System.Data.DataColumn dataColumn7;
        protected System.Data.DataColumn dataColumn8;
        protected System.Data.DataColumn dataColumn9;
        protected System.Data.DataColumn dataColumn10;
        protected System.Data.DataColumn dataColumn11;
        protected System.Data.DataColumn dataColumn12;
        protected System.Data.DataColumn dataColumn13;
        protected System.Data.DataColumn dataColumn14;
        protected System.Data.DataColumn dataColumn15;
        protected System.Data.DataColumn dataColumn16;
        protected System.Data.DataColumn dataColumn17;
        protected System.Data.DataColumn dataColumn18;
        protected System.Data.DataColumn dataColumn19;
        protected System.Data.DataColumn dataColumn20;
        private void Page_Load(object sender, System.EventArgs e)
        {
            // Put user code to initialize the page here
            if (!IsPostBack)
                dataGrid1.DataBind();
        }

        #region Web Form Designer generated code
        override protected void OnInit(EventArgs e)
        {
            //
            // CODEGEN: This call is required by the ASP.NET Web Form Designer.
            //
            InitializeComponent();
            base.OnInit(e);
        }

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.bdpConnection1 = new Borland.Data.Provider.BdpConnection();
            this.bdpSelectCommand1 = new Borland.Data.Provider.BdpCommand();
            this.bdpDataAdapter1 = new Borland.Data.Provider.BdpDataAdapter();
            this.dataSet1 = new System.Data.DataSet();
            this.dataTable1 = new System.Data.DataTable();
            this.dataColumn1 = new System.Data.DataColumn();
            this.dataColumn2 = new System.Data.DataColumn();
            this.dataColumn3 = new System.Data.DataColumn();
            this.dataColumn4 = new System.Data.DataColumn();
            this.dataColumn5 = new System.Data.DataColumn();
            this.dataColumn6 = new System.Data.DataColumn();
            this.dataColumn7 = new System.Data.DataColumn();
            this.dataColumn8 = new System.Data.DataColumn();
            this.dataColumn9 = new System.Data.DataColumn();
            this.dataColumn10 = new System.Data.DataColumn();
            this.dataColumn11 = new System.Data.DataColumn();
            this.dataColumn12 = new System.Data.DataColumn();
            this.dataColumn13 = new System.Data.DataColumn();
            this.dataColumn14 = new System.Data.DataColumn();
            this.dataColumn15 = new System.Data.DataColumn();
            this.dataColumn16 = new System.Data.DataColumn();
            this.dataColumn17 = new System.Data.DataColumn();
            this.dataColumn18 = new System.Data.DataColumn();
            this.dataColumn19 = new System.Data.DataColumn();
            this.dataColumn20 = new System.Data.DataColumn();
            ((System.ComponentModel.ISupportInitialize)(this.bdpDataAdapter1)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.dataSet1)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.dataTable1)).BeginInit();
            //
            // bdpConnection1
            //
            this.bdpConnection1.ConnectionOptions = "transaction isolation=ReadCommitted";
            this.bdpConnection1.ConnectionString = "assembly=CoreLab.Bdp.Oracle, Version=2.80.0.2500, Culture=neutral" +
                ", PublicKeyToken=09af7300eec23701;vendorclient=oci.dll;grow on de" +
                "mand=True;database=rtk.fsma;username=russell;max pool size=100;pa" +
                "ssword=russell;provider=Oracle (Core Lab);min pool size=0";
            //
            // bdpSelectCommand1
            //
            this.bdpSelectCommand1.CommandOptions = null;
            this.bdpSelectCommand1.CommandText = "select * from FT_USERS\r\n";
            this.bdpSelectCommand1.CommandType = System.Data.CommandType.Text;
            this.bdpSelectCommand1.Connection = this.bdpConnection1;
            this.bdpSelectCommand1.ParameterCount = ((short)(0));
            this.bdpSelectCommand1.SchemaName = null;
            this.bdpSelectCommand1.Transaction = null;
            this.bdpSelectCommand1.UpdatedRowSource = System.Data.UpdateRowSource.None;
            //
            // bdpDataAdapter1
            //
            this.bdpDataAdapter1.Active = true;
            this.bdpDataAdapter1.DataSet = this.dataSet1;
            this.bdpDataAdapter1.DataTable = this.dataTable1;
            this.bdpDataAdapter1.SelectCommand = this.bdpSelectCommand1;
            this.bdpDataAdapter1.StartRecord = 0;
            this.bdpDataAdapter1.TableMappings.AddRange(new System.Data.Common.DataTableMapping[] {
                        new System.Data.Common.DataTableMapping("Table", "FT_USERS\r\n", new System.Data.Common.DataColumnMapping[] {
                                    new System.Data.Common.DataColumnMapping("USR_ID", "USR_ID"),
                                    new System.Data.Common.DataColumnMapping("USR_GROUP", "USR_GROUP"),
                                    new System.Data.Common.DataColumnMapping("USR_SURNAME", "USR_SURNAME"),
                                    new System.Data.Common.DataColumnMapping("USR_PASSWORD", "USR_PASSWORD"),
                                    new System.Data.Common.DataColumnMapping("USR_WORKPHONE", "USR_WORKPHONE"),
                                    new System.Data.Common.DataColumnMapping("USR_HOMEPHONE", "USR_HOMEPHONE"),
                                    new System.Data.Common.DataColumnMapping("USR_ADDR1", "USR_ADDR1"),
                                    new System.Data.Common.DataColumnMapping("USR_ADDR2", "USR_ADDR2"),
                                    new System.Data.Common.DataColumnMapping("USR_STATE", "USR_STATE"),
                                    new System.Data.Common.DataColumnMapping("USR_PCODE", "USR_PCODE"),
                                    new System.Data.Common.DataColumnMapping("USR_GIVENNAME", "USR_GIVENNAME"),
                                    new System.Data.Common.DataColumnMapping("USR_FINANCIAL", "USR_FINANCIAL"),
                                    new System.Data.Common.DataColumnMapping("USR_LOCATION", "USR_LOCATION"),
                                    new System.Data.Common.DataColumnMapping("USR_EMAIL", "USR_EMAIL"),
                                    new System.Data.Common.DataColumnMapping("USR_DEFAULTSELECT", "USR_DEFAULTSELECT"),
                                    new System.Data.Common.DataColumnMapping("USR_DEFAULTMARGIN", "USR_DEFAULTMARGIN"),
                                    new System.Data.Common.DataColumnMapping("USR_HTMLEMAIL", "USR_HTMLEMAIL"),
                                    new System.Data.Common.DataColumnMapping("USR_ADMIN", "USR_ADMIN"),
                                    new System.Data.Common.DataColumnMapping("USR_FAVTEAM", "USR_FAVTEAM"),
                                    new System.Data.Common.DataColumnMapping("USR_HOMEMSG", "USR_HOMEMSG")})});
            //
            // dataSet1
            //
            this.dataSet1.DataSetName = "NewDataSet";
            this.dataSet1.Locale = new System.Globalization.CultureInfo("en-AU");
            this.dataSet1.Tables.AddRange(new System.Data.DataTable[] {
                        this.dataTable1});
            //
            // dataTable1
            //
            this.dataTable1.Columns.AddRange(new System.Data.DataColumn[] {
                        this.dataColumn1,
                        this.dataColumn2,
                        this.dataColumn3,
                        this.dataColumn4,
                        this.dataColumn5,
                        this.dataColumn6,
                        this.dataColumn7,
                        this.dataColumn8,
                        this.dataColumn9,
                        this.dataColumn10,
                        this.dataColumn11,
                        this.dataColumn12,
                        this.dataColumn13,
                        this.dataColumn14,
                        this.dataColumn15,
                        this.dataColumn16,
                        this.dataColumn17,
                        this.dataColumn18,
                        this.dataColumn19,
                        this.dataColumn20});
            this.dataTable1.Constraints.AddRange(new System.Data.Constraint[] {
                        new System.Data.UniqueConstraint("Constraint1", new string[] {
                                    "USR_ID"}, true)});
            this.dataTable1.PrimaryKey = new System.Data.DataColumn[] {
                    this.dataColumn1};
            this.dataTable1.TableName = "FT_USERS\r\n";
            //
            // dataColumn1
            //
            this.dataColumn1.AllowDBNull = false;
            this.dataColumn1.ColumnName = "USR_ID";
            this.dataColumn1.MaxLength = 21;
            //
            // dataColumn2
            //
            this.dataColumn2.ColumnName = "USR_GROUP";
            this.dataColumn2.DataType = typeof(decimal);
            //
            // dataColumn3
            //
            this.dataColumn3.ColumnName = "USR_SURNAME";
            this.dataColumn3.MaxLength = 20;
            //
            // dataColumn4
            //
            this.dataColumn4.ColumnName = "USR_PASSWORD";
            this.dataColumn4.DataType = typeof(decimal);
            //
            // dataColumn5
            //
            this.dataColumn5.ColumnName = "USR_WORKPHONE";
            this.dataColumn5.MaxLength = 15;
            //
            // dataColumn6
            //
            this.dataColumn6.ColumnName = "USR_HOMEPHONE";
            this.dataColumn6.MaxLength = 15;
            //
            // dataColumn7
            //
            this.dataColumn7.ColumnName = "USR_ADDR1";
            this.dataColumn7.MaxLength = 20;
            //
            // dataColumn8
            //
            this.dataColumn8.ColumnName = "USR_ADDR2";
            this.dataColumn8.MaxLength = 20;
            //
            // dataColumn9
            //
            this.dataColumn9.ColumnName = "USR_STATE";
            this.dataColumn9.MaxLength = 3;
            //
            // dataColumn10
            //
            this.dataColumn10.ColumnName = "USR_PCODE";
            this.dataColumn10.MaxLength = 4;
            //
            // dataColumn11
            //
            this.dataColumn11.ColumnName = "USR_GIVENNAME";
            this.dataColumn11.MaxLength = 20;
            //
            // dataColumn12
            //
            this.dataColumn12.ColumnName = "USR_FINANCIAL";
            this.dataColumn12.MaxLength = 1;
            //
            // dataColumn13
            //
            this.dataColumn13.ColumnName = "USR_LOCATION";
            this.dataColumn13.MaxLength = 40;
            //
            // dataColumn14
            //
            this.dataColumn14.ColumnName = "USR_EMAIL";
            this.dataColumn14.MaxLength = 40;
            //
            // dataColumn15
            //
            this.dataColumn15.ColumnName = "USR_DEFAULTSELECT";
            this.dataColumn15.DataType = typeof(decimal);
            //
            // dataColumn16
            //
            this.dataColumn16.ColumnName = "USR_DEFAULTMARGIN";
            this.dataColumn16.DataType = typeof(decimal);
            //
            // dataColumn17
            //
            this.dataColumn17.ColumnName = "USR_HTMLEMAIL";
            this.dataColumn17.MaxLength = 1;
            //
            // dataColumn18
            //
            this.dataColumn18.ColumnName = "USR_ADMIN";
            this.dataColumn18.MaxLength = 1;
            //
            // dataColumn19
            //
            this.dataColumn19.ColumnName = "USR_FAVTEAM";
            this.dataColumn19.DataType = typeof(decimal);
            //
            // dataColumn20
            //
            this.dataColumn20.ColumnName = "USR_HOMEMSG";
            this.dataColumn20.MaxLength = 150;
            this.Load += new System.EventHandler(this.Page_Load);
            ((System.ComponentModel.ISupportInitialize)(this.bdpDataAdapter1)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.dataSet1)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.dataTable1)).EndInit();
        }
        #endregion
    }
}

.topic 910


Russell

NTLM is now known as Intergrated Windows authentication and is also known as NT Challenge/Response authenication. The user name and password (credentials) are hashed before being sent across the network.

Integrated Windows authentication uses Kerberos v5 and NTLM authentication. If AD is installed on a DC running W2K server or W2K3 server and the client supports Kerberos v5 then Kerberos v5 is used otherwise NTLM authentication is used.


Russell

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace OracleDB
{
      /// <summary>
      /// Summary description for WebForm1.
      /// </summary>
      public class WebForm1 : System.Web.UI.Page
      {
            protected Borland.Data.Provider.BdpConnection bdpConnection1;
            protected Borland.Data.Provider.BdpCommand bdpSelectCommand1;
            protected Borland.Data.Provider.BdpDataAdapter bdpDataAdapter1;
            protected System.Data.DataSet dataSet1;
            protected System.Web.UI.WebControls.DataGrid dataGrid1;
            protected System.Data.DataTable dataTable1;
            protected System.Data.DataColumn dataColumn1;
            protected System.Data.DataColumn dataColumn2;
            protected System.Data.DataColumn dataColumn3;
            protected System.Data.DataColumn dataColumn4;
            protected System.Data.DataColumn dataColumn5;
            protected System.Data.DataColumn dataColumn6;
            protected System.Data.DataColumn dataColumn7;
            protected System.Data.DataColumn dataColumn8;
            protected System.Data.DataColumn dataColumn9;
            protected System.Data.DataColumn dataColumn10;
            protected System.Data.DataColumn dataColumn11;
            protected System.Data.DataColumn dataColumn12;
            protected System.Data.DataColumn dataColumn13;
            protected System.Data.DataColumn dataColumn14;
            protected System.Data.DataColumn dataColumn15;
            protected System.Data.DataColumn dataColumn16;
            protected System.Data.DataColumn dataColumn17;
            protected System.Data.DataColumn dataColumn18;
            protected System.Data.DataColumn dataColumn19;
            protected System.Data.DataColumn dataColumn20;
            private void Page_Load(object sender, System.EventArgs e)
            {
                  // Put user code to initialize the page here
                  if (!IsPostBack)
                  dataGrid1.DataBind();
            }

            #region Web Form Designer generated code
            override protected void OnInit(EventArgs e)
            {
                  //
                  // CODEGEN: This call is required by the ASP.NET Web Form Designer.
                  //
                  InitializeComponent();
                  base.OnInit(e);
            }

            /// <summary>
            /// Required method for Designer support - do not modify
            /// the contents of this method with the code editor.
            /// </summary>
            private void InitializeComponent()
            {
                  this.bdpConnection1 = new Borland.Data.Provider.BdpConnection();
                  this.bdpSelectCommand1 = new Borland.Data.Provider.BdpCommand();
                  this.bdpDataAdapter1 = new Borland.Data.Provider.BdpDataAdapter();
                  this.dataSet1 = new System.Data.DataSet();
                  this.dataTable1 = new System.Data.DataTable();
                  this.dataColumn1 = new System.Data.DataColumn();
                  this.dataColumn2 = new System.Data.DataColumn();
                  this.dataColumn3 = new System.Data.DataColumn();
                  this.dataColumn4 = new System.Data.DataColumn();
                  this.dataColumn5 = new System.Data.DataColumn();
                  this.dataColumn6 = new System.Data.DataColumn();
                  this.dataColumn7 = new System.Data.DataColumn();
                  this.dataColumn8 = new System.Data.DataColumn();
                  this.dataColumn9 = new System.Data.DataColumn();
                  this.dataColumn10 = new System.Data.DataColumn();
                  this.dataColumn11 = new System.Data.DataColumn();
                  this.dataColumn12 = new System.Data.DataColumn();
                  this.dataColumn13 = new System.Data.DataColumn();
                  this.dataColumn14 = new System.Data.DataColumn();
                  this.dataColumn15 = new System.Data.DataColumn();
                  this.dataColumn16 = new System.Data.DataColumn();
                  this.dataColumn17 = new System.Data.DataColumn();
                  this.dataColumn18 = new System.Data.DataColumn();
                  this.dataColumn19 = new System.Data.DataColumn();
                  this.dataColumn20 = new System.Data.DataColumn();
      ((System.ComponentModel.ISupportInitialize)(this.bdpDataAdapter1)).BeginInit();
      ((System.ComponentModel.ISupportInitialize)(this.dataSet1)).BeginInit();
      ((System.ComponentModel.ISupportInitialize)(this.dataTable1)).BeginInit();
                  //
                  // bdpConnection1
                  //
                  this.bdpConnection1.ConnectionOptions = "transaction isolation=ReadCommitted";
                  this.bdpConnection1.ConnectionString = "assembly=CoreLab.Bdp.Oracle, Version=2.80.0.2500, Culture=neutral" +
                        ", PublicKeyToken=09af7300eec23701;vendorclient=oci.dll;grow on de" +
      "mand=True;database=rtk.fsma;username=russell;max pool size=100;pa" +
                        "ssword=russell;provider=Oracle (Core Lab);min pool size=0";
                  //
                  // bdpSelectCommand1
                  //
                  this.bdpSelectCommand1.CommandOptions = null;
                  this.bdpSelectCommand1.CommandText = "select * from FT_USERS\r\n";
                  this.bdpSelectCommand1.CommandType = System.Data.CommandType.Text;
                  this.bdpSelectCommand1.Connection = this.bdpConnection1;
                  this.bdpSelectCommand1.ParameterCount = ((short)(0));
                  this.bdpSelectCommand1.SchemaName = null;
                  this.bdpSelectCommand1.Transaction = null;
                  this.bdpSelectCommand1.UpdatedRowSource = System.Data.UpdateRowSource.None;
                  //
                  // bdpDataAdapter1
                  //
                  this.bdpDataAdapter1.Active = true;
                  this.bdpDataAdapter1.DataSet = this.dataSet1;
                  this.bdpDataAdapter1.DataTable = this.dataTable1;
                  this.bdpDataAdapter1.SelectCommand = this.bdpSelectCommand1;
                  this.bdpDataAdapter1.StartRecord = 0;
                  this.bdpDataAdapter1.TableMappings.AddRange(new System.Data.Common.DataTableMapping[] {
                                    new System.Data.Common.DataTableMapping("Table", "FT_USERS\r\n", new System.Data.Common.DataColumnMapping[] {
                                                      new System.Data.Common.DataColumnMapping("USR_ID", "USR_ID"),
                                                      new System.Data.Common.DataColumnMapping("USR_GROUP", "USR_GROUP"),
                                                      new System.Data.Common.DataColumnMapping("USR_SURNAME", "USR_SURNAME"),
                                                      new System.Data.Common.DataColumnMapping("USR_PASSWORD", "USR_PASSWORD"),
                                                      new System.Data.Common.DataColumnMapping("USR_WORKPHONE", "USR_WORKPHONE"),
                                                      new System.Data.Common.DataColumnMapping("USR_HOMEPHONE", "USR_HOMEPHONE"),
                                                      new System.Data.Common.DataColumnMapping("USR_ADDR1", "USR_ADDR1"),
                                                      new System.Data.Common.DataColumnMapping("USR_ADDR2", "USR_ADDR2"),
                                                      new System.Data.Common.DataColumnMapping("USR_STATE", "USR_STATE"),
                                                      new System.Data.Common.DataColumnMapping("USR_PCODE", "USR_PCODE"),
                                                      new System.Data.Common.DataColumnMapping("USR_GIVENNAME", "USR_GIVENNAME"),
                                                      new System.Data.Common.DataColumnMapping("USR_FINANCIAL", "USR_FINANCIAL"),
                                                      new System.Data.Common.DataColumnMapping("USR_LOCATION", "USR_LOCATION"),
                                                      new System.Data.Common.DataColumnMapping("USR_EMAIL", "USR_EMAIL"),
                                                      new System.Data.Common.DataColumnMapping("USR_DEFAULTSELECT", "USR_DEFAULTSELECT"),
                                                      new System.Data.Common.DataColumnMapping("USR_DEFAULTMARGIN", "USR_DEFAULTMARGIN"),
                                                      new System.Data.Common.DataColumnMapping("USR_HTMLEMAIL", "USR_HTMLEMAIL"),
                                                      new System.Data.Common.DataColumnMapping("USR_ADMIN", "USR_ADMIN"),
                                                      new System.Data.Common.DataColumnMapping("USR_FAVTEAM", "USR_FAVTEAM"),
                                                      new System.Data.Common.DataColumnMapping("USR_HOMEMSG", "USR_HOMEMSG")})});
                  //
                  // dataSet1
                  //
                  this.dataSet1.DataSetName = "NewDataSet";
                  this.dataSet1.Locale = new System.Globalization.CultureInfo("en-AU");
                  this.dataSet1.Tables.AddRange(new System.Data.DataTable[] {
                                    this.dataTable1});
                  //
                  // dataTable1
                  //
                  this.dataTable1.Columns.AddRange(new System.Data.DataColumn[] {
                                    this.dataColumn1,
                                    this.dataColumn2,
                                    this.dataColumn3,
                                    this.dataColumn4,
                                    this.dataColumn5,
                                    this.dataColumn6,
                                    this.dataColumn7,
                                    this.dataColumn8,
                                    this.dataColumn9,
                                    this.dataColumn10,
                                    this.dataColumn11,
                                    this.dataColumn12,
                                    this.dataColumn13,
                                    this.dataColumn14,
                                    this.dataColumn15,
                                    this.dataColumn16,
                                    this.dataColumn17,
                                    this.dataColumn18,
                                    this.dataColumn19,
                                    this.dataColumn20});
                  this.dataTable1.Constraints.AddRange(new System.Data.Constraint[] {
                                    new System.Data.UniqueConstraint("Constraint1", new string[] {
                                                      "USR_ID"}, true)});
                  this.dataTable1.PrimaryKey = new System.Data.DataColumn[] {
                              this.dataColumn1};
                  this.dataTable1.TableName = "FT_USERS\r\n";
                  //
                  // dataColumn1
                  //
                  this.dataColumn1.AllowDBNull = false;
                  this.dataColumn1.ColumnName = "USR_ID";
                  this.dataColumn1.MaxLength = 21;
                  //
                  // dataColumn2
                  //
                  this.dataColumn2.ColumnName = "USR_GROUP";
                  this.dataColumn2.DataType = typeof(decimal);
                  //
                  // dataColumn3
                  //
                  this.dataColumn3.ColumnName = "USR_SURNAME";
                  this.dataColumn3.MaxLength = 20;
                  //
                  // dataColumn4
                  //
                  this.dataColumn4.ColumnName = "USR_PASSWORD";
                  this.dataColumn4.DataType = typeof(decimal);
                  //
                  // dataColumn5
                  //
                  this.dataColumn5.ColumnName = "USR_WORKPHONE";
                  this.dataColumn5.MaxLength = 15;
                  //
                  // dataColumn6
                  //
                  this.dataColumn6.ColumnName = "USR_HOMEPHONE";
                  this.dataColumn6.MaxLength = 15;
                  //
                  // dataColumn7
                  //
                  this.dataColumn7.ColumnName = "USR_ADDR1";
                  this.dataColumn7.MaxLength = 20;
                  //
                  // dataColumn8
                  //
                  this.dataColumn8.ColumnName = "USR_ADDR2";
                  this.dataColumn8.MaxLength = 20;
                  //
                  // dataColumn9
                  //
                  this.dataColumn9.ColumnName = "USR_STATE";
                  this.dataColumn9.MaxLength = 3;
                  //
                  // dataColumn10
                  //
                  this.dataColumn10.ColumnName = "USR_PCODE";
                  this.dataColumn10.MaxLength = 4;
                  //
                  // dataColumn11
                  //
                  this.dataColumn11.ColumnName = "USR_GIVENNAME";
                  this.dataColumn11.MaxLength = 20;
                  //
                  // dataColumn12
                  //
                  this.dataColumn12.ColumnName = "USR_FINANCIAL";
                  this.dataColumn12.MaxLength = 1;
                  //
                  // dataColumn13
                  //
                  this.dataColumn13.ColumnName = "USR_LOCATION";
                  this.dataColumn13.MaxLength = 40;
                  //
                  // dataColumn14
                  //
                  this.dataColumn14.ColumnName = "USR_EMAIL";
                  this.dataColumn14.MaxLength = 40;
                  //
                  // dataColumn15
                  //
                  this.dataColumn15.ColumnName = "USR_DEFAULTSELECT";
                  this.dataColumn15.DataType = typeof(decimal);
                  //
                  // dataColumn16
                  //
                  this.dataColumn16.ColumnName = "USR_DEFAULTMARGIN";
                  this.dataColumn16.DataType = typeof(decimal);
                  //
                  // dataColumn17
                  //
                  this.dataColumn17.ColumnName = "USR_HTMLEMAIL";
                  this.dataColumn17.MaxLength = 1;
                  //
                  // dataColumn18
                  //
                  this.dataColumn18.ColumnName = "USR_ADMIN";
                  this.dataColumn18.MaxLength = 1;
                  //
                  // dataColumn19
                  //
                  this.dataColumn19.ColumnName = "USR_FAVTEAM";
                  this.dataColumn19.DataType = typeof(decimal);
                  //
                  // dataColumn20
                  //
                  this.dataColumn20.ColumnName = "USR_HOMEMSG";
                  this.dataColumn20.MaxLength = 150;
                  this.Load += new System.EventHandler(this.Page_Load);
      ((System.ComponentModel.ISupportInitialize)(this.bdpDataAdapter1)).EndInit();
      ((System.ComponentModel.ISupportInitialize)(this.dataSet1)).EndInit();
      ((System.ComponentModel.ISupportInitialize)(this.dataTable1)).EndInit();
            }
            #endregion
      }
}