Podcast Suite 1.5 Stable Released

I released a stable copy of Podcast Suite 1.5 today, go get it. On the forums, we managed to find bugs regarding the MIME type being set in the HTTP headers. We also fixed a bug where languages other than English would not get their code in the RSS feed. A few other fixes and enhancements made it in. Thanks goes out to everyone who’s reported bugs on the forum and even offered solutions!

Tags: , ,

Spring ‘09 Conference Roundup

It seems as though the tech conference season starts off every year with SXSW in Austin, comes to a peak in May, then takes a vacation until September. So far, this year has been no different. I recently had the opportunity to attend three conferences within four weeks of each other. A small taste of each follows…

JSConf

Back in February, I began seeing tweets for JSConf on April 24th-25th: the first conference for JavaScript developers. I recently began digging into JavaScript for more than simple effects in jQuery so this sounded interesting. The venue was a mere two metro stops away from my apartment, so I knew I would be kicking myself if I didn’t go.

JSConf absolutely blew me away. The sessions were not simple “here’s how to use jQuery for form validation in your next project” talks. These were the first presentations I saw of JavaScript being used for backend programming as well as frontend. There were speakers representing Objective-J/Cappuccino, Dojo, jQuery, YUI, CouchDB, Titanium, and many other projects. This was also the first I had seen a formal presentation on BOSH and XMPP.

Although there were the presentations about using JavaScript in the backend, the current mainstream use is in the front. Consequently, most of the attendees had expertise in languages other than JavaScript. JSConf managed to get Ruby, PHP, Python, .NET, and other developers in the same room. This really made the conference for me: we were forced to talk about our tools without hiding behind fanboyism.

Another highlight of JSConf was running into Chad Auld and Ozgur Cem Sen from the MiaCMS project. MiaCMS is a fork of the Mambo codebase that has some promising features developing. The JavaScript for the entire codebase has been rewritten in YUI. MiaCMS also sports a REST-style interface you can use to do things like update your site from an iPhone.

Aside from the incredible technical content, the accomodations and after parties were fantastic. Chris and Laura poured a lot of effort into putting this and thought of all the details. They made sure that outlets and wifi were plentiful. The venue they picked was just the right size for shuffling between sessions, uncon talks, hallway tracks, and break room hacking. They even organized a “significant other” track where spouses and children were able to tour DC and Old Town together.

There may be some who would say that this was great for a first year conference; I thought it was amazing for a second or third year conference. I know first hand how difficult it can be to pull off a tech conference, but Chris and Larua passed with flying colors. The sponsors were also incredibly generous and helped the event shine. Looking forward to JSConf 2010!

WordCamp Mid-Atlantic

While people may know me as “the Joomla! guy” in the DC tech community, I’m currently happily using WordPress to power this blog. WordPress is the best tool for doing a stand-alone blog, which is what Design vs. Develop has become. So I felt this was as good an excuse as any to show up for WordCamp Mid-Atlantic on May 18th. (On the other hand, Keith has never used WordPress and simply attended to steal ideas.)

WordCamp Mid-Atlantic (with the rather long Twitter hashtag #wordcampmidatl) was a nice mix between sessions about writing, marketing, and coding. A couple of big announcements from SixApart and the WordPress core team hit that day (TypePad Connect and WP 2.8 beta respectively). The venue was accessible and well-suited for formal talks as well as hallway tracks.

I applaud Aaron’s decision to move the event from DC to Baltimore and refocusing it as a regional conference instead of a city-centric event. DC’s tech community is now much more firmly established than 3-4 years ago. While it would have personally been more convenient to have something located in DC, we’re definitely at a point where we need to connect talent regionally as well as locally.

While the vast majority of the people attending were WordPress users, many were also proficient in Drupal, Joomla!, and other PHP-based systems. The recurring conversation seemed to be that we like using WordPress for straight-up blogs and simple sites, then reach for something else when we want something more involved. Although WordPress is billing itself as a publishing platform as well as a blog, I think we’ll continue to see people using different platforms for different sites. It’s gotten to the point where most are using WordPress for very simple sites (just pages with content), but using something else when integrated shopping carts and forums are wanted.

php|tek

Finally, I flew out to Chicago for php|tek ‘09. The guys over at MTA are seasoned conference organizers, with this event being no exception. There was a wide variety of talks: from using XMLReader, to alternative databases, Zend Framework hacks, and even an unconference session on PHP-GTK. As many have commented, php|tek is a nice blend between the PHP developer community and business community.

We had a hackathon where people were writing PHP tests for TestFest, but somehow I was convinced to write patches for Phergie instead. Ok, so I was sitting at the table and was curious more than anything. Phergie is an IRC bot maintained by Matthew Turland that hangs around #phpc on Freenode. It’s quite a non-traditional use of PHP: you have a long-running process that essentially sits in one big loop. It was nice to sit down and write some code purely for fun :)

Aside from the hackathon, you can read about the events and what I thought of them on joind.in. I didn’t get around to rating all of the sessions I went to, but most of the sessions seem to have been ranked by at least one person.

Unfortunately, the wifi was a bit of a wash. I ended up paying for the hotel’s package the first day as I had some side work that needed to go out ASAP. The other days I was usually able to connect, but had difficulty during the hackathon and in the back rooms. However, I think most of the issue with wifi at conferences is the sheer number of heavy Internet users all hitting the same access points at once. As I’ve been telling everyone I meet, Apple should pioneer “conference mode” where you tell your laptop to stop doing backups, software updates, and any other non-crucial network activities.

The biggest announcement at the conference was that php|works, usually held in the fall, will be revamped as CodeWorks 2009 and held in 7 cities (not all at the same time!). It will be an affordable, two-day conference held on a two-week, cross-country tour. I’m planning on going to the one here in the DC area.

In addition to MTA’s CodeWorks, StackOverflow DevDay will be held later that month. More tickets have been opened, so it’s not too late to register!

Tags: , , , , , ,

concrete5 – first impressions

I downloaded the concrete5 CMS a couple of weeks ago and intended to write a critique earlier, but am only now getting around to doing so. Since then, this article was released on CMS Wire and Joomla! fans on Twitter began talking.

What’s good

One common pitfall of CMSes is to abstract away the concept of a page. concrete5 avoids this and very much embraces pages. A+ in my book. While it’s true that some layer of abstraction can be helpful in certain cases (usually when you’re building an application inside of your CMS), it adds extra work for most webmasters.

Editing pages is also very straightforward. Once you’re in edit mode, all of the blocks (similar to Joomla! modules) appear with dotted borders. Clicking on one gives you several options for editing the block, including dragging and dropping the block to a new position. Very nicely done.

The features built around content5 are thoughtful. Versioning is built in and outputs diff-style coloring when comparing revisions. There are also extensions to help you embed videos, Google Maps, slide shows, and RSS feeds.

About 70% of the functionality you’ll need on a regular basis is contained in the toolbar that appears as you’re editing individual pages. For the rest, there’s a specific “dashboard” backend where you can go to manage themes and files, get reports, and perform other administrative tasks.

Theming is okay

The theming system is reasonable. Like Joomla!, you can add specific themes to specific pages. Closer to Drupal, your theme can define several different page types, which might eliminate the need for separate themes. However, concrete5 requires theme designers to instantiate objects within their markup, then call member functions of those objects to display output. This bothers me. It seems like static function calls or embedded tokens would handle this more elegantly.

Also, the greensalad example theme uses the “header.php at the top, footer.php at the bottom” style of breaking up the markup—I loathe this. There’s no reason to use this error-prone method for theming: you end up with tags that are opened in one file and closed in another.

What’s annoying

While the simplicity of editing individual pages is definitely something I prefer, concrete5 has sacrificed some features to get there. I was not able to find any kind of feature to create a blog-style index of content made up of blurbs from other pages. Add-ons are scarce: if you’re looking for a forum or shopping cart, you might be in for a wait until they attract more developers to the platform.

I ran into a few speed bumps when installing concrete5 locally. After downloading it and going to the installation screen, there was a checklist of PHP configuration settings necessary to run concrete5 (not unlike Joomla!’s). Most of them were good to go after tweaking folder permissions, but I did not have the GD library setup on my self-compiled version of PHP. I was a little surprised that the system would not let me continue installation. While I’m sure there are features in concrete5 that use server-side image processing, this doesn’t strike me as something so vital as to halt installation. (I was able to successfully install both GD and concrete5 on my spare Ubuntu machine.)

Although the GD dependency was annoying, the halted installation uncovers something even more so. If the installer detects even the slightest issue with your configuration, an advertisement for professional installation is displayed. Quite tacky; they could have at least provided a link to their installation forum.

Which brings us to community. This company oozes a know-it-all attitude. In sharp contrast to the websites of other CMSes, their official About page openly bashes Joomla!, Drupal, and Wordpress; painting all three in rather broad strokes. This is very disappointing, unnecessary, and ultimately counter-productive. I’m all for making bold statements, but they’re driving away the very people who could help their platform grow quickly.

Final word

concrete5 is a very promising CMS that does the basics very well. The interface is picked up quickly and things are easy to find. However, if they’re earnest about building a community around their code, they might want to tone down the self-worship a smidge. And is content management really a human right?

Tags: , , , ,

Podcast Suite 1.5 Release Candidate 1

Podcast Suite 1.5 RC1 is now available for download here. A lot of validation issues are fixed, multiple feeds should be working, and a German translation of the UI is bundled. Thanks goes out to everyone using it and waiting for help on the forum! You’ve helped me catch a lot of issues, which has made the suite better software.

Tags: , , ,

Avoiding Joomla! Pain – March 13th

This coming Friday at 1PM Eastern US time, I’ll be giving a talk about Avoiding Joomla! Pain. Recently, I’ve been running into PHP programmers tasked with maintaining Joomla! sites they didn’t set up. Some dig in and get busy, while others become frustrated when things don’t work the way they expect. In this talk, I’ll go over a few things to help you get a handle on how Joomla! works and how to extend it.

Fortunately, you don’t have to be anywhere near DC or even buy a ticket: it’s a part of the php|tek 2009 free webcast series. You must register to see the webcast, but registration is free.

If there’s something about Joomla! you’ve always wanted to know but have been afraid to ask, let me know in the comments and I’ll work it into the talk.

Tags: , , ,

Seven Things – Tagged by Keith Casey

Keith Casey tagged me about a month ago and I decided to go for it. However, I went a little overboard with the editing, thinking, and pulling out all sorts of tangents, so it took me a while.

Anyway, here are seven things you might not know about me:

I’ve worn a rat suit – My sister took ballet lessons from some young grade all the way through high school. Two of the schools she attended closed, leaving VanDyke and Company in Punxsutawney, Pennsylvania as the closest school she could reasonably attend. Every couple of years, Joan VanDyke would organize a production of The Nutcracker. Being a small town production (and the lack of male ballet enthusiasts), she would always ask for volunteers to fill in some of the male parts. I volunteered, as I knew the difficulties of trying to do something different in a small town (don’t say I never did anything for the arts ;) ). I started off doing one of the more formal ballroom scenes, but then she also needed people to fill rat suits. Before you knew it, I was doing a 90 second transformation from a statesman into a grey leotard-clad rodent.

At less than 7,000 people, Punxsutawney is definitely a small town. Joan could have used this as an excuse to just teach some 2nd graders the different ballet positions and have a cutesy little show done to the music of Beauty and The Beast. But she didn’t; not for one second. She was so obsessed with the art of ballet that even after I was in college, she would ask if I was continuing my dancing. (She asks everyone this!) Instead of getting away with an average dance school, she spent day and night pursuing excellence, resulting in well-attended and loved productions.

Lesson learned: focus on your craft and your passion instead of the limitations you think you have.

I used to have a stupid mustache – early on in college, I had a mustache that didn’t quite meet in the middle, but no beard. My school had a well-defined dress and grooming code at the time that prohibited beards. For whatever reason, mustaches were okay so a lot of us had them. Also, you had to wear a collared shirt and tie to class, but you were allowed to wear jeans. You ended up with a lot of limit-testers who wore mustaches, baggy jeans, and duct tape ties.

These rules were written in the sixties and have been almost entirely abandoned since I graduated. The intent of them was never to produce such ridiculous looking wardrobes, but to prepare people for the business world.

Although many American business have loose or unwritten dress codes, people still tend to dress themselves to a particular standard. Once in a while, I hear fellow geeks complaining about company dress codes. Some of us are non-conformist types, while others just prefer to dress functionally without a lot of bother. Frequently, the argument is “I don’t see how this tie/shirt/pair of pants affects my performance one way or the other.” The problem with this argument is that dress codes are not about you, they’re about others. What you wear sends messages about what you think of the people around you. You might think it’s silly, but people (often unconsciously) notice when you aren’t putting any effort into your personal appearance. This gets interpreted as “that guy doesn’t care what people think of him.” If you have a job where you almost never interact with others, this may not be such a big deal. But the more your job involves meeting with others in your company (and possibly clients), the more important it is to start things off on the right foot.

When people aren’t distracted by what you’re wearing, they will be more likely to listen to you when you are trying to convince them that running your PHP application on that creaky Windows 2000 server in the closet isn’t such a great idea. You don’t need to spend thousands of dollars on your wardrobe, hours in front of a mirror, or stay up to date on the cutting edge of fashion trends. Just find comfortable clothes that match the prevailing standard. With the salaries most programmers command, cost shouldn’t be an issue. I’ve known unpaid interns on Capitol Hill who definitely dress better than jeans and a t-shirt.

I’m a former SimCity addict - I don’t play many video games, but the one I’ve played the most by far has been SimCity. I’ve played every version for PC: classic, 2000, 3000, and 4. The user interface on 4 is supposedly unusable; evidently I didn’t notice as I kept on playing. Now that it’s available as an iPhone application, that gives me another reason to (not?) buy an iPhone. The iPhone version appears to be based on the 3000 engine from the screenshots I’ve seen. Hmmm… we’ll have to see. No deep lesson here about life, the universe, and everything; I just wish I had spent more time reading books instead.

I exhausted QBasic’s 64k file size limit – I wrote a tile based game in QBasic when I was 12. Unfortunately, I was unaware of the concept of arrays and proceeded to define variables for each tile on the screen. I think the grid was something like 16 x 16, so this resulted in several chunks of code dealing with 256 different variables. Naturally, this filled up 64k pretty quickly and I couldn’t write any more of the game. Long after I abandoned the project, I was poking through the QBasic documentation and discovered the section on arrays. I wanted to go back and rewrite the game, but couldn’t find the source code :( . Lessons: read the documentation often and use version control!

Nearly electrocuted myself with a Capsela set – Capsela sets  were these plastic balls with gears inside that you would connect together to build machines. You could also connect wheels or floatational extensions to make cars and amphibious contraptions. The power for your model came from a AA battery compartment with wires that would connect to specific plastic balls with powered gears. The set came with a sort of tutorial you could walk through to learn about the basics of physics and electricity. When I was 8, my dad and I read through one of the lessons; I believe it was either about positive and negative charges or AC vs. DC. We finish reading through the lesson and he walks off to work on the computer (which I had crashed earlier that day). I start building something with the set, then start wondering “what would happen if I stuck each of these wires coming from the battery compartment into the holes of the electrical socket over there?” The answer to that could have been a lot worse than what happened: there was a loud pop and the battery shattered inside of the compartment. I was pretty shaken that day, but I wasn’t injured. I thank God that I’m still here today to tell this story! I guess the lesson here is to check your voltages and to explore carefully!

Blog: Carless in South Tulsa – When I started blogging, I was just out of college and living in suburban Tulsa without a car. I was also (and still am) keenly interested in urban development, so why not write a blog about this? I just so happened to not have a car and wanted to show other people what it was like to live without a car in a heavily suburban environment. It probably would have made a halfway decent blog if I had spent the time writing it. I ended up just going with a self-titled blog and published it with Mambo, then Joomla!, and finally now WordPress. I eventually did change the name of the blog to Sidewalk Advocate for a while and tried my hand at covering urban development topics. However, there are much better sources for that like Planetizen. I’m now becoming enamored with the small house movement, but that’s another blog post.

I mailed out one of those “Guiness Book of World Records” chain letters – Long before email, there was this institution called the United States Postal Service. In my town, it was the way you could send a message to anyone in the world and they would be able to read it without any additional equipment whatsoever. Throughout the years, people started “chain letters” where you would send the letter to six of your friends, asking them to send the letter to six of their friends. You added your name to the bottom of the list of people who got the letter before you and then passed the message along. (Kind of like this 7 things blog post meme.) You were supposed to take the person off the top of the list and send them a postcard. If people didn’t break the chain, you were supposed to get back lots of postcards because your name would be bubbling to the top of people’s lists as the letter was passed around. Sort of like the Six Degrees of Kevin Bacon, only with people you’ve never heard of and nifty postcards.

There were some problems with this chain though. There was no way to centrally track the reach of the chain. Supposedly the postcards would have done this, but your name is off the list once you reach the 7th person. The USPS later asked people not to send these; I remember some poster mathematically showing how a chain letter could shut down the system. Since then, the Guinness Book of World Records has specifically announced they won’t publish chain letter records.

At the time, I mailed out all six letters and sent out the postcard. At this time, we did not have a computer, so I hand copied each letter in my best penmanship. That’s right, I copied the sucker by hand six times. The letters went in the mail, but I never received a single postcard. However, I did receive the chain letter again, only with four people instead of six on the list. If you ever got this letter and Joseph LeBlanc of Indiana, PA was at the top, you owe me a postcard. My address has changed, so email contact [at] jlleblanc (p-e-r-i-o-d) com to get it from me. I’ll be waiting…

In the meantime, I’ll keep this chain going. I’m now tagging you if your name is…

The rules (I broke #3 slightly as I don’t know where everyone’s blogs are. If you’re on Facebook, you can write a note.):

  1. Link your original tagger(s), and list these rules on your blog.
  2. Share seven facts about yourself in the post – some random, some weird.
  3. Tag seven people at the end of your post by leaving their names and the links to their blogs.
  4. Let them know they’ve been tagged by leaving a comment on their blogs and/or Twitter.

Tags: , ,

New Lynda.com Joomla! videos

Last Friday, Lynda.com released another volume of Joomla! videos created by Jen Kramer McKibben. Now, in addition to watching videos about all of the major content management systems, you can also learn how to create Joomla! templates and CSS with Jen. Head on over to Lynda.com now and preview some of the free videos.

Tags: , , ,

Quick and dirty christmas list – a Joomla! Recipe

Right around Thanksgiving, my mother will usually email asking for a list of Christmas gifts. This previously presented a messy problem: we would have to sit down, come up with a list, send it to Mom, then she would have to circulate the list and coordinate who was buying what. Instead of doing that this year, I told Mom to wait a week. Ten days later, I managed to scrounge up enough time to dash off a Joomla!-based system to handle all of this. Joomla! took care of the basic interface and user management tasks, leaving me to finish off the rest as an MVC component.

First, I installed a standard copy of Joomla! 1.5 with no sample content. I adjusted the parameters of the default rhuk_milkyway template so that it would have green links and headers (Color Variation) with a solid red background (Background Variation). I could have ditched the Joomla! logo in the header, but was lazy and just left it in.

Next, I added an instance of the Login module and unpublished the main menu. Although the main menu was unpublished, I left it in the system as a holding place for the default menu item. I also set Joomla! to disallow account self-registration: only seven specific people would ever be logging into this site and I didn’t want any passers-by creating accounts. I created an additional menu and set the access level to registered users only; no need to show the world any piece of our application. This menu included a link to the User Form Layout which I titled “Change my password” (even though you can do more than change your password from this form).

Finally, I cobbled together a custom MVC component to handle the lists. Before writing a lot of code, I created a menu link pointing to the component on the main menu, then adjusted the login module to redirect to this menu item after authenticating. This makes the login process seamless: you don’t see any parts of or links to the list component before you are logged in. Your only options are to either log in, retrieve your username, or retrieve your password. Once you’ve successfully logged in, you’re immediately taken to the component.

After configuring the login module, I continued to build the component. Before calling the controller, I used this code to make sure the user is logged in before continuing:

if (!$user->id) {
    global $mainframe;
    $mainframe->redirect('index.php',
      'No peeking! You have to log in first.');
}

Next, I have controller sets the default view to ‘mylist’. This view lists all of your requested items and provides a form for entering more. To set the default view, I overrode the display() function for the controller like this:

function display()
{
    $view = JRequest::getVar('view', '');
    if ($view == '') {
        JRequest::setVar('view', 'mylist');
    }
    parent::display();
}

This way, if ‘task’ in the request is empty, the component automatically calls display(), finds that ‘view’ is also empty, then sets it to ‘mylist’. Now, while the ‘mylist’ view lists all of our requests, it does not display the purchase status of those gifts. In addition to the ‘mylist’ view, there is an ‘item’ view providing a form where you can edit gifts you’ve already added. Links to the ‘item’ view are provided from the ‘mylist’ view.

In contrast to ‘mylist’, the ‘otherlists’ view displays all of the gift requests from all the other users, while listing gift purchases. It also has links you can click to mark yourself as having bought a specific gift. This way, people know not to buy something you’ve already purchasing. The code also makes it possible to mark multiple people as chipping in on a gift.

While the ‘item’ view simply loads a single row from the database, the ‘mylist’ and ‘otherlist’ views have their own data models. The data model for ‘mylist’ is very simple and has only one function, but the ‘otherlists’ model has functions for getting a list of all users, getting the buyers for each item, and getting all of the items listed by everyone else.

While there is more code I would like to add (such as gift suggestions for people who are slow about building their wishlist), following the MVC pattern now will make it easy to do that later. In the meantime, here’s a link to the code as it stands today (NOTE: this is not an installable Joomla! package. Drop com_christmaslist into the frontend components folder, run the .sql, then make an entry into jos_components if you want).

Tags: , ,

Using MooTools and jQuery Together in Joomla!

Framework conflicts are a common problem people run into when using jQuery. While jQuery provides some tricks you can use to get around this, you may still run into issues when Joomla! generates MooTools effects. While writing the second edition of Learning Joomla! Extension Development, I decided to do a chapter on JavaScript and look into this problem a little bit more closely. It turns out you have to make sure MooTools loads before jQuery, then use one of the tricks detailed on jquery.com.

Fortunately, this can be done in Joomla! consistenly, so I documented it. Packt decided to release the entire JavaScript chapter as the sample PDF for my book, so you can read everything you need to know about implementing this technique for free!

Tags: , , , ,

Textmate Bundle for Joomla!

I’ve been an avid Textmate user for a while now. It’s a text editor for Mac OS X that allows you to automate a lot of common text tasks. The editor has the concept of bundles, where you can group similar code snippets and macros together; selectively using each depending on the type of file you’re editing. Textmate also allows you to edit the core bundles that ship, as well as create custom bundles for your own projects.

To help with my Joomla! programming, I’ve developed a bundle of snippets for commonly used code. You can download it here. Unzip the package, then double click on the bundle to install it in Textmate. I’ve been slowly collecting snippets for a while now, so there’s some Joomla! 1.0 snippets as well as Joomla! 1.5, but it’s mostly 1.5 now. I’ll probably clean this up someday and add more functionality, but for now, here it is. No warranties, all the usual legal stuff, etc… enjoy!

Tags: ,

Next Page »