Monday, April 25, 2005

The first part explains how to set up connection sharing and enable use of the internet from a wireless client (laptop)

Setting up a usb DSL model with connection sharing over a wireless network.

The second part explains how to enable security so some hacker doesn't park outside your house and release viruses from your home network.

Securing a wireless Netowork using internet connection sharing and a usb DSL Modem

 

 

4/25/2005 11:02:20 PM (GMT Standard Time, UTC+00:00)  #    Comments [0]  |  Trackback
Sunday, April 24, 2005

Recently, I decided to work at organizing the Atlanta Musician Meetup. Our first meeting went well.  Katherine, Michael and I had great conversation.  I think amazing things will come of the effort and it is worth the time commitment and the small bit of work required to gather people together. 

However, the website is not worth $9 /month.  That is the soon to be imposed fee.  So, I plan to make an effort to continue to build a local musician community without the website that does no more that capture listless traffic and surfers like myself.  There are probably a few people in that membership who will make great, active community members but something tells me they and I will meet just as easily if I put forth real effort then if I just leech on to the meetup.com traffic. 

I will set up a group dashboard here sometime soon.  Subscribe to my rss or check back here in a vbout a month to get the updates.  Come to CJ's landing on Wednesday, May 11 for an open mic and social gathering. 

Send me an email if you are interested in the group and going's on.  rusty -at- vitaminzrecords -dot- com.

4/24/2005 8:04:06 PM (GMT Standard Time, UTC+00:00)  #    Comments [0]  |  Trackback
Wednesday, April 20, 2005

I was certain I'd registered for several years but then I guess its been several years.  It looks like VitaminZRecords.com was down for 3 days.  Its back up again.  I was upset with my host for not informing me.  They did, however, send an email to the address they had on record.  It just so happens that address is no longer active (due to massive spam).  So I have to leat Flare Hosting off the hook and still generally feel they are a great web host. 

Since I couldn't access my GoDaddy account because I registered my vitaminzrecords email address with them, I had to pay more than 3 times the going price to renew my domain.  Bummer.  Lesson learned?  Don't let your domain expire.

Web
4/20/2005 2:56:19 PM (GMT Standard Time, UTC+00:00)  #    Comments [1]  |  Trackback
Thursday, April 14, 2005

So the first thing every mac head will do is show off the cool windows-switching utility (Expose) that comes with OSX.  Every time they do, I feel jealous and want a mac.  My pc has become more and more stable over the years and XP is down right excellent.  However, Mac is still pretty slick.  That leaves me feeling like I am missing out on something.

No longer!  Turns out some guy named Otaku wrote it in Direct X for windows...  He calls it TopDesk.  Its pretty sweet and beats the hell out of <at> <tab> when you have numerous windows open.   For $9.95, how can you not buy it?

Thanks for the tip, john!

 

(yes, the cool thing about syndicated personal content)  :)

4/14/2005 2:05:54 PM (GMT Standard Time, UTC+00:00)  #    Comments [4]  |  Trackback
Tuesday, April 12, 2005

My ebayed modem arrived last night. I immediately googled to find out what I should do with it and found out it can be hacked to think its a 5660. That will provite NAT translation and routingas well as DHCP and DNS services. Now I question whether I need to do this. I have a wireless router for DHCP. All I need is the connection.

If the connection works well without modifications, I probably will refrain from the hack. However, now that my ICS is up and running and I plan to switch to ComCast soon enough (BellSouth just costs too much after all their hidden charges)

4/12/2005 12:11:02 PM (GMT Standard Time, UTC+00:00)  #    Comments [2]  |  Trackback 5260.gif (10.19 KB)
Monday, April 11, 2005

I highly recommend some mental/emotional preparation before embarking on this journey.  A nice, long, intensive Ashtanga Yoga session is highly advisable.  I started working on this about 8pm.  I thought it would take a few minutes and then I would be done.  Not a chance, Jack!

I was up all night fighting with it.  When I say all night, I mean until 1 a.m.  That is 5 hours for the mathmatically challenged.  Let me point out, however, that at the end of that 5 hours, I hit the reset button on the router and carefully returned everything to the way it was when I started (straight-out-of-the-box defaults).  So it was indeed a wasted 5 hours.

The last thing I did before falling into bed was to bid on and win an ethernet DSL modem on Ebay.  $18.56 - including shipping!  Hopefully, it'll show up.  I think that is the best solution overall.  If you divide just that wasted 5 hours into $18.56, I payed myself less than $4/hr to do something completely unnecessary.  Unfortunately, I am a stubborn s.o.b. and must succeed regardless of the cost.  ...adn succeed I did.  Now that it works, I'll be getting a new modem in about a week.

Here is the procedure.  Be patient and calm and don't freak out.  Some details may require a few hard power downs just to work themselves out.

Now that its over, I understand the cause of the failure. My router was set up from the factory with 192.168.15.1.  This prevented my client computers from seeing the Internet Connection Sharing (ICS) host at 192.168.0.1 (The address that windows assigns to the ICS host). It is necessary to have the router, host and all clients configured with an ip address in the same subnet range. With the default class C subnet mask of 255.255.255.0, this allows xxx.xxx.xxx.[0 - 254]. If our ICS defaults to 192.168.0.1, then the default router ip address of 192.168.15.1 (which will assign 192.168.15.[100-150] to network clients) won't allow the ICS host to be accessable from the network. We need to change something so we'll change what we can - the router.

connect physically (ethernet)

Disable your wireless if you can. The purpose is to remove the number of uncertainties and potential causes for failure. Until you can connect the old fashioned way, d.b.a.d (like I was), leave the wireless off.

Plug your connection host (the one that connects to the internet through the modem) and one client into one of the four ethernet ports (not the internet port) of the router/hub.

change the router ip address to 192.168.0.2

You should be able to bring up the router config page by opening your browser and entering http://192.168.15.1 (check your documentation to verify this ip address). If you can't, go sto start --> Connect To --> Right click your dsl connection --> properties (or otherwise get to the properties of your dial up connection). Make note of your user id and make sure you know your password. Also jot down the exact name of the connection in case some application automatically dials it to connect, they usually call it by its physical name. Now, delete your dial-up (DSL) internet connection. You should be able to tell the browser to never dial when a connection is not present but you can be sure if you delete it. Bring up Command Prompt: Start --> Run --> Cmd. Then "ipconfig /release" then "ipconfig /refresh". Then ipconfig and see if you have an address in the same range as your router. If not, You may need to reboot to get a valid ip address.

Change the ip address on the main page to 192.168.0.[something between (2 and 99) or (200 and 254)]. I ended up using [192.168.0.2]. Originally I tried [192.168.0.254] but had no success. However, I believe it would have worked if I'd followed the next steps carefully.

power down

Turn everything physically off. Re-boot is not enough! Shut down your computers then unplug your router. Proceed to the next step...

make coffee

Do something that will take about fifteen minutes. Five is enough but this is a good time to relax. You might be in for a little bit of rough weather.

boot up in order

First Router, wait for the lights to stop flashing. Next, ICS Host. Next, Client computer.

verify connectivity

try to ping your host. using ipconfig "Start >> run >> cmd >> ipconfig", find your host ipaddress. From your client, bring up command (see above), try to ping "ping [ip address of host]". If ping replies 4 times, keep going. Otherwise, try the power down and back up again. If still no luck, you may have a-typical tcp settings and are going to be outside the scope of this procedure (so sorry). pinging?! sweet, go on...

Share you connection on your ICS Host. If you deleted this connection, now is the time to create a new one just like the old one. Enable sharing. check ipconfig, if you like, to see that your host is now 192.168.0.1

try to ping from your client to your host again. Still pinging?

Here goes: try to connect to the internet from your host. Open your browser. Good? If not, check your connection properties under "Internet Opetions" Connections, LAN Setting. There should be no connections listed above LAN Settings and your LAN Settings themselves should all be unchecked.

I hope you can connect, if not, try the hard power down and start up again (proper sequence, as always)

If you are having issues at this point, shut it down and leave it for while. This is the point where I ebayed a new ethernet modem. In the morning, I did exactly what I am describing (except I didn't bother with any pinging) and it worked.

change the name of your wireless SSID to something meaningful

bring up your router config page. You should not have to disconnect your internet connection, anymore! Go to the wireless tab and change the SSID to something like "FlyDaddyWAN" or "Home-Office" (or something that will help you distinguish it from your neighbor's wireless network.

connect wirelessly

See if you can connect you wireless pc via the wireless network. Bring up avaiable connections. Look for your SSID there. If its not there, it may not be broadcasting. You can enable it in the router config page. However, try to connect manually by manually entering the SSID.

verify connectivity

If you see "connected", try to ping. Also check your network neighborhood and your internet connection. If all these work, you're in great shape.

If your network neighborhood is working but no internet, make sure you have ICS enabled (connection on host is shared). On your wireless client, try "ipconfig /all". Your default gateway should be 192.168.0.1. If it isn't, power down and back up in sequence again.

If your network neighborhood does not work but you have internet, You need to check the ipaddresses of each computer and the router and ensure they are in the same subnet. It is also prudent to power down and back up in sequence again.

enable WEP security

If anything has failed so far, go back. Keep it simple. Otherwise, go to the wireless tab of your router config page and click security. Enable WEP encryption. Enter some text in the key gen field and click generate. Copy one of the resulting keys and set that up on your wireless client.

RE-connect wirelessly

Show avaailable wireless connections on your wireless client. Find the one you set up and it should now show as "WEP enabled". Double click and you will be prompted for a key. Enter the key from your Router config.

verify connectivity

Nothing should have changed from pre-secure wireless (except that now it is secure)

If so, power down and back up in sequence again.

scream aloud, "Who's your daddy?!"

..or anything that makes you feel an equal sense of accomplishment!



Note: occassionally you will not be able to connect. I find this true after connecting to other networks and then returning. You may have to reboot your ICS Host and then run, on your wireless client, "ipconfig /renew". However, a reboot is even better. When in doubt, you guessed it.
4/11/2005 7:29:25 PM (GMT Standard Time, UTC+00:00)  #    Comments [2]  |  Trackback

Sometimes features that are otherwise very useful can bite you.  For instance, we maintain a separate source project structure parallel with our automated builds.  This is an easy way to recreate any previous build because welabel the parent project of both with each build.  Get By Label recursively, and you have the solution as it was that day.  You can look at any build and then the associated source code to identify whether a bug was there or perhaps was fixed woth a particualr build.  We use it frequently enough to warrant the extra effort and management required.  I won’t go into the details about how we do it but if you are interested, email me and I’ll tell you…

VSS Keyword Expansion

Visual Sourcesafe will add comments to your code at check in time if configured to do so in srcsafe.ini.   This is useful because it shows a nice file history right in the file header and, if the comments are added during check in, describes the nature of each change.

However, when you execute an automated build and then check that changed file into another project directory, sourcesafe will change the comments and include an entry for the autobuild user.  That isn't desirable because you then get differences between the file in dev/source and the file in build/source.  When you compare project directories to try to identify what changes have been made since the last build (or what changes were not picked up by the build), the added comments trigger a diff.  That is painful because you have to manually check each file to ensure that only comments were changes.

In this newsgroup post, the anser was mentioned in passing and even discouraged in practice. 

Add "Keyword_Masks =" to the ss.ini file for the automated build user.  This will override Keyword Expansion for a user

The entry in srcsafe.ini looks something like this:

Keyword_Masks = *.cs, *.htm, *.html, *.aspx, *.ascx
;updates keywords in a user's working directory with the new keyword information
;when a user updates or checks in a file.
Expand_Keywords_Locally = YES

[Keyword Comments]
*.cs = " /// "
*.aspx = " -- "
*.ascx = " -- "

Add this to your user/ss.ini (located whre your sourcesase db resides)

; The following overrides keyword expansion configured in the srcsafe.ini file
Keyword_Masks =

Now, when the user with this override checks in, no change is made to the file.  Diffs will be correct from source to destination

4/11/2005 6:57:37 PM (GMT Standard Time, UTC+00:00)  #    Comments [0]  |  Trackback
Wednesday, April 06, 2005

Toshiba A75-S2292 at Costco.

Costco has a pretty robust return policy so I am feeling pretty good about my purchase.  It has a wide-aspect screen so there si a significant amount of extra real-estate to work with.  The processor is not the efficient mobile processors in many laptops so the battery life is short.  However, the processor is lightning fast and will be very nice to have when I create music using Reason on it. 

There are some posts about static discharge causing the computer to then lock up.  I hope this is not going to happen.  However, I will be making sure to religiously back-up my system.  I got a Western Digital USB Hard Drive for that purpose.

If I have problems, I'll be sure to let you know.  If I don't, this is the last post you'll see.  Unless, of course, the thing just absolutely ROCKS...   let you know then too.

4/6/2005 8:59:06 PM (GMT Standard Time, UTC+00:00)  #    Comments [0]  |  Trackback

I started out this post like this:

This is far from the defacto-standards pundit but it is a really good example of how painful Divs and css really are.

http://archivist.incutio.com/viewlist/css-discuss/46142

"...Sorry -- floats only displace inline content, so the background color of
adjacent blocks is going to run under the float.  The only way to keep
this from happening is to give the static content a big enough margin
for the float to sit in, but apparently you can't do this because you
don't know the width of the float."

Alright!!!  Someone finally said it!  "YOU CAN'T DO THAT!"

...and so on.

If you are working with static content and thus know how big your containers need to be, it is trivial to create a layout using divs that can format that content any way your heart desires.  However, throw in an unknown data source and expect the contents of a container to include everything from three short words to a specially formatted combination of images and text, the whole thing goes absolutely nuts.

Common problem: I want to make a container with content click-able.  I want the container to stretch to the size of the inner content and paint a border around it.  No problem,  display: inline.  Well, I actually need it to live all alone on that line.  Then set  position: relative; display: inline; and add a div after the content with clear:left;.

Let's say you have a common navigation element on which you assign "onclick"  and you want it to only be as big as the content it contains.  However, you want a group of them to appear vertically stacked on the page and control the layout properties via your css stylesheet.

There are a few considerations.  First, when you clear in IE, the width of the element does not realize it now has more room.  You will have to set white-space:nowrap;  That is the only thing that I haven't resolved yet. The rest are as follows: IE might start to vary from the standard box model. Google "Box Model Hack" to find answers to these problems. If content follows one of your clickable items, you need an element that will clear the row. It's in the example.

 <style>
.LayoutColumn{
    width:47%;
    float:left;
    position:relative;
    margin:5px;
    background-color:#f3f3f3;
    border:1px solid #c3c3c3;
}

.NavItem{
    
    position:relative;
    float:left;
    clear:left;
    white-space:nowrap;
    
    background-color:#804040;
    color:white;
    border:red 1px solid;
}

.LineClearer{
    clear:both;
}
</style>
<div class="LayoutColumn">
            A column to ensure you can do this crazy stuff inside a container
</div>
<div class="LayoutColumn">
    
            <div class="NavItem" onclick="alert(this.innerHTML)">Yessir, this actaully did the trick.</div>
            <div class="NavItem" onclick="alert(this.innerHTML)">oh yeah!</div>
            <div class="NavItem" onclick="alert(this.innerHTML)">What the ...?</div>
            <div class="LineClearer"><!--clears the row--></div>
            Content following the items
</div>

A column to ensure you can do this crazy stuff inside a container
Content following the items

 

 

Web
4/6/2005 7:51:45 PM (GMT Standard Time, UTC+00:00)  #    Comments [1]  |  Trackback
Tuesday, April 05, 2005

sharing internet connection using Alcatel Speedtouch USB dsl modem and a linksys WRT54G wireless router

I couldn’t find a single resource that didn’t suggest one of the following regarding my Alcatel Speedtouch USB DSL modem: burn it, toss it out the window, throw it in the street.

While funny, not very constructive. I decided to wing it, and with great success!

A few assumptions/requirements:
I only know pc configuration, not mac. I like macs, just can’t afford one.
Also, you will have to leave your connected pc on all the time. For me, this is not a problem, I only shut my main desktop off during lightning storms.

Ready?

Step one: share your connection.

Click properties on the dial up connection you use to connect to the internet (If you don’t use a dial up connection for DSL, you don’t have a SpeedTouch USB and should read no further). Click on the “advanced” tab and select “share this connection”.

Step two: connect your internet-connected pc to your WRT54G router.

Connect your Ethernet cable from your desktop to your wireless router. If you are using a wireless card to connect your internet-connected pc, then you should be able to skip this step (note: if you have trouble, try connecting physically, assuming you have a network card)

Step three: plug in your WRT54G router.

Plug the power cable in. The lights should come on and flash.

Step four: reboot.

Reboot your internet-connected computer. This should get it correctly attached to the router.

Step five: bring up your wirelessly-connected computer.

booooooot... booooooooooooot.

Step six: connect.

View available wireless connections. "Linksys" should be in the list. If it is, connect to it.
You should be able to browse immediately. If you can, you’re done. If not, go on to step seven.

Step seven: power everything down and bring it all up in sequence.

Shut everything down, unplug the power adapter from the Linksys router.
Plug the router back in. Wait until the lights stop blinking.
Boot your internet-connected pc.
Open your internet connection.
Once you are connected, boot up your wireless-connected pc.

Is it working?

If not, go back to the top of the page and consider the original suggestions!

...next issue: how to secure your completely wide-open, free to the general public, newly shared connection.

4/5/2005 6:47:49 PM (GMT Standard Time, UTC+00:00)  #    Comments [2]  |  Trackback alcatel-USB.jpg (1.71 KB)
Saturday, April 02, 2005
It's not really a huge deal, but I have to log in and then log in a gain to add an entry. 
4/2/2005 3:38:36 AM (GMT Standard Time, UTC+00:00)  #    Comments [2]  |  Trackback

I had a difficult time getting the <Solution> task to work. I had tried to use it in my early NAnt days with similar results. I then tried using <Slingshot>. Both approaches seam to require that the web application is actually mapped to a web path. I must ask, "why?" Additionally, embedded resources do not work correctly when trying to embed images or other usually static files.

Previously, I had set up some generic build scripts that basically assume that all .cs should be built and anything aspx, ascx, or image related should be copied. Additionally, any specifics lke stylesheets or javascript were included explicitly in the copy section of the script. References were added either explicitly when they were provided by a 3rd party or generically when they were internal (all our assembly names begin with our enterprise namespace). This worked great until we migrated to a new, improved framework complete with a myriad of embedded resources.

I found Gordon Weakliem's .Net CSProj to NAnt build xsl transform in this article about NAnt. Before venturing down this path, I tried to resolve my problem on my own. I am not quite ready to depend on the project file, particularly since I was the only developer who ever bothered to update the project file up till now. This is something we intend to start doing as a group, however.

I created a simple xsl transfor to extract the File nodes that have "EmbeddedResource" as their BuildAction. (select="//File[@BuildAction='EmbeddedResource']"). I applied two templates to this, one to generate <ResGen> tasks and another to generate <Resources><Includes> tasks.

<resgen>
	<xsl:attribute name="input"><xsl:value-of select="@RelPath" /></xsl:attribute>
	<xsl:attribute name="output"><xsl:value-of select="substring-before(@RelPath,'.resx')" />.resources</xsl:attribute>
</resgen>

<includes>
	<xsl:attribute name="name"><xsl:value-of select="@RelPath" ></xsl:value-of>.resources</xsl:attribute>
</includes>
		

When I tried to execute this build, I got a strange error: resgen "unknown file extention" . I executed NAnt with the -verbose argument. The error occured calling the resgen task and was raised by the resgen.exe in the .net framework. Hmm. A little research showed that resgen.exe is for resx and txt files convertion. I found nothing googling the problem (hence this post) and thought I may have found a serious issue. "No way!," as my two-year-old likes to proclaim. This was just a lack of understanding of what resgen was for.

It is only necessary to <resgen> a resx or text (.txt) file for use as an embedded resource. You simply embed other resources directly.

First, it is important to have the dynamicpprefix attribute set to true in nant.

<resources prefix="Root.NameSpace" dynamicprefix="true">

This will create the appropriate resource path (namespace) to the resource based on the directory structure.

Second, you have to remove .resx or .txt from a resgen-ed resource.

So, in a nant build script, you will perform two steps to embed the resx file:

<resgen input="SomeDirectory\SomeResource.resx" output="SomeDirectory\SomeResource.resources" /> 

...and 

<csc target= "libr...>

	<sources.../>

	<references>
		<incl...>
	</references>

	<resources prefix="Root.NameSpace" dynamicprefix="true"> 
		<includes name="SomeDirectory\SomeResource.resources" />
	</resources>

</csc>
		

But for a javascript or image file, omit the resgen task and include the resource like so...

		
<csc target= "libr...>

	<sources.../>

	<references>
		<incl...>
	</references>

	<resources prefix="Root.NameSpace" dynamicprefix="true"> 
		<includes name="SomeDirectory\SomeResource.js" />
	</resources>

</csc>
		

At this point, you are well on your way to a successful compile. NAnt continues to be one of the most useful tools in the global arsenal of user-contributed utilities. Together with NUnit, NCover and reflector, life is getting easier and easier (and more repeatable).

4/2/2005 3:33:07 AM (GMT Standard Time, UTC+00:00)  #    Comments [0]  |  Trackback

Theme design by Jelle Druyts

Pick a theme: