Great Idea for engineering teams

A great example of switching up the normal work day to push innovation.

Shift in Patent Law

Interesting article to gain insight into the fine details of the latest in software patent law.

A few good sites

A few great sites I’ve come across lately:
Need a presentation that stands out from the pack
Or perhaps you sell your idea and need to hire some people to help. Manage your resumes with the The resumator

Style Guides for Web Sites

So you have a CMS and want to know what the content should look like. Most people think that all they need to do is tell the css developer what color and font they need and they are done. That is not the case and inevitably things like why do my bulleted lists look bad? Why is heading two bigger then heading one? What are links purple? etc. arise. The person handling your creative creating a style guide ahead of time can avoid these type of issues.

Sitepoint has a good article explaining the overall goals and objectives of a style guide

One way to approach writing a style guide is to throw up a page in your CMS with varied markup for the different types of HTML markup there is and see if it works in your template. If you don’t like something make sure your style guide includes statements to change your desired areas:
HTML Markup that serves as a great demo/test of a style sheet

Once your main markup styles are covered then the task comes to defining other styles for special types of content on the site. Think of things like do I want a special style defined for questions in the content, callouts to key points, etc. A good example to think of is an academic textbook that uses consistent styling for different types of learning elements on the site.

Good AMP & OSX Server Config and Management References

This is meant to be a list of good linux / OSX AMP stack reference articles.
Installing AMP stack on OSX in order of ease: – Non intrusive way to get a site with all the goodies you want like mcrypt – Setting up AMP using as much of the pre-included stuff with OSX – Setting up AMP from source with lots of developer goodies like PHPUnit, XDebud, etc. – And finally a mCrypt OSX installation article is you want everything and have it from source
Managing Users and Groups:

Good .gitignore for WordPress

Here is a good .gitignore file for wordpress:

Great new meeting tool

For Webex functionality that is way simpler I recommend checking out

Good web font list

Check out this good font list for your next web project.

Turbine for PHP and CSS

For those frustrated with maintaining large amounts of css and wish there was a way to write once using a clean method and have it generate cross browser compatible friendly generated css should check out Turbine. Its very similar to Sass for Ruby.

Great Talk on Economic Trends and Technology

iPhone Application development

Actual iPhone developers have come up with a 37 page guide to developing iPhone applications. What makes this such a good resource is the fact they included design rationale, and the challenges they faced with how they solved them.

Some background into the Bunk name….

History may be Bunk but here is some bunk history. With the last name of Bunk I’ve been asked many times of the name got shortened on the boat over to the US. Well it turns out is did. My Great Grandparents Josef and Agnieszka Bak came over to America and at some point their name got changed to Bunk. Ellis Island has a great website where you can look up the records of passengers coming over. Below if the one for my great grandma.
Arrival Record of Adnieszka Bunk
Interesting to note on the manifest that she had not previously been in the US, so she was coming to join Josef at that time. His last name is also given in the list as Bak. I can find no record of his arrival, probably came before Ellis was constructed. She came from Komorow, which I believe is located west of Krakow in what was then Silesia (a part of Germany, since Poland didn’t exist at that time). My 2nd cousin Jeff remembers that Mom (My great Grandma) said she remembered her father hating the Prussians (e.g. Germans?) which would make sense if they both came from somewhere in Silesia.

Remote Aquarium Monitor and Control System

As I was taking the dust off of my portfolio and resume this weekend I came accross the link to my senior design project, a Remote Aquarium Monitor and Control System. It was one of the most engaging things i got to work on during college. Check out our homemade underwater temperature sensor. It saved us a $50-$100 in expenses and worked incredibly well.
The project was featured on RNews (Rochester News Station) and the Democrat and Chronicle.

Great Core Skills Tutorial for Photoshop

A tutorial on 5 Great Background Masking Techniques in Photoshop. As someone who only dabbles in photoshop this is a very good tutorial I recomend to other dabblers.

Sony, Rootkits and Digital Rights Management Gone Too Far

Sony, Rootkits and Digital Rights Management Gone Too Far. I want to see someone sue sony for this ridiculousness. Enough is enough! In another related case of DRM gone too far check out this information on new legislation that goes way beyond the broadcast flag legislation that appears to have been successfully put down is the Analog Hole bill. It will be illegal to make anything capable of digitizing video unless it either has all its outputs approved by the Hollywood studios, or is closed-source, proprietary and tamper-resistant.

I’m now a Zend PHP Certified Engineer

I have passed a certification test that came free with my attendance at the first Zend PHP Conference. I am now a Zend PHP Certified Engineer.

PHP Frameworks

List of PHP Frameworks to check out:

Problems using a combination of Microsft SQL, DISTINCT, and ORDER BY

Ran across a problem today. I have a pretty complicated search that needed to
- Display results 0-30, 30-60, etc based on users input
- Sort based on any field the user chooses
- Has a one to many search criteria of an attribute that must be free text searched
I had most of this solved in a previous version but the new twist was the one to many relationship of the variable. Simple to fix by using the DISTINCT keyword, right? Wrong, looks something like “…WHERE id not in (SELECT DISTINCT TOP 30 id WHERE….ORDER BY name) ORDER BY name”. Suddently the addition of the DISTINCT keyword requires that the field I order by be in the select clause, but in a NOT IN sub select clause I can only have one select field.
The solution I came with is to use the field I am sorting by for the select clause using PHP. The problem with that approach is that one field is not DISTINCT enough to get me the results I need. To overcome this I appended all of the possible fields together with the field that it was to be sorted by first. I then changed my order clause to order by whatever the first select cause happened to be.
The end result with possible where clauses stripped out looked like:
SELECT DISTINCT TOP 30 AS id, AS name, AS source
FROM training_atc INNER JOIN
training_to_discipline ON = training_to_discipline.training_id INNER JOIN
webcal_categories ON training_to_discipline.discipline_id = webcal_categories.cat_id INNER JOIN
training_to_functionalArea ON = training_to_functionalArea.training_id INNER JOIN
functionalArea_atc ON training_to_functionalArea.functionalArea_id = INNER JOIN
sources_atc ON training_atc.source =
WHERE (1 = 1) AND (( + NOT IN
FROM training_atc INNER JOIN
training_to_discipline ON = training_to_discipline.training_id INNER JOIN
webcal_categories ON training_to_discipline.discipline_id = webcal_categories.cat_id INNER JOIN
training_to_functionalArea ON = training_to_functionalArea.training_id INNER JOIN
functionalArea_atc ON training_to_functionalArea.functionalArea_id = INNER JOIN
sources_atc ON training_atc.source =
WHERE 1 = 1
If only MS SQL had a LIMIT keyword like MySQL!!!

Micorosft SQL Server and PHP Text Size limitations

Recently I had to debug why I was unable to insert more then 4096 characters of information into a text field of my MSSQL database from a PHP script I was running. After some googling I saw people reference setting the TEXTSIZE attribute. This did not seem to do the trick for me. After some stumbling around I dicivered the problem lies in the php.ini file. You need to set the folllowing variables as shown below.
; Valid range 0 – 2147483647. Default = 4096.
mssql.textlimit = 2147483647
; Valid range 0 – 2147483647. Default = 4096.
mssql.textsize = 2147483647
Bug Fixed

Microsoft Does a kick but UI – Sparkle – Flash with better development support

Man, I have been out of date with the latest and greatest of what Microsoft has been doing. Check out this video of Sparkle.
I only had a rough idea of many Microsoft technologies like XAML and Avalon but this video made them much more clear. This was my first time checking out Channel 9(Microsoft’s Developers Blog) and I think I am going to have to check out more. Looks like Flash has some serious catching up to do on this technology. What a slick UI. The down side of this really cool technology is it looks like you need IE7 to run your program as a web distributed app. Looks like you can run a stand alone app on any windows machine with .NET support. But that means you can’t target Linux and OSX. I know mono is an attempt to be able to run .NET based stuff on Linux but to be honest I have no idea if apps developed on this are compatible or how mature Mono is. Cross compatibility aside this is some seriously cool technology!

Over 100 factors google uses to rank your page

Here is a good list of over 100 factors google uses to rate your website.

Top 10 CSS Resources

Here is a list of the top 10 CSS Resources on the web. Having frequented many of these sites I can say its a pretty good list.

Google has filed a patent for how they determine your website’s rank

Lots of google secrets revealed in detail. Check out this analysis of the patent Google has filed.

All the setting you need to check for File Upload Size Isues with a Windows 2003 / PHP Webserver

In the php.ini File check

And on the Windows IIS configuration check

Joel on coding conventions

Making Wrong Code Look Wrong

How to install and use a diff tool

I have tried numerous diff tools but the one Ilike the most is tkDiff because of it’s colorful approach to comparing files. The only downside is that you need the extra step of installing the Tickle engine first. If someone knows of a free diff engine as nice as Tickle’s diff them post a comment and let me know.
1) Download the ActiveState Tcl Client and install.
2) Download the tkDiff program
3) Simply create a shortcut to the script. As long as you choose to associate .tcl files with the Tcl binary the program will open automatically.
4) Select the files you want to compare and your good to go.

Yahoo enters the mp3 world with an impresive replacement to iTunes

Yahoo has come out with the Yahoo! Music Engine. Here is a good overview of the Music Engine’s Features. Perhaps the coolest thing Is they have a plug-in api that allows people to write their own extensions. I would love to see a plugin that provides the mp3 tagging capabilities of MP3 Tag Studio. They even have supposedly support ipods. Once I get some free time I think I’ll give this player a test run.

Overcoming IIS http post file upload limit

To solve this problem go to C:\windows\system32\inetsvr and edit metabase.xml after stopping IIS.
The default setting of AspMaxRequestEntityAllowed is set to 204800. To
allow for larger upload, increase this setting. Example: To increase to 1MB
then 5 * 200kb = 1MB. Multiply 204800 * 5 =1024000 so change the setting
to 1024000.
Alternatively, if you install the IIS Resource Kit it includes a tool called Metabase Explorer which can alter the metabase while IIS is running.
In some cases, you may need to enable a setting called “Enable Direct Metabase Edit” in IIS. To do open up the properties dialog for the computer name at the top of the IIS Manager window and the option should be listed there.

How to read blogs

Great Article out there for people who want to start reading blogs

100 Gigs of Untagged MP3s and an Ipod Oh My

I love my iPod! I have long been using iTunes for my music management even before I got an iPod. The problem was they are systems completely dependant on ID3 Tags. I had a 100 GB collection of largely untagges MP3s (RIAA if your listening they are all from CDs I own or from the public domain). The only thing I have going for me is that the mp3 are storred by Genre, then Artist, and in some cases album below that. How do I tag some a really large collection of music?
Well my first thought was writing a perl script that went through the collection and based on the foldername would tag all mp3s with the artist tag. The Artist tag was the only really important tag in my opinion to be able to effectively manage your music collection in itunes. If there is Title tag then the filename is used and although the files used many different filenaming conventions they were named with a portion of the title somewhere in the track. The problem with this approach is there are many folders that there are many exceptions to the rule.
Then I started looking at software to acomplish the task and came across a program that stood out from the rest, MP3 Tag Studio. This tool was able to mass set tags based on the folder name. This handled both Genre and Artist. For instances when there was albums I could tag those. For comilation folders or soundtracks I could set the ID3 tages based on the filename of the track. The set from filename feature was extremely flexible and could always find the format I was looking for. I now have a properly tagged collection.

Mysterious Question Mark Appearing on my Web Page

I build a website using a custom content management system that inserts links and documents text from a popup window (see earlier post). A bug came up that pointed out that question marks mysteriously appeared after the links and documents in the web page.
I began by looking at the source that was generated on the page to only discover that at first glance there were in fact no question marks in the markup at all. This meant that none of my code accidentally appended a question mark to the end of the display text. I immediately suspected some sort of ASCII Unicode Mix-up and tested that out by going to the View->Encoding setting on the browser and switched from Unicode to Western European displays and found the question marks disappeared. Upon examination of my source I noted that #A0 hex appears as a space in ASCII but a question mark in Unicode. I needed the text to use #20 instead to clear up the problem.
The first thing I did was find where the offending character was getting inserted. I discovered that my popup’s JavaScript function returned   in the return string. That got inserted as the ASCII character #A0 instead of the desired actually characters  . Switching this to a simple space worked fine.
My next task was to replace all of the offending characters that had already got inserted in the MSSQL database with the correct space character. For this I simply used the following sql script.

UPDATE content
SET the_content = REPLACE(CAST(the_content AS VARCHAR(8000)), ' ', ' ')

*Note that the space as the second parameter for the Replace Function was actually A0 hex and the third parameter was the correct 20 Hex. I should also note that because the replace function can’t handle a text data type as its first parameter I had to cast it into a varchar. This means that any offending characters that appear after the 8000th character would not be replaced. The chances I had that much content inserted was unlikely but I verified it with the query

SELECT content_id, the_content
FROM content
WHERE (the_content LIKE '% %')
No Results, I’m in the clear.
Now I was thinking about ending this entry here but what happens if some poor sole stumbled across this entry, had the same problem, and had huge entries above the 8000 character limit of a varchar. He would have a whole lot of of manual work that needed to be done. Well I did a little Googleing and found you could use this script to replace the text in a text data type in MSSQL.

Content Management System that inserts dynamically generated links

The Problem: In designing a custom content management system for a large knowledge management site I needed the ability for links to be administered separately and have Meta attributes, descriptive text, specific icons, etc. tied to them. I also needed the Content Editor that uses the wysiwygPro editor to insert links from this central link database. The inserted links needed to automatically change in all the content sections when changes in the link database were made.
The Solution: Well the design of the link database was pretty straightforward and I won’t get into that here. The challenge was having all the links change in all the content when a modification to the link database was made. The way I looked at it I had two solutions; one was after making a change to link database a script be run to find all the instances of the old link and do a replace with the new link, descriptive text, icons, etc, or I could insert a php function call like displayLink(id) that gets called as the content page gets rendered. The latter is what I chose.
This raised a subsequent problem. The WYSIWYG Editor I used, wysiwygPro, would not display the php function call like it should. After all it was not html yet. Even if I wrapped an eval() function around it, it would subsequently be static html when saved to the db. So what did I end up doing?
Use a span that displayed like it was a link with an id that corresponded to the id of the database id. The display text was used as the content of the span. I would have the link popup insert html like

<span class="fakeLink" id="1077">Solidification in Sealed Ampoules</span>

By defining in a style sheet the class

text-decoration: underline;
color: #0000FF;

I get the desired look in the WYSIWYG Editor.
Now to get wysiwygPro to insert that code instead of the normal link I had to make some modifications to hyperlink.php with the insert_link function I changed it to output:

textToReturn= '<span class="fakeLink" id="'+document.document_form.link_id.value+'">'

I also had to have the code that generated the listing of links to pull from the database and include a hidden id element. My popup ended up looking like this
My next task was transforming the span into a function call before it got inserted into the database I accomplished this with a regular expression. The problem I ran into was that wysiwygPro would switch the order of the class and the id on me after submission. On subsequent loads the order would reverse again. So I had to run the submission through a filter to look for either order of class and id appearing. The resultant function was as follows:

function link2func($text){
//the pattern to search for
//$pattern="{<span class=\"fakeLink\" id=\"([^\"]+)\">([^<]*)</span>}";
$pattern="{<span id=\"([^\"]+)\" class=\"fakeLink\">([^<]*)</span>}";
//what to replace occurances with
$replacement="<? displayLink(\${1});/*\${2}*/?>";
//now do the work
$tempText = preg_replace($pattern,$replacement,$text);
//now run it through with the class and id in opposite order
$pattern="{<span class=\"fakeLink\" id=\"([^\"]+)\">([^<]*)</span>}";
//what to replace occurances with
$replacement="<? displayLink(\${1});/*\${2}*/?>";
//now do the work
return preg_replace($pattern,$replacement,$tempText);

Notice how I hide the display text in a comment.
Now when a user goes to edit the existing document I needed to transform the function call back into the span. The Function for that is as follows:

function func2link($text){
//the pattern to search for
$pattern="{<\? displayLink\(([0-9]+)\);[\s]*(/\*(([^*]|(\*+([^*/])))*)\*+/)|(//.*)}";
//what to replace occurances with
$replacement="<span id=\"\${1}\" class=\"fakeLink\">\${3}</span>";
//now do the work
$returnText = preg_replace($pattern,$replacement,$text);
return str_replace("?>","",$returnText);

Just make sure to wrap the content you pull from the db to display in an eval function so the functions get called. Problem solved.

As a person who will soon have a treo

I will be using google local for my directions

Blogs behind the firewall

Here is an interesting article on blogs behind the firewall. The differences between an internal and external blog.
As I read this I think that blogs internal to the comany are a good idea as I believe it would improve company communication and the RSS model is a superior way of reading news when compared with periodically checking a website for new entries. The problem is the company I work for is very distributed across the world on many different ip networks, simply putting a blog server on our corporate intranet would not work.
The solution that is more resonable would be password proteting RSS feeds using http authentication. This requires a news aggregator that supports authentication and a bloggin system that facilitates easy and secure account management.
Where are the RSS aggregators on this technology?
Bloglines and other popular web based RSS Readers to the best of my knowledge do support password protected feeds. There are a few desktop clients that support password protected RSS feeds but I like to access my feeds from the web wherever I am. Looking at the Wikipedia entry for news aggregators there is only two aggregators listed that mention they support password protected feeds in their descriptions. Not Enough!
When it comes to using password protection on blogs, Jeremey Smith talks about the options out there for acomplishing this. For the internal company blog the LDAP integration seems to make the most sense. But it still requires some work to get going. And your still left with a limited set of aggregators that support authentication.
So what needs to happen to internal company blogging practical
- Have all aggregators support HTTP authentication
- Have blogging software support seamless LDAP integration
Until this happens the solution is messy at best.

Using SOAP with PHP

With an upcoming potential project that will be done with PHP interfacing through a SOAP api to another application I decided to do some reasearch to see what the API is like. As I ecpected pretty straightforward. If I implement the solution I’ll share what the things to look our for are. Until then check out this IBM article entitled, Access an enterprise application from a PHP script


CHeck out this neat new accessory for the ipod, iCopulate.

Pod On Pod Data Transfer Action!…
Here’s how it works. Simply apply a dab of the included iLube© onto the dock connector of your iPod® and slip it into one end of the iCopulate’s™ latex sleeve. Find another consenting iPod® in the vicinity and deftly insert it into the opposite end of the sleeve….
- Unique, ribbed, Latex sleeve surrounding embedded electronics for enhanced iPod® safety and increased user comfort
- Includes one 8oz tube of non-toxic strawberry scented iLube™

MySQL 5.0 Enters Beta

In what is being described as the ‘fixing 10 years of criticism in one release’, MySQL has moved the 5.0 Version of it’s database into beta. New features include, triggers, views, and stored procedures. A beta from MySQL means the software is pretty rock solid already, they are one of the few products I would consider putting into production as a Beta.
When I first started programming I used MySQL for everything. Other programmers would tout the advantages that MS SQL Server and Oracle offering more functionality. I would simply counter who needs them. Views, who cares if my SQL statements in my code are a bit messier. Triggers, just run a chron job that executes a code script. Stored Procedures, why not just have functions that do it in the script. Well I have to say after I moved to a job where MS SQL server was the perferred db platform I used these new features and eventually I became a fan of their use. I learned views improve performace, triggers are more responsive and make more sense from an archtectual standpoint, and stored procedures take the load off of the web server’s proccessing and also make more sense from an architectual standpoint.
ZDNet has a story on the release of MySQL 5.0. The article misses one huge point, the advanced clustering capabilities available in this version. While clustering has been supported before in a limited fashion in previous versions and helped along by 3rd party modifications, full support is finally here. MySQL uses a completely new file storage system that really makes my mouth drool.
Want more info. At the Orielly conference I had the fortune of getting an in depth overview of the new functionality of MySQL 5.0

Internet Explorer 6 Size Distotion Bug

Ok, My Internet Explorer 6 SP2 browser has been causing images, text, etc. to be scaled about 20% larger then they actually are for some time now. It’s a very fustrating bug I have tried to fix for some time now with no luck. Googling on the subject seems to mention an image distortion bug in IE6 SP1 that is suppossed to be fixed in IE SP2. I have tried enabling and disabling the automatically resize image setting with no luck. If anyone has a solution to this bug please let me know. Below is a screenshot of my problem.
Example of Image distorion in IE6 - Click for full size image
Update: I have figured out the problem on my own. I was looking around my display adapter settings and noticed that my DPI setting was 120 DPI not 90 DPI, having changed it I now get IE behaving properly. Personally I think this is a bug in IE, especially seeing Firefox seem to handle the higher DPI setting properly. If this helped anyone else drop me a comment below.


Ever wondered how Google maps, Google suggest, or similar applications accomplish their magic? The answer is AJAX, as defined in this article on AJAX a combination of

  • Standards-based presentation using XHTML and CSS
  • Dynamic display and interaction using the Document Object Model
  • Data interchange and manipulation using XML and XSLT
  • Asynchronous data retrieval using XMLHttpRequest
  • JavaScript binding everything together

AJAX works by having an AJAX “engine” run on the client machine that communicates constantly to the server. You can find links to people think AJAX is more hype then anything and others who think AJAX is the next best thing. Whoever you listen to one things seems to be sure. AJAX is difficult to implement. On the other hand I look at apps like Google maps and go wow, this is the future of the web. Time will tell to see if the power functionality you can achieve outweighs the hassle of implementation. I for one hope to get an opportunity to try out this technology.

Great CSS Tricks Website

Ten CSS Tricks you may not know

NASA Podcast

Science at NASA has provided recordings of science news storied for years but has decided to make the recordings available in a Podcast. I think I have found my first good Podcast to listen to on my Ipod.

CSS Layout – Making the transition from tables

So I used to consider myself a man who knew layout. Graphic Designers, don’t ask me what you should do, be creative and I’ll make the layout happen. Well you get confortable….and then….technology changes, tables are supposed to now be bad. Time to adjust….long overdue adjustment.
So with that said let me share with you some of the stuff I’ve learned in my ongoing adventure with CSS Layout.
1) Why can’t my div that centers fine in IE center in firefox with text-align:center?
The solution: Margin:auto on the div – appently a text-align:center on the parent container isn’t enough for firefox. Margin: auto works but this wasn’t obvious to me. Firefox fans I’m sure this is more correct to the spec but I don’t care. Googling on a variety of topics for five minutes didn’t give me the results I wanted quick enough. I founded what I needed checking out the resource links at CSS Zen Garden.
2) Why does the value bottom 0px; or right: 0px; not seem to stretch an empty div to the bottom or right in ie?
A2: Well it seems like IE does not recognize the right and bottom attributes when using an absolute layout because you need to give a height to the div.
The first things I came accross is the star hack to solve this one. Before talking about the solution there’s one big problem, XP SP2 has warning active x code is trying to execute. I’m only trying to do layout, do I really need to do a hack that causes a warning? Well with that said here is how it works.
In IE only use javascipt to assign a height: Make sure it’s parent container has a height, in the case of body give it a 100% height
Now The hack part which renders in IE only

* html .theleftbar {
height:expression(document.body.clientHeight - 142 + "px");

*Note you could substitute document.body for the name of a parent div if you wanted to do that, just make sure the parent div has a height set.
I was lucky enough to attend a talk by Eric Meyer, CSS Guru, and got the opprotunitty to ask him the right way to do this avoiding css. His answer, CSS can’t handle this in IE, the only solution is to use a table for the layout. He says currently there is no way to handle a grid layout with CSS that works in IE. Wow I think I thought tables were wrong. I guess there’s still room for them.
3) The box model issue came up, this is where height is misinterpretted in IE because of padding and margins get included in the height calculation when according to the spec this shouldn’t happen. This problem is all over the web so I’m just going to link to the solution of the box model problem.
As I run across more headaches in making the transition I will pass them on.


When I first learned about blogs I was like, oh these are kinda cool, they let people more easily create their own websites but I didn’t think they affected me that much because I didn’t have the time to go to all these websites and constantly read them. Then I was introduced to Bloglines, then everything changed. Suddenly the internet was working for me. I could go to one site and find out only the new content from all the sites that interested me. My daily intake of info took a quantum leap.
Well it has happened again with iPodder.
I always thought the idea of podcasts are cool but I doubt I’ll be able to listen to any very often just because when I’m at my computer I’m working. I’ll never have the time. Well along comes iPodder and now I have a software program that allows me to subscribe to podcasts and save them automatically saved on my computer. Then I can store them on my ipod for later listening. In the car, at the gym, on a plane, I get fed more info.
Now I just gotta find some good podcasts to subscribe to. Any suggestions?

Ruby on Rails

As someone who has never used Ruby before or even scene what the source code looks like I’m really interested now in trying it out after reading this Ruby on Rails article