gid

August 11, 2006

gmail part 1

Today I am doing something I told myself I would never do. I am changing to a new "permanent" e-mail address. I have held out the last year or so for excite.com to catch up to google with their e-mail service but today I am saying enough is enough. The amount of spam that I have been getting is more than I want to handle. Also, their block list only allows me to filter out 50 domains or addresses, which is really lame. I guess the really lame part is that they are using the blocking of domains as a primary defense against spam.

In some weird way it is kind of sad to be moving onto a new email address. I have had my current e-mail address for almost 10 years now. It is hard to believe that e-mail has already been apart of my life for that long. It seems like yesterday when Leslie and I were all excited because someone was giving away free e-mail, and that we would be able to communicate while I was at school and she was at work.

I have been using gmail the last year for more business related stuff, but the e-mail service is just too good for me not to make the jump. I am going to keep my excite.com email address until the time seems right for me to pull the plug. I'm sure that will take a year or two until I get to that point. If you would like my new e-mail address then please leave a comment, and I will reply.

Also, if you would like a g-mail account then I would be glad to send you an invite. In post to come I hope to highlight some of the great g-mail features.

Posted by gid at 05:03 PM | Comments (2)

August 10, 2006

Horizontal vs. Vertical Database Design

I was at one point tasked with developing the argument against going with a vertical database design for a particular project. In my research one of the main reasons for going vertical was the null saturation percent of a database, which was caused by the number of columns added to support a very large eCommerce database. As some research projects go I never got a chance to finish, and because I have a feeling that one day in the future I will have to revisit this subject I am archiving what I had done out here on my blog.

The one neat thing that did come out of my research was this query that I wrote to get the null saturation of a MS SQL Server database. If you are curious about the null saturation of a SQL Server database then feel free to play with this query. Depending on the size of the database it could take up to 5 minutes or longer to run. I'm sure the query could have been written better, but it was written for research not as a production piece of code. Also, this query can not be run under the master database.

Download Query (the query in this file will make more sense because it still has some formatting to it)

--Written By David Gidcumb

create TABLE #NumColumnsRowsPerTable(

ID INT

, Name varchar(100)

, Columns INT

, Rows bigINT

, TotalCellCount bigint

, NonNullCellsPerTable bigINT

, NullsPerTable bigint

)

 

create TABLE #Columns(

Name varchar(100)

, NotNullCount bigint

)

 

--Number of Columns per table

INSERT INTO #NumColumnsRowsPerTable

select so.ID

, so.Name

, count(*)

, 0

, 0

, -1

, 0

from sysobjects so

left join

syscolumns sc

on so.ID = sc.ID

where so.type = 'U'

and sc.xtype not in(35,36,34,99) --none nullable types

group by so.name, so.ID

 

Declare @tablename varchar(100)

Declare @columnname varchar(100)

Declare @SelectCMD varchar(2048)

Declare @SelectCMD2 varchar(2048)

Declare @SelectCMD3 varchar(2048)

-- Declare the Cursor for getting Row Count

DECLARE GetRowCount_table_names_cursor CURSOR FOR

SELECT Name

FROM #NumColumnsRowsPerTable

 

OPEN GetRowCount_table_names_cursor

FETCH NEXT FROM GetRowCount_table_names_cursor

 

INTO @tablename

 

WHILE @@FETCH_STATUS = 0

BEGIN

 

set @SelectCMD = 'Update #NumColumnsRowsPerTable set rows = (select count(*) from xxxTABLExxx), TotalCellCount =(columns * (select count(*) from xxxTABLExxx)) where name = ''xxxTABLExxx'''

select @SelectCMD2 = REPLACE ( @SelectCMD , 'xxxTABLExxx' , @tablename )

execute (@SelectCMD2)

 

INSERT INTO #Columns

select sc.Name

, 0

from sysobjects so

left join

syscolumns sc

on so.ID = sc.ID

where so.type = 'U'

and so.Name = @tablename

and sc.xtype not in(35,36,34,99)

 

Declare @NotNullCount int

-- Declare the Cursor for getting Null Count

DECLARE GetNotNullCount_cursor CURSOR FOR

SELECT Name

FROM #Columns

 

OPEN GetNotNullCount_cursor

FETCH NEXT FROM GetNotNullCount_cursor

INTO @columnname

WHILE @@FETCH_STATUS = 0

BEGIN

set @SelectCMD = 'update #Columns set NotNullCount =(select count(xxxCOLUMNxxx) from xxxTABLExxx where xxxCOLUMNxxx is not null) where name = ''xxxCOLUMNxxx'''

select @SelectCMD2 = REPLACE ( @SelectCMD , 'xxxTABLExxx' , @tablename )

select @SelectCMD3 = REPLACE ( @SelectCMD2 , 'xxxCOLUMNxxx' , @columnname )

print @SelectCMD3

execute (@SelectCMD3)

--select @SelectCMD3

-- Get the next table name

FETCH NEXT FROM GetNotNullCount_cursor

INTO @columnname

End

CLOSE GetNotNullCount_cursor

DEALLOCATE GetNotNullCount_cursor

 

Update #NumColumnsRowsPerTable set NonNullCellsPerTable = (select sum(NotNullCount) from #columns), NullsPerTable =(TotalCellCount-(select sum(NotNullCount) from #columns)) where name = @tablename

delete from #Columns

-- Get the next table name

FETCH NEXT FROM GetRowCount_table_names_cursor

INTO @tablename

END

 

CLOSE GetRowCount_table_names_cursor

DEALLOCATE GetRowCount_table_names_cursor

GO

 

select * from #NumColumnsRowsPerTable

 

select cast(((sum(NullsPerTable)*100)/sum(TotalCellCount)) as varchar(100)) + '% Null Saturation' from #NumColumnsRowsPerTable

drop table #NumColumnsRowsPerTable

drop table #Columns

Please feel free to ignore everything below the fold. It was a work in progress that is woefully incomplete.

History
In the past horizontal databases where used exclusively in database design. But, as e-commerce gained in popularity the shortcomings of the Horizontal design began to become apparent. At first the solution was to just add new columns to support the unique attribute of each new product being added. As new columns were added problems unique to a Horizontal design were encountered.
They were:
1. Max column count exceeded (DB2\Oracle 1012 SQL Server 1024)
2. Null saturation of a table would start to exceed 90%
3. Constant Scheme changes due to adding columns
4. Performance issues are encountered when a table is very wide and only a few columns are returned in the query
Vertical Database Design
The solution to the e-commerce predicament was to change the design by taking the attributes (column names) in the horizontal design and making them keys in the vertical design. This change solved all the issues, which occurred under a horizontal design. Though there are problems that resulted which are unique to a vertical database design.
1. Queries written against the vertical design became cumbersome and error-prone.
? Multiple joins to pull back each attribute
? Maximum of 256 tables for each select statement(SQL Server) run query contained in [256 Table proof for Horizontal design.xls] as example
? See file query.sql as example of what needs to happen to pull back data.
2. Current Application development tools are designed for storing data object in a horizontal format. Data displayed in a horizontal format in a ADO.Net datagrid will make no sense to a client. Data would have to be converted from vertical to horizontal to make sense. Again see bullet 1.
3. Logical horizontal views must be written on top of vertical representation
? SQL Server view performance is poor when compared to teradata, and views execution plan must be recompiled when accessed.
4. Data is not strong typed do to the nature of the vertical design, which causes casts or converts to be needed for most attributes (columns) being returned. The biggest issue is that for a large enterprise it removes the natural typing of data at the database level, and instead moves to responsibility to each developer who inserts and updates the data-store.
The decision on weather to use a Vertical or Horizontal data design really depends on the scope of a project. The decision really needs to be made not only by the Data Analyst, but also the developers who are going to be interacting with the data store on a daily bases. Chances are that the Data Analyst left to their own doing will produce a vertical design. It is much easier to design because if a new item needs to be added all that has to be done is a simple insert into a table. But just because it is simple to design it does not mean it is the most appropriate design pattern to apply.
Reason's to Use a Vertical Database design
? Due to the constant adding of products in an e-commerce system i.e. Amazon, eBay and the like, new products with unique attributes are added by adding new columns, which describe the unique attributes of each new product a vertical architecture simplifies the issue for the data analyst. Issues that Vertical Design negate
1. Column count can exceed that 1024 for Microsoft SQL Server
2. Inserts and Stored procedure parameters can contain a maximum of 1024 columns

Reasons to Use a Horizontal Database design .
.
.
.

Views 256 tables is the max in a select statement
Posted by gid at 06:53 PM | Comments (0)

March 10, 2006

live.com

So, I just got my first search hit from Microsoft's new search engine. Off course I tested it in FireFox, but my first impressions weren't great. Live.com
Posted by gid at 01:42 PM | Comments (1)

November 01, 2005

a must see movie clip

Microsoft Feels Your Pain : here
Hat Tip: Eric
Posted by gid at 08:55 AM | Comments (1)

August 11, 2005

xp powertoys

alt_tab_before.JPG
Alt+Tab before

For those of you who live their working life on a Windows XP box then you might want to check out some of the Windows XP power toys that Microsoft has to offer. I guess there are about a dozen of them that you can install. The two that I installed were the Alt-Tab Replacement and the Open Command Window Here Powertoys.

You can see the before and after screen shots of the alt+tab replacement to the right. The pictures are not to scale so the after picture is much more readable in real life. Also, the picture at the top looks really bad because I had to take a picture of it because I could not figure out how to do a alt+prit screen to take snap shot. The only problem I see with the alt tab replacement is that when a window is minimized it does not show as a screen shot of the image. So, pretty much you have to get out of the habit of hitting the windows+d or windows+m keys if you use them

alt_tab_after.JPG
Alt+Tab after

The Open Command Window Here power toy is nice because you can just right click on a folder and select the Open Command Window Here option it will set the command line to that folder. No more cd c:\temp\blah\blah. Very nice.

Posted by gid at 10:05 AM | Comments (1)

July 14, 2005

Very Cool LCD

Sharp_Two_Way_LCD.jpg
Sharp Two-Way Viewing-Angle LCD

This is going to make multiplayer games even better. Though, if you were playing a graphics intensive game then you would have to have one heck of a vid card to handle both games running in two different process spaces. Yea, how would they do that? Maybe this was meant for web tv and not as a computer monitor. Heck, I don't know. It's cool anyway.

TOKYO (AP) - At last, a way to end squabbles over which TV channel to watch - without buying a second set. Sharp Corp. has developed a liquid-crystal display that shows totally different images to people viewing the screen from the left and the right.

One person can be surfing the Internet, using the display as a PC screen, while another watches a downloaded movie or TV broadcast. It also works for watching two TV channels: One person can watch baseball while another watches a soap opera.

The "two-way viewing-angle LCD," announced by the Japanese consumer electronics maker Thursday, will go into mass production this month and will cost roughly twice as much as a standard display.

Sharp will offer the product for worldwide sale, but the Osaka-based company will also supply other manufacturers with the displays for various products expected later this year, said spokeswoman Miyuki Nakayama.

Sharp says the technology offers many possibilities.

It could be used in cars so drivers can look at a map while the passenger watches a movie. Or at a store, sales clerks and clients can view different data on the same display simultaneously.

Another possible use is for billboards that display two kinds of advertisements depending on where viewers stand. The display will also work in the regular way and show a single image to all viewers.

One catch is that the images overlap if viewers stand right in front of the screen. Moving a few inches to the left or right may be necessary for a clear view.

Another drawback is that users will have to work out a way to listen to the sounds coming from the different channels. One solution is for one viewer to use earphones.

The technology appears to derive from Sharp's three-dimensional LCD displays, which work by projecting slightly different images to the right and left eyes without the use of special glasses. Sharp has been selling 3D laptops for a few years, aiming them mainly at engineers, architects and other professionals.

A U.S. startup, Deep Light LLC, plans to launch its own monitors next year that can present several different images to different viewers in 3D without glasses.

Posted by gid at 04:29 PM | Comments (5)

June 15, 2005

Window's XP bug....i think

Explorer with files that do not exist.jpg
Figure 1
Explorer with files that do not exist

So at work I have been bouncing around from machine to machine due to the fact that they wanted all the new contractors we were hiring to have desktop machines verse laptops, so I gave up my desktop for one of the standard developer laptops.

That when the trouble began.

When I was moving from my old machine I created a folder on my C drive called Desktop and I copied all the files and folders from my desktop into the new c:\Desktop folder. Then once I was done with the copy I zipped up that c:\Desktop folder and then burned it to CD.

Once I was on my new machine I copied that zip file to the desktop and extracted it. Several days later after I had gotten everything set up for development I started noticing that my windows explorer would start looking like this (See Figure 1):

The strange thing is that the folder icons in windows explorer would turn to Palm Trees, Search Icons, and a strange host of other images. Then if I tried to open any files I would get this error (See Figure 2): Notice the weird ASCII character in the path.

volume label syntax is incorrect.jpg
Figure 2
The filename, directory name, or volume label syntax is incorrect

Well after 4 new motherboards, three reimaged hard drives, 1 new hard drive, new memory, and a host of hardware and software techs working on the problem I was able to figure out the problem.

You can not have a folder called Desktop on your desktop. I am able to reproduce the issue on several other machines and I am extremely curious if others can reproduce the problem on 9x or XP SP2.

This is how I can reproduce the problem.

  1. Create a folder called Desktop on your Desktop
  2. Open Windows explorer
  3. Open either Word, Excel, notepad, notepad++ and save a file to your desktop.
  4. Go back to Windows explorer and either hit F5 or just navigate to a new directory.

What happens on your box?

Posted by gid at 02:50 PM | Comments (2)

May 22, 2005

google page rank plug-in for firefox

For those of you who are into google page ranks then I've got the plug-in for you. Here is a link. Its great because not longer do I have to go to third party web site to see mine or others page rank. It just displays it at the bottom right of the browser. Very cool!
Posted by gid at 10:08 PM | Comments (1)

March 18, 2005

firefox stuff

One of the super aggravating things here at work is how tied we are to IE and everything Microsoft. I really hate it. Here at work we use SharePoint portal server as a document repository, not ideal, but it works. Up until this point I have always used IE to retrieve document from the portal because I hated having to log in every time I access the portal through firefox.

This is what I learned today.

If you go into the about:config (type about:config in address bar) section of firefox there is a setting that can be changed, which will remedy the login issue. Go to network.automatic-ntlm-auth.trusted-uris key and add the name or names of the servers that SharePoint is sitting on. So, if you have three servers then add the names of the servers separated by commas. The finished product should look like this.
network.automatic-ntlm-auth.trusted-uris   "server1,server2,server3"

It?s that easy! Love it.

Posted by gid at 03:50 PM | Comments (1)

March 16, 2005

firefox plug-in

coolness.JPG
chattanooga weather

If you are a weather geek like I am and you are running firefox like you should be then check this out. It is a nifty plug-in that shows all kinds of customizable weather info. I have mine showing today?s and tonight?s forecast. Oh yea, it shows more than just US weather.

Posted by gid at 06:15 PM | Comments (1)

March 14, 2005

MSDN Event

Tomorrow there is a free MSDN event here in Chattanooga. I am planning on being there. Let me know if any of you geeks out there are going. Here is a link to sign up.

MSDN Event

Tuesday, March 15, 2005 1:00 PM - Tuesday, March 15, 2005 5:00 PM (GMT-06:00) Central Time (US & Canada) Welcome Time: 12:30 PM Language: English-American

Theater - Regal Hamilton Place Mall

2100 Hamilton Place Mall Chattanooga Tennessee 37421 United States

General Event Information Products: .NET and Visual Studio.

Recommended Audience: Developer.

Session 1: WinForms - Produce, Extend, Enhance This session will school you in several powerful aspects of WinForms development that you may not already know. By using new techniques and best practices, you?ll gain more control over the user interfaces you create and save valuable time when developing your applications.

Session 2: ASP .NET ? Fixing that last bug in your Web App. In this forensics session you?ll learn best practices for how to effectively troubleshoot an ASP.NET application - for both Web Forms and ASMX Web Services. You see techniques for debugging, working with tracing, and using event logs.

Session 3: Visual Studio Team System ? A Technical Tour This session will detail an end-to-end lifecycle scenario that not only demonstrates major components of Team System, but also illustrates the value of having a customizable integrated process in breaking down information silos and providing friction-free flow of data between team roles.

Posted by gid at 10:52 AM | Comments (0)

January 19, 2005

blogging 101

This is my 101st. post.

Well, I have been blogging since May 12th and have gotten to my 101st post. I have to admit that I was a bit nervous, when I first started blogging. I had secretly wanted to have a blog since Mark started his way back in 2001, but at the time I did not have a clue about web programming and really did not know where to start. Since then blogging has become something that can be done by anyone. You really don't have to have a technical bone in your body.

When I got to the point where I knew what I needed to know to start a blog there were several things about blogging that made me nervous, and subsequently kept me from starting for a good six or more months. I was in some way nervous about actually having a platform to speak my mind and having to defend my thoughts and notions. I was nervous that I would not keep it up, and I was nervous about people reading what I had written.

But, after my first few posts I grew increasingly more confident and comfortable sharing. I will only blog about so much though. There reaches a point in my family life and job life that I would never venture into. Still, for a good reason I might venture into areas that some people would be uncomfortable with. Though, I am not sure that has happened too much as of yet.

All that blabber aside here are a few things that I have found to be helpful regarding blogging. Yea, they are in no particular order.

  1. Find blogs of people who think like yourself and add them to your blog roll. Blog Rolls are a must. I am a lot less prone to blog roll someone than most. Some people have a blog roll down to their knees, which is okay, but please just make sure you have your blog roll broken out so that there is some semblance of order.
  2. Add two new folders to your FireFox bookmarks. Name the first on "possible blog roll candidate" and name the second "comments". I will talk about the "comment" folder in bullet 5. As for the "possible blog roll" bookmark, any time you visit a blog that interests you then add it to the "possible blog roll" folder. If you find yourself continually going back to that bookmark, then it is time to blog roll them.
  3. I found two good links recently on blogging from this post done by TulipGirl. This first link is the one I have had the most fun with. It is The Truth Laid Bear. Click here to sign up. The second link is here. It is a must read. He has done a great job of highlighting the ins and outs of blogging. Again, a must read.
  4. Read other peoples blogs and if they have said something that sparks much of any thought on your part, then leave them a comment.
  5. After making a comment on someone else's blog make sure you save the link in your comment folder, then at some point in the next day or so go back to see if they have responded. If they have not responded and the blog is not a blog that is worthy of the "possible blog roll" bookmark then delete it.
  6. Communities like blogexplosion are a great way to start out. The premise behind blogexplosion is, while logged in and surfing through blog explosion you earn credits for each blog you visit. Then those credits earned can be spent to have fellow bloggers visit your site. I only use blogexplosion when looking for new blogs to add to my "possible blog roll" bookmark; by the way, if you want to go and signup for blogexplosion then use me as a referral.
  7. FireFox FireFox FireFox. If you are using Internet Explorer then stop! For the love of all things clean and efficient, stop. You don't want to go blind, do you? Click here to get it.

Well, if anything in this post sparked a thought on your part, then please feel free to leave a comment.

Posted by gid at 05:19 PM | Comments (2)

January 09, 2005

top commenters script

Well, I finally got to do some coding that I have been wanting to do. Though, I was up till two in the morning doing it. I have added a PHP script on the left side of my main blog page. It is under the section ?Top Commenters?. The script pulls back the top twenty commenters that have URLs. It does not list the commenter that only leaves their e-mail address. It is not a perfect script. I would get into more detail, but I am not up for blogging about its idiosyncrasies. Let me know if you want a copy?
Posted by gid at 03:21 PM | Comments (3)

December 30, 2004

new machine

I bought a new machine several weeks ago, and am just now getting around to posting the specs. This is the first machine where I was basically able to get what I wanted. If I could go back I would have upgraded to the 19 in. monitor but oh well.

It?s a Dell:
  • Intel Pentium 4 (3.2GHz) w/HT Technology and 1MB cache
  • 1GB DDR2 SDRAM at 400MHz
  • 17 in (17 in viewable) E173FPB Flat Panel Display
  • 256MB Nvidia GeForce 6800 Graphics Card
  • 80GB Hard Drive
  • Microsoft Windows XP Professional
  • 48x CD-RW and 16X DVD+/-RW

To go with the new machine, I have a cable internet connection and am running a wireless network. I am so glad to be off of dialup. I think I was the last of my friends to leave the ol? 56k modem. I think it will be good for Leslie also. She use to not be able to check her e-mail very often because by the time she got the old windows 98 machine booted and logged on, she would have to getup to take care of John David. Then, by the time she got back to it she would have lost the connection.

By the way Leslie made a post or two about the birth of Elliot. Go check them out.

Posted by gid at 06:56 PM | Comments (1)

December 15, 2004

google zeitgeist

I ran across this guys blog here and he had a link to this Google page here. Very cool. You can go back to 2001. I noticed that firefox was number 9 under the most popular queries in November.

It is funny how much the word Zeitgeist has become a part of my vocabulary over the last year or two. I guess I have only used the word in theological conversations, but now google is using it so it must be cool.

Posted by gid at 07:44 PM | Comments (0)

December 10, 2004

firefox stuff

If you have not downloaded it then get it here.
If you have here are some FireFox goodies that you might be interested in.
For example, typing the following strings into Firefox's Address Bar (which the new browser calls the Location Bar) and pressing Enter brings up a wide variety of novel applets:
  • about: shows info on Firefox's version number, copyright, etc.;
  • about:config reveals the Configuration Console, a repository brimming over with scores of customizable settings;
  • about:cache displays a summary of both your memory and file cache,
    with a link to full file listings;
  • about:buildconfig lists the compiler options that were used to create your version of Firefox (and, since it's open source, anyone can compile a customized version);
  • about:plugins enumerates your installed add-ons, which can be quite numerous since Firefox is designed to be modular and extensible; and
  • about:credits is an "Easter egg" that includes the names of hundreds of developers and testers who worked on the product.

Also, this is one I really like:
Speeding up Firefox on Windows XP
You can speed up the loading of Firefox on Windows XP by adding it to the programs that XP "prefetches."
To do this, right-click the Start Menu item for Firefox, or any icon you use to start Firefox, and open the Properties dialog box. Add a space plus /Prefetch:1 to the command line and click OK. The resulting line might look as follows:
"C:\Program Files\Mozilla Firefox\firefox.exe" /Prefetch:1
A detailed explanation of XP's prefetch feature is provided by TechRepublic.
Posted by gid at 12:33 PM | Comments (0)

November 19, 2004

IE issue

ThePageCannotBeDisplayed.JPG

In the project I have been working on since I change teams I have a SQL Stored Procedure that is run from an ASP .Net page. The stored proc takes well over ten minutes to run and some of the computers running the stored proc time out after 30 seconds of execution time. The error I get is the generic Internet Explorer ?The page cannot be displayed? error.

The issue is resolved by making a small registry change. Navigate to:
HKEY_CURRENT_USER\Software\Microsoft\Windows \CurrentVersion\Internet Settings\

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\


Once there delete the Receive Timeout Double Word Value (REG_DWORD).


Receive Timeout

 
 

 
 
 
Then relaunch IE. Unless of course you downloaded this :)
Posted by gid at 04:02 PM | Comments (2)

October 18, 2004

sql server

Today I got bit from SQL server which a production app of mine is using. This is what happened. I have two temporary tables that I am creating in a SQL server query. The two tables look something like this:
result1.JPG

When I had to decide on the column types I should use for my temp tables I just decided to use whatever the type of the base tables column was i.e. varchar (255). The problem with that logic is that this database is highly relational, so the type of value that you get back from that column is dependent on joining with a key in another table. The value coming back could be a string, float, decimal, integer or anything else that can fit into 255 characters.

My query where I used those two temp tables looked something like this:
result2.JPG

The result from that query above looked like this:
result3.JPG

What I expected to get back was this:
result4.JPG

What happened was it concatenated the first two columns and did not add them. Coming from a Teradata background, I did not expect the concatenation symbol to be a ?+?. On the Teradata platform the strong concatenation symbol is ?||?. I was able to fix the issue pretty quickly by just making the data type of the temp tables integers. Like this:
result5.JPG

I really like using the ?||? approach over the ?+? approach for concatenation because, for one, such an error would have been caught in the coding process and would have never made it to production. Plus using the ?+? just seams too object oriented and looks out of place in SQL.

Posted by gid at 05:24 PM | Comments (3)

October 01, 2004

part I: Structure of a URL

As I said in my last post, I am taking a web services class. There are two things that I have learned in this class that I probably should have learned while getting a CS degree from UTC. They are "how http requests are handled" and "what exactly makes up a URL".

Structure of a URL
The syntax of a URL has this structure:
http://host[:port][path[?querystring]

I guess I never thought about URLs too much. I knew it could have a querystring and that depending on how the host server was set up you could either add the 'www' or not. What I find interesting is that you can specify the port that the URL will connect through. So both of these URLs are valid:

Uses the default port for http, which is port 80.
thegidcumbs.com/dblog/index.php?querystring=value 

If you know something that I missed about what you can do with a URL, then please leave a comment?
Posted by gid at 07:31 AM | Comments (5)

September 30, 2004

microsoft course 2524C

essentialXML.jpg

The last two days have been spent in training here at work. The class that I am taking right now is "Developing XML Web Services using Microsoft ASP.NET". It has been pretty good so far, but it is moving too fast. On top of that they are not letting us keep the class workbooks. I guess since this is a official MS course the company has to pay MS for the class in order to buy the book. Being that the company will be teaching this class to the next group they want to be able to just reuse the workbooks and not have to shell out more dough to MS. I guess that makes sense, but because of the speed of this class the workbooks would be very useful.

They are letting us keep one book. I have never been a fan of Quick Reference books. If I need a quick reference I just go to google. If I need to know how a technology works I get a book or take a class.

The picture to the right is of the book they are letting us keep.

Posted by gid at 05:26 PM | Comments (0)

September 29, 2004

asp.net

I am doing this post so that I can document the resolution to an issue I was having with a ASP.Net project I am working on.

Problem: Due to the way ASP.net handles garbage collection of objects when running a ASP.net application when the debug flag is set to true, in a production environment it is important to remember to have the debug flag in your web.config file set to false. The problem I was having was when I changed the debug flag to false my application would crash.

Narrowing down the problem: I was able to narrow down the problem to one line of code.

 
SDAdapter.Fill(dsDataSet,"TABLE1");

The error I received after several minutes of that line being executed was: [Thread being aborted] or [HttpException (0x80004005): Request timed out.]. I repeatedly tried to set the CommandTimeout property of the DataAdapter, but the command would timeout well before the CommandTimeout properties time had expired.

Solution: Evidently the Machine.Config file has a httpRuntime node whose ExecutionTimeout attribute has precedence over the CommandTimeout property of the DataAdapter. The two solutions to this issue was to either change the Machine.Config file, which is not a great idea or to add that node to the projects Web.Config file.

This is a link to a site with a good write up on this issue. here

Posted by gid at 04:53 PM | Comments (1)

September 28, 2004

css3

This should be very cool:CSS3 Border-Image
Posted by gid at 04:33 PM | Comments (2)

September 14, 2004

got to love them spam bots

I am growing extremely annoyed with the spam I have been getting here lately on my blog. The funny thing is that it would start just when I am to busy to even delete it. I added a check box that has to be check inorder to post a comment. I am 100% sure that any half way decently written spam bot will not be fooled by this, but it is worth a try.

I plan on having a dynamically created image with a number in it, which will have to be entered into a textbox before a comment is entered. The problem is that my comment page, written by MT is not written in php. That being the case I can not use the code I wrote for another project I am working on. I am either going to have to sit down a learn perl or change blogging tools. Being that I am to lazy to change blogging tools, I guess I will have to learn perl. Erm...
Posted by gid at 08:16 PM | Comments (6)

August 20, 2004

great hackers

This is just a great article! It has to be the best article I have read in many many months. So much so that I almost wet myself because I didn?t want to leave my cube until I finished it. I also forgot to eat my lunch and now I am really hungry. The article is by Paul Graham and is titled Great Hackers. I found this article while reading external monolog. I would give external monolog a trackback but I guess he is not using them.
If you?re a programmer this article is a must read.
Posted by gid at 01:29 PM | Comments (0)

August 07, 2004

we were so poor

Alright, this post is deviating from were I had planned for it to go, but I guess that is ok.


First, this morning I remembered about the Monty Python skit "We were poor". I first read this when I was going to Chattanooga State. I think I was suppose to be doing a research paper on something, and as is always the case with the internet one thing lead to another and before I new it I as reading this skit. I remember sitting in the computer lab trying not to laugh, which didn't work because I had people in the lab looking at me like I was on something as I broke out into uncontrollable laughter.
I decided to print the skit so I could share it with Adam James who was taking an Accounting II class with me during a summer semester. I decided I should wait until the class had really gotten under way before handing it to him for him to read. It was really a mean thing for me to do, but I could not help myself. Before to long Adam was snorting, while trying to control his laughter. He had to make a quick exit from class before he totally lost it. As I remember it he came back to class after a few minutes and for some reason tried to continue reading it again, which was less successful then the first time.

Second, I was exporting my bookmark for the first time from FoxFire (very cool). After the export I decided to look at there syntax and notice they were using the <DD>, <DL>, and <DT> tags, which I new nothing about. I ended up at the W3.org site trying to figure out what they were used for, and it just so happened that the example of a way to use these tags was:

Another application of DL, for example, is for marking up dialogues, with each DT naming a speaker, and each DD containing his or her words.
Which just so happened to be exactly what I was going to post. Below is an excerpt from the "We were poor" skit done by the Monty Python.


MP:
Aye. In them days, we'd a' been glad to have the price of a cup o' tea.
GC:
A cup ' COLD tea.
EI:
Without milk or sugar.
TG:
OR tea!
MP:
In a filthy, cracked cup.
EI:
We never used to have a cup. We used to have to drink out of a rolled up newspaper.
GC:
The best WE could manage was to suck on a piece of damp cloth.
TG:
But you know, we were happy in those days, though we were poor.
MP:
Aye. BECAUSE we were poor. My old Dad used to say to me, "Money doesn't buy you happiness."

It seems strange that the <DT> and <DD> tags aren't suppose to be closed. I would have thought that the W3 would have recommended that just to be XML compliant. From the docs it only looks like the <DL> should be closed. I also don't know if I like that the <DD> tag forces a line break. What if you wanted the author and the author text to be on the same line? I guess they did that so you would not need the <br> tag.
Posted by gid at 01:22 PM | Comments (0)

July 28, 2004

tar baby

tar baby
tar baby
My boss?s boss was talking to me a few weeks back and referred to the project I was working on as a tar baby. I think that description is probably the best description I have heard in a long time. I don?t know if it is because of where I work or if it is just apropos to programming in general, but it is just a perfect description for those projects that get dropped in your lap, and for whatever reason you just can?t liberate yourself from.
It?s funny because now at work everyone is using the tar baby phrase to describe that project that they hate but just can?t get rid of it.
Posted by gid at 07:17 PM | Comments (0)

July 24, 2004

http headers

I am working on a php script to pull my blog roll from a database. My goal is to have my blog roll ordered on the page by last update date. So the last blog to post will be at the top. Also, if someone has not posted they will be dropped off the list after 3 months or so. Once they post again they will be added back to the list automagicly(ben thinks he might have invented this word but he is not sure).

I have about 90% of the script written. I seem to have made a assuption that was completly wrong. My understanding was that http headers were included with every page, but when I run this code it does not look that way.

Why is that?
Posted by gid at 03:21 PM | Comments (0)

July 15, 2004

fits in my pocket

I forgot to mention that I went to the CHADNUG on Tuesday night. I guess there were between 40 and 60 people there. The topic of conversation was Longhorn and Eric did the speaking this time. The most interesting part of the talk was on XAML. I don?t feel like blogging about XAML but I will say it does seem interesting and way too proprietary.

The highlight of the evening was the swag. I ended up landing the View Sonic Pocket PC (V37). very nice?. The problem is I don?t know what to do with it. I really want to get a digital camera but at the same time I would like to keep the Pocket PC.

Because I have a MSDN Universal subscription I was previously given a View Sonic Pocket PC (V37)., but I sold it on eBay. From time to time I have regretted selling the thing, but I really have no use for it. Now that I have one again I am stuck in a quandary. Sell or not to sell. I think I am going to sell it because I already have the info set up on eBay, so selling it will be very easy. I guess I need to figure out which camera to get. I want something that fits in my pocket and takes great pictures.

Any ideas?

Posted by gid at 06:14 PM | Comments (2)

July 02, 2004

why am i still using MT? because I finally got it set up the way I wanted it.

It has been a while since I made a blog entry. I was using Premium-Host.com as my host and they changed servers on me, which made MT choke. Every time I would add an entry or someone would leave a comment the security on the file would change and the file could not be viewed. I would have to go in and change the security to get it to work again. I did find the answer to my problem:

My PHP output files need to be executable

If you are generating PHP files through Movable Type, some webservers will require that the generated files have the execute bit set (in other words, that the permissions are at least 755). By default all files created by the system will have their permissions set to 666, and you will receive errors about your files not being executable.

To fix this, add this line to your mt.cfg file:

HTMLPerms 0777

This will set the default permissions for all files created by the system to 777; note that if you are using the HTMLUmask setting in mt.cfg, the setting for HTMLPerms will be adjusted by the umask setting. For example, if you have set HTMLPerms to 0777, and you set HTMLUmask to 0022, all files created by the system will have permissions of 0755.

It was the last straw with premium-host, so I jumped to lakesite.net. I am glad that I did. Andy is developer friendly and that is nice to have in your web-host.
Once I did change to lakesite.net I did have one other issue with MT. That I never could resolve. I thought it was this was the answer:

I changed hosts, and now I can't log in to Movable Type.

When you change hosting providers (or just move to a different server at the same provider), it is possible that the two servers have different versions of the Berkeley DB library; this is the library that Movable Type uses to store your data. When you copy the DB files from one host to another, if the two hosts have different versions of Berkeley DB, the new host will not be able to read the files from the old host.

This can be fixed by converting the DB files over to the format used by the new library version; this is accomplished in several different ways, depending on the Berkeley DB versions involved. The files that need to be converted are all of the files in your db directory whose filenames end in either .db or .idx (the .lock files do not need to be converted).

The following steps require that you have shell access to your server, and imply that you are somewhat familiar with running Unix commands; if this is not the case, you should ask your hosting provider to help you.

  1. First, and most important, back up your DB files; you need to create backup copies of all of the files in your db directory. (If you do this by downloading the directory, make sure to transfer it in binary mode.)

  2. The easiest way to convert the DB files is to use the db_upgrade program; unfortunately this is not available on every server, but it may be available on yours. To find out, log into your shell account, and type the following at your shell prompt (<db_dir> is the path to your db directory):
    $ cd <db_dir>
    $ db_upgrade *.db *.idx
    

    If your server has db_upgrade, this will convert all of your DB files over to the new format. If this works, you're done, and you can skip the following steps; Movable Type should now work.

  3. If the above db_upgrade command does not work--for example, if you get an error saying that command not found--then you will need to use the following method to convert your data. This method dumps out all of the data from your DB files, then loads it into new versions of those DB files.

    The program used to dump the contents of your DB files is called either one of two things: db_dump, or db_dump185. To determine which program you need to use, first try running the following command in your shell account:

    $ cd <db_dir>
    $ db_dump author.db
    

    If this command is successful, you will see a screenful of data dumped out. If it is unsuccessful, you will get an error message; in this case, try using the following command:

    $ db_dump185 author.db
    

    Again, if the command is successful, you will see a screenful of data. If this also fails, then you will need to contact your hosting provider.

  4. Now that you have determined which db_dump program to use (either db_dump or db_dump185), you can dump all of the data from your old DBM files and load it into new versions of those files. To do that, try the following (substitute db_dump185 instead of db_dump, if necessary):
    $ db_dump -f author.db.data author.db
    $ mv author.db author.db.old
    $ db_load -f author.db.data author.db
    $ chmod 666 author.db
    

    You will need to run these four commands for each file in your db directory whose name ends in .db or .idx. After you have done so, you're done, and Movable Type should now work.


But it wasn't. Andy and I did everything we could to save the old entries (and I really thank him for all the hard work) but in the end I just had to start fresh and manually reenter the old post. One good thing is that I am now using MySQL vs. Berkley, which I like. Oh yea all the comments that were added previously were lost. Well?I actually have them in the Berkeley format. I might eventually go and dig all the text out and post them back? I doubt it though.
Posted by gid at 07:36 PM | Comments (0)

June 17, 2004

Blind Spot

Maybe I am just blinded by the little programming world that I live in but it seems to me that this index could not be correct. I have to say that I do not know one programmer that is getting paid to program in c. I think I know a few c++ programmers but not c.

Posted by gid at 03:57 PM | Comments (0)

May 19, 2004

blogging tool regrets

At this point I am a bit bummed out that I installed Movable Type. Before installing it I searched around for a blogging tool written in php, and never really found one that was worth installing. Within just a few days of getting MT installed Michael installed wordpress. I have to say at this point I am torn between the two blogging tools. I think I am going to stick with MT for a while and them move to WP.

Posted by J. David at May 19, 2004 10:15 PM
Posted by gid at 03:51 PM | Comments (0)