Saturday, June 28, 2008

How to target="_blank" a link while keeping it XHTML compliant with jQuery

I had to make a bunch of links for a site I am working on for a client at work open in a new window.  It's not ideal but it was what was requested.

So I set up my links like such:

<a href="http://damnralph.com" target="_blank">http://damnralph.com</a>

I run my page though a HTML validator and am quickly reminded that the target attibute is not allowed in the XHTML 1.0 Strict standard.  I do a quick Google Search and the first couple of results bring back the following function to make it compliant:

function externalLinks() {
 if (!document.getElementsByTagName) return;
 var anchors = document.getElementsByTagName("a");
 for (var i=0; i<anchors.length; i++) {
   var anchor = anchors[i];
   if (anchor.getAttribute("href") &&
       anchor.getAttribute("rel") == "external")
     anchor.target = "_blank";
 }
}
window.onload = externalLinks;

This function expects there to be a rel="external" attribute inside the links you want to open in a new window.

That function to me looks scary and ugly.  jQuery to the rescue.

$(document).ready(function(){
    $("a[rel='external']").attr("target","_blank");
});

I was able to shrink all that down to one line of jQuery.  And it's a lot easier to read and more importantly it now makes the document XHTML compliant.

Note: I did notice a huge argument/discussion on if this is really truely standards compliant.  As when you take the generated html code and run that through the validator you still get the same compliance error.  While others say that you are separating the action from the presentation and that satisfies the standard.  Thirdly others say that target was depricated and as such we should never use it because the standards people think we shouldn't open new windows on people.   I don't know whose right or whose wrong but I did find the discussion interesting.  Thoughts?

Monday, June 16, 2008

Book Review: "Smart & Gets Things Done" by Joel Spolsky

I went into Borders the other night to look at books that I wanted to buy.  I wasn't actually going to buy them but just wanted to see what books looked good and would pick them up on Amazon.  Cause let's face it Borders charges full price for it's books Amazon doesn't.

Anyways, I ran across a book by Joel Spolsky called "Smart & Get Things Done".  Now I know of Joel from the Stackoverflow podcast he is doing with Jeff Atwood.  He is the founder of Fog Creek Software that makes the project management software FogBugz. Before that he worked for Microsoft and Juno Online Services.  He was even a paratrooper in the Israeli Defense Forces (an interesting fact that I learned from the book).

The book is pretty small and short. It's 182 pages and I was able to read it cover-to-cover in a few hours in one sitting.  This book is aimed at those who hire technical talent to their organization (aka Programmers).  This affects me as I have recently been tasked with hiring co-ops for 6 month positions at BrandLogic.  I have hired three people so far but I feel that I could learn quite a bit in the interview and selection process.  I actually purchased the book from Borders that day because it was less the $20 ($16.99 at Borders, $11.55 at Amazon) and because I found it to be an easy read and it would be a great help to me going forward.  I think this book would also be great to programmers who are about to head into the job market.  This is a great insight into what hiring managers are looking for.

Joel goes through the whole gamut in hiring a developer.  He starts out by outlining how one measures a great developer, defines where to find great developers, to what makes a developer happy.  He then goes through the selection process with how to sort through the resumes to weeding out candidates with a phone interview. He gets into the details of the interview once you have a candidate that has passed through the selection process before it.  Finally, Joel takes through the hiring process and talks briefly on how to fix suboptimal  teams.

I felt that the book was direct and outlined the issues with hiring developers and talked about how the great developers are not on the market.  Advertising for jobs in traditional job boards (Monster.com, Craigslist, etc.) is only going to bring out the desperate job seekers the great developers are going to seek out the exact job that they want.  Getting resumes from the traditional methods is only going to bring in a lot of noise and lot of resumes that just don't fit.

So where do you find great developers? Joel states three ways to finding great developers: 1. Go to the mountain- Go to conferences where great developers will hang out and start conversations.  WWDC for Apple Devs, PDC for Microsoft Devs, etc. Go to conferences where early adopters might hang out (Ruby on Rails, etc) and talk to them.  2. Internships - This is the method that BrandLogic employs.  Being that 100% of our office is RIT graduates we also feel our duty to help fellow RIT students with achieving their credits to graduate.  Anyways Joel's philosophy is that if you can bring in a student one, two years before they graduate and have them working in a summer internship it's like 6 months of an interview at the end of which you can thank them for their work and send them on their way or give them a offer in which you know exactly how they are going to work for you without anymore risk. And Finally the third way is to Build your own Community.  Basically if you start a blog or are known to people in the blogosphere and have a community following then when it comes down to needing to fill a position and you post a comment on your blog about that you will seem to get a higher quality selection of resumes to pick from.  Of course this is all easier said then done.  The how to build a community and being able to attract people is all hit or miss and Joel alludes to that.  It's not the easiest thing to do but if you can build a community it's a great resource to draw from.

Joel tries to define a developer in terms of how to make them happy and egger to work and thus more productive or be hired.  He stats each  developer needs his own private office.  This will make them more productive.  He goes into the reasons behind all of this.  One point is that developers seem to get into a zone when developing and a private office will help them stay in that zone longer.  Additionally he goes into the physical office, big monitors, Areon chairs, etc.   But the important part and the piece I think we've really tried hard to encompass at BrandLogic is that the personality of developers has to be inline with everyone else.  You can't hire jerks and think that people are going to be happy to work with jerks, even though he states Microsoft does just that.  Ha!

Sorting out the resumes.  Joel lays out his criteria for sorting out the good from the bad.  Don't hire someone based on a resume but eliminate people based on their resume.  Some criteria to look for Passion (look for evidence for passion to work with computers), Pickiness (look at their resume for glaring errors), English (can they communicate effectively in their resume, if not probably aren't going to communicate effectively in a team), Brains (high GPA or some other high honors [I disagree with this as it relates to our selection process at BrandLogic]), Selectivity (Has the applicant been though another selection process meaning did he make it into a school that only accepts 30% of it's applicants or something similar [again at BrandLogic we favor RIT and usually only advertise at RIT that this isn't an issue for us]), Hard-Core (ability to work in hard-core languages like Assembler etc. is seen as being better then working with Java or PHP [again I don't entirely agree with this statement, we look for someone with web programming experience so hard-core languages don't usually add to the experience desired for our needs]) and finally diversity (ability for new people to bring new ideas and ways of thinking to the table [I whole-heartily agree with this statement]).

After you've sorted through the resumes you need to weed through the resumes with a phone interview.  This will save money as you can probably get eliminate many people by just talking to them.  One example Joel gives is that after ten minutes he felt he couldn't stand listening to a candidate any longer. He was able to weed that person out and saved money on not having to bring him out.  The benefits to a phone interview is that you can listen to what someone is saying without visual prejudices getting in the way.

The Interview.  Joel works in NYC so for him he uses the city to entice his potential hires or if they don't work out in the interview at least use that experience to still leave an impression on that person. When they go home and tell their friends how awesome the place was and how awesome the interview was, their friends will apply next summer for that chance for the trip. This all goes back to how to find great developers.  By using your interview as a way to get known virally it's another way to draw them in. 

The interview needs to be a conversation and needs to have the applicant writing some kind of code.  It doesn't matter what language the code is in or if it's right or wrong the purpose is to get the person talking to find out how they think, how are they going to solve a problem.  If they make mistakes see if they catch them, ask them "Are you happy with this code?" and see if they catch their mistake.  Even if they don't make a mistake it'll be great to see if they are confident to say yes it's perfect when you ask them if they are happy with their code. Don't dwell on the technicalities you should base your decision on whether the person is 1. smart and 2. can get things done. 

Joel's company has many developers interview a person and usually has them come back with a HIRE or NO HIRE verdict within 15 minutes of the interview.  One person usually can't decide their fate but once a certain number of people come back with NO HIRE the interview is over and they won't be hired.

The rest of the book goes into how to hire someone and how to deal with a team that might be poisoning the rest of the team.  I'll leave those chapters to you to read.  I think the dealing with a team chapter is just a brief insight into management but Joel gives his recommendation into other books you can pick up to help with project/team management.

I really enjoyed this book. It was easy to read and was clear and to the point.  I have many ideas on how I can update and tweak our interview process at BrandLogic for future hires.

Help support this blog by purchasing this book from my Amazon link.

Monday, June 09, 2008

My first JSON Implementation

I wanted to share my first real use of JSON (JavaScript Object Notation) I created today at work.  The reason I find this exciting is cause I never really understood the use of JSON or how to create and use it.  I found a simple use when I wrote about pulling in twitter updated into my blog using jQuery and the Twitter API using the JSON data, but I didn't create the JSON and was just consumming it.

Well today I was tasked with creating a JavaScript array that could be easily updated by an administrator of a web site and the data would be used to populate a dropdown box.  Yes there are probably better solutions to populate a dropdown box but this was what I was tasked with. 

Now a year ago, I would have probably created an XML file to hold onto this data but a recent blog post from Jeff Atwood over at Coding Horror made me realize that XML is ugly.  From that article JSON seemed like a cleaner choice.

So basically my data needed to hold geographical regions of the US with sections or cities for each region.  Each region/city would have a url associated with it.  So in a separate js file I created this:

{ regions: [
                    {
                        text: "NorthEast",
                        value: "http://www.damnralph.com/northeast",
                        sections: [
                                         {
                                            text: "New York",
                                            value: "http://www.damnralph.com/newyork"
                                         },
                                        {
                                            text: "Boston",
                                            value: "http://www.damnralph.com/boston"
                                         }
                                     ]
                   },
                    {
                        text: "South East",
                        value: "http://www.damnralph.com/southeast",
                        sections: [
                                        {
                                            text: "Orlando",
                                            value: "http://www.damnralph.com/southeast"
                                        }
                                      ]
                    }

                ]

}

So looking at this you can see that it's very clean and easy to read.  We can see that it's two levels deep and we can see which sections are related to which regions at a quick glance.

Now I needed to take this JSON data and consume it and populate a dropdown.  I turn to jQuery to help me out (which was very slow today due to the 1.5 release of the UI plugin).  Here is the code to consume display it:

$(document).ready(function(){
    $.getJSON("sections.js",function(json){
        $.each(json.regions, function(i,ritem){
            $("#select_dropdown").append("<option value=" + ritem.value + ">" + ritem.text + "</option>");
            $.each(ritem.sections, function(i,sitem){
                $("#select_dropdown").append("<option value=" + sitem.value + ">--" + sitem.text + "</option>");
            });
        });
    });
});

This requires a select element on the page with an id of select_dropdown. 

Download the example code JSON_Example-DamnRalph.zip (1.24 KB)

Update: So an interesting problem came up at work today where we needed to validate the JSON because the data we entered had a syntax error (we figure this was the case cause it wasn't working as expected) and so we needed a validator to validate the JSON data.  Unfortunately the way we are consumming the JSON if it tries to parse it and it's not valid then the user doesn't get an error (is this the desired choice in jQuery's getJSON method?) so there is no feedback to what the sytax problem might be.  We found this online JSON Validator that worked to help us identify the syntax errors.

Wednesday, May 28, 2008

Google I/O 2008 - Day 1

Google IO is a two day developer conference in San Francisco which is held in the Moscone Center.  This year the conference is focusing on technologies like Android (mobile phone OS), Gears (ability to extend the browser to make your site work offline and sync when your online again), Gdata (API to work with Google Services like Calendar, Gmail, etc.) and finally a look into OpenID, OAuth and OpenSocial.

Since this was in San Fran it was fairly heavily covered and TechCrunch has a good write up with live blogging, video demo's (embedded below) and many pics. James Hamilton provides some rough notes from various talks from throughout the day. Update: Andy O posted his blog in the comments which has a well written detailed thoughts of the conference.

Some interesting announcements from the keynote.  MySpace is going to work with GearsGears officially changed it name to Gears dropping Google from the previous name of Google Gears.  The reasoning is that Google wants to strongly urge that Gears is Open Source and is for the community.AOL officially joins OpenSocial.

Here is a video demo of Android:


Finally, Scoble gives an idea of what the hot topics are at the Google Party:


(Photo from flickr user Nancy-. Used undeer the Creative Commons License)

Tuesday, May 27, 2008

Kings of Code 2008

Last month I first heard of ROFLCon from a coworker who asked for a couple of days off to go to Boston to attend this convention.  Well when he went I was doing some searching on Flickr and watched blogs to see if I could see any pictures of him from the uploaded pics.  Needless to say we didn't see any pictures of him.  I did however see 10 or more pics of John Resig and 100+ images of Jay Maynard (the Tron Guy).  So needless to say we are on the verge of firing our employee for lying to us about attending a convention he obviously didn't attend (I am only joking about firing him...or am I?).

Anyways, the point I am trying to make is that I felt that I in some way experienced the convention through the eyes of everyone that attended.  There were countless photos, video's, blog posts and twitter was huge as well.

So today I heard about the Kings of Code conference that is happening in the Netherlands today.  I only heard about it because John Resig is a speaker.  So I try the normal routine of doing flickr searches and blog searches on Kings of Code.  Sure enough I got enough info from people that posted on it that I felt like I truly experienced a part of it.

First I started out with the conferences web site (which is translated via Google Translate) and I got a sense of who the speakers are and what the schedule is like.

I then went to Flickr to see if there are people there that are posting pics.  This usually tells me if there are people there who are willing to post info on the conference.  Sure enough there are people posting pics.  And there is a picture of John speaking.  So that's cool I get the feel of how big the conference is and what the stage and stuff look like.

Now let's see if I can dig up what the speakers are actually talking about.  I go to Google Blogs (or Technorati) and do a search for Kings of Code and sort by date added.  Jackpot, I stumble on to Gijs van Zon's blog who live blogged the whole thing. He broke it up by per break.  We need to use Google Translate again and the translation isn't 100% perfect but you still get a lot of the information that was presented. Here are his live blogs:


I found some of the info in these talks useful and I wanted to share.  Thanks to those who posted pics and took the time to live blog the conference for those of us on the other side of the world to enjoy.

Update: With a little more digging I found some live streams of John Resig's talk.





(Photo from flickr user Inferis. Used under Creative Commons license.)

Wednesday, May 07, 2008

VMWare Fusion 2.0 Beta 1 is released

I heard through Twitter a while ago that VMWare Fusion is a lot better then Parallels at virtualization.  I don't own a Mac or use a Mac at work so I told my boss who does.  He got five copies to try. I overheard him talking with our systems administrator one day and he said "Ralph was right" I even listened to what he said I was right about and it was that Fusion was better.

I heard that 2.0 beta 1 was released the other day.  I went to go check it out and I'll tell you what, Fusion makes me want a Mac just so I can load Windows onto it.

It now supports Multiple desktops and DirectX 9.0 Shader Model 2 3D.  That means it can play a lot of the newer games in a virtualized environment.

Watch this video and be amazed:


Tuesday, January 15, 2008

Observations of MacWorld Blogging

Today was the keynote address at MacWorld 2008.  I observed quite a few things this year that didn't happen in years past.

For instance this year seemed like everyone was live blogging the event. From Fake Steve to Valleywag to the normal web information outlets for MacWorld Keynotes: Engadget, MacRumors and Gizmodo.

But it seemed the first timers didn't have much luck with keeping their servers up.  Fake Steve was using a third party web app to stream the live blogging directly to his blog.  Unfortunately the app crashed almost as soon as the keynote started.

Fake Steve then went to the back up plan of using Twitter. Valleywag had also planned on live blogging via Twitter.  MacRumorsLive had planned on also posting it's updates to twitter as well as on their website and IRC channel.

Ok so with these big names live blogging on Twitter as well as countless others at the keynote and with millions of people trying to refresh to get the latest from twitter on what was happening....well let's just say Twitter buckled.  It went down hard for at least an hour. Even now they are rate limiting the API calls to less then the normal 70 an hour to try to take the pressure off.

With all the live blogging, I found a few who tried to stream video from the Keynote. We watched this stream until someone asked the guy to lower his Camera/phone.  The picture was crappy and the sound quality wasn't the greatest but at least you could sort of make out what was going on and related back to the MacRumorsLive notes.  We observed at the peak the stream had over 9000 concurrent viewers.  The most surprising thing heard in that stream?  A baby crying in the audience, seriously who brings a baby to an event like this?

I heard iJustine tried to Stream as well.  Seems like she suffered the same fate as above.

But that brings me to my next point live video streaming seemed to be big during CES but it was really noticable today.  I caught Scoble recording most of this evening with his Nokia N95.  Here he is with Leo Laporte at MacWorld.  Here Scoble interviews Qik founder when a Video streaming orgy breaks out by four different people one being iJustine.


So who had the best info this year. Engadget had the best write ups but their server were starting to buckle from people constantly reloading.  Their page took forever to come back up.  MacRumorsLive had an awesome AJAX solution that didn't require you to do anything photos and updates "magically" appeared on your screen when updates occured.  In my opinion MacRumorsLive won the bragging rights.

It's fun to see how the new technology made today a much more interesting event to watch from a far.  It was also fun to see how the old technology players struggled as they are the now go to outlets for this event.

Either way with everyone sharing information it makes it easy for everyone to experience the keynote as closely as they do.  Thanks to you all for your hard work.

Wednesday, November 14, 2007

Update on my jQuery bug

Last month I posted about my problems with the jQuery UI shadow plugin where it wasn't working with absolute positioned divs.

I was looking at the Development jQuery UI group on Google groups this morning and came across this post by Brandon Aaron detailing how he cleaned up the shadow plugin.

I politely mentioned my bug I submitted and he politely told me that the latest version in SVN will now solve my problem.

And it does:



Yay, open source!

Interesting fact, when they release the next version there will now be a UI branch and a FX branch. Shadow was moved and will be in the FX branch.

Monday, November 05, 2007

VS.NET IDE Issue - ASPX gets separated from codebehind

Sometimes in VS.NET 2005 the codebehind for the aspx file show up in the solution explorer not connected.

To Solve this problem:

  1. Close Visual Studio
  2. Open up the proj file with a text/XML editor.
  3. Scroll down till you find the <EmbeddedResource> section.
  4. Find around where you need to enter in a new resource in relation to the file you're having issues with.
  5. add this for each file except the aspx file:
    <EmbeddedResource Include="Admin\Author\MassUpload\upload.aspx.cs">
<DependentUpon>upload.aspx</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Admin\Author\MassUpload\upload.aspx.resx">
<DependentUpon>upload.aspx.cs</DependentUpon>
</EmbeddedResource>

Related Links

Form & Designer File Becoming Separated


Saturday, October 27, 2007

Installing Rails on Ubuntu using VMWare Server

I installed Ruby on Rails,I think ;), on a VMWare Server installation of Ubuntu 7.10 using the following tutorials.

To install VMWare Server and Ubuntu: http://cmsproducer.com/Ubuntu-Linux-Windows-VMware-Server

To install Ruby on Rails on Ubuntu: http://paulgoscicki.com/archives/2005/09/ruby-on-rails-on-ubuntu/

Total installation time took me about two hours from the start of downloading Ubuntu to finishing the last step.

Now let's see if I can figure out how to program Ruby on Rails.

My first jQuery bug

Update: Bug has been fixed/closed.

I submitted my first jQuery bug today,  I am pretty sure that it's a bug and not something I am doing wrong, but hey it wouldn't be the first time.

I was trying to use the new jQuery UI to add a drop shadow to a floating DIV. Unfortunately, I was not getting the results I was expecting.

Here is the test HTML I was using to recreate the bug:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Shadow Page Test</title>
<script src="jquery.js" type="text/javascript" language="javascript"></script>
<script src="jquery.dimensions.js" type="text/javascript" language="javascript"></script>
<script src="ui.shadow.js" type="text/javascript" language="javascript"></script>
<style type="text/css">
#Alert
{
position: absolute;
top: 200px;
left: 200px;
background-color: #ffffff;
width: 200px;
height: 200px;
padding: 10px;
font-weight: bold;
border: 2px solid #ff0000;
}
</style>
<script type="text/javascript" language="javascript">
$(document).ready(function () {
$(
"#Alert").shadow({ offset: 5, color: "#000000" });

});
</script>
</head>
<body>

<div id="Alert">
This is some Alert text!
</div>

</body>
</html>
Again I was using the Shadow pluggin from http://ui.jQuery.com but this is what I was getting:



Notice how the three different colored shadow layers line up under the div instead of stacked so it looks like a shadow?

Anyway I sent it into the bug tracker in jQuery, I am ticket number 1853.

Here are the files to recreate this bug. ui.shadow_bug.zip (17.71 KB)

Friday, October 12, 2007

A Visual Explaination of SQL Joins

Jeff Atwood over at Coding Horror explains with visual Venn diagrams how joins work.  Even if you know how joins work it is still nice to see it in visual form.

Click here to see the joins.

Thursday, October 11, 2007

Click on your own Google Adsense links without breaking policy

Laurent Kempé writes:

If you are developing a site containing Google Adsense you might know that clicking on your own ad is not allowed.

To be able to test and click on your own ad and still follow Google AdSense Program Policies, just add following to your pages:

<script type="text/javascript">google_adtest = 'on';</script>

Don't forget to remove it on your production server! ;)

That's cool! The biggest worry of any Google Adsense participant is getting dropped from the program for clicking on your own links.

Wednesday, October 03, 2007

Ze Frank

Not sure if you know who Ze Frank is but he is a pretty big internet celebrity (at least in my eyes) ... recently doing a year of video podcasts called the Show with Ze Frank.

http://www.zefrank.com

http://www.zefrank.com/theshow

Well anyways he was giving a speech at Rochester Institute of Technology tonight and I have been planning on attending since last month.

He's spoken at many TED Talks the one in 2003 is posted on Google Video and he actually gave a similar talk for part of his talk tonight.

http://video.google.com/videoplay?docid=1895918195820925057

As I was walking into the building he was walking out to which I introduced myself, shook his hand...really cool.

After the talk I went down and got into a discussion about online communities and how communities take off into the direction of their choosing ... all very interesting.

But I think what struck me the most was how approachable he was and easy to talk to.  I am sure he is quite used to it by now but I found that he was very easy to talk to and to ask questions.

Tuesday, July 10, 2007

Uninstalling Cisco VPN client kills internet access

Symptoms

On starting the computer the computers internet access will work normally for a short period of time. Then access to normal websites will be down. Access to https sites, internet application such as instant messaging and e-mail are still accessible.

Cause

Uninstalling Cisco VPN 4.0 client doesn't fully uninstall hidden Zone Alarm Firewall which causes a block in port 80 on the computer.

Resolution

Cisco VPN client version 4.0 includes firewall functionality from Zone Labs Inc. It is possible that a failed Zone Labs uninstall left an incorrect value in the systems registry and must be changed. To resolve the problem follow these steps.

Caution This procedure contains information about editing the registry. Before you edit the registry, make sure you understand how to restore it if a problem occurs.

Step 1 Restart the computer and when your computer screen displays the startup message like "Starting Windows..." and a progress bar at the bottom of the screen, press the F8 key on the keyboard. This should display an advanced options screen.

Step 2 At the advanced options screen select "Safe Mode" as a startup method.

Step 3 If prompted, login to the PC once it is booted (you must have Administrator rights to login in Safe Mode).

Step 4 Click Start > Run and type "regedit" in the Open: box (without the quotes) and click OK. This launches the Windows registry editor.

Step 5 In the registry editor, browse to the following path: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\vsdatant and select the Start parameter in the right pane.

Step 6 Right-click Start and select Modify. In the Value data: field enter the number 3.

Step 7 Click OK and exit the registry editor.

Step 8 Restart the computer and boot normally; the problem should be resolved.

Related Links

Release Notes for VPN Client, Release 4.0.1

Author notes


I spent a considerate amount of time looking for a resolution to this problem..I post it up here in hopes that it helps someone else a little easier.  If it helps you please post a comment to let me know.

Monday, May 28, 2007

Brakes and Rotors

My brakes started grinding this week so I needed to get that fixed...I bought the parts Brake pads and rotors and went over to my cousins house and he helped my put them on....I swear to god it was so easy...I am going to do it myself next time.

I found instructions online for my type of brakes so I can do it next time.

http://www.2carpros.com/how_to/how_to_replace_brakes.htm

tools I'll need to get the job done:

14 mm socket
18 mm socket
C-Clamp
Mallet or hammer (in case the bolts are tight)
Jack
Brake pads
Rotors (if worn)

Tuesday, April 10, 2007

Service Unavailable? Site.Config permission denied?

Well my site(s) have been bouncing up and down more then girls at a porn convention this past week and a half.  I have been battling my host for some kind of control to the madness.  I think I might have finally got it under control.  There fix they did tonight is in line with what I would have done if it were my server or at least had control of it.  Basically they moved my sites onto their own Application Pool and I think that will help. 

But we'll see, I am probably jinxing it.  Hopefully I can keep a reliable blog up and running from this point forward.

Tuesday, February 27, 2007

Monroe County to get Wireless Internet

This is exciting although details are light, it's just exciting that we are talking about it here in our home county.  Maggy Brooks announced last night during her State of the County address that there was a partnership with Frontier to provide a wireless network for the county.

That is why I am pleased to announce that Monroe County is working with Frontier to develop a wireless internet network that will serve significant portions of Greece, Pittsford and the City of Rochester…as well as portions of the surrounding towns by the end of the year.

In addition, Frontier has also agreed to develop free wireless internet zones within this network…a critical step in our County’s efforts to bridge the digital divide.

We anticipate this wireless network will continue to expand throughout other parts of the County...and eventually become a full-scale, wireless network to serve all County residents.

Our new partnership with Frontier is a win for our taxpayers, and a win for our community. The new network will be created at no cost to taxpayers, and will soon allow our community to reap the benefits of wireless access to the information superhighway.

Tuesday, February 06, 2007

The loss of Jim Gray is Amazon's gain

Last weekend we learned of the disappearance of Jim Gray, a well respected database architect for Microsoft.  The news was taken pretty hard around the blogosphere.  We learned that the Coast Guard called off the search on Thursday.

I am not sure who took the satellite imagery but satellite imagery was uploaded to Amazon's Mechanical Turk for it's member to analyze.  This was/is an absolutely great idea.  Let the community that cares poor over the imagery and help in the search.

My wife and I spent and hour on Saturday going through about a hundred or so images...we flagged about a dozen or so as needs further review.  I spent another half an hour going through another few dozen last night.

But each time I went I also looked at some of the other paying Turks.  Then I got to wondering how much of Amazon's generousity of hosting and using Mechanical Turk was for the moral good and how much of it was a easy way to get some easy viral marketing of their system again.  Cause let's be honest Mechanical Turk hasn't been talked about much since it came out a couple of years ago.  But since they started this Mechanical Turk links are all I see on everyone's blog.

I know I probably sound morbid in bringing this up, but my curiosity got the better of me and I want to know how much of this is marketing and how much of it is pure heart felt generosity.

I don't think any less of Amazon, I actually have more respect for them for stepping up to the plate and helping out.  But I am sure at the end of the day their return for helping out was worth all the trouble.  But in the end maybe, just maybe the real good will be we find Jim alive and well on adrift boat out at sea.

What are your thoughts?

Thursday, February 01, 2007

Case sensitivity, SVN and Windows is a recipe for disaster

We are working on a project at work that has four developers working against the SVN repository in Visual Studio.NET 2005.  The other day I had to create a new project in the solution.  I got it all set up and committed the project into the repository using Ankh, great.  I started to close down for the day and in explorer I noticed that there were still files that were flagged that they needed to be committed.  Looking at it, it was the project file that needed to be committed. So I right clicked and committed it with Tortoise.

Yesterday another developer was trying to checkout the repository to his computer and they ran into an error trying to load the project I had committed.  I was roughly told that it was my project file was missing.  They were able to work around it because the project I committed wasn't needed to work on what they needed.  So I took note of it and would look into it when I had a chance.

Fast forward to this morning.  Based on the feedback I had been given I went into explorer to see if the project file was indeed the one that needed to be added to the repository.  But it showed that it was already committed.  Hmm...so I went to the developer and asked him to forward me the error messages he was getting when updating.

Here was ankh's message:
NSvn.Core.SvnClientException:
Failed to add file '[Path to file]\Web.config': object of the same name already exists
at NSvn.Core.Client.Update(String[] paths, Revision revision, Recurse recurse, Boolean ignoreExternals) in d:\tmp\build-2\src\nsvn.core\client.cpp:line 356
at Ankh.Commands.UpdateItem.UpdateRunner.Work(IContext context) in D:\tmp\build-2\src\Ankh\Commands\UpdateItemCommand.cs:line 131
at Ankh.ProgressRunner.Run() in D:\tmp\build-2\src\Ankh\ProgressRunner.cs:line 95
Same file conflict?  That didn't make any sense.  We started speculating.  I run different a different version of Tortoise on my machine then everyone else and thus my client version of Subversion is newer then the server and everyone else.  But I've been running like this for weeks with no problems up to this point.

I have the developer try checking out a project that only I worked on for another client in the past couple of days.  He said he had no problems getting those files.

He then went back and tried to update the original problem project from Tortoise and pasted the errors he got:
Error: In directory '[Directory Path Specified]'
Error: Can't copy '[Path Specified]\.svn\tmp\text-base\web.config.svn-base' to '[Path specified]\web.config.tmp': The system cannot find the file specified.
I went and googled for "Can't copy '': The system cannot find the file specified." the results led me to this explaination.
There are actually 2 different files in the repository whose names differ only in case. This cannot work on a Windows checkout, because the Windows file system is not case-sensitive. It is likely that one of the files got added by mistake, so you need to find out which one, make sure there are no changes committed to the wrong file, then delete it.
I went to our Trac site and looked at the source files and sure enough there was web.config and Web.config files listed.  Going back to Visual Studio.Net and Explorer I noticed that Visual Studio.NET had the Web.config and Explorer had the web.config. 

Here is the solution I came up with, there's probably a better way of doing this and I'd love to hear about them in the comments but this solution did work.  I made a backup of the Web.config file and then I deleted the Web.config in VS.NET and committed my changes. Looking in Trac again I see that I am down to just web.config in the repository.  I figure at this point I can just update and use that single version of web.config but I got the same error as above.

I close Visual Studio and open up Tortoises Repository Browser and I delete web.config. I then delete the whole project folder out of explorer (you have to do this because the svn folders have the web.config still listed in it's cache and you'll get the same errors). 

After the folder had been deleted I reopened Visual Studio.NET and opened the solution.  After I updated the solution from the repository I added my backed up copy of web.config (with the proper case that I am looking for) into the project and committed it.  Everything now had the right case, Visual Studio, Explorer and trac (which is the SVN Repository version). 

I went to the other developers and after they committed all the work they were doing they closed out of Visual Studio. Deleted the problem project folder in Explorer.  Reopened the solution in VS and updated and refreshed the project with a now working copy.

So make sure if you're working with a SVN client in Windows against a Linux based SVN repository that you have the same case throughout or you'll need to fix it.  And so far the only way to fix it is a manual process.

Saturday, January 27, 2007

Redesigned BrandLogic.com Launches

We've spent quite sometime recently getting BrandLogic.com ported over to our BrandEnsemble product.  It's pretty exciting to actually have our website using our product.  Before we did it in JSP because it was a great selling feature for some companies that we were multi talented (which we are by the way). 

I think though that we were never really proud of our site before.  But now, I think this is the best version of our website, and we are really proud of going live with it.

It runs on ASP.NET 1.1 and SQL Server 2000.  It runs on our BrandLogic BrandEnsemble Content Management System. 

Here are some screen shots of the site (click to enlarge).

  

And some of our admin tools which our CEO states are "the best admin tools I have ever seen."

     

These shots show how our pages can be edited inline so you get a feel for what the page will look like before you're ready to publish, version control history of a page with the ability to revert a page back to a previous version and how a typical view of a group (our terminology of a directory) looks within the system.

BrandEnsemble has been used in many of our clients sites as well:
Of course BrandEnsemble is only a piece of the overall branding puzzle that BrandLogic services offer to clients.  BrandEnsemble is what I am close to as I have contributed to it's development over these past eight years.

Here are some of BrandLogics other services we offer:
And who we did it for.

Feel free to contact BrandLogic for your branding needs (tell them that Damn Ralph sent you).

Friday, January 19, 2007

What does the future hold?

Where is the future heading with web programming/technologies?  I have considered myself Microsoft programmer since I graduated college.  I learned Classic ASP on the job, eventually I learned ASP.NET with VB.NET first then realized the power of C#.  I love C# I really do.  It makes programming a complex web site simple and straight forward.

We at BrandLogic would of never been able to program a complete CMS system for St. John's University in 3 weeks if it had not been for the robust framework that .NET offers.  Hell I am still to this day maintaining that code.

We've taken that code base and improved upon it and created the BrandEnsemble suite out of it.  Many clients are enjoying the benefits of the ease of programming C# provided us to be able to make a robust versioned CMS system.

So why do I feel uneasy?  Why do I feel like I am going down the wrong path?

It might be because ASP.NET 2.0 and Visual Studio.NET 2005 doesn't excite me like VS.NET 2003 did.  It doesn't excite me like the promise of what Ruby on Rails can provide.

But I think the most important part is it doesn't wow me in the wallet.  As a freelance web developer paying $1000 for a copy of Visual Studio.NET is a huge chunk of my annual freelance salary.  So upgrading to the next release isn't on the top of my lists of things to do right away.  Plus there is the cost of SQL Server, Windows, etc. etc. Basically I need a MSDN subscription.  What are they up to now?  $3000?  I stopped caring, I guess, the last time I looked at the new MSDN offerings and I thought I needed a lawyer to explain it to me.

So that brings me back to my original question: Where is the future?  Lately, I have been seriously thinking that the future, as is the present, is in open source software and the technologies that support it, programming languages like PHP and Ruby on Rails (there is a reason why they are so popular now).  If you own a PC (and if you don't save a paycheck and go out and get a barebones computer) everything else is free, free as in beer. 

So you got an idea for a cool web site? Get a computer, download a linux distro for your operating system, install the packages you need, get programming IDE's for PHP or Ruby free off of sites like SourceForge.  Get a Enterprise level database like MySql or Postgres free again by downloading it off the internet.  Download TheGimp for image processing.  Bam! You're up and running on the simple cost of the hardware.  And best of all your legal too!  Plus there is a community of starving programmer that are on the web willing to help you out.

But PHP is Old

Yeah, PHP has been around a long long time, but it's robust and again it's free.  And as I've highlighted before, Chris Prillio nailed it on the head once when he was stating the reasons why he was using PHP on his CMS Publishing project: PHP is prevailant on most if not all hosts that are out there right now.  So make a PHP site and chances are the majority of webmasters can install your software on their site.   Try to do that with an ASP.NET site with a SQL Server 2000 backend.

If you look around Silicon Valley now most Web 2.0 companies are using LAMP  (Linux + Apache + MySQL + PHP) partly due to the low cost in a market where the revenue stream is still up in the air for most.  But they need the appeal of the masses to get the word out.

Scoble said something tonight that got me to write this post tonight, even though I been thinking it for the past couple of weeks.  He said, "
LAMP is sure getting traction — I’ve stopped asking entrepreneurs what infrastructure they are using since the answer was so consistently LAMP."

A couple of days ago I saw a sponsor on TechCrunch post job listings for web developers/designers and it got me thinking if I all of a sudden found myself out in the mix again fighting for a job, I think my resume would fall to the bottom of the pile for most places that I think I would find fun to work at (although I have a family, which means the fun places are too risky for me).  My resume is very impressive I think.  My strengths are meeting the needs of our clients in a productive and efficient manner, providing the best customer service and experience with our clients, maintaining a long lasting and trusting relationship with our clients (in the 8 years I've worked at BrandLogic I can probably count the number of clients I've worked with on my one hand, not because we don't get clients but because I help maintain the longest lasting clients.  Which I think is a testiment of the quality of service I as well as the rest of the team provide.)  And last but not least are my Microsoft skills.  Which in my opinion is a technology that is becoming more and more obsolete.

I guess I'll add a new resolution to the New Year.  Learn Web 2.0 technologies!

Tuesday, January 09, 2007

MacWorld Keynote HUGE DISAPPOINTMENT for me

Sorry but I knew going into it that a iPhone no matter how awesome just wouldn't be up my ally.  I was watching for the sole intent of awaiting the news of a new iPod Video that played widescreen.

I feel that we are step closer as the iPhone plays video widescreen.  But the drawbacks are it's integrated with the phone, it only has 8GB tops for storage space and it's $500 starting price with two year contract with Cingular (an AT&T company whom which I'll never do business again).

I'll admit though the phone features are nice...but I am not interested.  In Rochester, NY we are not that dependant on mobile technologies.  I don't depend on a mobile phone 98% of the time.  I live by e-mail and IM and I am always close to it.

For me the thrill of having a Widescreen iPod video was intense.  After getting a Shuffle for Christmas I was getting even more excited to get a full iPod so I can watch my video podcasts and shows.  MacRumorsLive.com totally set me up for a depressing day by literally saying in one line "Widescreen iPod".  I flipped out.  Then I learned later that it was integrated into the phone.  Total let down.

Paul Thurrot bashed Apple for not even mentioning the Macs or Leopard. He said "Why not call it iPodWorld?"

I agree Paul especially with no new iPod announcement, heh. 

But what is with the totally irrelavent Microsoft digs.  One being a three year old quote from Paul Alchine about how he would buy a mac...but failed to stated the context it was in.  It was an e-mail to Steve Balmer and Bill Gates about how they needed to go in a new direction in Vista because they weren't being innovative enough.  They listened and started rebuilding Vista from the ground up.

Also, what was the deal with the graphic of how the sales of Zune were doing?  Just to rub it in.  Then I wonder were Apple fanboys get the pretentious attitudes from.  They have a great role model.

On a final note Apple annouced Apple TV, basically a dumb terminal to your iTunes collection so that you can STREAM it to your TV.  $299. Eh...uninspired...I'll get an Xbox 360 that similarly does all that and is coming out with IPTV.

Sunday, January 07, 2007

My Opinions of CES Keynote 2007

Just finished watching the CES keynote...this was what was covered.

  • Couple of cool Vista features shown.
    • Animated Desktops...so instead of pictures for a desktop you can have movies.
    • Version control of files just like Time Machine
    • Play XBox Live games on Vista
  • IPTV to be integrated into Xbox (Holiday's 2007) - the guy that showed it did a terrible job explaining anything about it.
  • They showed Windows Home Server but blackout the broadcast for it for some reason.
  • Partnership with Ford to integrate Microsoft Auto to sync with your phone, media device including iPods to seemlessly work in your Ford car (12 models this year)

My overall impressions of the keynote was eh...I was excited to see and hear about IPTV but like I said they did a terrible job explaining anything about it and there are more questions now then before the start of the keynote.

The Vista features were cool but nothing to get me to go out and buy Vista...I'll stick with XP for a while.

The funniest quote was from some guy claiming that Zune was the number 2 portable music player...I almost lost it. I just read an article this weekend that said they weren't in the top 10.

There was a Halo 3 Cinematic that looked awesome and I think that will be the driving force for me to purchase a 360 this summer. But that's only if the Widescreen iPod doesn't cost a second mortgage when announced on Tuesday.

Lastly, they showed off an HP TouchSmart PC which looks awesome.  HP is coming out with some nice looking products.  Which in my opinion look better then Apple's designs.

Related Links

Paul Thurotts Behind the scenes review

Thursday, January 04, 2007

Secure your sites while surfing on the public wifi

Lifehacker had an interesting article about how easy it is to packet sniff in open WiFi hotspots with a free Mac application.  One way to secure your surfing is to use https when you are viewing sites, if it's available.  Certain sites like web e-mail should only be viewed with https when using a wireless hotspot.

I found that GMail is accessible via https. Google Reader and Google Calendar are also accessible although none of the web applications that are linked at the top of GMail go to https so you have to actually type the address back in.

I set up my FireFox bookmarks to go to my Google Apps with https so that way I don't have to think about.

But then I tried for giggles what would happen if I typed in https://www.damnralph.com, you get a completely different site.  I think it's because I am on a shared hosting environment and that maybe the only site that has a secure site on our IP.  Anyone have an explaination as to why/how that would happen?

Related Links

What wifi sniffers can find out about you


Tuesday, December 26, 2006

Feature Request for Google Reader

Google is a great company and has some great online applications that are really well done.

Google Reader is one of them and is my default reader for my rss feeds.

But why does it not have a simple search function for searching through read posts in your feeds?  I hate having to try to find a particular post and have to hunt for it.

Does Google not know how to do search?

Update:  Here's a hack to search your feeds using Google Co-op.

Monday, December 25, 2006

Solution: Podcasts won't play on iPod Shuffle

So my mom got me a iPod Shuffle for Christmas.  It's perfect for me to listen to my podcasts while I am doing work around the house.  So I hook it up and do the AutoFill of music and it takes 5 minutes to load the thing up.. that's cool.  Works perfect.

I hook it back up and try to load a podcast up (TWiT) and take it out and nothing.  The light on the power blinks green and orange for two seconds.  I look on the little light indicator cheat sheet it came with and that means there are no songs loaded onto the iPod Shuffle.  This made absolutely no sense to me...I tried everything re-encoding it.  Loading it onto the shuffle as a data item but it still wouldn't work.

After looking around the internet I found a few people are having a problem with regular iPods playing podcasts in playlists where they had to manually start the podcasts.  They found that each podcast is by default flagged with the do not shuffle flag.  This meant that the podcast file wouldn't come up when you were playing songs in shuffle mode.

Ah, now it makes perfect sense why this isn't working.  The iPod Shuffle works exclusively in shuffle mode so that's why it looks like there is no music on it after updating.

To get around this...select the Podcasts you want to load and right-click (yeah I am on a Windows machine) and check the check box that says shuffle and select yes. If you want to load just one file click on the options tab and click to uncheck the skip when shuffle option.  Now add the Podcasts to your iPod's playlist, right-click and select Add to Playlist and then select the Playlist of your iPod shuffle.&