I recently moved into a new house that is 3 stories. My cable modem comes in on the first floor so my wifi router was placed down there. My home office is on the third floor so now when I am in my office at home I download the latest developerworks podcast at speeds that would rival AOL back in its dialup days. Something had to be done so what I needed was 3 linksys routers, some opensource software, and about 45 mins. Here is what I got working now....

First thing I did was take my linksys WRT54G routers and put ddwrt on them. This can be a little tricky you have to make sure and download a couple of different firmwares and put them on in the correct order and make sure you do always fun 30/30/30 restart. Always try this restart method if your router is doing something weird and a simple power restart isn't fixing it. What I recommend is going to ddwrt website looking to see if your router is supported and follow the detailed instructions to update the firmware. I ended up with 3 routers running dd-wrt.v24-13064_VINT_std.

Next I setup the main router that connects to the cable modem. This one is pretty standard configuration: WAN port on router connect to the cable modem, wireless network setup with WPA2 encryption on channel 1, and standard DHCP running. Also this router has the internal ip address of 192.168.1.1. This covers the first floor with wifi. After this I needed to setup the other two routers to be a WAP. This step took a few detailed configurations to make this happen. Here are the detailed configurations which can also be found here. I left in the Optional steps I did.

Open theSetup -> Basic Setuptab

WAN Connection Type : Disabled

Local IP Address : 192.168.1.2 (i.e. different from primary router and out of DHCP pool)

Because I don't have a network switch or a crossover cable I did do the option configuration in step 1 "(Optional)Assign WAN Port to Switch (visible
only with WAN Connection Type set to disabled): Enable this if you want
to use WAN port as a switch port" This allows me to connect the WAN ports on my two WAP routers to one of the ports on the router connected to the cable modem. Also I got lucky because where my cable modem is connected on the first floor all the phone lines run to that same box and I don't have a home phone so I use the cat 5e phone lines to connect the two WAPs to the main router.

I placed one WAP on each floor. One thing I did on the WAP on the second floor was run that on channel 6 and run the one on the third floor on channel 11. Remember to set your SSID the same and your encryption the same. Now when I go from the third floor to the second floor my wireless devices change over to the wireless on that floor. The result is I rarely have less than 60% strength anywhere in my house.

I am building a static html page that needs to update its content dynamically. Ajax allows me to make this type of behavior work. The way the system works is after the static page is loaded I use jQuery to retrieve the dynamic content of the page and set it in the appropriate html elements on the page. Here is the JavaScript code.

What this does is load the javascript after the page is loaded (DOM tree built by browser). This is important because when I call $("#bookmarks").html(json.members.unescapeHtml()); the #bookmarks is a <div id="bookmarks"></div> further down in the static html page body. The javascript's output is a JSON object of escaped HTML. To unescape it I used a nice trick that uses the browsers javascript engine to unsecape the HTML.

String.prototype.unescapeHtml = function () {

var temp = document.createElement("div");

temp.innerHTML = this.childNodes[0].nodeValue;

temp.removeChild(temp.firstChild)

return result;

}

When you set the innerHTML to the element div the browser will unescape the HTML. This worked great in all browsers until my json got to be longer than 4096 chars in length in FireFox. Then I started seeing some real strange behaviors. I finally found some posts that said that FireFox limited the length of the element to 4096 chars. So what was happening is this.childNodes[0].nodeValue only had the first 4096 chars then this.childNodes[1].nodeValue had the next 4096 chars. To fix this problem. I modified the unescapeHtml function to the following.

String.prototype.unescapeHtml = function () {

var temp = document.createElement("div");

temp.innerHTML = this;

var result = "";

for (var i = 0; i < temp.childNodes.length; i++) {

result = result + temp.childNodes[i].nodeValue;

}

temp.removeChild(temp.firstChild)

return result;

}

This is what it looks like when unescapeHTML is run This is what it looks like when unsecapeHTML is not run.

Well Day 1 is almost compete. It started early for me. I was awake at 4:30 am. I laid in the bed till about 6:15 then got up and ran 2 miles. I had to do something. Then there was good and expensive fruit and OJ for breakfast. I wanted to actually see how a session at a conference is done so I went to the JMP 201 IBM Lotus Sametime for Web 2.0. It was a very interesting session. I look forward to checking out the new Sametime Proxy SDK in 8.5. Jay Allen and I hope we can use this to get inline web chat and presence integrated into Lotus Connections.

After the morning session and lunch it was a quick nap. Up from the nap I got into my Lotusphere uniform.

After I was dressed then it was off to prep with Jay. Four o'clock rolled around and the room was about 90% full probably 80 or so people ready to learn about MydeveloperWorks customizations of Lotus Connections 2.5. Our talking lasted about 1.5 of the 2 hours we were given then we had few questions. Most of the questions were on TAI and how we used it to get Lotus Connections and our other developerWorks apps to SSO.

Here is a picture of the crowd filling in a few mins before we started up the session.

After finishing off the session Jay and I headed to the kick off party pool side at the Dolphin and Swan Hotels. Jay really wanted to crash the party Ron Burgundy cannonball style but I advised him against that.

Well I must be ready to speak tonight because I woke up at 4:30 am. Today I probably will spend more time on the final preparations for my Jumpstart (JMP204 4-6pm SW Mockingbird) session tonight. So in the mean time here is what Lotusphere looks like from my room in the Swan at 7:30am on Sunday.

I still haven't started packing. I am still writing code. I did finish my presentation but that was due back in December. Sunday night I will be speaking on Ten Innovative Ways to Customize the IBM Lotus Connections Environment. I will also be in the Meet the Developer Lab on Tuesday and Wednesday. I will let you know exact times. I should be doing some twitter down there if you want to follow me. @npoore

As one of the lead engineers in My developerWorks launch of Lotus Connections 2.5 I thought I would share with you some of the features I worked on and give a little insight on what they do and how they work. If you see something specific you are curious about on My developerWorks and want to know more about it leave me a comment here and I will try to post a message about that feature.

Sometimes I login to an AIX machine and do not have my term set correctly so my backspace key doesn't work properly. One of the common things I do when I start typing real fast is create a directory with unprintable characters. I found some examples from searching but they didn't all work. Here is a common one to try.

The Problem: Java project will not compile in
Rational Application Developer due to a Internal error - the selected
file is a system file that cannot be modified. It will be hidden.

All software has bugs in it but some can drive you crazy and create
extra frustration and lose more of your valuable time. After moving
all my source code into a new project in RAD I imported all my projects
and added them to ClearCase. Next I tried to compile them getting a 3
similar errors. (Note: First lesson read the error carefully. Often
while rushing through something to get it complete I don’t read the
full error which would save me time.) Anyway when trying to compile I
kept on getting this error.

The project was not built due to “Internal error - the
selected file is a system file that cannot be modified. It will be
hidden.”. Fix the problem, then try refreshing this project and
building it since it may be inconsistent.

After about 30 mins of frustration and almost ready to shutdown for
the night I found a little file in the directory where the java class
files were suppose to be named copyarea.db which was put
there by ClearCase. ClearCase makes this file ReadOnly thus not
allowing RAD to delete it when it tries to compile my java code.

The Fix: Simple delete the file and refresh the project.

The Reason This Happened: I am not 100% certain but
when I dumped all my code into the new project in RAD, ClearCase wanted
to add all the code to the source repository so I let it the problem
was it selected all the files which included the compiled class files.
Since I didn’t want or need those files in ClearCase I chose to remove
them from the repository by deleting the classes directory but it left
the copyarea.db file in the parent directory. I am no expert on
ClearCase but I couldn’t find a real easy way to remove the class files
from the ClearCase server so I deleted the files through the ClearCase
prospective view in RAD. This unloaded the files from ClearCase but
also deletes the files on the local filesystem. If anyone knows a
better way to remove them from ClearCase without deleting the files on
the local system let me know. Of course like always I made a copy of
the files before deleting so I could restore them.

Suggestion: At least name the file that RAD is
having problems deleting then I can go straight to the file the error
never mentions the name of the file or the directory.

I often am working on some software tool, configuring a server, setting up some operating system then forgetting what I did 3 months later when I need to do it again. So I thought I would just document it here for my own usage but also for others to see in case they could use it. As you see my "notes" if you have question that relates to my notes just let me know maybe I might have already had to fix it. Or if you know how to do something better let me know.