Recent Posts

  • Tomato Gives My Linksys New Lease On Life

    My internet connection has been really flakey lately, so I thought perhaps I should try upgrading my old wireless router, a Linksys WRT54G v4, to see if that was the problem. Before plopping down the dough for a new 802.11n router, I decided to give the Tomato firmware replacement a shot. It worked like magic! Without spending a dime, I now have a far superior internet connection with bandwidth monitoring and local DNS hostnames that actually work. In bandwidth testing, my connection speed doubled (from 3Mbps to 7Mbps for download speeds on one test server), and the annoying browser latency I had been experiencing seemed to vanish. Anyhow, I highly recommend trying Tomato out if you're not afraid of upgrading your router's firmware: http://www.polarcloud.com/tomato

    No comments.
    AverageNot yet rated.
    Your Rating
  • Old Internet Explorer Versions in a VirtualPC

    If you need to test a website in a different version of Internet Explorer from the one you have installed, Microsoft provides VirtualPC images for Internet Explorer 6.0 and later, which can be downloaded here. For older versions of Internet Explorer (3.0, 4.01, 5.01, and 5.5), there's a nifty installer at this site, which will install them all for you. I'd recommend installing that on top of the virtual machine for 6.0 (rather than your regular environment) given the likelihood of unpatched security holes in old versions of Internet Explorer.

    No comments.
    Average
    Your Rating
  • Multiple Home Servers with Dynamic DNS and mod_proxy

    Even if you have a dynamic IP address with your home internet service, you can still set up multiple home servers accessible from the external internet using dynamic DNS and Apache with mod_proxy. The first step is to set up an account at http://www.dyndns.com/ and request a domain name that will be mapped back to your house. Let's say you pick "yourhouse.homeip.net" which will connect to your main home server, and you have two other home servers which you want to connect to using "server1.yourhouse.homeip.net" and "server2.yourhouse.homeip.net". The basic diagram for how everything will be connected follows:

    Dynamic DNS will direct internet traffic to your home router. Port forwarding will forward incoming traffic on port 80 on the router to port 80 on your main server. The mod_proxy Apache settings will redirect HTTP traffic intended for server1 and server2 over to those servers through the main server.

    You can manually update your IP address at dyndns.com, but once your home IP address changes, that information will be out of date. Linksys routers (and possibly other brands) come with dynamic DNS clients that will update your IP address for you when it changes. Alternatively, you can install a dynamic DNS client on one of your home machines that will connect to the internet on a regular interval to keep your home IP up to date.

    Usually, your router will block all incoming traffic from the internet to your home network. You can set up port forwarding to redirect traffic on specific ports to ports on your internal servers. Check out your router's documentation for how to configure port forwarding.

    Dynamic DNS and port forwarding will let you hook up one server. To add server1 and server2, we need a way to direct requests for those servers through the main server. This is where mod_proxy for Apache comes in (if you're not using Apache, you're on your own at this point). We will set up virtual host entries for the other internal servers and use the ProxyPass directive to forward traffic intended for the subdomains. You will modify your httpd.conf file as follows:

    1. Uncomment following lines:

    LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_http_module modules/mod_proxy_http.so

    2. Add following lines:

    ProxyRequests On
    NameVirtualHost *

    <VirtualHost *>
    ServerName server1.yourhouse.homeip.net
    ProxyPass / http://192.168.1.110/
    </VirtualHost>

    <VirtualHost *>
    ServerName server2.yourhouse.homeip.net
    ProxyPass / http://192.168.1.111/
    </VirtualHost>

    where 192.168.1.110 and 192.168.1.111 are internal ip addresses or machine names for your internal servers.

    Then, restart your Apache server and you should be able to connect to your machines.

    No comments.
    Average
    Your Rating
  • SharpScraps .NET Code Library

    SharpScraps is a collection of C# source code I put up on SourceForge.net some time ago. Rather than a cohesive library framework that you would rely on as a stable API, SharpScraps is just buckets of code that shows how to do some interesting things with .NET that you can include in your own projects (SharpScraps is licensed under the MIT license). Previously, you had to get the source from the subversion repository, but I just posted a zip file with the code that you can grab here.

    SharpScraps Highlight of the Day

    Voice Recognition and Text-to-Speech

    SharpScraps.Speech contains some wrappers for the Windows APIs for voice recognition and text to speech conversion (see SharpScrapsExamples/TextToSpeech and SharpScrapsExamples/VoiceRecognition in the code drop to see how to use them). Voice recognition opens up some interesting possibilities. A few years ago (long before the Ford Sync voice control commercials started showing up), I put together a voice control program for iTunes. It used the iTunes COM control for retrieving the list of music in the library and used that as the basis for the phrase list fed into the SharpScraps.Speech.Recognition.PhraseRecognizer class (names such as "U2" were replaced with "you two" to help the system out). Then, if you said "Metallica", it would kick off a playlist containing all of your "Metallica" songs. If you said "still haven't found what i'm looking for", it would tell iTunes to play just that one song. At one point, I had the hopes of hooking up a Bluetooth earpiece, so I could walk around the house controlling my computer and asking it for information. Unfortunately, the Bluetooth drivers never seemed to support the headset profile, and even if they do now, I suspect the audio quality might not be high enough to make things work smoothly.

    Text-to-Speech is the reverse of voice recognition. It takes textual input and converts it into audio. The SharpScraps example shows how to play the audio aloud or save it as a WAV file. The test dialog will let you select from any voice that is installed on the system. I believe Microsoft Anna is the only voice that comes with Windows, but better voices can be licensed from third-parties. On Windows XP, you might have to manually install the speech SDK (google 'microsoft sapi sdk'), or Microsoft Office might have installed it for you.

    Anyhow, much fun is to be had with voice recognition and text-to-speech. Knock yourself out.

    No comments.
    AverageNot yet rated.
    Your Rating
  • Home Control with ZWave and .NET

    ControlThink has a C# SDK for home automation via ZWave. ZWave is a low-power wireless mesh network that can connect devices within the home. I have a few light switches installed in my house. You can also get ZWave-enabled thermostats, door/motion sensors, and other sorts of devices. I just set up a home web server and turned my lights on via my cell phone for the first time just now.

    No comments.
    AverageNot yet rated.
    Your Rating
  • Flash-based Open-source Charting

    I was looking around today for a decent open-source charting solution and came across Open Flash Chart. It's available under the LGPL and uses JSON as its native data format (yay). I've just been tinkering around with it this afternoon for a little while, but so far, I'd say it's definitely worth checking out.

    http://teethgrinder.co.uk/open-flash-chart-2/

    No comments.
    AverageNot yet rated.
    Your Rating
  • Windows-style auto-completion in Linux

    This blog has some info on enabling Windows-style command line auto-completion in Linux. Essentially, you add the following lines to your /etc/inputrc file:

    set completion-ignore-case on
    # Ignore case when doing completion

    set mark-directories on
    # Completed dir names have a slash appended

    set visible-stats on
    # List ls -F for completion

    "\C-i": menu-complete
    # Cycle through ambiguous completions instead of list

    #set show-all-if-ambiguous on
    # List possible completions instead of ringing bell

    No comments.
    Average
    Your Rating