High-wage skills on oDesk

Grabbed this from Hacker News:

oDesk recently introduced a controlled, centralized vocabulary of about 1,400 skills for buyers and contractors to use when posting jobs and creating profiles. The primary motivation for the change was to make it easier for buyers and sellers to find each other: without a standardized vocabulary, would-be traders can fail to match simply because they use different terms for the same skill.

A side effect of this transition is that high quality data on the relationships between skills and wages are now available. (more…)

Grab URLs from a String in PHP

Found this little Regex pattern which is an improved version of Daring Fireball’s (found here). Throw whatever string of various mixed up URLs you can at it, and this will return an array of them.

[code lang=”php”]
$regexp = ‘/\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:(?:[^\s()<>.]+[.]?)+|\((?:[^\s()<>]+|(?:\([^\s()<>]+\)))*\))+(?:\((?:[^\s()<>]+|(?:\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\’".,<>?«»“”‘’]))/i';

preg_match_all($regexp, $message, $matches);

return $matches[0];

Traffic Pollution and Risk of Diabetes

Of all the myriad variables that increase one’s risk for developing type 2 (adult onset) diabetes — smoking, being overweight, having a larger waistline — air pollution is not one we usually think of. But newer studies are suggesting environmental risk factors for diabetes: A new one finds that living in an area with more traffic pollution could increase one’s risk, particularly in people who are healthier to begin with. […]

The link was “borderline significant,” according to the researchers. It was, however, stronger for people who were in better overall health, and for women. For example, in non-smokers who lived in high pollution areas, the risk for diabetes rose to 12 percent. A 10 percent increase in risk was found for physically active people. (via.)

Asus PCE-N13 Wireless Card Ubuntu Linux 11.04 Instructions

I needed to buy a Wireless card for my desktop computer, and unfortunately… much to my dismay… despite there being *very* large lists out there on cards that more or less work with my version of linux (Ubuntu Natty Narwhal 11.04), there really wasn’t a list of *detailed reviews* as to indicate how well any given card works with linux.

Seems like an opportunity waiting to happen for someone that wants to put together a review site and curate what’s already kind of somewhat out there.

I went ahead and grabbed the asus CPE-N13. It was cheap, a brand name I recognized, and Wireless N (multiple antennas!).

Much to my dismay, the card did *not* work right out of the box. First, I had to blacklist some default but immature drivers that comes with ubuntu 11.04:

# Add these to /etc/modprobe.d/blacklist.conf

blacklist rt2800pci
blacklist rt2800usb
blacklist rt2x00lib
blacklist rt2x00pci
blacklist rt2x00usb

Pulled out the patch cable, rebooted for good measure… and voila we have wireless. :)

Dude Posts About Selling WordPress Plugins

Saw this post on Reddit entitled Anyone on r/WordPress interested in buying a Premium Plugin business?:

Throwaway account here for discretion.

I’m exploring selling the rights to one of my premium plugins, and thought r/wordpress would be a good place to gauge interest and possibly find a buyer in my favoritest of favorite communities. Also, because of the nature of the business, it really needs to be taken on by someone who is already proficient at WordPress development.

This plugin was launched in August of 2010, and since then has generated approximately $44,000 in sales, with around $36,000 profit remaining after paying affiliate commissions.

When it first launched, I was actively promoting the plugin and sales were steady around $3,000 – $5,000 per month. However, my attention got pulled into other projects and with only minimal marketing and updates, sales have been stable at around $1,500 per month for most of this year. I spend an average of 1-3 hours per week handling tech support and email inquiries…not too shabby.

I’m selling because I have too many other items on my plate to be able to give the plugin the attention it needs, both in general improvements to the codebase and in marketing.

What’s included:

  • All rights to the plugin itself. It is currently released under a split GPL/Proprietary License
  • The Domain & Sales Website
  • The vBulletin-powered Support Forum & vBulletin License
  • The E-Junkie account to manage transactions & affiliates ( 250 registered affiliates )
  • My availability & assistance during the transitional period.

Asking Price: $25,000 USD

If you have any questions, either about the sale of this business or general questions about how to earn a living selling premium plugins, please post them here. I will do my best to answer without publicly revealing the plugin or any other potentially sensitive information.

If you’re a genuinely interested potential buyer, please PM me so we can further discuss.


Well, he posted it on a public, popular site so how discrete is that?  Since there are 60 million WordPress blogs out there, some 30 of which are self-hosted (or something like that) it’s quite possible.

Maybe I should find a way to offer some cool functionality with upgrade of either PMID Citation Plus or Facebook Simple Like.

I should go through my list of top WordPress plugins and see how many of them offer pay upgrades.

Overriding Form Theme of a Collection (Symfony2)

This code was floating around in a pastebin, and was linked to me from IRC. I’m not sure who originally wrote it, but it’s useful and I wanted to make sure it gets saved so that it can eventually be the basis of a Symfony2 cookbook article.

[code lang=”php”]{% block collection_widget %}
{% spaceless %}
<div class="collection">
{% if prototype is defined %}
{% set attr = attr|merge({‘data-prototype': block(‘collection_item_widget’) }) %}
{% endif %}
<div {{ block(‘widget_container_attributes’) }}>
{{ form_errors(form) }}
{% for rows in form %}
{% set fieldNum = 1 %}
{% for row in rows %}
<div class="field{{ fieldNum }}">
{{ form_label(row) }}
{{ form_widget(row, { ‘attr': { ‘class': ‘test’ }}) }}
{% set fieldNum = fieldNum + 1 %}
{% endfor %}
<a class="remove" title="Remove" href="javascript:void()">
<div class="clear"></div>
{% endfor %}
{{ form_rest(form) }}
<div class="clear"></div>
<a class="add" title="Add" href="javascript:void()">
<div style="display: none;"></div>
<div class="clear"></div>
{% endspaceless %}
{% endblock collection_widget %}

{% block collection_item_widget %}
{% spaceless %}
{% set fieldNum = 1 %}
{% for row in prototype %}
<div class="field{{ fieldNum }}">
{{ form_label(row) }}
{{ form_widget(row, { ‘attr': { ‘class': ‘test’ }}) }}
{% set fieldNum = fieldNum + 1 %}
{% endfor %}
<a class="remove" title="Remove" href="javascript:void()">
<div class="clear"></div>
{% endspaceless %}
{% endblock collection_item_widget %}[/code]

Also, here’s a github gist link to the same code.

Updating RubyGems on OS X Leopard

Sorry for the long hiatus from the blog, I’ve recently been quite busy at work with one particularly important project scheduled for an early December launch.

More than one of these projects now utilizes the Symfony2 PHP framework, and in addition to that we’ve been using “Capifony”, a deployment recipe which Capistrano utilizes to deploy Symfony or Symfony2 sites.

Usually, on my home machines I use Ubuntu linux, which I’m pretty happy with. Setting up an up-to-date version of Apache, MySQL, Ruby, Capistrano and PHP (with the intl module, importantly, since this is required by Symfony) is made very easy with the use of the apt-get or aptitude package managers.

Unfortunately, my experience with OS X (which I nevertheless like as an operating system) has not been as much of a smooth sailing kind of thing.

One recent issue I’ve run into is that when setting up capistrano to deploy our Symfony app on this older version of OS X, the gem app is too out of date to even know where to get the update package from to update itself (v1.0.1).

Figuring out how to update RubyGems was quick and relatively painless, but the instructions given by multiple sites that popped up on Google were flat out wrong. So… I’m taking the opportunity to document it here.

Updating RubyGems from Version 1.0.1 On OS X Leopard

The first step I tried was…
$ sudo gem update --system

This is what you would normally use, however, v1.0.1 attempts to fetch from the wrong source.

This was the error returned:
ERROR: While executing gem ... (Gem::RemoteSourceException)
HTTP Response 302 fetching http://gems.rubyforge.org/yaml

What finally worked was this:

$ sudo gem update --system --source http://production.s3.rubygems.org/

We’re at 1.3.6. As simple as that.

The following was the first result on Google and did not work for whatever reason…

gem install rubygems-update --source http://production.s3.rubygems.org/