Welcome to
'Confessions of a Culture Shock Junkie' ™
Home

Site Style

Font Size:
Background:
Border:
Border Style:
Border Width:

Who's Online

We have 18 guests online
 
Re-architected Interactive Resume Posted PDF Print E-mail
Written by Tom H.   
Monday, 20 April 2009 21:00

I have posted a new, improved, and re-architected version of my interactive resume here.

I call this resume interactive because when the page first displays, a [More] button appears after each job. Clicking on this button displays more information about a given job, along with a [Less] button. Clicking on the [Less] button displays the original description along with the [More] button.

The two resumes do essentially the same thing, so what's the difference between them? For the answer, click on the link.

Last Updated on Friday, 14 January 2011 12:45
Read more...
 
Core Groja.com Classes PDF Print E-mail
Written by Tom H.   
Thursday, 26 February 2009 00:00

This article describes the core classes written for previous versions of groja.com.

All of these classes have names beginning with "C," and almost all of them operate independently of joomla! framework. The exceptions are CGrojaUser, which depends on joomla's JUser class, and CFunctionsDatabase, which enables some of these classes to access the database outside the joomla! framework.

The code in version 3 of the site utilizes the new features of version 5 of PHP. Specifically, these classes:

  • use PHP5's access modifiers (all data members and methods are now private, protected, or public),
  • contain comments that conform to the PHPdoc format, and
  • declare constructors in the PHP 5 format.

Additionally, every effort was made to ensure these classes generate valid, well-formed HTML that conforms to modern standards. For more information about these classes, click on the Read more... link below.

Last Updated on Monday, 21 December 2009 00:54
Read more...
 
Version 3.0 of groja.com Is Now Online PDF Print E-mail
Written by Tom H.   
Tuesday, 24 February 2009 17:18

I am pleased to announce that version 3.0 of my "main" site, www.groja.com, is now online.

This version is based on the joomla! content management system. Most importantly, it allows advanced users to post their images to the site's content area. It also allows unregistered visitors to store profiles and images as cookies, so that they do not require an account to see their grojas.

The fact that it is online does not mean work on the site is done! It does mean that the tasks that require the focus of my full-time efforts are now complete. There is still a lot of work to be done, but I can do that work part time.

The bottom line is, right now the site has enough content for visitors to see my vision, and enough functionality that visitors can see images of their own personalities. Here is an overview of the site's functionality:

  • The front page gives you an overview of the site.
  • The "View" option displays the grojas of several people, many of them famous, along with a short description of each.
  • The "Draw" option is the heart of the site - I have spent years working on these programs! This option is an original joomla! component that allows you to see your groja, after inputing your personality profile in any one of a number of different ways.
  • The "Blog" option includes a lot of general information about the site, such as how I came up with the questions used in the groja quiz. This page also includes some formal documentation detailing how I the designed the site.

For a complete list of what is new in this version, see this article about what has changed in version 3.0. To learn what the earlier versions were like, see this article about the evolution of groja.com.

So what are you waiting for, go check it out already!

Last Updated on Tuesday, 24 February 2009 17:21
 
I Believe Its "Botticelli's Venus" PDF Print E-mail
Written by Tom H.   
Tuesday, 24 February 2009 15:20

A few months ago I googled the lyrics to "When I Paint My Masterpiece" by Bob Dylan - and covered by The Band and The Grateful Dead. Here are some of the results:

Click on one link or click on all of them, but note the sixth line in the song. Some versions claim he's got a date with "Botticelli's niece," while others claim it's with a "pretty little girl from Greece."

I claim it's neither. I claim that he's got a date with "Botticelli's Venus," a famous painting that apparently the transcribers of these lyrics have never seen.

I feel quite certain that if they'd ever seen this painting, these transcribers surely would remember it. Here's a copy of it:

The Birth of Venus, a painting by Sandro Botticelli

To see a larger version in a separate window, click on the image.

Although dating a painting might sound unlikely, dating a niece of Botticelli, who lived from 1444 to 1510, is impossible. And although dating a pretty little girl from Greece might sound plausible, Botticelli's name is quite obvious in all of the versions I've heard.

I believe it's "Botticelli's Venus," and here's how it looks in the context of the entire verse:

"Got to hurry on back to my hotel room
Where I've got me a date with Botticelli's Venus
She promised she'd be right there with me
When I paint my masterpiece."

OK so it doesn't exactly rhyme, so what? The song is about art and inspiration, and Botticelli's Venus is a classic work of art that is quite inspiring.

I can only hope the web's lyricists see this article, see the light, and make the change.

Last Updated on Tuesday, 24 February 2009 16:22
 
How Groja.com Uses the Joomla! MVC API PDF Print E-mail
Written by Tom H.   
Tuesday, 03 February 2009 00:00

The functionality of groja.com's Draw option is an original joomla! component named com_groja. The design of this component is based on joomla's Model-View-Controller (MVC) Application Programming Interface (API).

Joomla's MVC API gives developers a framework for developing complex applications.

  • Models are specialized classes that know how to do something, such as store and retrieve data from cookies or a database.
  • Views are classes that know how to display something, such as groups of forms that allow users to send data to the server in a request.
  • Controllers are classes that know how to accomplish a task, such as validating and storing data from a form.

This article describes how groja.com uses joomla's MVC API.

This article makes no effort to describe concepts such as the MVC design pattern and object oriented design (OOD). There is already a great deal of information about MVC and OOD on the web; google and the wikipedia are good places to start.

This is a long and fairly technical article. If you are still interested in all this, click on the "Read more..." link below to see class diagrams that illustrate how groja.com uses this API.

Last Updated on Monday, 21 December 2009 00:22
Read more...
 
How Groja.com Uses Javascript and Mootools PDF Print E-mail
Written by Tom H.   
Tuesday, 03 February 2009 00:00

What is Mootools?

The mootools javascript library makes it easy to design a web page that responds to user actions without reloading the page. The best way to get a feel for what it can do is to run the demos. Personally, I like the demos for version 1.11 better.

Joomla! uses the mootools library in the back end to put groups of parameters into panels. Only one panel is visible at a time, making it easier to set the parameters. Because it is bundled with joomla!, mootools is available for components to use in the front end.

For information about how groja.com uses mootools, click on the Read more... link below.

Last Updated on Monday, 21 December 2009 00:44
Read more...
 
The Evolution of Groja.com PDF Print E-mail
Written by Tom H.   
Thursday, 29 January 2009 00:00

This article briefly describes the functionality present in the following versions of groja.com:

  • Version 1, launched in 2002, can draw an image but has no navigation, no database, and is strictly PHP/HTML (no CSS)
  • Version 2, launched in 2006, is integrated with PHP Nuke, which includes site navigation and a MySql database
  • Version 3, launched in 2008, is integrated with joomla!, which includes navigation, a database, and regular security updates

Due to security concerns, only the latest version is currently available online at seeourminds.com.

For screenshots and details about each of these versions, click on the Read more... link below.

Last Updated on Monday, 03 January 2011 12:07
Read more...
 
Dreamed I Was Bob Weir's Neighbor PDF Print E-mail
Written by Tom H.   
Sunday, 15 June 2008 11:20

Nightmares as vivid as the last one I blogged about are few and far between, especially since The Wire ended and I dumped HBO. It was costing me $50 per month and The Wire was the only show I was watching on it, so I don't miss it in the least. I've had several dreams since then but none have been nearly as interesting as that one!

Last night though I had a very curious dream, in which I was very rich and lived next door to Bob Weir! For those of you who do not recognize the name, he, along with Jerry Garcia, was one of the Grateful Dead's guitar players.

I don't remember much, except being outside doing yard work, and inadvertantly filling up a wheelbarrow with water from a sprinkler. Rather than dump it out on my already well-watered plants, I wheeled it over to my "good buddy" Bobby's house (as if!) to see if he could use it.

As I recall, about half the water splashed out of the thing on the trip over, making it semi-obvious that my efforts were more about finding an excuse to put the chores on hold and schmooze with a rock star than trying to conserve a little bit of water. But Bobby was amicable enough, and we had a nice little chat!

Although I was a big fan of The Dead back in the day, lately I've been listening just about everything else. So I really have no idea where this dream came from, except that I do need to get out and get some yard work done pretty soon. But it was nice to finally have something worth blogging about here!

Last Updated on Sunday, 15 June 2008 13:23
 
Have You Changed Your Modem's Password? PDF Print E-mail
Written by Tom H.   
Friday, 02 May 2008 13:56

The securitycartoon.com website has an excellent series about why it's important to change your modem's password. Click on any of the cartoons in this article to see a full-size version of it in a new window.

Why worry about infected routers?  Because if it is infected, it can take you anywhere, regardless of the URL you have entered in the address bar

In addition to translating (modulating and demodulating) the analog signal in the phone line to and from a digital signal that your computer can understand, today's modems also connect to Domain Name System (DNS) servers. Hence, they may also be called "routers," "residential gateways," or "default gateways."

Infecting routers is just one example of "pharming," a hacking technique related to phishing that involves sending users to bogus, counterfeit websites so that their password and other credentials may be stolen.  The difference is, phishing involves taking a user to a site that looks similar to another but has a different URL, while pharming involves changing the IP address of the site the URL points to.

A related exploit is the practice of DNS server hijacking.  Rather than changing the addresses of the name servers your router uses, this involves changing the DNS server itself.  A report published recently by Georgia Tech estimates that there are currently 68,000 rogue DNS servers.  If this doesn't concern you, well, it should.

Wireless Modems: Vulnerable to Drive-by Pharming 

Home users' wireless modems are especially vulnerable to "drive by pharming," which involves logging into a wireless modem and changing its DNS servers and even its firmware.

Entering a web address is like telling your computer to ask for directions to a place on the internet

This is analogous to someone changing your phone so that every call you make can, at the whim of the hacker in control of the bogus DNS server, optionally go to an imposter rather than to the business you are trying to contact.

Although changing your modem's password does not completely prevent you from falling victim to this type of exploit, it is a very simple step you can take in the right direction.

Be Sure to Use a Strong Password

It is essential to choose a strong password - that is, one that is not easy to guess.  Many if not most routers do not have the capability to prevent a "dictionary attack."

How pharming is like asking the wrong person for directions to the bank

Another way to help prevent falling prey to this exploit is to be sure that any time you make sensitive information available over an internet connection, that it is through a secure connection.  Anytime you perform a financial transaction online, ensure it is through a connection using HTTPS rather than HTTP.  

The HTTPS protocol transfers information over a Secure Socket Layer (SSL) and requires a  certificate.  To ensure you are at the correct site, you must pay close attention to any warnings your browser may display about the certificate being invalid.

If You've Never Changed Your Modem's Password

How can you tell if your modem has been compromised?  Unless you're comfortable logging into your router and changing its settings, it's probably best to call your ISP.

In some cases they may have already set or reset the password for you, and in other cases they may be able to do so if you ask them to.  They should at least be able to tell you which DNS servers are correct, and how you can check them.

If your set up is similar to mine and includes a wireless router behind a modem issued by your ISP, they may tell you that you are on your own.  In this case, if you never changed your password it may be best to play it safe and paperclip your router, returning it to its default settings, and start from scratch.  As you've no doubt noticed, I'm a bit paranoid, and therefore have always protected my routers with strong passwords.

This is just one example of the type of information available at the securitycartoon.com website.  I find the field of computer security to be fascinating, and as soon as I stumbled on this site I dropped everything and read all of the cartoons.  Among other things, reading these cartoons made me realize that since my laptop died I was no longer using the wireless router, so I disabled that feature.

I think it is awesome that the authors of the securitycartoon.com site have done their best to help simplify these extremely important yet sometimes all too complicated concepts!

 

Last Updated on Thursday, 08 May 2008 14:29
 
Implementing Static IP Addresses in a Hybrid OS Environment PDF Print E-mail
Written by Tom H.   
Thursday, 01 May 2008 19:31

This website, groja.com, and artsyvisions.com all run on a dedicated linux server in my dining room.  I've invested a great deal of time and money putting all this together, and am ready to start seeing a return on this investment.

If I am actually going to start promoting these sites, I need to make my LAN as stable as possible.  That, in turn means switching from using DHCP to assign IP addresses to using static IP addresses.  

If that last sentence makes little or no sense to you, or you are curious as to how I accomplished this goal, this article is for you!  As a self-professed "culture shock junkie" I have done a variety of things in my lifetime, but system administration is definitely not my forte.  

This was a difficult project and I can only hope that publishing this how-to will help enlighten others who may want to accomplish a similar task.  People who are interested in knowing more about computer networking should also continue reading.  Non-nerds should probably either scroll down or click on "Art" or "Life."

Networking Basics

Each computer on the internet has its own address, known as an Internet Protocol (IP) address.  Whether they know it or not, most home users have their modems set their computer's address dynamically and transparently using Dynamic Host Configuration Protocol (DHCP).  It's a great mechanism because most home users don't need to know what their IP address is.

This and two other websites run on a dedicated Gentoo server running Linux, Apache, MySql, and PHP (LAMP).  People access these sites through a single static IP address, 210.124.10.54 .

Counting the production and test servers I have four computers in all, but as far as the internet is concerned all four have the same IP address.  A Comtrend ADSL router manages communications between the four computers and the internet.  

Most people, including some of my system administration buddies and the support people at my ISP, call this router a "modem."  Because it translates (modulates and demodulates) analog phone signals to and from the digital signals that computers can understand, it does indeed function as one.  

Other terms appropriate for what I call the "Comtrend router" include "residential gateway" and "default gateway."  I prefer the term "router," because using it to control how communications are routed in my Local Area Network (LAN) is, to me, its most important feature.

I was using DHCP for awhile but after a recent power outage decided this was no longer practical, because when routers and computers go down and come back up, DHCP does not necessarily assign the same IP address to the same computer.  This means that when the power comes back on the test server could get the IP address the production server was using, and vice versa.

The LAN Behind 210.124.10.54

Following is a diagram of my Local Area Network (LAN).  Click on it to see a larger version in a new window.

A dual boot SuSE/WinXP PC and a MacOS PC behind a Linksys Router which in turn is behind a Comtrend router along with two Gentoo Linux Servers (one test, one production)

Note that in addition to the Comtrend router and four PCs it includes a Linksys Wireless Router.  To configure one of these routers I type its address into a web browser, enter the password, and use the web application built into it.

After being reset to their factory defaults - that is, not just rebooted but paperclipped - both the Linksys and the Comtrend by default have a local IP address of 192.168.1.1.  Because both Gentoo servers are "headless" - that is, they have no monitor attached and are accessible only via the command line - I had to change the IP address of the Linksys to 10.0.0.1 .  This enables me to access the Comtrend from behind the Linksys.

This configuration allows me to access not only both routers but also both the test (local IP address 192.168.1.6) and production (192.168.1.7) Gentoo Linux servers from either the Fun PC (10.0.0.101) which runs Mac OS X or the Main PC (10.0.0.100) which runs both SuSE Linux and Windows XP.

Before I figured out how to configure these using static IP addresses, the Gentoo boxes would get IP addresses of 10.0.0.? and the Fun and Main PCs would get IP addresses of 192.168.1.?, where the "?" was assigned by the router and would in general depend on the order in which the PCs were booted.  And that's why I had to do this before I could promote these sites, particularly here in the middle of thunderstorm season, when the power goes out all too often.

How to Set Static IP Addresses

The skinny is, to set the IP address in a computer it needs these things:

  • The IP address
  • The IP address of the router, aka. the "default gateway"
  • The IP addresses of the name servers

Additionally, the router needs to know that rather than set the computer's IP address dynamically the computer is going to set its own.  Each of the operating systems I am using has its own way of specifying these values.

Dealing with how to configure the routers is beyond the scope of this article.  Consult your ISP, the documentation that came with your router, or just have fun experimenting - and keep that paperclip handy!

The changes to the operating systems need to be synchronized with those to the routers.  If you are using two routers, it may be necessary to keep one of them out of the mix while getting everything set up using the other.

Another potential source of frustration is dealing with headless servers, because resetting the network may kill the connection.  At the least it's best to arrange the hardware so that you can easily and temporarily plug a monitor into the servers.  If you have an old monitor in the basement or whatever, it may be worthwhile breaking it out before getting started on all this. 

Setting a Static IP Address in Gentoo Linux

In Gentoo Linux, specify the desired IP address and default gateway in the /etc/conf.d/net file using this syntax:

config_eth0=( "192.168.1.6 netmask 255.255.255.0" )
routes_eth0=( "default via 192.168.1.1" )

If you are using two network cards or a wireless connection you may need to change the "eth0" as appropriate.

Set the nameservers in /etc/resolv.conf using this syntax:

nameserver 192.168.30.2
nameserver 192.168.31.2

Note that your name servers may be different, so you may have to use different values.  As I recall, both SuSE and Mac OS X were "smart" enough to know these, so if you are in a hybrid environment it might help to set up a different OS before setting up your Gentoo boxes.  If in doubt, call your ISP.

To put these changes into effect requires using these commands to restart the interface:

cd /etc/init.d
./net.eth0 stop
./net.eth0 start 

Again, you may need to change the "eth0" to the value appropriate for your environment.  Note that if you are logged in remotely, stopping the network like this will kill your connection.  I love Gentoo, one reason being because I am a DIY type and it reminds me of simpler times when we used to fix our own cars!

Setting a Static IP Address in Mac OS X

In Mac OS X, specify the desired IP address and router (aka. default gateway) using "System Preferences..." in the Apple drop-down menu.  Click on Network (under Internet and Network) and select "Manually" in the "Configure" drop-down list.  

If you've made changes to your /etc/hosts file, you may want to save a copy of it before changing your network's configuration.  Changing these options overwrites this file so saving a copy of it will enable you to merge your changes into the new version. 

As I recall, it was "smart" enough to figure out the default gateway and name servers on its own.  Actually, that's how I got the values to plug into the Gentoo configuration files.

Changing these values causes Mac OS X to restart the network automatically.  If something's not right, you will probably get an understandable error message in plain English.  What a concept!  And that's one of the reasons I call this my "Fun PC."

Setting a Static IP Address in SuSE Linux

In SuSE Linux, specify the desired IP address by logging in as root, starting up YaST, and clicking on Network Devices.

If you've made changes to your /etc/hosts file, you may want to save a copy of it before running YaST.  The GUI tool overwrites this file so saving a copy of it will enable you to merge your changes into the new version. 

As I recall, YaST was "smart" enough to figure out the default gateway (aka. router) and name servers, and restart the network interface, on its own.

Setting a Static IP Address in Windows XP

In Windows XP, specify the desired IP address and default gateway by clicking on the following sequence:

  • Start -> Connect to -> Show all connections
  • LAN (Right click) -> Properties
  • Select "Internet Protocol (TCP/IP)" in the list then click on Properties

I am not a big fan of Windows, and so did this one last.  (About the only time I use it for is to change the ink cartridges in my printer - it has a nice wizard that moves the heads into position and cleans them and whatnot.)

Having already figured out how to do this on the other OSes, once I found "Internet Protocol (TCP/IP)" in the drop-down list, doing this in WinXP was a piece of cake.  As I recall changing the values caused the OS to restart the network automatically.

Troubleshooting

Before doing all this I knew very little about networking.  Mostly I just plugged things in and if they didn't work (for example, after a power outage) I'd grumble a little at Xcel Energy, run some ifconfig commands, change the various /etc/hosts files, and be on my way.  It seems simple enough now that I've figured out how to do it, but I do not want to admit how long it took to get this done.

  • One rule that applies whether you're working on a car's engine, or programming, or troubleshooting a network is, sometimes it's best to let things be and just get some rest.  (OK I admit, it took me more than one day to do all this!)
  • For example:  198.162.1.6 is not the same as 192.168.1.6

When choosing the static IP addresses to use, take note of the following:

  • IP addresses in the subnet behind a router need to be in the same subnet
  • This means that if you change a router's IP address to 10.0.0.1 then the computers behind it also need IP addresses of the form 10.0.0.X
  • There is something called a "subnet mask" that defaults to 255.255.255.0 and probably affects this range of IP addresses - but I'm no expert, it's working now, and need to get on with other projects...
  • Small typos can lead to massive frustration: no matter how many times you reboot the router or PCs or both, 198.162.1.6 is not in the same subnet as 192.168.1.1

Another general rule in problem solving is, haste makes waste, and if you're getting frustrated it may be because you're just not seeing the whole problem.

Specifically. in Gentoo:

  • There's a helpful file named /etc/conf.d/net.example that contains the lines to set the IP address (config_eth0=( "192.168.1.6 netmask 255.255.255.0" ))
  • In my haste to fix the problem what it was saying about /etc/resolv.conf just didn't register
  • But I swear I had it working at one point with just the IP address in the /etc/conf.d/net file (or ... I suppose it's possible I was suffering from sleep deprivation?)!
  • A quick googling let me straight to the page in the gentoo handbook that explained how to do this

Congratulations!

If you've read this far, you must be a geek!  My guess is that knowing how to do something like this is akin to knowing how to tune up your car: most people are blissfully ignorant and those who might want to try it probably make big bucks doing it for a living.

If you're the type who is neither dummy nor expert, welcome to the club!  Allowing comments here is just not practical at this time, but if feel free to drop me a line.

Finally, if reading this has put you in a frame of mind where you want to do something simple yet effective, be sure to change your router's password.

Last Updated on Thursday, 15 January 2009 01:04
 
Killed a Gangster in Self Defense Last Night (in My Dreams!) PDF Print E-mail
Written by Tom H.   
Thursday, 01 May 2008 14:36

Last night I had a dream in which I was one of the gangsters in David Simon's The Wire. We were in one of the high-rises and I had my seven-shot .357 Smith and Wesson revolver (yes I own one in real life).

I felt like I was Michael Lee, a sometimes reluctant hit man in Marlo Stanfield's organization, and I knew for sure that they were going to "do" me. I remember checking the cylinder of my gat and two rounds were missing. Five would have to do.

Next thing I know I've shot Chris Partlow, and a Russian is trying to shoot me with his AK47. Fortunately it jammed, else I would not be typing this right now (j/k!). So I capped his ass and instantaneously found the stairwell. I remember flying - literally - down the stairs, making ample use of the handrails and hitting only like one or two steps out of every group of 10 or 12 just before waking up.  "Out of my way!"

A Recurring Theme?

Earlier this year, when the series was ending and I was watching it more frequently, I had recurring dreams in which I was with one group and fighting another. Those nightmares were not like this one, in that it felt more like we were part of a bigger group waging war outside rather than having a small gunfight indoors.

At the time I couldn't quite figure out what was behind these dreams.  But in the two I remember most vividly I recall a sincere reluctance on my part to hurt "the enemy."

In one case I threw a heavy bowling-pin type object at a friend of a friend, hitting him in the nose. It didn't kill him but I am sure it hurt plenty! I woke up immediately with an overwhelming feeling of guilt in addition to feeling a huge sense of relief that this did not happen in real life.

In another case we were using guns (rifles and definitely not the revolver I own in real life) and the enemy was hidden. After several shots I caught a glimpse of one of "the others" and saw that she was female! I said "I ain't shootin' no woman!" (probably out loud because I do talk in my sleep at times) and got the hell out of there, again feeling relief that it was just a dream.

No Remorse This Time 

Reflecting on these older dreams in light of the most recent one, I now feel certain they were inspired by Michael's character on The Wire. He could be cold and business-like about his duties, but only up to a point.

In life we all meet good people and bad people, and since High School it's been my goal to treat the good ones with kindness and respect while keeping the bad ones at bay.  This implies a certain amount of vulnerability with respect to new friends, while one discovers how trustworthy they are.

The attitude I try to base my life on is to be where Ken Kesey's "you're either on the bus or off the bus" meets the Roots' "I might forgive but I do not forget."  All too often people whose world view is that others are either above or below them do not get this until it's too late. 

If you haven't seen the show you'll have to take my word for it: Chris was a cold-blooded remorseless character, and one would be foolish to regret killing him in self-defense.  But then, in the show he was Michael's defender, so to a certain extent the dream was not true to that reality.

I wonder what Carl Jung might have to say about all this.

Last Updated on Sunday, 04 May 2008 12:20
 
«StartPrev12NextEnd»

Page 1 of 2