First L.A. Drupal Lightning Talk – Fill PDF, views_get_view_result(), Meetup API, and NX Client

Finally getting around to posting about this. On December 14 at the monthly Downtown Los Angeles L.A. Drupal meetup, I gave my first “lightning talk”-style presentation. The meetup was heavily lightning-talk oriented, so I joined in and shared some of my experience.

As Christefano put it, it was really four lightning talks in one. I covered:

  • Fill PDF – what is it, what did I contribute to it? (pdftk integration), and where is it going? (I may be taking on a bigger role in it…details soon.)
  • Views – views_get_view_result() function – this is a shortcut to the usual four or five lines of code needed when you simply want the results of a Views query but don’t want to render the view. It returns an object whose members are named after the Views database aliases, and paging is not an issue. Very useful.
  • Meetup API – what is it currently, where is it going, quick sample of it in action on my internal testing module. Keep an eye out for Meetup functionality showing up on!
  • NX Client – Someone from the audience asked what I was remoted into while presenting. It was a physical Linux machine running NX Server Free Edition, and I was accessing it with the NX Client for Windows. Very useful, convenient, and fast way to remote into Linux machines. Works over SSH, so doesn’t require many port forwards on the router.

It was great to present something, and I hope to do it again soon. For now, though, I can’t wait to attend the presentations at SANDCamp 2011. Don’t forget that you can meet me at SANDCamp 2011 and get some free Drupal help. I’ll be in the Drupal Doctor station as well. No one has contacted me about it yet, so why not be the first?

Come meet me at SANDCamp 2011

I’m going to be attending SANDCamp 2011 in San Diego, so if you’d like to have a chat, that’d be a great place to have it…plus you’d be getting it for free! I won’t have a fixed location, but contact me if you do want to chat, and we can figure out a time and place…in between all the advanced sessions I’ll be attending, of course! I’ll probably only have so much time to chat, so get in touch quickly if you’re interested!

What is SANDCamp 2011? Read on for their friendly explanation…

SandCamp 2011 ( is now open for registration and sponsorship. Our San Diego Drupal User’s Camp will be held on Saturday, January 8 and Sunday, January 9 from 9am – 5pm at the Hall of Champions Museum in Balboa Park. Our mission and purpose is twofold: (1) to introduce new developers and industries to Drupal and (2) strengthen the Drupal knowledge base within our geographic region.

The 4th annual SandCamp is an attendeed-riven, completely volunteer initiative modeled after the open, participatory nature of Drupal. We hope to hold one of the larger camps in the world with 400+ guests.

The schedule will involve high-quality breakout sessions, an attention-grabbing keynote from Kieran Lal, a coder’s lounge, sponsor booths, and an executive boardroom for special Birds of Feather (BoF) type gatherings. Want more? OK, when we are done we are going to have a social event from 5:30-8:00 PM Saturday after the session. For hardcore socializers, an 8:00 PM+ event will be announced.

To appeal to a broad audience, we are offering four tracks this year:
(1) Drupal for Beginners
(2) Design, Theming, and Usability
(3) Advanced Development and Performance and
(4) Drupal for Business and Services.

If you are new to Drupal we definitely want you to come – in fact, during registration we have carved out space and time for a “Drupal Installfest” before the sessions start at 8:30 am each morning.

For those new to Drupal, this year’s Drupal Basics will be a professionally delivered by Chapter Three. This all-day training will previous session to create a more seamless introduction to Drupal. This introductory workshop will touch upon almost many aspects of the core Drupal framework, teach best practices for building Drupal sites and how to add, edit, and moderate content. The course includes how to create user accounts and understand Drupal’s permission system. After learning how to set-up menus, and position blocks on a page, create-human readable URLS, and categorize content using Drupal’s taxonomy system, the reward is a completed Drupal site, which looks and functions a lot like many sites you’ll see on the web today. This will be covered by a separate fee to be on the website soon.

This year’s venue is again at the generosity of the Balboa Park Online Collaborative who have been crucial to the growth and development of our San Diego Drupal community. We thank them for a year of meeting space, an incredible venue for our camps and ongoing support of Drupal with their own projects and contributions back to To show our appreciation, we will have a code sprint on Sunday to further their massive Drupal initiative.

This year’s event will cost a modest $10 for an all-day conference badge and will include gourmet, organic, fair-trade coffee and light snacks. For an extra $40 ($50 total), you can become an individual sponsor and we will provide you with an official t-shirt and recognition on the DCA website. Of course, we have our Silver, Gold and Platinum sponsors as well. There’s also an honor-based no-charge ticket for students and those who truly can’t afford to attend any other way.

Want to join in the fun? We need you to “badge” your website with a link, volunteer, sponsor or submit a session. The ability to submit sessions is now open. This year we will be vetting and rehearsing our sessions to boost quality. We hope to have a handful to push out for Drupalcon and then adopt the best of these to promote as tutorials. We already have several strong sessions proposed by Achieve, Digitaria and many other companies so don’t delay.

Finally, here is the best piece of advice we can give you – REGISTER NOW. Due to venue constraints, we are capping attendance at 450. Since we are promoting four months in advance of the event, we will very likely sell out. Last year we registered almost 300 campers in just a month.

Thank you to all the volunteers on the planning group. Special thanks to Andrew Root, Susan Rust, Kathy Hayashi, Christoph Weber, BPOC, Achieve, and Digitaria for their early help and support. Although we have much more to do, the biggest hurdle is behind us. See you all in January!

Your SandCamp Planning Team


And from WizOne Solutions, hope to see you there!

Helping maintain Features Extra

A quick update to report that, as of today, I’ve become a co-maintainer on the Features Extra Drupal module.

This time, I just wanted to get some patches committed, and since I’ve got the process down fairly well after my experience with Fill PDF and Meetup API.

Features Extra lets you export blocks and node queue definitions into code and works in conjunction with the Features module. It lets you export taxonomy vocabularies, too, but Features has native support for that now…so don’t use Features Extra for that.

Vim Tips – Increase/decrease number under cursor

Dear coders,

You know how often I write new blog entries…like once every 3 nevers (and when I’m plugging the release of something I’ve developed, which happens about once every 3 nevers).

And yet, something I found today inspired me to tell the world about it. It may be something you have wanted to do on occasion. Yes, it is, as the title implies, the mere act of increasing or decreasing the number under the cursor in Vim.

How can this monumental task be accomplished? Why, it’s quite easy: <C-a> (increase) and <C-x> (decrease). The C means you hold down ctrl while you type the letter.

Perhaps a use case like mine will help you comprehend the sheer awesomeness of this in things like macros.

Basically, I started with a bunch of SQL ALTER statements. But for demonstration purposes, let’s…I don’t know, add increasing numbers to an array. Fifty times. The language here is PHP, by the way, but it doesn’t matter.

The old way:
// Add numbers to an array
$i = array();
$i[] = 1;
$i[] = 2;
$i[] = 3;

OK, now suspending your disbelief for a second and ignoring all the thoughts of, “Why doesn’t he just use a for loop?” think about how you would normally tackle something like this. Would it be…
yy – copy line
p – paste
/$i – find the next occurrence of $i
(once found) l (move right) (till you reach the number)
cw (change word)
(type new number)
c[ or ESC (escape insert mode)

Whoa! Imagine doing that 50 times.

However, now we know about <C-a> and <C-x>. So let’s make a macro! In this example, to save space, I’m going to separate the commands with “–” – so don’t type that.

Go to the first line of the whole thing, $i[] = 1. We know that we need to do this 49 more times. So we type:

qa — yy — p — f; — h —<C-a> — q

You can look up macros and these commands on your own. But basically, this starts a new macro in register a, where you record the keystrokes to copy the line, paste it on to a new one, jump the cursor to the semicolon, move it left by 1, and then increase the number. Once you’ve got this macro going, if you start with the $i[] = 1 line, you only need type 49@a (replace a with the register you used) and voilà – you’ll have the rest of your code written for you!

Now go and increase some numbers today! Preferably on better code than in the example here.

New Meetup API Drupal Module Released

It’s been a week of achievements over here. As I wrote, I accidentally became a co-maintainer of the Fill PDF module, and now I’ve finally released my own. You can view the Meetup API project page.

If you are a developer and want to integrate functionality and data with your site or that of a client, this module might be useful for you. Use it, improve it, contribute code back.


I’m an official Drupal contributor now – how did you become one?

Today I got my CVS account for It’s really funny how it happened. I was planning to apply for one anyway in the near future because I’m working on releasing a complementary Drupal module for the Meetup API I developed. However, I actually just wound up patching the Fill PDF module with some extra functionality (as part of client work) and was asked if I could just commit the change myself. I couldn’t refuse something as cool as that, so I applied for a CVS account, and it was approved.

I’ll be committing that change soon, so if you are looking to fill in PDF forms with data from nodes and such, check out Fill PDF.

Now accidentally co-maintained by WizOne Solutions!

Furthermore, I intend to commit it with Git.

Do you have any fun stories of how you got your CVS account? Do share.

Just released – PHP Meetup API Client Alpha Version

It’s a bit late for me to write much on this, so I’ll write another post later on, but in short:

Pull it down and contribute back if you want to see this grow 🙂 The README.txt that comes with it explains a bit about how it works.

But it doesn’t stop here. Next on the list is its companion Drupal module, of course! And maybe some other stuff as well, but that’s what I have planned so far.

The new has launched!

I’m happy to announce the launch of the new design for

After many months of anticipation, it’s here! There’s quite an interesting story behind this new design, too.

Around the end of summer last year, I asked my good friend Andrew Sepic over at Think Up! Design if he could help me create a better design for than the one you’ve seen for the last forever. He created what you see now. As time went by, in my spare I gradually put it together, implementing it as a Thematic child theme (thanks ThemeShaper), coding the CSS and ensuring it worked well in all modern browsers (sorry, IE 6). It’s such a relief to finally get this out of the way, and it’s a big step in terms of giving a real picture of what I can do. The old theme had the unfortunate effect of casting my programming skills in a mediocre light. I think this one does them some more justice 🙂

I’m not done yet, of course. I’ll keep improving the site, particularly the Portfolio area, so keep an eye out for more to come over the next few months.


Possible downtime June 15 8 PM-June 16 6 AM

I’m expecting the site to be down during this window of time – I’ll try to put up a maintenance page, but if I don’t get to it, then here’s your explanation.

Ironically, if you don’t visit the site before I post this message, it’ll mean nothing. So I’ll try to switch to the maintenance page.

A little bit about oDesk

So I’ve been working on oDesk, and I’ve been very pleased. This is a very brief post on that. I’ll try to write more in the future.

Let’s break it down – oDesk offers providers that “fit any budget,” and from a freelancer’s point of view that sounds something like, “oDesk lets certain providers offer laughably low rates and get all the work.” Believe me, that’s what I thought. I didn’t think I stood a chance!

But I got to the point where I had to make some money or go back to working full-time, an unsettling thought, and for the provider, oDesk’s motto is, “Verified Work – Guaranteed Payment” for hourly jobs. And it’s true! Whenever I work on hourly jobs, about 11 days after the end of the work week, the money’s in my bank account. I’m in the US, and I can transfer it with EFT for free! This is big – when I take payment with PayPal, I get dinged every time, which I don’t like.

Obviously, from the above statement you can infer that I have successfully gotten a good amount of work and met some awesome clients through oDesk, and once I have the opportunity, I am considering working exclusively or almost-exclusively through oDesk. Anyone who says that all job sites are the same has got to try oDesk. And while you’re at it, if you’re a buyer who needs Drupal development, why not try me? (see Hire Me section to the right :))

Again, the site is oDesk.

(Disclosure: If you sign up through either of the links in this post, I get a (much-appreciated) affiliate commission. But don’t worry – everything in this post is my real experience with oDesk.)