About | Blog | Publications | Projects | Resume | Contact

Follow Me

AddThis Feed Button
Subscribe to me on FriendFeed


Archives

 

Currently Reading

Friday, January 14, 2005

Discussing Portal Software Selection

Here is a very interesting discussion on selecting a portal application vendor. Although the author is Microsoft employee, his areas for consideration and general advice are solid.

posted by Chip Childers @ 1:50 PM   0 comments
Links to this post

 

Thursday, January 13, 2005

One Way to Setup CVS for a Windows-based Development Workstation

Below are instructions for setting up Putty, TortoiseCVS and an account on a UNIX system hosting a CVS repository:
1.       Download the suite of putty applications and TortoiseCVS, placing the files into "C:\\Program Files\\Putty".

 

2.       Open a command prompt and run the "puttygen" command.  When the dialog appears, select the appropriate key type and click the "generate" button.  You will have to move your mouse over the blank area of the dialog to get the key to generate (this is because the applications uses the input from your mouse movement for the random seed value).

 

3.       Once the key pair has been generated, enter a meaningful name for the key into the Key Comment field.

 

4.       Type in a key passphrase for the private key into both the "Key passphrase" and "Confirm passphrase" fields.  This should be a fairly complex password, but you will only need to type it on the startup of your workstation.

 

5.       Click the "Save public key" button and save the key into the "C:\\Program Files\\Putty" directory as a text file.

 

6.       Keep the “puttygen” application running until you install the public key on the target server.

 

7.       Run the TortoiseCVS-1.8.7.exe program that will install the TortiseCVS application.

 

8.   Copy a shortcut of "C:\\Program Files\\Putty\\pageant.exe" into your "Startup" folder.

 

9.   Edit the shortcut to include the name and location of your private key file after the program file's name and location (in the target field of the properties dialog).  The result will look something like this:

 

"C:\\Program Files\\Putty\\pageant.exe" "C:\\Program Files\\Putty\\{PrivateKeyFile}"

 

Replace the "{PrivateKeyFile}" string with the actual name of your private key file.

 

10.   Run the shortcut to activate the Putty Agent application.  You will have to type in your passphrase when the application loads.

 

11.   In the system tray, the Putty Agent icon should be visible.  Right click on the icon and select the "New Session" menu option.

 

12.   In the Putty session dialog, set the following values:

 

Session ->    Saved Sessions = the hostname of the CVS server

This field is right above the list of displayed sessions.

 

Session ->    Host Name = the hostname of the CVS server

Session ->    Protocol = SSH

Session ->    Port = 22

 

Connection ->        Auto-login username = {USER}

Replace {USER} with your username for the CVS server.

 

Connection -> SSH -> Preferred SSH protocol version

Select wither 1 or 2, appropriately to the version that you set the key pair to support.

 

Connection -> SSH -> Auth -> Private key file for authentication = {PrivateKeyFile}

Replace {PrivateKeyFile} with the name and location of your private

key file (the "PPK" file).

 

13.   Back on the "Session" settings page, click the "Save" button to save the definition.

 

14.   Click “Open” to connect to the target server. 

 

You will have to type in your password for the CVS server (NOT your private key passphrase).

 

15.   Go back to the “puttygen” application and copy the “Public key for pasting into the authorized_keys file” to the clipboard.

 

16.   Add the contents of the clipboard to the ~/.ssh/authorized_keys file on the server.  If the file is not there, then create it and add the data.

 

17.   After saving the changes to the authorized_keys file, close the putty session.

 

18.   Close the "puttygen" application.

 

19.   Test the key based authentication by right clicking on the Putty Agent system tray icon and selecting the "saved session" of 216.203.1.133.  When selected, a putty terminal window should appear, and you should be automatically logged into the server.

 

20.   Add the following user environmental variables:

 

CVS_ROOT=:ext:{USER}@{CVS SERVER}:{CVS HOME}

CVS_RSH=plink

 

21.   Add the following to the "Path" system environment variable:

 

;C:\\Program Files\\Putty

 

22.   Restart your system.  Be sure to type in your passphrase into the Putty agent dialog after you login.

 

23.   CVS should now be integrated into your workstation.  You can test the connectivity by right clicking on your desktop and selecting “CVS Checkout”.  When the dialog opens, set the following settings:

 

Protocol -> Secure shell (:ext:)

Server -> {CVS SERVER}

Repository directory -> {CVS HOME}

User name -> {USER}

 

            Click the “Fetch list…” button to see a list of modules that are available for Checkout.

 

            If the list returns, then the application is installed correctly.

posted by Chip Childers @ 5:50 PM   0 comments
Links to this post

 

Wednesday, January 12, 2005

Service Oriented Architecture for Service Providers

Some Definitions Without first providing these definitions, everything below will be confusing:
  • Service Oriented Architecture – I will use this term to describe a technical architecture for software development and tool implementations within an IT infrastructure that makes heavy use of loosely coupled and message based integrations between systems.
  • Service Provider – An organization that is responsible for providing IT services (hosting, network, applications, etc…) to other organizations.
The Concept and Relevant Standards For the past year or so, I have been doing allot of thinking about developing a markup language for service providers (managed, security, application, etc…). The idea was to have a set of schemas that would extend markup standards beyond the base Data Center Markup Language (DCML) by representing some of the common elements of a service provider’s environment and tools. Some of the functional areas that I was interested in including were technology specific (such as DNS, SNMP, Network Device Configurations, etc…). The other functional areas that I was considering were more specific to a service provider’s environment than the requirements of the more general data center. These included the ability to: represent complex customer relationships between the service provider and customers themselves; interact with other service providers as partners, vendors or customers; and provide reasonable levels of transparency within the service provider’s environment. As I spent my time thinking about this, it turned out that the DCML group was being integrated into the Organization for the Advancement of Structured Information Standards (OASIS) and the group’s work was expanding to accommodate some of the concepts that I was looking to have modeled. Specifically, the group expanded to include technical committees focused on applications and services, networks, servers, and provisioning. While there are still many service-provider oriented information domains that I believe the standards organizations should be working on the models for, this shows that the industry is headed in the right direction. Implementing Something Now! Regardless of the advancement of these standards, we are a long way away from being able to actually implement some of these concepts within a real service provider’s infrastructure. My new goal is to find ways that I can implement a service oriented architecture within the environment that I work in on a daily basis. Although I don’t have a formal requirement set for this initiative, the basic functional decomposition of the requirements includes the following domains:
  1. Service Provisioning
  2. Service Transparency
  3. Service Quality Assurance
  4. Utility Functions
The service provisioning domain represents the set of services that support automated provisioning of any tool or service within the service provider’s environment. This includes services such as monitoring, DNS, network configurations, user accounts, etc… The service transparency domain includes the services required to provide customers with the ability to view information about and, in some cases, interact with the environment that their services are being provided from. The transparency can come in forms as simple as read access to the CMDB elements owned by a customer or as complex as allowing the customer to execute commands on those same CMDB elements. The service quality assurance domain includes functionality that helps make service delivery a “closed loop” environment. The domain is focused on providing access to each element of the infrastructure used to provide customers with each contracted service. The “closed loop” functionality is developed based on using these services to reconcile each infrastructure item with the expected state. Lastly, the utility functions domain includes functionality that is more general in nature. This includes items like authentication and authorization data sources, user ID and password generation tools, common logging mechanisms, etc… Together, these domains are meant as a starting point for an actual implementation of a SOA with our environment. Each of these domains is represented by at least one initial project that we have ongoing. I will write more about the domains and the associated projects in a later post.

posted by Chip Childers @ 8:00 AM   0 comments
Links to this post

 

Tuesday, January 11, 2005

Ups and Downs with Certificate-based Web Service Security

The Vibro.NET blog has a great post about certificate-based security in the XML Web Services world. Based on my personal experience with certificates and WS-Sec, this is worth reading: Why you should consider WS-Trust... I'm pretty sure that the ideas presented are something that I will include within my company's SOA planning.

posted by Chip Childers @ 6:13 PM   0 comments
Links to this post

 

Converting .NET Managed String Objects to NULL Terminated Char Pointers in C++

This is something that took me a long time to get figured out, and I'm still not sure if I am correctly transfering the data from the managed string object into the NULL terminating char pointer:

1#pragma managed
2char* TranslateRealStringToCharPtr(System::String* strToConvert)
3{
4	System::String* StringPointer = strToConvert;
5	char* CharPointer = _
6	  (char*)(void*)Marshal::StringToHGlobalAnsi(StringPointer);
7	return CharPointer;
8}
 

I think that there is a memory leak in the code, but I can't figure out where it is. Any ideas?

posted by Chip Childers @ 8:00 AM   0 comments
Links to this post

 

Monday, January 10, 2005

What makes a good programmer good? What makes a great programmer great?

Mikael Grev wrote an interesting blog entry describing his opinion about what the attributes of a rock star programmer are. While I agree with the general idea, he's missing a pretty major element: the ability to work in a team. As software has grown, it has become less and less about the solo acts of heroism, and more and more a team game. Nobody, especially programmers, should underestimate the need for the team to work well together.

posted by Chip Childers @ 2:45 PM   0 comments
Links to this post

 

IP Address Validation Expressions

We've been working on several web applications that have IP addresses as part of their user input. Since validation of the address format has been something I haven't gotten around to writting yet, I'd like to thank Mike Poulson for the ability to cheat: Regular Expressions and IP addresses (ipv4 and IPv6)

posted by Chip Childers @ 2:28 PM   0 comments
Links to this post

 

Friday, January 07, 2005

How can code that tries to prevent a buffer overflow end up causing one?

Raymond has a very interesting article about *ncpy functions in C / C++. Most "how to write secure code" books, articles, etc... speak of the *ncpy functions as the solution to all your buffer overflow problems. It's nice to see someone clarify that thought process a bit. How can code that tries to prevent a buffer overflow end up causing one?

posted by Chip Childers @ 10:09 AM   0 comments
Links to this post

 

Monday, January 03, 2005

Rubik's Cube Solution

My brother has done it again. He has managed to get his Rubik's cube solving down to an average two minutes and thirty seconds. And just to rub it in, he gave me a cube of my own for Christmas. So, I have been fighting with the cube for hours at a time. After begging him for some advice, I was sent a link to this Rubik's Cube Solution page. Now all I need to do is practice.

posted by Chip Childers @ 2:31 PM   0 comments
Links to this post

 

Service Oriented Architecture

Service Oriented Architecture (SOA) - what's the point? We try and we try to get this type of thinking to come from our executives. Instead, we are left impelementing partial strategies to support an "eventual" service oriented architecture. I just hope that "eventual" doesn't become "never". Perhaps I can use some of Gilbert's thoughts to help create a broader support for SOA based development efforts.

posted by Chip Childers @ 2:15 PM   0 comments
Links to this post

 

© 2005, Jerry W Childers, Jr. - This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 2.5 License.
Creative Commons License