meebome

Just added a meebome widget to my blog sidebar.

I’ve been using meebo for a while, now, as my primary IM “unifier”. ICQ, Y!IM, AIM, MSN… all on the same page.

I used to use gaim, and was mostly satisfied with it, but meebo allows me to forget about proxy and network settings regardless of where I’m using it.

Norco
Purchase Zovirax
Cheap Cymbalta
Order Augmentin
Buying Tenuate
Buy Micardis
Order Ashwagandha
Purchase Viramune
Purchase Ophthacare
Purchase Himplasia
Lasix
Order Tenuate
Diarex
Ophthacare
Cheap Loxitane
Abana
Purchase Purinethol
Purchase Cheap
Purchase Coreg
Buy Vytorin
Order Bactroban
Cheap Meridia
Buy Zyprexa
Female Sexual
Buy Bonnisan
Buy Effects
Purchase Zebeta
Gyne-Lotrimin
Cheap Ophthacare
Darvocet
Order Retin-A
Cheap Trimox
Cheap Evecare
Order Requip
Purchase Bactroban
Order Cipro
Cheap Prilosec
Order Watson
Zestril
Cheap Zetia
Cheap Carisoprodol
Order Dilantin
Buy Flomax
Hyzaar
Buy Exelon
Order Acyclovir
Male Enhancement
Buy Xenacore
Purchase Tenuate
Capoten
Order Neurontin
Protonix
Cheap Diazepam
Purchase Diflucan
Order Lamisil
Buy Loprox
Buy Cialis
Cheap Diarex
Order Trimox
Cheap Koflet
Buy Reosto
Purchase Vicodin
Cheap Arava
Buy Nolvadex
Buy Celebrex
Buy Aceon
Buy Aricept
Purchase Avandamet
Buy Premarin
Oxytrol
Cheap Purinethol
Buy Lincocin
Cheap Micardis
Cheap Himcospaz
Lanoxin
Cheap Brahmi
Order Calan
Purchase Prometrium
Purchase Phentrimine
Penis Growth
Buy Feldene
Order Chitosan
Avapro
Buy Prometrium
Order Seroquel
Purchase Cipro
Buy Isoptin
Cheap Pilex
Buy Prograf
Combivent
Order Triphala
Purchase Leukeran
Mentat
Purchase StretchNil
Purchase Casodex
Diazepam
Cheap Penisole
Lamictal
Buy Rumalaya
Cheap Mycelex-G
Order Aceon
Sustiva
Purchase Plavix
Purchase Inderal
Purchase Glucophage
Purchase Altace
Buy Urispas
Cheap Mentat
Purchase Tulasi
Buy Emsam
Cheap Aristocort
Himcospaz
Cheap Atacand
Lozol
Cipro
Atrovent
Buy Trazodone
Buy Maxaquin
Buy Requip
Purchase Xeloda
Purchase Norco
Buy Aleve
Purchase Sildenafil
Order Azulfidine
Purchase Aceon
Cheap Xanax
AyurSlim
Cheap Lukol
Order Ophthacare
Bontril
Cheap Zelnorm
Order Ansaid
Cheap Pletal
Buy Shallaki
Order Lasix
Prinivil
Purchase Brafix
Purchase Didronel
Buy Tenuate
Topamax
Cheap Retin-A
Buy Leukeran
Cheap Acyclovir
Tulasi
Glucotrol XL
Buy Prinivil
Buy Trimox
Cheap Cystone
Order Lanoxin
Order Serevent
Purchase Cyklokapron
Buy Diakof
Buy Evecare
Purchase Avapro
Liv.52
Cheap Trandate
Purchase Vantin
Buy Coumadin
Buy Menosan
Order Shallaki
Himcolin
Purchase Clarina
Buy Vasotec
Buy Singulair
Cheap Levaquin
Order Exelon
Order Paxil
Cheap Soma
Cheap Famvir
Cheap Avandamet
Herbal Phentermine
Lioresal
Purchase High
Glucophage
Buy Starlix
Order Amaryl
Depakote
Purchase Rocaltrol
Purchase Adderall
Purchase Premarin
Purchase Lasix
Cheap Zocor
Cheap Nexium
Koflet
Purchase Lisinopril
Cheap Glucophage
Purchase Ventolin
Purchase Lexapro
Cheap Prandin
Order Adalat
Buy Ismo
Buy Arava
Purchase Zantac
Purchase Femara
Cheap Shoot
Levitra
Purchase Elavil
Purchase Levitra
Order Diazepam
Ultram
Buy Femara
Buy Himcospaz
Femcare
Order Zelnorm
Cheap Geodon
Xenacore
Cheap Tenuates
Purchase Clonazepam
Order Hyzaar
Sarafem
Casodex
Cheap Geriforte
Purchase Sorbitrate
Didronel
Buy Atrovent
Order Soma
Buy Prednisone
Geriforte
Order Ionamin
Cheapest Generic
Cheap Maxaquin
Order Xenacore
Buy Ultram
Cheap Lozol
Pilex
Diovan
Aristocort
Purchase Prilosec
Fioricet
Cheap Sumycin
Buy Zithromax
Buy Online
Phentermine
Purchase Tricor
Cheap Rimonabant
Celebrex
Purchase Soma
Cheap Ashwagandha
Cheap Diakof
Confido
Order Rimonabant
Buy Acticin
Buy Carisoprodol
Prednisone
Renalka
Cheap Loprox
Eurax
Buy Accutane
Buy Triphala
Cheap Brafix
Cheap Oxycontin
Purchase Prinivil
Purchase Serophene
Buy Dosages
Cheap Allegra
Buy Nonoxinol
Women Attracting
Buy Endep
Purchase Sarafem
Order Rogaine
Buy Propecia
Cheap Prinivil
Buy Flovent
Order Valium
Order Rhinocort
Femara
Buy Nicotinell
Buy Himplasia
Buy Relafen
Buy Sumycin
Buy Oxycontin
Purchase Requip
Nizoral
Atarax
Order Ephedrine
Buy Percocet
Order Zyprexa
Cheap Flexeril
Buy Bupropion
Buy Aristocort
Cheap Biaxin
Cheap Arimidex
Cheap Himplasia
Order Penisole
Acne-n-Pimple Cream
Relafen
Purchase Revia
Emsam
Zovirax
Purchase Lotrisone
Purchase Lamictal
Order Nicotinell
Viagra
Claritin
Order Flomax
Order Leukeran
Order Accutane
Buy Avapro
Purchase Naprosyn
Purchase Nizoral

Google-Ranking the 50 States

I was thinking this morning about a statistic that I once heard. It stated that the probability of Texas coming up in any given conversation was above 50%. I don’t know if this is actually true, but I think it has some truthiness to it.
This made me wonder about the popularity of the individual 50 states in Google’s index, so I did some quick checking. Here are the top 5 states, with their result count:

California 2,750,000,000
New York 2,450,000,000
Texas 1,340,000,000
Massachusetts 1,170,000,000
Washington 1,030,000,000

Nothing too astonishing there. Texas is a distant 3rd, after New York. Washington made the top 5. I excluded results with “D.C.” and “DC” , but it may be that Washington is still benefitting significantly from our first President and the many things honoring his name.

Here are the bottom 5:

Wyoming 316,000,000
Vermont 294,000,000
West Virginia 286,000,000
North Dakota 278,000,000
South Dakota 254,000,000

Sorry, South Dakota. You got your hide tanned by states with much smaller populations.

I was a little surprised that Virginia ranks 29th (several steps behind even Hawaii and Alaska), given that it’s the “.com capital of the world”, right? ;-)

Diff Classes in 2 Jar Files

I had the need to get an overview of the differences between 2 jar files, so I created a simple Ruby script that simply wraps the output of jar, javap, and diff (I’m using Cygwin diff on WinXP).

Here’s jardiff.rb:

#! /usr/bin/ruby

if ARGV.size !=2
  puts “USAGE: ruby jardiff.rb “
  puts “\nNOTE: ‘diff’ command must be on the path and JAVA_HOME environment variable must point to a valid JDK install”
  exit
end

# —————————————————————————–

# check arguments
jar1=ARGV[0].tr(“\\”,“/”)
if (!File.exists? jar1)
 print “#{jar1} can’t be found”
 exit
end

jar2=ARGV[1].tr(“\\”,“/”)
if (!File.exists? jar2)
 print “#{jar2} can’t be found”
 exit
end

# —————————————————————————–

# constants, exec commands : customize, if you wish

WIDTH=100
JAVA_HOME=ENV[“JAVA_HOME”].tr(“\\”,“/”)
JAR_CMD=“#{JAVA_HOME}/bin/jar tf”
JAVAP_CMD=“#{JAVA_HOME}/bin/javap -public”
# diff currently assumed to be on the path
DIFF_CMD=“diff -wBW #{WIDTH}”
HR=“=”*WIDTH

# —————————————————————————–

require “Tempfile”

# Utility functions

# wrapper around diff
def filediff(f1, f2)
  #print “filediff #{f1} #{f2}\n”
  `#{DIFF_CMD} #{f1} #{f2}`
end

# wrapper around jar tf
def get_jar_classes (jar_file)
  `#{JAR_CMD} #{jar_file}`.reject { |v| !v.match(/\.class$/) }.collect { |v| v.strip.tr(“/”,“.”).sub(“.class”, “”) }.sort
end

# wrapper around javap
def javap(jar_file,class_name)
  `#{JAVAP_CMD} -classpath #{jar_file} #{class_name}`
end

# wrapper around Tempfile : returns tempfile or block value
# ? don’t know why Tempfile.open doesn’t return the block value
def tmpfile()
  result = tf = Tempfile.new(“jardiff”)
  if block_given?
    begin
      result = yield tf
    ensure
      tf.close unless tf.nil?
    end
  end
  result
end

# —————————————————————————–

print “Comparing classes in #{jar1} with those in #{jar2}\n”

# examine the jar files, pull out a list of class names from each
classes1 = get_jar_classes jar1
classes2 = get_jar_classes jar2

f1 = tmpfile() { |f| f.puts(classes1.join(“\n”)); f.path }
f2 = tmpfile() { |f| f.puts(classes2.join(“\n”)); f.path }

diff = filediff(f1, f2)
if (diff.strip.length > 0)
  print “#{HR}\n#{“*** Differences ***“.center(WIDTH)}\n#{diff}#{HR}\n”
end

# —————————————————————————–

same_list = (classes1&classes2).sort

print “Comparing method signatures for #{same_list.size} classes\n”

# diff each class that occurs in both jars

same_list.each do |cn|
  f1 = tmpfile() { |f| f.puts javap(jar1, cn); f.path }
  f2 = tmpfile() { |f| f.puts javap(jar2, cn); f.path }
  diff = filediff(f1, f2)
  if (diff.strip.length > 0)
    print “#{HR}\n#{“*** Differences in #{cn} ***”.center(WIDTH)}\n#{diff}#{HR}\n”
  end
end

# —————————————————————————–

Oracle SQL Developer 1.0 Released

It looks like Oracle’s Project Raptor has graduated and become SQL Developer 1.0.
I really don’t know what took Oracle so long to come up with their own tools. I’m somewhat surprised that they didn’t just purchase Quest Software (given their recent buying spree) and package TOAD with the database.

Regardless, Raptor SQL Developer is quite nice for my needs and a bargain to boot!

BTW: You can import your connections from an older Raptor install if you right-click the Connections tree item, select “Import Connections…”, and select [Raptor-Install]/jdev/system/oracle.onlinedb.11.0.0.36.49/IDEConnections.xml.

Migrated from Blogger to WordPress

So, along with changing web hosts, I have moved from Blogger to WordPress. Dreamhost had a simple 1-click installer for WP 2.0, plus WP 2.0 has an amazingly simple Blogger importer. It logs into Blogger, tweaks your template, republishes, parses the newly-generated pages, and imports them into WP posts.

NICE JOB, GUYS!

The only thing I’ve noticed so far that the importer missed was my site subtitle (“Ridiculous ideas. Insightful comments. Blank verse.”), so I changed via the WP admin screens.

Of course, now I have to go through my old posts, which are all “Uncategorized”. Plus, I’ve [temporarily] lost my Google Adsense, my del.icio.us link roll, and of course my hideousbeautiful old template. Still, the ability to have more control over the site is worth it. And WordPress r0X0rs!

Moved to Dreamhost

I have changed hosts from 1and1.com to Dreamhost. I was using the free professional preview package from 1and1, but I think it was going to expire soon. Plus, there was a pretty good Dreamhost code: ‘DREAM77’ to save $77 off a yearly plan.

I had to change my nameservers with my domain registrar (GoDaddy). Took a while for updated NS and MX records to propagate, but they seem OK now.
Dreamhost has some nice 1 click installs. One of which is the WordPress 2.0 install. More on that later…

Full disclosure: Yes, my links to Dreamhost are referral links. Dreamhost Dreamhost Dreamhost ;-P

Ruby on an iPAQ Pocket PC

  1. Download SymbolicTools PocketConsole here.
  2. Download SymbolicTools PocketCMD here.
  3. Install PocketConsole and PocketCMD. Cradle the iPAQ. When install is complete, reboot/reset the device.
  4. Confirm that you have an operational command prompt by clicking the PocketCMD program icon:

  5. Download Ruby for wince binary here.
  6. Extract the ruby-mswince archive to a directory on your desktop PC.
  7. Create a root-level directory named ‘\ruby’ on the iPAQ.
  8. Copy the contents of the arm-ppc-wince directory (from the extracted archive) to the \ruby directory on the iPAQ.
  9. in PocketCMD, set the PATH environment variable to include \ruby\bin:

  10. Verify that Ruby works:

  11. Try to take over the world!

Ruby, Java, Monkeys, and Bananas

This whole Ruby v. Java, humane v. minimalist monkey knife fight reminds me of the debate over the correct way to peel a banana.

For the uninitiated: you can peel from the end with the stem (this is the traditional way to do it), or you can peel from the end without the stem (this is the way most monkeys do it).

The stem end is appealing (pun not intended, but I’ll take it anyway), because there is a convenient handle/lever to use. Just bend it down to break the “seal” and peel away. This works pretty well for a ripe banana, but not so well for a green one (you end up with banana mash).

Peeling from the non-stem end is probably the faster way to do it, on average (in case you’re ever in a banana-peeling contest). I haven’t tested it, but I’m more inclined to think that monkeys have come up with the more efficient approach.

There are problems with peeling from the non-stem end: that’s the end that typically gets “bruised”. So what do you do with the yucky brown part of the banana? If you had only peeled from the other end, you could have just aborted consumption and disposed of the unappetizing remnant with the peel.

So… what is the correct way to peel a banana? Maybe it depends on the individual banana. Maybe green bananas should be peeled from the non-stem end (do green bananas have fewer bruises?) and ripe bananas using the stem.

I’m accustomed to using the stem, but I’m not opposed to experimenting with new technologies :-).

I don’t want to draw too many parallels between banana peeling methods and humane v. minimalist programming languages. I will say that knowing that there is more than one way to peel a banana and that each method can provide a useful banana experience has enriched my life immensely.

I wonder if there is yet another undiscovered banana-peeling method…

UPDATE 29-Dec-2005: and once you’ve decided how to peel your banana look here.