Ever have Expose freeze up on you? Command-TAB stops working, Spaces stops working, the Dock stops working, show desktop stops working, show windows stops working; you’re trapped! Well, if you happen to have a terminal window open or can launch one, fear not! Simply issue the following command (make sure to use a capital ‘D’) and you’re golden. No restart required!
$ killall Dock
Share and enjoy!
Recently I had a problem with Bj where it would not start up. Nothing was written to the backgroundjob log or Rails log and no exception was being thrown. To make the problem even stranger, Bj would start-up just fine in development but not in production but worked just fine in production from script/console. After digging into the Bj code and adding some debug statements I found the problem.
# database.yml
development:
adapter: mysql
database: my_development
username: me
password: password
host: localhost
port: 3306
test:
adapter: mysql
database: my_test
username: me
password: password
host: localhost
port: 3306
production:
development
Bj was getting an ActiveRecord::ConnectionNotEstablished exception but was swallowing it. The solution was to explicitly define the production database connection in database.yml.
If you receive the “File system formatter failed” error message while trying to partition a large hard drive using Disk Utility in OSX you need to change the partition type to GUID. Click the Options… button at the bottom of the partition list and select the GUID Partition Table:


Just got my two Iomega Prestiege 1TB hard drives from Amazon ($104/each) to support my new backup strategy (more on that later). First impressions: PROS: Very quiet, very solid feeling construction, CONS: Activity light placement forces you to put it to the left of you, the color is not at all like the picture; the drive is more of a gun metal, putty grey than a shiny silver aluminum like the MacBook Pro. Oh well, all I ask is that it will last longer than my Western Digital MyBook.
Is it just me or does the guitar riff in the song “Margaret in Captivity” on the Decemberists’ new album “The Hazards of Love” sound almost exactly like the guitar riff from Bon Jovi’s “Wanted Dead or Alive?”
I recently found the need to provide UUIDs for ActiveRecord models in a service that I’m developing. I wasn’t able to find a suitable soution, so, I rolled my own. Enter acts_as_universally_unique. The plugin simply adds a (customizabe) UUID field to all ActiveRecord models that act_as_universally_unique. I will be adding additional methods (and test cases) to it shortly.
According to the XML-RPC specification a XML_RPC request may only contain scalar <value>s or non-scalar <struct>s. The specification unfortunately does not provide any standard for encoding the type of data encoded in the <struct>s. This has the side effect of not being able to support polymorphism in service method parameters as it leaves the sever no choice but to rely on the method signature in the API declaration when trying to determine what to instantiate for a given <struct> in the XML-RPC request.
Let’s say you have the following declarations:
class SubscriptionsApi < ActionWebService::API::Base
api_method(
:create_subscription,
:expects => [
{ :customer => Logical::Customer },
{ :payment_method => Logical::PaymentMethod }
]
)
end
module Logical
class PaymentMethod < ActionWebService::Struct
end
class CreditCard < PaymentMethod
member :card_number, :string
# ...
end
class PayPal < PaymentMethod
member :login, :string
# ...
end
end
Now you want to make a call to the service method and pass either a CreditCard or a PayPal. XML-RPC will encode the request like so:
<methodCall>
<methodName>create_subscription</methodName>
<param>
<struct>
<member>
<name>card_number</name>
<value>4111-1111-1111-1111</value>
</member>
</struct>
</param>
</methodCall>
This provides no type information to the server so the server will attempt to instantiate a Logical::PaymentMethod which will of course not have a card_number member as it’s specific to the CreditCard subclass. SOAP, on the other hand, does encode the parameter types allowing you to utilize this type of polymorphism in your service parameters. Here’s the same request encoded in SOAP.
<?xml version="1.0" encoding="utf-8" ?>
<env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<env:Body>
<n1:CreateSubscription xmlns:n1="urn:ActionWebService" env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<payment_method xmlns:n2="http://www.ruby-lang.org/xmlns/ruby/type/custom" xsi:type="n2:Logical..CreditCard">
<card_number xsi:type="xsd:string">1</card_number>
</payment_method>
</n1:CreateSubscription>
</env:Body>
</env:Envelope>
The current implementation of ActionWebService resurrected by datanoise did not support this type of polymorphism in SOAP requests. However, I submitted a patch recently which provides for this functionality. Hopefully it’s accepted.
I recently came across an annoying bug in MySQL v5.1 (also in 6.0 apparently) that bit me hard, so, I thought I’d post on it in case you are being bitten by the same bug.
If you attempt to update a column that does not allow NULL to NULL, MySQL will set the column’s value to the default value for that column’s data type. This is true only when you are not running MySQL strict mode. Here’s an example to illustrate.
mysql> create table null_test (id int not null unique(id), name varchar(25)
null default null);
Query OK, 0 rows affected (0.01 sec)
mysql> show create table null_test;
+-----------+--------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-----------+--------------------------------------------------------------------------------------------------------------------------------------------------------+
| null_test | CREATE TABLE `null_test` (
`id` int(11) NOT NULL,
`name` varchar(25) default NULL,
UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
+-----------+--------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> insert into null_test (id, name) values (1, 'Jane');
Query OK, 1 row affected (0.00 sec)
mysql> update null_test set id = null;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0 Changed: 0 Warnings: 0
mysql> select * from null_test where name = 'Jane';
+----+------+
| id | name |
+----+------+
| 0 | Jane |
+----+------+
1 row in set (0.00 sec)
More information about this bug can be found in the bug report submitted Janurary 4, 2008.