Wednesday, May 16, 2012

Much better way to fix "home_dir/.rvm/gems/ruby-1.9.2-p290@gemset/gems/mysql2-0.2.18/lib/mysql2.rb:9:in `require': dlopen(home_dir/.rvm/gems/ruby-1.9.2-p290@gemset/gems/mysql2-0.2.18/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.18.dylib (LoadError)"

I found this on this blog

 Simply add: export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/ to your .bash_profile, .bashrc file in your home directory (or whatever file is consulted when an interactive login shell is started) and source the file:

 . ~/.bashrc

Monday, January 16, 2012

How to fix -- dlopen(/Users/user/.rvm/gems/ruby-1.9.2-p290@gemset/gems/do_mysql-0.10.7/lib/do_mysql/do_mysql.bundle, 9): Library not loaded

Recently when working with a new gemset in RVM, I noticed that the gem install of mysql-0.10.7, the C extensions be exact, did not link correctly against the mysqllibclient dynamic library. I don't really know why this at this point. I needed to get it fixed. Stackoverflow to the rescue, but I wanted to post the script I made to make this easier.

The error when running my Sinatra app:

dlopen(/Users/users/.rvm/gems/ruby-1.9.2-p290@gemset/gems/do_mysql-0.10.7/lib/do_mysql/do_mysql.bundle, 9): Library not loaded: libmysqlclient.18.dylib (LoadError)

The ruby script for the fix:

#!/bin/env ruby
mysql_bundle = `find ~ -name do_mysql.bundle`
mysql_lib = 'libmysqlclient.18.dylib'
mysql_lib_location = `find /usr/local -name #{mysql_lib}`
m_array = mysql_lib_location.split
mysql_lib_path = m_array.first if m_array
mysql_bundle.split.each do |bundle|
`/usr/bin/install_name_tool -change #{mysql_lib} #{mysql_lib_path} #{bundle}`

Thursday, August 18, 2011

Hey Paypal!

PayPal wanted a survey from is my reply. Wondered if this is too harsh?
"I periodically change all my passwords and my answers to the secret questions. This is a prudent action on my part, but apparently this behavior triggers an event related to a possible security problem in PayPal's system. I understand why this happens, but the security policies should be refactored. PayPal ought to use two factor authentication. For those that do not have access to the second factor, then drop back to the antiquated system. Also, if I remember correctly, PayPal does not allow passwords to be over a certain length. This is a super huge red flag that you are possibly storing my password plain text OR the frontend is just bush league and not sophisticated enough to prevent an overflow into the DB. In any case, this password policy is not what I expect from a banking institution. I don't have anything personal against your company, but it seems PayPal's priorities are mixed up."

Thursday, June 23, 2011

SheevaPlug Dev Kit and Debian

Got my Sheeva Plug Dev Kits in yesterday:

Initial thoughts are that they are nifty. Not earth-shattering. Not knee-buckling, just nifty.

In case you didn't know. The Sheeva Plug device is the hardware reference platform for a lot of pluggable computers these days such as the Tonido Plug and others. They have middle-of-the-road hardware specs based on the ARM architecture. The best part of this device is that the Dev kit retails out for $98. I ordered mine from GlobalScale Technologies.

GlobalScale took over two weeks just to ship out the two plugs that I ordered. Not cool. But, they did get them to me. The devices come ready to plug right into a standard wall 120V outlet. You can also remove the prongs from the device and plug in a power cable (sort of like the macbook's power transformer), so that you can mount the plug separate from the wall.

Input/Output connections to the device are:

  • Power (takes 120V directly, the power supply is in the device, interesting design decision)
  • MMC/SD slot
  • Gigabit ethernet
  • USB 2.0 port (A-type connection)
  • mini USB
This is the serial port to the device. You attach the supplied mini USB cable and there is a serial to USB device in the Sheeva Plug that gives you a serial connection. You can connection right up to the Sheeva Plug by doing something like:
% screen /dev/ttyUSB1 115200

Hardware notes:
Internal switching power supply. This is non-characteristic of hardware vendors these days. Let power supply doods handle that stuff, too much to go wrong there, but it does fit with the "plug" theme that they are going for. The MMC/SD is pretty standard, but I never really liked that form factor. The card sticks out about a full centimeter. This will snap off like a saltine at the hint of contact with something harder than talcum powder. Be careful if you use that port. Plenty of room around the usb port and ethernet port, so you can use fatty usb storage devices. The white protective case seems cheap and flimsy. I would not trust it to withstanding any sort of fall. But, this is reference hardware, not destined for the Apple Store.

Firmware notes:
When you connect to the serial console on the device, you will see the


prompt. Consider this the bootloader for the device. The device has 512MB of internal flash memory, but this can't be used for the Debian install. I am not sure why this is, but I will investigate this as soon as I can and get back to you. As such, you will need to find another persistence data store. Common setups are installing Debian to the MMC or USB stick, but you could run everything from the network too. I bought these devices to run as small form factor home automation servers. So, I think the MMC/SD slot is perfect for the storage device. You can then use this link to install Debian onto the plug.

Remember: if you are writing software for the device, it architecture is "armel". The C/C++ libraries have different capabilities (they try to be the same), but you can easily cross compile for the Sheeva Plug from your amd64 machine (mostly everyone has one of those machines now, right?). Cross compiling software and directions can be found here

Setting all that up can be a bit of a pain. One of those things that drive you mad, but after going through all that, you will understand Unix guys have those giant beards.

Overall: I give the plug a 8.5/10.

  • Open platform
  • Good hardware design (placement)
  • Inexpensive
  • Cheap plastic case
  • Internal switching power supply makes me a bit nervous. If it goes bad, the device is toast.
  • MMC/SD slot needs to be one those spring-loaded deals (like cell phones use)...and it is OK to use microSD (only) at this point since those cards are all over the place.
I will be revising my review only the next couple of months when these plugs are attached to wall and doing their thing quietly. If I forget that they are there, then this will yield the best review possible.

In the coming weeks, I will be posting pictures of the device and how I am using it in the wild. One note, I tried to use a microSD in a full SD card insert to no available. The device was recognized, but the format of the device failed. I tried a full size SD 4GB card and this worked perfectly. SD cards are cheap and I don't need a huge amount of space on them. 4GB is plenty for a home automation server. As the days go on, I am liking this device more and more.

Wednesday, December 29, 2010

New favorite Microchip PIC is the 18F14K22

I discovered this little microchip recently. The 18F14K22 PIC is really neat. At about $2 from mouser or digikey and supported by the USBProg for ICSP and also supported by mikroC compilers, it is my new favorite low-end chip. I use it anywhere USB coms are not required. It also runs at 64 MHz with an external crystal, but I mostly use the 2 internal clock sources. The primary internal runs at up to 16 MHz and has fantastic stability. The secondary clock runs at 31 KHz, which is great for saving the batteries. This chip comes in SMD/SMT and PDIP flavors as you might expect. I like the SOIC-20 style because this is really easy to solder down quickly on a prototype board (like a schmartboard). You can also run them at 1.8v to 5.5v, which is nice is you are using usb power or 2 double A batteries. I use this chip with the Linx TRM433 transceiver, which runs at a strict 3v. So I regulate power once and smooth it out and forget about it! If you are getting into the embedded world, I would highly recommend this chip! It beats the pants off of any arduino out there at a fraction of the cost!

Wednesday, October 13, 2010

Git: What SHA does this tag refer to?

I often have to tag a branch in my Git repo for QA. Our QA people prefer to have a tag to deploy on to their QA environments, so that they do not have a "moving target" to ensure features and bugs are accounted for. Sometimes, however, I forget exactly where in the lineage the tag was created. In other words, on which commit the tag was drawn.

There is a way in Git to see this information. Here is a use case for the situation.

You complete feature A and commit it. You then tag feature A with an annotated tag and immediately start working on feature B, then C, etc. QA asks about the tag. You no longer remember what that tag was for, so you fire up a console and type in the following to find out:

git show-ref --dereference

You can find the tag in the list and perform a simple git log matching the sha from the show-ref to the sha in the git log. Simple. Even easier would be to run a filter using --exclude-existing on the show-ref using a regular expression and then piping the result to git show or git log.

Sunday, October 10, 2010

Debian Unstable (SID) Squeeze: installing Grub2

This is frustrating. Installing the Debian system in development (SID, AKA squeeze) is really broken currently. Installing GRUB or GRUB2 just does not work at all and can ruin your day. You get all the way to the end of the install when the error pops up. During the install of either GRUB or GRUB2.

Here is what you can do to fix this:

1. Choose to install GRUB2 and let it fail; be sure to allow GRUB to write to the MBR.
2. Go back to the main menu of installer items and choose "continue without installing a bootloader". Trust me on this one, it will all work out.
3. reboot your machine, the grub (this will be the GRUB2) bootloader prompt will be presented. This is your ticket back into your newly installed system
4. At the "grub>" prompt, type the following: (you may need to adjust the boot drive)

linux hd(0,1)/boot/vmlinuz-2.6.32-5-amd64 root=/dev/sda1


initrd /boot/initrd-2.6.32-5-amd64



of course substitute the kernel and initrd you are using for the real ones. Also check the root drive for the correct one. Sometimes you can just guess, the machine will just not boot if it is wrong and you can go back and do it again until you get it right.

Then once you have everything booted. You can install GRUB2 properly by doing the following:

apt-get install grub2


grub-install /dev/sda


grub-mkconfig > /boot/grub/grub.cfg



All should be well after the reboot.