r99413

I won’t lie; this is a proud day for me.

Screen Shot 2014-06-18 at 9.35.06 AM

My first commit to WordPress.com. Hopefully the first of many.

And then the next step is to have my first accepted patch for WordPress itself.

Going GitHub

I have a handful of half-baked code ideas sitting around; often I have more ideas than I have time and/or skills to implement.

What’s different about today is that I’m finding that when I get one of these ideas, the first thing I’m doing is setting up a GitHub repo for what I want to do. (Consequently, I have two completely empty GitHub repos to my name, and one that’s a fork I haven’t worked on yet.)

The interesting thing about this is that it doesn’t ever cross my mind that I shouldn’t be sharing the code I end up making. There’s no benefit I can find to hiding what I’m doing or not learning publicly. It’s possible that someone could come across my projects and tell me that I’m doing things super-wrong, but even if that happens, at least I’ll know that I’m doing something in a less than optimal way.

And I don’t think that is going to happen, anyway. Being open is the only way to be, because no matter what I think I’m going to do, I’m pretty sure there is someone else somewhere who has wanted to do the same thing, or might be interested in the ideas I’ve had.

And when that happens, there’s a chance, no matter how small, that someone will come along and contribute to the projects. When that happens, it provides me with a chance to learn from someone who probably knows more and better than I do.

Tell Me About Your Indispensable Programming Reference Books

At the suggestion of some colleagues that it’s a good instructional volume, and having heard that it was a fairly indispensable reference to have on hand, I purchased and am currently working my way through Mastering Regular Expressions.

(Let’s just say there was a moment this week where this stuff made sense, and I really want to hold on to that as much as I can.)

Is there a book or two that you use on a regular basis or that made something with which you had trouble suddenly make sense? Online resources are OK, too, but I’m looking for things that address stuff like programming concepts, tools, or languages. Tell me about those books or resources in the comments.

VIP Workshop 2014: Sage Advice

vip-mug

I’ll write more about my week and takeaways from it in a bit, but this is one of the swag pieces we gave to our clients at the WordPress.com VIP Workshop this past week in Napa.

The best preview I can give is that I’m much more motivated to be in a position where the above pictured advice will be useful.

Curve

I’m a few months in and it’s accurate to say that I’m enjoying my new role at work, doing great things with the VIP team at WordPress.com. I feel like I’m able to contribute to big projects by taking some grunt work and communicating with our clients clearly and often as we partner with them to do Big Things. I feel like I’m doing a pretty good job with my responsibilities, and am happy with the things I’m able to accomplish.

But I get frustrated an a near-daily basis, and that frustration is all with myself.

There are some neat things I can do now that I haven’t been able to do in the past. I’m using my knowledge of WordPress templating now more than I have in a long time. I’m learning more of the ins and outs of WordPress.com, which is really interesting. And I’ve gone from not even knowing what wp-cli is to using it on a daily basis and being comfortable with doing so. I can get things done.

One goal I’ve had with shifting to doing this job has been to try to use the (admittedly quite weak) PHP development skills I have to assist with other tasks. This has been great in theory and in practice I have been able to learn little things here and there.

But it’s the sheer amount of things I don’t know that has me intimidated and quite frankly annoyed with myself. I can’t read Javascript and hardly know what it can do or does in a specific context. I don’t even know what cross-site scripting is, let alone how to prevent it or other security problems. Best practices like sanitization and escaping and where to apply or which methods to apply where elude me.

I don’t even understand how to use git yet. (svn and I are cool.)

Debugging is sometimes a total and complete mystery—just finding a place to get started is on ordeal and I feel like it takes me way too long to catch on to some things.

The problem feels like one of sheer scale. Where do I start? What do I do? Maybe I’m too old to learn new things at this point; I don’t know. I get bored taking classes, because they are too far from actual practice, and I get frustrated with just diving in because I feel there are too many things to learn at once.

I’m not really sure why I’m writing this out. Is this a common thing to feel when approaching this kind of thing? Is there anything out there you’ve used in the past or things you have done that help with overcoming the intimidation factor?

I’m hoping that in a year or ever a few months, I can look back on this and laugh at it.

Core Rides Again

The astute among you may have noticed over the last day that my blog managed to disappear for a bit and then this morning magically reappeared – with a new, more spartan look and some default messiness.

For the last year-plus, my blog has been on WordPress.com, where I help people every day with their blogs. I loved it and if you are thinking of starting a blog or you want to take a lot of the hassle out of managing the blog, I suggest you consider doing so there. I’m proud to work on the service and it really does take a lot of the managing out of the picture so you can get down to business.

But I realized that I had become out-of-touch with a few things, like the state of core development as a whole, how plugins like Jetpack and others function (Jetpack is especially important because I support it), and just hacking a bit on WordPress here and there.

So over the last day, I leased new hosting, checked out trunk, and moved my domain. Now I’m looking forward to exploring a bit more and having some fun with it—starting with making changes to Twenty Twelve.

One thing I’ve fallen behind on is plugins. I’ve grabbed a few and have installed some basics, but I think there are likely a few things that I’m missing. Are there any plugins that—especially recently—you think are key to a good personal WordPress installation? Drop a comment below and let me know what you think.

And I’m not leaving WordPress.com behind by any means; I still have a photoblog that I plan on keeping there, and my wife is still doing her blogging on WordPress.com as well. I already miss several features of WordPress.com that I hope make it to Jetpack in the near future.

Back to adventuring. :)

Your Email Address May Not Be Published

Hey, WordPress theme developers.

There’s something I’d like to ask you not to do anymore. Don’t do this:

Here, too:

And why not?

You are making a promise to people who visit any blog that uses your theme, and it’s one that may or may not be respected and honored by the blog owner or author.

“Your email address will never be published or shared.”

This type of language or a variant thereof is in an awful lot of WordPress themes. (In the first example above, “never” is even in italics to stress how important this is. Needless to say, on the blog where this notice was found (using a commonly-available theme), comments that didn’t agree with the author had their email addresses published in retorts by the blog author.

Because WordPress provides blog moderators with the email address (and the IP) of users who comment on their posts, the very information that many themes say will not be shared is given to the one person (or people) who have the ability to publish it for other readers of the post to see.

So I say think twice before putting this language in your theme.

More Progress

Today Moose’s speech therapist stopped me in the hall–apparently she had been waiting to talk to me, and had even considered calling me over the weekend, because she had some news she really wanted to share. She told me that she couldn’t believe the progress Moose has made in speech, even since the end of May!

She’s impressed with how much more he’s talking, which was no surprise to me. He has been talking more (sometimes non-stop), and while I like being reassured that he is improving, I was fairly certain that I couldn’t have imagined how much more he has to say now.

My third-oldest has autism and it’s been very hard for him to learn to communicate. This is among the best news we could have received since his return to school, and I’m very proud of him.

(via More Progress | Amanda.)

A New Post Type… New Problems

Today’s been busy enough that I haven’t had the opportunity to put up some new work on it, but over the weekend, I was able to whip up the code to put together the custom post type I’d like to use for podcasts. (My original post on the project is here.)

My guides for this were the well-exampled Codex entry, Justin Tadlock’s posts on the matter, and Konstantin Kovshenin’s excellent posts as well. My code is structured after the example in the Codex with a little bit of experimentation:

# Let's get things started and fire up the custom post type for Podcasts.
add_action('init', 'simple_podcast_init');
function simple_podcast_init()
{
	$labels = array(
		'name' => _x('Podcasts', 'post type general name'),
		'singular_name' => _x('Podcast', 'post type singular name'),
		'add_new' => _x('Add New', 'podcast'),
		'add_new_item' => __('Add New Podcast'),
		'edit_item' => __('Edit Podcast'),
		'new_item' => __('New Podcast'),
		'view_item' => __('View Podcast'),
		'search_items' => __('Search Podcasts'),
		'not_found' => __('No podcasts found'),
		'not_found_in_trash' => __('No podcasts found in Trash'),
		'parent_item_colon' => ''
	);
	$args = array(
		'labels' => $labels,
		'public' => true,
		'publicly_queryable' => true,
		'show_ui' => true,
		'query_var' => true,
		'capability_type' => 'post',
		'taxonomies' => array('post_tag', 'category'),
		'hierarchical' => false,
		'menu_position' => 5,
		'supports' => array('title','editor','author','thumbnail','excerpt','comments','revisions')
	);
	register_post_type('podcast',$args);
}

This successfully registers the custom post type and its behaviors (though I’m not certain I like the taxonomies and may need to move to something else in the future), but there remains a problem: upon activating the plugin, any attempt to view a podcast results in a 404 from the permalink.

I’ve seen references elsewhere to flushing the rewrite rules, but it’s not clear to me where in the process this should go or how it’s supposed to be called. My understanding is that I don’t want to do that every time the plugin initializes, because that’s not being a good steward of server resources. (Of course, if I visit the panel at Settings > Permalinks, everything works just like it should.)

Unfortunately, I’ve not yet seen an example of code that would properly reset the rewrite rules when this is turned on. Here’s what I tried and failed with:

# Because we're adding a rewrite, we need to flush the rules on activation.
	function simple_podcast_flush_rules()
{
		global $wp_rewrite;
		$wp_rewrite->flush_rules();
}
register_activation_hook( __FILE__ , 'simple_podcast_flush_rules' );

Does anyone reading this have a suggestion for where I might be going wrong? I eventually had to step back from it and won’t get a chance to try again until later.

Playing more with custom post types has also revealed a small flaw in my designs: the podcasts won’t “mesh” with the regular posts on the blog. Their taxonomies (as far as I can tell) can’t be shared, and the podcasts won’t display in the main feed of the blog, either.

Then again, this may or may not be a concern, depending on how one would structure the site.

A New Frontier: Breaking WordPress

I’ve been using WordPress for a very long time, and I’ve squeezed a lot out of it over those years. I’ve learned how to build entire sites using it, I’ve learned how to make it do little tricks, and I’ve learned how to work with themes to bend it slightly to my will. There’s one aspect of WordPress tinkering that I’ve avoided that whole time because it’s just been too intimidating, but I’ve decided that I need to push myself to learn some new stuff, and there’s no better way than to just dive in and see what I can do.

So it’s time for me to try writing a plugin. This is a frightening thing for me, but I have a plugin that I’d like to create. The plan is mostly-formed in my mind, and I know what I want to do; now I just need to figure out how to get those things to happen by writing it.

I’ve been working with podcasting and WordPress for a good while now. There are a lot of options for podcasting plugins for self-hosted WordPress. Unfortunately, I feel that most of them are trying to do too much and have too many options. They’ve become more difficult to use. Old ones have disappeared into development history, others have changed developer hands over time, and still others have claimed to be the biggest, baddest podcasting plugin on the block.

The goal here is simplicity. It doesn’t have to be a very complicated addition to a WordPress installation, and new tools are available with the upcoming release of WordPress 3.0 that can be leveraged to build something that’s even easier to use. I’ll be posting source as I work with it here. If you have feedback or can teach me a better way to do things, I welcome it, as I think I will need the help.

Let’s start with some goals for the plugin:

  1. It will use custom post types to separate podcasts from regular posts.
  2. It will allow podcast enclosures to be manually specified—only one per post, as iTunes ignores subsequent enclosures.
  3. It will provide an administrative panel for specifying iTunes feed metadata.
  4. It will alter and/or create RSS feeds and autodiscovery to make subscribing to it easy, either directly or through iTunes.
  5. It will look, feel, and act like it’s been part of WordPress all along—a consistent user experience.

That’s the basic set of needs for a podcasting plugin; leave a comment if you think I missed something.

I’ll admit that I may not have the skills I need to pull this off. It’s definitely going to mean a lot of reading, a lot of tinkering, and a lot of making mistakes and backing up to try again.