Pennsylvania College of Technology Transcript

Yesterday I received my Pennsylvania College of Technology transcript which I obtained in case any prospective employers want documentation of my academic record. My grade point averages by semester were 3.82, 3.90, 3.93, and 3.95 for the Fall of 1985 to the Spring 1987.

Some of the courses I took included; Programming In Pascal, Data Structures, COBOL Programming I, Programming In RPG, COBOL Programming II, Computer Sys w/Assembler, and File and Database Processing.

Having a transcript is useful for getting the education dates correct on my resume and job applications. I keep a little slip of paper in my wallet now so I’ll have the names and addresses of my schools and references on me to fill out applications.

Posted in General | Leave a comment

Writing Code To Generate Code

Today I wrote a script to generate the SQL for a stored procedure based on an Access database table design. Creating a stored procedure is a tedious chore that usually requires a lot of copy and paste of the field names and careful selection of the correct data type. When you have a table with a lot of fields you’ll want to automate the task.

Fortunately there is a way to query the database schema of an Access database which allows you to get the field names, data types, and field lengths. My script simply translates this into the parameters required for my stored procedure. My script also creates the SQL statement that the stored procedure will execute.

I also wrote a script to generate the Active Server Pages code I’ll need to use my new SQL Server stored procedure. Every parameter needs to be set in your ASP code so that is a chore as well.

Writing code to generate code has many advantages:

  • It saves time and makes you more productive
  • It reduces the chances of making coding errors due to misspelled field names or incorrect data types.
  • It standardizes your code
  • You understand the code that is generated. Not always true when you use a wizard.
  • You can tweak the generated code for a particular project

There may be an easier way to generate stored procedures using a commercial product or some wizard in Visual Studio. I always keep my eye out for shortcuts and smarter ways of doing tedious tasks.

Posted in General | Leave a comment

Cascading Style Sheets Positioning Of Web Page Elements

Cascading Style Sheets have been giving me some problems lately because our web designer is encouraging us to use CSS to position web page elements rather than tables. I was given a design that used a lot of heights specified in the style sheet and some absolute and relative positioning. I was really struggling with the heights, trying to control the vertical spacing of web page elements. Eventually I found a better way of managing the vertical spacing by adjusting the padding around the web page elements. If you set the top padding of your element you can create spacing between the element above it without having to mess with absolute positioning and heights.

The position:absolute and height properties weren’t quite variable enough to ensure that the web page would look the same in various browsers. You don’t want to be too specific because then the positioning will only be correct for one browser. I wish our web designer would create some guidelines on how to position elements using style sheets.

Also I don’t like the way this design style breaks the What You See Is What You Get (WYSIWYG) in FrontPage. FrontPage will soon be history but I bet Microsoft Expression will not make it any easier to design using style sheets and XHTML.

Posted in General | Leave a comment

SQLClient Class – SQLDataReader

Today I used the SQLDataReader of the SQLClient namespace to create a new Merchant Tools page for StoreFront 6.0. A client wanted to know how many customers were getting the weekly mailings and I was suprised to learn that StoreFront 6.0’s Merchant Tools does not show you any record counts. You cannot determine how many products, customers, or subscribers you have using the Merchant Tools because that information is not displayed anywhere. This is a major oversight!

So I created a new Record Counts page for the Merchant Tools because it is fairly easy to get record counts. All of my sample code uses DataSets with the SQLClient namespace but I did not want a DataSet to retrieve just one field value. The DataReader is better if you aren’t going to be using a DataGrid.

Posted in General | Leave a comment

Eiffel for ASP.NET Name Mapper

Today I managed to convert some of my ASP.NET sample code written in VB.NET into Eiffel. There are a few problems with using Eiffel for ASP.NET for web applications. First, it takes a ridiculously long time to compile, even longer than usual. I’m not sure this would be acceptable in a commercial web application. Second, the .NET member names do not map to Eiffel identifiers. So you have to use a utility program to figure out how to refererence every .NET class, property, and method. For example, System.Environment.GetLogicalDrives() needs to be referenced as {ENVIRONMENT}.get_logical_drives(). The utility progam takes about 10 minutes to search the assemblies. Then you need to figure out what kind of data type is necessary to get the list of logical drives. Apparently they are so particular about naming conventions that they had to rename every property and method to use lowercase letters and underscores in the Eiffel style!

Actually I’m delighted with these difficulties. They will serve to discourage other programmers from learning Eiffel for ASP.NET and that will keep my projects from being outsourced to India.

Posted in General | Leave a comment

C# Programming

I was offered another job developing web applications using ASP.NET but the language requirement was for C Sharp instead of Visual Basic. I don’t think this was a good job offer because it came from an employment agency. I have not had good experiences with employment agencies. They don’t seem to understand the skills that they are trying to market. I think I’d do better to market my web development skills myself.

However this is the fourth job opportunity requiring C# experience. I consider myself an expert on ASP.NET but I do all my programming in Visual Basic. StoreFront 6.0 was written in VB.NET and all my ASP work was in VBScript so it makes sense to transition to Visual Basic.NET. Today I converted some of my early sample code to C#. It was remarkably easy because only the language syntax changes. Most of the code can remain the same. I should be able to pick up C Sharp in a few weekends!

Posted in General | Leave a comment

Today’s Impressive Accomplishments

Today I used AJAX, Asynchronous JavaScript and XML, for the first time in a web application project. I just modified my AJAX example code slightly for an Active Server Pages script with data coming from a SQL Server database. I was very pleased because I need a good example of this technology for my portfolio. I also installed the 1-2-All Broadcast E-mail Software for a client in order to run an e-mail marketing campaign. I exported their customer e-mail addresses from their shopping cart software and imported them into the 1-2-All Broadcast E-mail Software’s subscriber list.

Installing the 1-2-All Broadcast E-mail Software required creating a new MySQL database with the usual problem setting the database user for an old password. I also had to install the Zend Optimizer 2.6.2. I’m eager to show the client what this software can do because it can track how many people open the e-mail to read it and how many readers click links within the e-mail. It should also handle bounced e-mails and automatically remove them from the subscriber’s list.

I noticed that my blog entires are not being indexed by the Google Blog Search. I suspect this version of WordPress is not pinging anyone when I update my blog. I am going to give Ping-0-Matic a try to see if I can get this blog entry noticed.

Posted in General | Leave a comment

Rant Against Web Position Gold

I’m not recommending Web Position Gold as a SEO tool anymore. I think businesses are wasting their time using that software. I’m tired of wasting my time setting up submission missions, generating ranking reports, and running the page critic. It just encourages you to do a lot of keyword stuffing and automated submissions which aren’t effective means of getting in the search engines. The key to getting in the search engines is to have great content. An online business would do better hiring a copywriter than a SEO consultant.

Web Position Gold is designed to make it look as if you are accomplishing a lot by submitting hundreds of web pages to the search engines. But the fact of the matter is that you only need to submit the home page and then the spiders will find all your other web pages. It is a waste of time to submit every single page. It generates a nice report with lots of numbers but it was completely unnecessary. The truth is, we generate these reports just to satisfy the client that we are taking care of their search engine optimization needs but we don’t concern ourselves with how to really make the client successful. The new version of Web Position Gold merely added fancier graphs and reports to bank on their busy work.

Web developers are kept so busy stuffing keywords into meta tags and image alt text that nobody even bothers to read the web page content. I’ve never known anyone in the web development business to critique the writing.

Posted in General | Leave a comment

Froogle Product Feeds

I manage the Froogle product feed for http://www.caraccessories.com. I have to upload a CSV file every month to keep their products in the Froogle product search engine. None of our clients at work are using Froogle product feeds. We don’t do much marketing for our e-commerce web sites. I plan to write a program to export the product table for the Froogle product feed and then automate the upload of the CSV file.

Posted in General | Leave a comment

Web Services In VB.NET

Today I had to create some web forms to submit XML requests to the Army and Air Force Exchange Service web service for authorizing Military Star Card payments. They did not create their web service properly. My web forms had fields for the credit card number, the facility number, the amount, and the authorization code but I had to send all that information as a single string of XML because their web service only expects to receive that.

I wrote my web forms in ASP.NET using Visual Basic. My code had to construct the string of XML. AAFES does not appear to provide any online Star Card processing web applications. They insist you use their unconventional credit card which no shopping cart software is designed to support and then they don’t give you any means of processing those credit cards.

I have developed a few web services myself. It is surprising that this technology is not used more often but I don’t know of any other local developers creating web services for any purpose whatsoever.

Posted in General | 1 Comment

Software Development Using Eiffel

Yesterday I received the book Software Development Using Eiffel by Richard Wiener in the mail. This book was published in 1995 but the code looks more compatible with Eiffel Studio than the other book I am reading Object-Oriented Software Engineering With Eiffel by Jean-Marc Jézéquel.

Tonight I wrote a simple program to generate some HTML option tags for a select form element. I used an array of strings to experiment with Eiffel’s array class.

Posted in General | Leave a comment

Blog Writing Work

It should be easy for a good writer to find work because the Internet has made written content extremely valuable. The search engines love good content as anyone who reads Search Engine Optimization articles knows. Their advice to e-commerce sites is to add a blog and write journal entries to promote the products. Unfortunately most businesses expect people to write for free so they won’t even consider hiring a writer to blog for them. Instead they ask their technical staff (programmers and network administrators) to do the blog writing. Or they just steal content by putting up articles that professional writers have published.

I work as a web developer but I love writing so I’ve added a blog to a client’s web site and today I wrote an excellent journal entry to show them exactly how this is meant to be used to promote their products:

http://www.caraccessories.com/wordpress/?cat=1

As you can see, I wrote something that is directly applicable to the products they sell. I made the writing entertaining by telling a personal story while at the same time promoting the value of their products. It is a true story by the way. I included a link to their product page. That is very important. Always include links to the product pages. The search engines love content like this and people will be intrigued by a “cat litter disaster”. More importantly, they won’t just read it but be prompted to immediately buy floor mats to prevent their own cat litter disaster.

This blog entry appeared immediately in the Technorati’s search engine when I did a search for “cat litter” a keyword that the web site is not using:

Posted in General | Leave a comment

Asynchronous JavaScript and XML

Last night I added a new web page to my web site to demonstrate Asynchronous JavaScript and XML, otherwise known as AJAX. Asynchronous JavaScript and XML is JavaScript on the client which uses an ActiveXObject, Microsoft.XMLHTTP, to request a XML file from the server. Then the JavaScript loops through the XML nodes (tag elements) and dynamically writes the data into HTML page elements. The client browser appears to magically load data without requesting another web page.

AJAX has appeared on many of the job applications I’ve seen. However, I don’t get the impression that employers really understand the technology because it is not something you want to get into if you have serious budget constraints or project deadlines to meet. AJAX requires a lot of additional work. I suspect employers have heard the hype about Web 2.0 and think it is the next big thing. Well…the only companies using AJAX for web applications now are major players like Google, Yahoo, and Microsoft. These companies have teams of highly paid developers to create cutting edge applications and Internet services. Web 2.0 actually involves more than just AJAX. It also means using very innovative techniques to improve the user experience.

However, AJAX itself is a fairly simple concept and it only took me one evening to create my snazzy example. Maybe that will satisfy my prospective employers.

Posted in General | Leave a comment

Microsoft Application Center Test

Today I used Microsoft Application Center Test to stress test a web application. The Microsoft Application Center Test is an obscure Microsoft tool that is only available in the Enterprise Edition of Visual Studio.NET 2003. It is designed to stress test web servers and analyze performance and scalability problems.

I used ACT to stress test the Lycoming County Database web site which provides information on the river and stream levels. We expect this web site to get a lot of traffic during a flood.

ACT has almost no ability to export its data or reports. It saves the data as XML but you don’t get anything to display that XML as charts or reports except for the software’s built-in test results. I have to print the report as a PDF just to get something I can copy and paste. When I have more time I plan to design a web application to work with the Microsoft Application Center Test XML format.

Posted in General | Leave a comment

Database Code Optimization

Today I replaced some database code in Storefront 5.0 with some stored procedures. The Storefront code was creating a recordset just to add a new record. I suspect it was selecting all the records, 9889 records in this case, and trying to pull a lot of data from the database when all it meant to do was add one more record. I saw an immediate performance improvement when I replaced the code to insert new order detail records with my stored procedure code.

The reason Storefront used that inefficient method was to get the ID number of the new record that was created without doing another query. But a stored procedure that does an insert can return the new ID number using the SCOPE_IDENTITY() function. SCOPE_IDENTITY() returns the last IDENTITY value inserted into an IDENTITY column in the same scope.

Posted in General | Leave a comment

MySQL Administration

Last night I had to play around with some C and Visual C#.NET console applications for a job interview tomorrow. This morning I documented some MySQL administration tasks because I installed phpList on the Car Accessories web site http://www.caraccessories.com and had to set up a new database.

I don’t know how my current employer is going to manage without me because she wants to use a shopping cart built on ASP.NET 2.0 and her new programmer does not even know ASP.NET and VB.NET. I might be too busy learning new programming languages at my new job to give much assistance on my former projects. Today at work I changed one my ASP.NET project names to be more meaningful and created a flowchart and dummy test program for some especially complicated program logic.

Posted in General | Leave a comment

Wrote First Useful Program In Eiffel

Yesterday I wrote my first useful program in Eiffel! It is a file processing utility program that examines web pages in a directory and generates a report on which web pages are missing a style sheet.

I’ve been adding a style sheet to my technical notes which I keep in a compiled HTML help file. I now have 399 web pages in this project so finding web pages without a style sheet needs to be automated.

My Eiffel program helped me to find many web pages without the line of code for the style sheet.

But just dating my report was fairly difficult. I had to figure out how to add the time library to my class cluster in EiffelStudio. This is not very well documented in their help file and the English, German, and French date/time formats caused a conflict because the classes all had the same name.

Posted in General | 1 Comment

Developing Technical Expertise in Eiffel

I continue to make excellent progress in learning the Eiffel programming language. However I am running into a lot of minor technical gotchas that require good problem solving skills in order to proceed. I am delighted that Eiffel is so tricky and you can’t find much help for a problem on the Internet. I can’t find much sample code to provide any clues as to how to accomplish something. Most VB programmers would feel hopelessly lost if presented with a project done in Eiffel and they would quickly give up after struggling with the development tools. Eiffel also encourages the use of data structures like trees, linked lists, etc and unfamiliar programming concepts like variants, invariants, require and ensure which specify the preconditions for calling a routine and the postconditions at routine completion. Eiffel is way out of the typical Microsoft developer’s comfort zone and that is what I want to protect my investment in technical expertise.

Posted in General | Leave a comment

Eiffel Progress

I worked all night on learning Eiffel. I am making excellent progress. So far I have learned how to do some simple file processing. I’ve also learned a bit of the language syntax. Ordinarily I would have quickly given up on learning Eiffel because it is horribly unfamiliar and tediously difficult to figure out how to do even the most basic tasks. But that is exactly what I want! I don’t want to invest my time in picking up expertise that just anyone can acquire. I want something that will leave other programmers scratching their heads, completely mystified.

Technically Eiffel is a sophisticated Object Oriented Programming language that a computer scientist would love. It is considered to be highly advanced and well informed professionals would be quite impressed by one’s knowledge of Eiffel, assuming they’ve ever heard of it.

Posted in General | Leave a comment

Eiffle Studio 5.7 and Eiffle For ASP.NET

Last night I downloaded and installed Eiffle Studio 5.7 and wrote my first Hello World program in Eiffle. After careful consideration, I have decided to concentrate on developing my expertise using this programming language.

It is a losing proposition to base your expertise on a common programming language or commonplace technology. I think I’ve wasted my time, effort, and genuis on developing solutions only to see my work taken over by some less experienced and talented developers because the company “has the software” and doesn’t feel they need my expertise. Frequently this has disasterous results and significantly impacts work efficiency but management clearly does not value technical expertise or experience.

Eiffle is a fairly obscure programming language which very few developers are going to be familiar with. It is also deceptively complex but actually integrates with existing technology quite easily, like ASP.NET for example. By developing my solutions in Eiffle I will have some insurance that my investment in expertise and business solutions will not be wasted.

Some Information Technology professionals would argue that you should not learn obscure programming languages because there will not be any demand for your skills. However many of the small businesses I work for are completely mystified by technology and aren’t going to take any interest in the technical aspects. For these clients I am free to use any technology I care to use and I might as will make it Eiffle. Then when they decide to go with another developer they will be unable to find anyone with the necessary expertise to take over my projects. This may seem fairly ruthless but it is only good business to protect your investment. Also, management’s decision to change developers based on cost is usually a disasterous decision that is highly detrimental to the project.

Posted in General | Leave a comment