Results tagged “movable type”

A friend of mine recently expressed their confusion over the GPL and how it all relates to the recent bruhaha happening in WordPress land. A quick search on Google will reveal a number of people attempting to answer the same question. Here is my own attempt to answer this question, paying special attention to how this may relate to WordPress themes and plugins.


In an effort to further everyone's understanding of the GPL, let me see if I can shed some light on what the GPL is and how it works.

  1. The GPL governs ones rights to redistribute software using the GPL as a license.

  2. The GPL gives me the right to take GPL code and redistribute it as is (provided that I also respect any related trademarks). For example, I can't take Firefox and redistribute it under the name "Firefox" since the name is a trademark owned by Mozilla and only they have the right to convey its name on software.

  3. Believe it or not, the GPL also allows people to sell copies of GPL software. Most people don't understand this for one simple reason, "why buy the cow when I can get the milk for free." Selling GPL software just doesn't make sense in that regard. But it has been done very successfully. People used to sell Linux on CD - but the value of doing so was clear: at the time to download Linux could take days, so for many shelling out $29.95 for the 5 of so CDs was a huge convenience.

  4. The GPL also says that you can take GPL software, and modify it and redistribute it as well. For example, Microsoft could take the OpenOffice suite, make tons of changes (under auspices of making it better) and then turn right around and sell it. --- There is a catch though, any change you make to GPL software AND also redistribute you must also make available under the same license. In other words, Microsoft would need to make any changes they made to Open Office freely available to others.

    Note: the key here is "redistribution." Because the GPL governs distribution only, it means that I could, as an individual, take OpenOffice, make changes of my own that are TOTALLY AWESOME (naturally) and, provided that I never give a copy of that software to a friend or anyone else, I would never have to share my modifications.

    Another Note: the above note is important because this is why it is reasonable and acceptable for someone to download a copy of WordPress, modify it, pay a consultant to modify it, add features to it, redesign it, etc, etc, etc. and never be compelled to share the mods they have made, or be compelled to open source anything else in their organization.

  5. The GPL also says I can take a portion of code from a GPL program and include it in my own. For example, say I want to write a blogging platform in Perl. I have written most of the code myself, but I deem Movable Type's commenting system to be perfect. So I cut and paste large portions of it into my software. Under the GPL, this is equivalent to forming a derived work, and my new blogging platform is compelled to be GPL as well.

Now let's look at what makes the WordPress theme debate special:

  • The GPL defines something called a "derivative work." When I take Firefox, edit the source, recompile and redistribute it, that forms an obvious derivative work. All derivative works are bound by the terms of the GPL.

  • The GPL also defines a derivative work as a piece of software that runs in the same shared memory space as a GPL program. In layman's terms this means that if a piece of software, say a theme or plugin (even it is distributed separately from the another piece of GPL software), is designed to run in conjunction with GPL software, then the two of them, by virtue of sharing the same memory/process when they run form a derivative work, and thus, the theme/plugin is bound by the GPL.

Ok, why the debate?

Well, their is some ambiguity over what forms a derivative work. I believe this stems from the fact that most people don't understand technically the concept of "shared memory space." But I believe this FAQ answer from the FSF makes clear the intent of the licensor:

If a program released under the GPL uses plug-ins, what are the requirements for the licenses of a plug-in?

If the program dynamically links plug-ins, and they make function calls to each other and share data structures, we believe they form a single program, which must be treated as an extension of both the main program and the plug-ins. This means the plug-ins must be released under the GPL or a GPL-compatible free software license, and that the terms of the GPL must be followed when those plug-ins are distributed. (emphasis mine)

So, although the Free Software foundation states their belief that this forms a derivative work, their own language admits that it does not conclusively do so.

But Byrne, I still don't understand all this techno-mumbo-jumbo. Just tell me, why is there a debate?

Let's clarify one more thing that I have seen many people get confused about. The GPL is NOT law. It is just a contract between two parties. If those two parties have a dispute over the terms, or their interpretation of the contract, then it is up to a judge to resolve the dispute and assess damages.

What makes the GPL special with regards to contracts is that is a standardized one. Meaning tons of people have accepted and/or conveyed the license to others. So if a judge rendered a judgement that helped to resolve the ambiguity of what constitutes a derivative work, then just like that, we would have legal precedence to reinforce anyone else's claims contingent upon this definition.

Finally, let's suppose Matt does sue Chris Pearson, what could he actually get from Chris?

I do not personally think Matt can claim that he has suffered any damages (e.g. lost revenue) from Chris' distribution of a proprietary theme, so I don't think a law suit would result in any money changing hands. But Matt can ask a judge to compel him to comply with the license and force him, by way of a court order, to distribute his themes according to the terms of the GPL. That's it.


And that is my take on the GPL, especially with regards to themes. I have my opinion as to whether Chris should open source his themes, but at the end of the day it doesn't matter what I think because in my mind this amounts to nothing more than a contract dispute between Chris and Matt. So, have at it guys. Wait, let me get some popcorn.

Ok, now have at it.

To my Movable Type fans and followers, I apologize for not posting here more frequently about Movable Type. You will find that I have moved a lot of my Movable Type blogging to two places:

My most recent post however is one that I feel warrants being cross posted, because it is news I am particular excited about. From the blog post on Melody:

A couple of weeks ago I posted my thoughts on creating a new packaging format for Melody plugins and its advantages:

The biggest advantage to [this new packaging format] is to allow us to use github to automate plugin and theme installation and upgrades because now one could easily do this: (snip)

What I am snipping out of the above quote are some geeky command lines which illustrate how to checkout a project from git. Such command line snippets now seem anachronistic given that the community has taken a major step in implementing this vision through a new plugin which, after a little TLC, will find its way right into Melody.

What is most exciting I think is the path and roadmap this plugin squarely puts us on. From the plugin's README:

This plugin is part of a larger effort to completely overhaul how plugins are discovered, installed and managed in Movable Type and Melody. The roadmap for this plugin is for it to interface directly with a centralized plugin directory managed by the community. In this capacity, the need to enter a git url at all will be completely obviated. Instead, users will search for the plugin they want from within Melody, and then click "install." The directory will know the git URL so users don't have to.

First of all let me personally thank iThemes who originally subsidized the development of the Contact Forms plugin for donating the plugin to the Movable Type open source community! I am proud to call everyone at iThemes a friend.

Now, onto the show. I am happy to announce the final stretch for the plugin as we gear up for a formal production ready release. The plugin was revamped so that it could act more reliably as a "Movable Type Mail Form Processor" - on steroids of course. It has been more or less completely redesigned with a lot of focus being paid to a more polished user experience.

Once the plugin is complete, I will post all of the details and documentation over at Endevver. In the meantime, I thought people might like to see a few screenshots of the work in progress.

You can download the latest version of the Contact Forms plugin over at github and get support over at Endevver's tender.

(screenshots after the jump)

In a project I have been working on I have had the need to revisit an old plugin of mine: the Contact Form plugin. When designing the inquiry management screen the plugin I thought it would be a nice user experience to mimic Outlook as much as possible thinking that a familiar interface for a similar activity would be ideal. This is what I came up with:

Original Contact Form Manage Inquiries Screen

The theory was a good one, but in practice the constraints of the Movable Type user interface often made the interactions a little awkward. A UI model like the split pane browser in this context really needs a lot more screen real estate to work effectively, otherwise the user spends too much time scrolling for no logical reason.

So in returning to this plugin, I wanted to improve upon this user experience. So the first thing I did was start to look at how others are managing a similar user experience: comment management. Let's take a look:

Drupal

Drupal Comment Listing

Two words: God Awful. Next!

WordPress

WordPress Comment Management

True to form WordPress delivers a highly functional interface. All the actions a user is likely to want to perform are clearly visible. Although one criticism I have heard (although poorly illustrated by the above screenshot), is that the UI in displaying the full comment often overwhelms the visual experience. This is a problem shared by Movable Type as well.

The fact that WordPress also let's you expand the table to the full width of the page also helpful in that it removes distractions from the UI allowing users to more easily focus on the task they are engaged in.

On the downside, the tabular layout seems to be a UI constraint that is not easily dealth with. It forces whitespace into several columns which is not needed and results in a UI that lacks polish.

Movable Type

Movable Type Comment Management

Movable Type is not bad, but it is far from good. Mainly the links users most want to click on, like "Reply" and "Edit" are hard to see, not to mention the fact that a single click "Report as Spam" and "Delete" actions aren't offered at all. Plus, the content on the page feels really dense - not an effective use of whitespace at all.

Also the lack of userpics forces users to scan more intensely for who comments are from.

TypePad

TypePad Comment Management

TypePad by far has the most polished UI for managing comments visually. It is a very effective use of space, especially considering that the comment listing table is a fixed width.

I like the fact that the table has no table header -- because let's be honest, it is simply not needed. The data makes the subject of each column obvious - labels are simply unnecessary. Second, I like the fact that actions have been differentiated from the comment's status and that the current status of a comment is very clear without having to spell it out "Published" or "Reported as Spam," etc.

Although it suffers from the same problem as WordPress in that a single long comment can easily dominate the page. Also, the help text is nice, but as you become more familiar with the UI is becomes unnecessary and distracting. It would be nice to be able to dismiss it all together and let the UI claim that space for the table.

Final Observation

One final observation: I was shocked to see the use of AJAX almost entirely absent from every platform. This is 2010 folks. Can we at least handle deleting comments and reporting them as spam via a process that is not disruptive to my primary activity: processing and triaging comments?

Contact Form Inquires

Considering all of the user experiences, I endeavored to take what I liked about each and fix what I thought was broken to come up with a user interface for managing comment form inquiries, which could easily be applied to comments. This is what I came up with.

Contact Form List Inquiries Screen

And because screenshots don't illustrate these things, here are some details:

  • No one comment can dominate the page, but any long comment can easily be expanded or collapsed if you want.

  • Replying to comments, deleting inquires and reporting them as spam are handled via AJAX so that users never have to wait for the page to reload to go on to processing the next comment.

  • I got rid of the iframe-powered dialog of Movable Type because it simply took too long to load. I converted it to a pure-jQuery dialog so that it appears almost instantaneously.

  • I added the polish of animation so that elements fade and ease quickly into or out of view. This helps the page transition more easily from one state to another without the user feel the jarring effect of the page shifting up and down as elements disappear or appear.

  • I am tracking the state of inquiries to know whether you have read them or not, whether they have been replied to or not, etc. That way you can at a glance see what is new and what requires action.

  • I got rid of the table column headers.

  • All actions one might want to take are clearly visible and accessible via a single click.

Technically this screen is for processing contact form inquiries, but it would be trivial to apply to main comment listing so it is only a matter of time.

In the meantime, I would be curious to hear feedback from Movable Type users, and the thoughts from others about what makes a good comment management experience. Is there a tool you use and love that I have not taken a look at, but should?

Not too long ago Amazon made some important changes to its API to improve security, but this change had the unfortunate result of breaking Media Manager. My knee-jerk reaction was to just go into my code and implement the API change directly in my custom built Amazon API library -- because hey, it would fix the problem and allow me to go about my day. But working on Melody has been a reminder to me about how important it is to drop proprietary code in favor of third party libraries when they emerge. It is not always the easy thing to do, because it often requires a huge effort to rewire your code to a new library, but in most cases it is the right thing to do because in the long run it will:

  • Consolidate development around a library that more people will benefit from.
  • Bring more features to your users faster.
  • Allow you to leverage documentation written and maintained by someone else.
  • Increase the size of your support community.

And that is what I did with Media Manager. I dropped all of my old proprietary Amazon API code in favor of a widely used, well supported CPAN module called Net::Amazon. In the process I dramatically simplified my code base, I incorporated more features that have emerged from Amazon's API since I initially wrote Media Manager, and made the framework easier to extend and use. All in all, it is proving to be a great change for the plugin that brings more features and capabilities to Media Manager users.

However, this change may also mean changes for its users. For a lot of Media Manager users, this new version may mean that your template code will no longer work. This change which breaks backwards compability was unfortunate, but to a great extent unavoidable, especially if I wanted to maximize the end-user benefits for shifting to Net::Amazon. So if you are an existing user of Media Manager and are anxious to restore interoperability with Amazon, then please consult Media Manager's new documentation with its many template code samples to see what changes you might need to update your blog's templates.

You can download Media Manager 2.1 from github, and file support tickets and bug reports in lighthouse. Please, if you have problems, let me know so that I fix them as soon as possible.

Media Manager provides users and authors within Movable Type and Melody with the ability to search and insert media from a number of popular remote services like Amazon and YouTube. Using Media Manager one can open a dialog, enter a few search terms, select the book, DVD or video and optionally insert it into a blog post.

Once the media item has been selected it is automatically inserted into Movable Type or Melody's asset management system and can be view by going to "Manage Assets" under the Manage menu.

Installation

To install this plugin follow the instructions found here:

http://tinyurl.com/easy-plugin-install

Prerequisites

Keep in mind that before installing Media Manager you need to make sure you have:

  • Movable Type 4.01 or greater.
  • Digest::SHA perl module
  • Cache::File perl module

Download

Download Media Manager from github.

Resources

For Media Manager

Related

Bug Reports

You can file bug reports here:

Help and Donations

Media Manager represents a lot of work by one individual. While the author is happy to write this software, and support it completely free of charge, the author also appreciates and form of support you can provide. Please consult the following URL to learn more:

http://www.majordojo.com/projects/mediamanager.php

Copyright

(c) 2007-2008 Six Apart, Ltd. (c) 2009 Byrne Reese

License

Media Manager is licensed under the Artistic License.

Q: What is the difference between version 2.1 and 2.0?

A: In 2009 Amazon made a significant change to their AWS Product Marketing API on top of which Media Manager and MTAmazon are built. Media Manager 2.1 contains the fixes and changes necessary to make Media Manager work once again with Amazon.

In updating the software to work with Amazon's new API, Media Manager was overhauled to utilize the CPAN module Net::Amazon. For most people this is meaningless, so let me explain. Net::Amazon is a library, a small bit of software that talks to Amazon's APIs on behalf of Media Manager. The library is maintained by a third party and far more flexible and performant than anything that has previously shipped with Media Manager.

Q: What are the changes between version 1.0 and 2.0?

A: Media Manager 2.0 is a dramatic evolution from its predecessor. Media Manager now integrates far more seamlessly with Movable Type then ever before.

In this rearchitecture of the software, however, I redefined what the goals of the software are and adjusted the scope and feature set of the product to meet those goals. For example, Media Manager 1.0 was an evolution of BookQueue and BookQueueToo, which by their name should indicate that they presumed you were managing books alone. As a result Media Manager 1.0 allowed users to set the "status" of an item as either "reading," "read" or "unread."

That is flawed assumption, especially in light of the fact that those statii are irrelevant to CD's not to mention patio furniture - both of which are available through Amazon. What follows is a list of features that have been REMOVED:

  • item statuses - users are encouraged to use Movable Type's built in tagging system to manage the state of an item
  • reviews - now that Movable Type allows users to insert assets directly in their posts, there is no need to support the concept of a "review."
  • ratings - ratings were associated with reviews in previous versions and since reviews are gone, so are ratings
  • list import - i suspect many users did not make use of this feature so the ability to import items from an Amazon Wishlist has been removed
  • finished on date - yeah, sorry about this one for now

Q: Is Media Manager 1.0 forward compatible with Media Manager 2.0?

A: Items found in Media Manager 1.0 will automatically be ported into the new Media Manager 2.0 and Movable Type 4.0 system. However, not all data will be carried over. Reviews, ratings, and statii will NOT be ported over. Not yet anyways.

Q: Will my Media Manager 1.x template tags work with MT4 and MM2.0?

A: No they will not. To simplify the code base and bring focus to the Media Manager application, all legacy template tags have been removed. Movable Type's core template tag set should be sufficient for anything most users need to do.

This weekend I was pleasantly surprised by an email from Aaron Stone, the lead engineer of modperlite -- a project the two of us had started while we were both at Six Apart focused on addressing ways to dramatically improve performance for Movable Type. Aaron had done a lot of the initial groundwork for the project technically, but eventually got consumed by other projects in need of his expertise; a trend that did not stop when he moved on to Google.

I had in fact began recruiting for engineering talent to contract with to complete the project. But then this weekend, I got an email from Aaron out of the blue informing me that he finished the work on mod_perlite and tested it with Movable Type... and it worked!

This is a tremendous milestone for the project and puts us in a position for the first time to see if the original hypothesis for the project holds water: that we could make Perl applications as brain-numbingly easy to install as PHP-based ones, and that we could also help make all CGI faster and more memory efficient in the process.

I have a love/hate relationship with Amazon right now as they recently made changes to their Amazon Product Advertising API that has broken Media Manager. Now I have numerous users tapping their feet anxiously waiting for an update, during a time in which I really should be working. I have only myself to blame though as Amazon gave me more than enough warning of this change, emailed me numerous times warning me about it, and honestly did all that a services provider should do to inform me of this impending change and its consequences. But naturally I procrastinated, and now I must reap what I sow.

On the flip side, this change has forced me to crack open one of my oldest plugins, one built with a great deal of duct tape and chicken wire, and retool it to be slightly more modern. Most users of course won't appreciate or notice a change, but I myself am relieved to finally replace all of my home-grown web services code, with a more stable and tested equivalent. This hopefully will make it easier for me to add features in the future and not cringe quite as much whenever a user reports a bug.

So while I privately curse Amazon under my breath, Media Manager and Movable Type users can thank Amazon for forcing me to finally devote some time to this plugin.

And that's the good news: Media Manager is getting a much needed overhaul: it is being updated to work with Amazon's new API restoring its operability; and I am making this work available for download today. The bad news is that this work is not 100% complete, so I must beg the for the community's continued patience and understanding in that this overhaul will take a little more time to complete. In the meantime, those willing to experiment with something that is partially complete, you can download and follow my progress with Media Manager over at github, and you can report bugs via the web and email over at Lighthouse.

Still Making Things

As my life has been slowly re-attaining equilibrium after having a second child, I have still somehow managed to find time to make things. Thank god, because making things keeps me sane when life wants to dog pile my schedule, and my personal, professional and family life. Of course I have never really stopped making things, I have only struggled to find the time to tell people about the things I have made.

So today I break the silence and begin to catch you up with some of the many things I have made recently. The first thing I want to tell you about is a new tool I am especially proud of: Image Cropper.

Image Cropper is a plugin, sponsored by Talking Points Memo (an Endevver client) and donated to the Melody and Movable Type open source community, that helps bloggers compose and craft the images used on a web site to promote their content and stories. Of course Movable Type and Melody both possess the ability to do this today natively, but the difference between an amateur and a professional blog like Talking Points Memo, is the time and care they put into the polish they put into every single blog post. TPM for example employs producers to create these images and thumbnails manually because Movable Type's default behavior is ultimately insufficient. To see what I mean, let's look at a quick example.

Suppose we are composing a story about a visit between Barack Obama and Nicolas Sarkozy and we have the following photograph to accompany the story:

Obama and Sarkozy

One thing you may notice about the photo is that the primary subjects of the photo are not centered in the photograph. This poses a problem because the thumbnail Movable Type will create for you automatically will crop out one or more of the primary subjects from the photo. Furthermore, at such a small size, the thumbnail created makes it difficult to determine who the primary subjects even are. This is why Talking Points Memo relied on a manual process to create these thumbnails so that they could produce the best possible result for their readers. Enter Image Cropper.

With Image Cropper we can override the default thumbnail and specify our own to produce an undeniably better result -- all from within Movable Type.

Image Cropper Results

Furthermore, Image Cropper allows you to fine tune the file size and image quality of the image generated as well as annotate the image with text so that you can attach a photo credit or by-line.

To show you how easy it is to create results like this, here is a quick demonstration of the plugin in action:

To learn more about the plugin and to download it, visit the plugin's homepage over at Endevver. And if you need my help with a project, send us a note.

Meet Melody

People who know me, know that I love Movable Type. In fact I have devoted much of the last five years to the product and its community. Therefore it gives me great pride and much relief to be a part of the launch of Melody, a new community-driven content management and blogging platform based upon Movable Type.

melody-logo-on-white.jpg

I have written extensively about what motivated me and others to create this project so I won't bother recapitulating that here.

What is likely to get lost today in whatever attention this humble project is likely to attract is any mention of the people who have helped take this project this far. Without the dedication of these people over the past six years Movable Type would be a fundamentally different product than it is today, and Melody might never have happened. So I would like to carve out a little space to say thank you to the following contributors to Melody and my friends:

  • Jay Allen - While I have been remiss in mentioning it here, Jay and I are now partners in what is becoming a very successful Movable Type (and now Melody) consulting business. For Melody Jay has been playing the role of lead developer by helping manage code merges with Movable Type, organizing our source code and writing all of our developer contribution guidelines.

  • Jesse Gardner - I have worked with Jesse for years. It was a pleasure to work with him on the design of Movable Type [dot org] and an even greater privilege to work with him on what I think is a damn fine looking web site and the home for our new community: OpenMelody.org.

  • Tim Appnel - Tim has been a dutiful project manager as well as our system administrator taking on the unglamorous and thankless task of setting up servers, managing ACLs, and all the other stuff that makes the bits and bytes flow as God intended.

  • Dan Wolfgang - Dan built out our web site, and has been first in line to take stuff off of people's plates when they become too full. Never under-estimate the value of load balancing people. Seriously.

  • Mark Stosberg - Mark's invaluable experience in serving on the boards of several non-profits has helped us greatly in our process of writing our own by-laws for the Open Melody Software Group. He is also our unofficial ambassador to the greater Perl community in CPAN, where he helps to maintain a number of modules.

  • Su - I have never known Su to be one who likes the lime light, so I will simply say this: he has been a consistent and reliable voice of reason within our group, which is essential when dealing with so many people who are as passionate as we are.

  • Arvind Satyanarayn - The famous Movable Type prodigy-kid and author of Custom Fields took a break from college girls and parties to help contribute much needed code and infrastructure that will undoubtedly become essential to the project. He also surprised us all by merging all of Movable Type 4.261 into the latest development branch of Melody - hoooo-aaaah!

Finally, I would like to thank Six Apart. There is no doubt that many people will want to spin this initiative by the community in a way that impugns the company and the many people who work there and whom I call a friend. There is no way around the simple and basic truth: without them, this project would not exist and without their support of the project, I doubt it could reach its fullest potential.

And after all is said and done, this is what Melody is all about: these people, our community, and the many people who will follow. Thank you!

Since releasing the Hybrid News Theme I have been contacted by a number of people on the ProNet mailing list asking me to shed some light on the process of creating template sets, or themes as most other products call them, for Movable Type. As I embark on creating this documentation I stumbled across a video made by a friend of mine on the same subject (mental note: subscribe to plasticmind.tv).

Jesse does a good job I think I showing that template sets are sincerely not that difficult and that anyone who can cobble together a WordPress theme, can easily create one for Movable Type. I would like to mention another tool at your disposal which will make this process even easier: it is called exportts. The program is a simple perl script that you can drop into your Movable Type tools directory to easily export the templates in a blog and then package them up as an installable template set or theme. All in one simple step.

The exportts tool is something I find indispensable in my work as it saves me literally hours of monotonous and menial labor. Its readme should explain exactly how it works if you want to learn more.

I hope this video helps though, while I document the process more thoroughly.

Hats off the WordPress community and Matt Mullenweg's insistence to promote open source design. Thanks to his philosophy and the courage of designers from the WordPress community, I am able to bring the Hybrid News Theme to Movable Type.

The Hybrid News Theme is the first newspaper theme for the Movable Type platform and enabled users to easily create a newspaper style web site:

Hybrid News Theme for Movable Type

If you are looking for the Hybrid News theme for WordPress, please visit their website.

Live Demo

View the live demo.

Download the Beta

This theme requires Movable Type Pro at is relies on custom fields for many of its advanced features.

Bug Reports

This is beta software and is constantly being improved. Please submit bug reports at the following web site:

Installation

This plugin requires Movable Type Pro. It does not yet work with Movable Type Open Source. It is certainly my intent to support MTOS and Melody, just not at this time.

This plugin is installed just like any other Movable Type Plugin.

You will also need to install the following plugins:

Features

  • SEO enhanced:
    • Alternate HTML tags</li> <li>Google Web Sitemaps</li> <li>Google News Sitemaps</li> <li>Associate content with official Google News categories</li> </ul></li> <li>Front door slideshow of new and interesting content.</li> <li>Easily feature content on the front door.</li> <li>Easily designate content to your Hybrid News blog.</li> <li>Display summaries from each of your site's categories on the front door.</li> <li>Pull-down menus for easy site navigation.</li> <li>Customizable page navigation.</li> <li>Category, Comment and Entry feeds.</li> <li>Photo Gallery Support</li> <li>Create custom cropped images for placement on the front door, within the slideshow and else. </li> <li>Much, much more. </li> </ul> <h2>About the Designer</h2> <p>See the <a href="http://themehybrid.com/about">Hybrid Theme Community About page</a>.</p> <h2>License</h2> <p>This theme is licensed under the GPLv2.</p> </div> </div> <div class="asset-footer"><div class="asset-footer-inner"> <div class="entry-commentcount"><a href="http://www.majordojo.com/projects/movable-type/hybrid-news/#comments">57 <span>Comments</span></a></div> <div class="asset-footer-meta"> <p>Posted by <a href="http://www.majordojo.com/cgi-bin/mt/mt-cp.cgi?__mode=view&id=1&blog_id=3" class="fn url">Byrne</a> on Wednesday, June 3, 2009 at 9:13 AM</p> <p>Filed in <a href="http://www.majordojo.com/projects/movable-type/hybrid-news/" rel="tag">Hybrid News</a> </p> </div> </div></div> </div> <div id="entry-14270" class="entry-asset asset hentry"> <div class="asset-header"> <h2 class="asset-name entry-title"><a href="http://www.majordojo.com/2009/06/increasing-your-sites-page-views-with-photo-galleries.php" rel="bookmark">Increasing your site's page views with photo galleries</a></h2> <div class="asset-meta "> <div class="entry-meta-date"><abbr class="published" title="2009-06-02T01:11:42-08:00"><span class='day'> 2</span> Jun 2009</abbr></div> </div> </div> <div class="asset-content entry-content pkg"> <div class="asset-body pkg"> <p>In my on-going blitz of plugins and enhancements for Movable Type I am adding one more to the list: upgrades and enhancements to the <a href="http://www.majordojo.com/projects/movable-type/photo-gallery/">Photo Gallery plugin</a>, which you can already see on <a href="http://www.majordojo.com/photos/">my personal photo galleries</a>.</p> <p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><div style="text-align: center; width: 525px;"><a rel="lightbox" href="http://www.majordojo.com/assets_c/2009/06/Picture 5-thumb-640xauto-3143.jpg" title="Grid Layout"><img alt="Grid Layout" src="http://www.majordojo.com/assets_c/2009/06/Picture 5-thumb-525x298-3143.jpg" width="525" height="298" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a><br /><p class="caption">A screenshot of the new grid layout for the Movable Type Photo Gallery plugin.</p></div></span></p> <p>These features come compliments of one my favorite clients, <a href="http://www.urbanmoms.ca/">Urban Moms</a>, who sponsored the development of this latest addition to the open source plugin. They are using my Photo Gallery plugin across a number of their blogs, including the <a href="http://www.urbanmoms.ca/family_travel/">Urban Traveler</a>, the <a href="http://www.urbanmoms.ca/urban_closet/">Urban Closet</a>, and the <a href="http://www.urbanmoms.ca/urban_crafter/">Urban Crafter</a>. They came to me because they know that nothing helps increase page views to a site more than photos and images, and wow were they right. <em>Within days of deploying their new albums, their traffic increased by over 10%.</em> Now that's results. Of course it doesn't hurt to have great bloggers and photographers working for you either.</p> </div> <div class="asset-more-link"> <a href="http://www.majordojo.com/2009/06/increasing-your-sites-page-views-with-photo-galleries.php#more" rel="bookmark nofollow">Continue reading</a> </div> </div> <div class="asset-footer"><div class="asset-footer-inner"> <div class="entry-commentcount"><a href="http://www.majordojo.com/2009/06/increasing-your-sites-page-views-with-photo-galleries.php#comments">4 <span>Comments</span></a></div> <div class="asset-footer-meta"> <p>Posted by <a href="http://www.majordojo.com/cgi-bin/mt/mt-cp.cgi?__mode=view&id=1&blog_id=3" class="fn url">Byrne</a> on Tuesday, June 2, 2009 at 1:11 AM</p> <p>Filed in <a href="http://www.majordojo.com/design/" rel="tag">Design</a>, <a href="http://www.majordojo.com/blogging/movable-type/" rel="tag">Movable Type</a> and tagged <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=design&limit=20" rel="tag">design</a>, <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=features&limit=20" rel="tag">features</a>, <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=layouts&limit=20" rel="tag">layouts</a>, <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=mid-century&limit=20" rel="tag">mid-century</a>, <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=movable%20type&limit=20" rel="tag">movable type</a>, <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=photo%20gallery&limit=20" rel="tag">photo gallery</a>, <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=photos&limit=20" rel="tag">photos</a>, <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=plugins&limit=20" rel="tag">plugins</a> </p> </div> </div></div> </div> <div id="entry-14269" class="entry-asset asset hentry"> <div class="asset-header"> <h2 class="asset-name entry-title"><a href="http://www.majordojo.com/projects/movable-type/link-checker/" rel="bookmark">Link Checker for Movable Type</a></h2> <div class="asset-meta "> <div class="entry-meta-date"><abbr class="published" title="2009-06-01T13:11:04-08:00"><span class='day'> 1</span> Jun 2009</abbr></div> </div> </div> <div class="asset-content entry-content pkg"> <div class="asset-body pkg"> <p style="font-family: Georgia; font-size: 18pt;text-align:center;">A blog is only as good as its links.<br /><span style="display:block;font-size: 12pt; font-style:italic;">–Ancient Proverb</span></p> <p>This plugin assists authors, editors and administrators in making sure that all of the links on their blog are still valid and therefore useful to their readers. It works by surfacing a additional list action called "Validate Links" in your Manage Entries table listing. Just select the entries you want to scan and evaluate, hit "Go" and this plugin will produce a simple report about all of the URLs found in the post. </p> <p>The plugin will scan for <em>all</em> URLs including:</p> <ul> <li>valid references to embedded images</li> <li>outbound links </li> <li>frame references</li> </ul> <h2>Prerequisites</h2> <p>You will need to download and install the following Perl Module for this plugin to function:</p> <ul> <li><a href="http://search.cpan.org/~bdfoy/HTML-SimpleLinkExtor-1.23/lib/SimpleLinkExtor.pm">HTML::SimpleLinkExtor</a></li> </ul> <h2>Download</h2> <ul> <li><a href="/projects/downloads/LinkChecker-0.93.zip">Download 0.93</a></li> </ul> <h2>Installation</h2> <p>This plugin is installed <a href="http://www.majordojo.com/2008/12/the-ultimate-guide-to-installing-movable-type-plugins.php">just like any other Movable Type Plugin</a>.</p> <h2>Screenshots</h2> <p><strong>Selecting Entries to Check</strong></p> <p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><div style="text-align: center; width: 377px;"><a rel="lightbox" href="" title="Selecting Entries to Validate"><img alt="Selecting Entries to Validate" src="http://www.majordojo.com/2009/06/01/Picture%202.png" width="377" height="260" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a></div></span></p> <p><strong>Link Check Report</strong></p> <p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><div style="text-align: center; width: 450px;"><a rel="lightbox" href="" title="Link Check Report"><img alt="Link Check Report" src="http://www.majordojo.com/2009/06/01/Picture%201.png" width="450" height="234" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a></div></span></p> <h2>License</h2> <p>This plugin is licensed under the GPLv2.</p> <h2>TODO</h2> <ul> <li>Process comments for links</li> <li>Night emails to check past posts for invalid links.</li> <li>Do not surface list action item is prereq is not installed, or provide a good error message.</li> </ul> </div> </div> <div class="asset-footer"><div class="asset-footer-inner"> <div class="entry-commentcount"><a href="http://www.majordojo.com/projects/movable-type/link-checker/#comments">4 <span>Comments</span></a></div> <div class="asset-footer-meta"> <p>Posted by <a href="http://www.majordojo.com/cgi-bin/mt/mt-cp.cgi?__mode=view&id=1&blog_id=3" class="fn url">Byrne</a> on Monday, June 1, 2009 at 1:11 PM</p> <p>Filed in <a href="http://www.majordojo.com/projects/movable-type/link-checker/" rel="tag">Link Checker</a> </p> </div> </div></div> </div> <div id="entry-14251" class="entry-asset asset hentry"> <div class="asset-header"> <h2 class="asset-name entry-title"><a href="http://www.majordojo.com/projects/movable-type/refresh-and-republish/" rel="bookmark">Refresh and Republish for Movable Type</a></h2> <div class="asset-meta "> <div class="entry-meta-date"><abbr class="published" title="2009-05-30T21:24:20-08:00"><span class='day'>30</span> May 2009</abbr></div> </div> </div> <div class="asset-content entry-content pkg"> <div class="asset-body pkg"> <p>As a developer and implementation specialist for Movable Type I have often grown frustrated by the process of refreshing and then publishing a template over and over as I build out a theme for Movable Type. To address this dilemma, I created the following plugin which does one simple thing:</p> <ul> <li>gives you a way to refresh a template and publish it all in one action.</li> </ul> <p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><div style="text-align: center; width: 338px;"><a rel="lightbox" href="" title="Refresh and Republish"><img alt="Refresh and Republish" src="http://www.majordojo.com/2009/05/30/Picture%202.png" width="338" height="172" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a></div></span></p> <p><em>Note: as of 1.0 this only works with index templates.</em></p> <h2>Download</h2> <ul> <li><a href="/projects/downloads/RefreshAndPublish-1.0.zip">Download v1.0</a></li> </ul> <h2>License</h2> <p>This plugin is licensed under the GPLv2. </p> </div> </div> <div class="asset-footer"><div class="asset-footer-inner"> <div class="entry-commentcount"><a href="http://www.majordojo.com/projects/movable-type/refresh-and-republish/#comments">0 <span>Comments</span></a></div> <div class="asset-footer-meta"> <p>Posted by <a href="http://www.majordojo.com/cgi-bin/mt/mt-cp.cgi?__mode=view&id=1&blog_id=3" class="fn url">Byrne</a> on Saturday, May 30, 2009 at 9:24 PM</p> <p>Filed in <a href="http://www.majordojo.com/projects/movable-type/refresh-and-republish/" rel="tag">Refresh and Republish</a> </p> </div> </div></div> </div> <div id="entry-14250" class="entry-asset asset hentry"> <div class="asset-header"> <h2 class="asset-name entry-title"><a href="http://www.majordojo.com/2009/05/teaser-hybrid-news-theme-for-movable-type.php" rel="bookmark">Teaser: Hybrid News Theme for Movable Type</a></h2> <div class="asset-meta hidden"> <div class="entry-meta-date"><abbr class="published" title="2009-05-30T14:40:04-08:00"><span class='day'>30</span> May 2009</abbr></div> </div> </div> <div class="asset-content entry-content pkg"> <div class="asset-body pkg"> <p>The most common request from people contacting me is for a redesign for their web site. While I am happy to work with them to completely redesign their website and engineering one exclusively for them, but rarely do people have a budget for a high-touch engagement like that. Most people just need a quick, easy and <em>cheap</em> way to get started. </p> <p>Movable Type has a number of options out of the box, but lets be honest: they are dated and boring. Their is <a href="http://www.movabletype.org/documentation/themes/mid-century.html">Mid-Century</a>, one of my favorites, and <a href="http://www.sixapart.com/blog/2008/12/the-laws-of-motion.html">Motion</a> from Six Apart (available for free in MT Pro), but that is hardly much of a selection as great as they are.</p> <p>So the mission I am taking on is to help change this. To help bring a greater variety of freely available themes to Movable Type. In pursuit of this, now when customers come to me with a small budget needing a redesign I encourage them to check out what open source themes are available on other platforms - and if they can find one they like, I will port it to Movable Type at a discount. </p> <p>Most recently a client came to me asking for a "news theme." It didn't take long for us to find <a href="http://themehybrid.com/">Hybrid News for WordPress</a>. The theme is free and open source, which permits me to implement in Movable without worries about licensing. </p> <p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><div style="text-align: center; width: 525px;"><a rel="lightbox" href="http://www.majordojo.com/assets_c/2009/05/Picture 1-thumb-640xauto-3123.png" title="Hybrid News Theme for Movable Type"><img alt="Hybrid News Theme for Movable Type" src="http://www.majordojo.com/assets_c/2009/05/Picture 1-thumb-525x328-3123.png" width="525" height="328" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a></div></span></p> <p>I am not quite ready to release it, but I will soon. In the meantime you can check out a <a href="http://www.majordojo.com/hybrid-news/">live demo</a>. </p> <p>The great news is that while developing the theme I added a number of features to the theme that are not available in WordPress - primarily because Movable Type allows me to add features easily without requiring a plugin. More on those when I am able to do all the documentation.</p> <p>Stay tuned to this blog for the announcement when it is ready...</p> <p><em>Update: <a href="http://www.majordojo.com/projects/movable-type/hybrid-news/index.php">official project homepage</a> has been made available.</em></p> </div> </div> <div class="asset-footer"><div class="asset-footer-inner"> <div class="entry-commentcount"><a href="http://www.majordojo.com/2009/05/teaser-hybrid-news-theme-for-movable-type.php#comments">7 <span>Comments</span></a></div> <div class="asset-footer-meta"> <p>Posted by <a href="http://www.majordojo.com/cgi-bin/mt/mt-cp.cgi?__mode=view&id=1&blog_id=3" class="fn url">Byrne</a> on Saturday, May 30, 2009 at 2:40 PM</p> <p>Filed in <a href="http://www.majordojo.com/design/" rel="tag">Design</a>, <a href="http://www.majordojo.com/blogging/movable-type/" rel="tag">Movable Type</a>, <a href="http://www.majordojo.com/technology/open-source/" rel="tag">Open Source</a>, <a href="http://www.majordojo.com/personal-projects/" rel="tag">Personal Projects</a> and tagged <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=design&limit=20" rel="tag">design</a>, <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=free&limit=20" rel="tag">free</a>, <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=movable%20type&limit=20" rel="tag">movable type</a>, <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=open%20source&limit=20" rel="tag">open source</a>, <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=template%20set&limit=20" rel="tag">template set</a>, <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=templates&limit=20" rel="tag">templates</a>, <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=themes&limit=20" rel="tag">themes</a>, <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=wordpress&limit=20" rel="tag">wordpress</a> </p> </div> </div></div> </div> <div id="entry-14238" class="entry-asset asset hentry"> <div class="asset-header"> <h2 class="asset-name entry-title"><a href="http://www.majordojo.com/2009/05/a-quick-pagination-hack-for-movable-type.php" rel="bookmark">A quick pagination hack for Movable Type</a></h2> <div class="asset-meta "> <div class="entry-meta-date"><abbr class="published" title="2009-05-27T20:34:50-08:00"><span class='day'>27</span> May 2009</abbr></div> </div> </div> <div class="asset-content entry-content pkg"> <div class="asset-body pkg"> <p>One of the most common feature requests for Movable Type is entry pagination. It is actually a sticky problem for a system that utilizes static publishing like Movable Type though. <em>As an aside, I am become very unfond of the term "static publishing" and am coming around to what I think is a more apt term: "pre-emptive caching."</em> Anyways, there are a number of well supported techniques for pagination, and the one I send most people to is Mark Carey's <a href="http://mt-hacks.com/pagination.html">Pagination plugin</a>. But when people feel that is overkill, I often help them implement the following hack. </p> </div> <div class="asset-more-link"> <a href="http://www.majordojo.com/2009/05/a-quick-pagination-hack-for-movable-type.php#more" rel="bookmark nofollow">Continue reading</a> </div> </div> <div class="asset-footer"><div class="asset-footer-inner"> <div class="entry-commentcount"><a href="http://www.majordojo.com/2009/05/a-quick-pagination-hack-for-movable-type.php#comments">10 <span>Comments</span></a></div> <div class="asset-footer-meta"> <p>Posted by <a href="http://www.majordojo.com/cgi-bin/mt/mt-cp.cgi?__mode=view&id=1&blog_id=3" class="fn url">Byrne</a> on Wednesday, May 27, 2009 at 8:34 PM</p> <p>Filed in <a href="http://www.majordojo.com/blogging/movable-type/" rel="tag">Movable Type</a> and tagged <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=chicagonow&limit=20" rel="tag">chicagonow</a>, <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=demo&limit=20" rel="tag">demo</a>, <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=fast&limit=20" rel="tag">fast</a>, <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=free&limit=20" rel="tag">free</a>, <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=hacks&limit=20" rel="tag">hacks</a>, <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=movable%20type&limit=20" rel="tag">movable type</a>, <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=pagination&limit=20" rel="tag">pagination</a>, <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=php&limit=20" rel="tag">php</a> </p> </div> </div></div> </div> <div id="entry-14204" class="entry-asset asset hentry"> <div class="asset-header"> <h2 class="asset-name entry-title"><a href="http://www.majordojo.com/2009/04/about-movable-types-publish-queue.php" rel="bookmark">Everything you wanted to know about Movable Type's Publish Queue</a></h2> <div class="asset-meta "> <div class="entry-meta-date"><abbr class="published" title="2009-04-23T15:59:41-08:00"><span class='day'>23</span> Apr 2009</abbr></div> </div> </div> <div class="asset-content entry-content pkg"> <div class="asset-body pkg"> <p>I recently added the following chapter to <a href="http://www.majordojo.com/2009/03/an-open-source-movable-type-operations-manual.php">Movable Type's Open Source Operations Manual</a> and wanted to publish here for review by the community and feedback. </p> <h2>About Publish Queue</h2> <p>The Movable Type Publish Queue is an essential component to any large scale Movable Type powered web site because it plays a crucial role in publishing performance optimization. There are a number of benefits to using the publish queue, they are:</p> <ul> <li>It <strong>eliminates redundant, duplicated and unnecessary publication</strong> of files.</li> <li>It <strong>offloads publishing to stand alone process</strong> which can be throttled and scaled independently from the Movable Type web application itself.</li> <li>It <strong>speeds up the commenting experience</strong> by reducing the number of files that an end user must wait to be published prior to being able to navigate the web site again.</li> </ul> <h2>How it Works</h2> <p>It might be best to describe how the publish queue works by examining a scenario in which it would be utilized: republishing the necessary files in response to a comment.</p> <h3>Adding Jobs to the Queue</h3> <p>When a comment comes in to Movable Type multiple files are often in need of being updated, not only because the comment needs to be published to the entry's permalink page, but also because multiple other pages which display a comment count associated with the comment's entry may need to be updated. </p> <p>Each of those pages (assuming they are configured to be published via the publish queue) will then be added to the "publish queue." When this happens, a publishing "job" is created and added to the database for each page that need to be published. There is one row in the database for each individual job in the system. </p> <p>Now let's assume for a moment that shortly after receiving the first comment, a second one is published by a different visitor to your web site. This action also results in pages needing to be republished. However this time, before those pages are added to the queue as jobs the system checks to see if a job corresponding to each page is already on the queue. If there is, then the job is discarded because its work would be unnecessarily duplicated otherwise. If the job is not already on the queue, then it is added. This ensures that no unnecessary work is performed by the system.</p> <p>In addition, each page that is added to the publish queue is given a priority which dictates the order in which the corresponding job will be processed. The higher the priority, the sooner the system will work on the job. Movable Type assigns priority based upon the following criteria:</p> <table style="padding: 5px; margin: 10px 0 15px 0;"> <tr><th>Page/Template Type</th><th>Priority</th></tr> <tr><td>Preferred Page and Entry archives</td><td>10</td></tr> <tr><td>Index templates with a filename beginning with "index" or "default"</td><td>9</td></tr> <tr><td>Feed index templates</td><td>9</td></tr> <tr><td>All other index templates </td><td>8</td></tr> <tr><td>Non-preferred Page and Entry archives</td><td>5</td></tr> <tr><td>Daily archives</td><td>4</td></tr> <tr><td>Weekly archives</td><td>3</td></tr> <tr><td>Monthly archives</td><td>2</td></tr> <tr><td>Any Category archive</td><td>1</td></tr> <tr><td>Any Author archive</td><td>1</td></tr> <tr><td>Yearly archives</td><td>1</td></tr> </table> <p>And that is how jobs are added to the queue. There is a separate process that exists that is then responsible for publishing.</p> <h3>Creating Publish Queue Workers</h3> <p>One or more publish queue "workers" can be created to process jobs on the queue. The number of workers needed by a system is based largely upon two variables:</p> <ul> <li>The capacity of any one worker to process jobs on the queue.</li> <li>The volume of jobs being added to the queue over time.</li> </ul> <p>A worker is created by running the "run-periodic-tasks" script that comes with every copy of Movable Type. This script can be run in three modes:</p> <ul> <li><p><strong>daemon mode</strong> - in this mode the script never quits; instead it constantly monitors the job queue for work to be done and nearly the instance a job is made available for work, the script will begin work on it.</p></li> <li><p><strong>run-once</strong> - in this mode the script is run via the command line and will quit only after there is no more work on the queue to be done.</p></li> <li><p><strong>scheduled task</strong> - in this mode the script is executed in the "run-once" mode periodically according to a schedule defined by cron or a similar service. </p></li> </ul> <h3>Processing Jobs on the Queue</h3> <p>Each worker will monitor the queue for jobs. When one becomes available it is pulled off the queue to be worked on. Once it is "off the queue" no other workers can claim it. This makes sure that no two workers are trying to work on the same job at the same time. </p> <p>In the event that something goes wrong during the publishing process and the file is not published, then the system will notice saying something skin to, "uh-oh, look at this job that was claimed on the queue, but was never successfully finished," and then free up the job for a worker to pick up and try again on. If the task is retried more than 5 times, then the job is marked as failed and left on the queue. In this state it is possible for a similar job to be placed on the queue, and if the problem that was resulting in the published failure is not transient, then that job is likely to fail again. </p> <p>An important thing to note is that if a job is pulled off the queue by a worker to be worked on, then it remains possible at that point in time for that same page to be added to the queue again in response to the receipt of another comment. The rational being that by the time the page is finished being rebuilt it is most likely out of date, and so needs to be published again.</p> <h2>What Powers It?</h2> <p>The Publish Queue is powered by a stand alone job/queue management library called "The Schwartz." The Schwartz is actually a more generic and abstract job management system capable of processing any number of tasks via a similar queuing mechanism. For the time being, Movable Type only utilizes the Schwartz for publishing, but in the future may use this framework for sending emails or other non-critical system tasks.</p> <h2>Publish Queue Tools</h2> <p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><div style="text-align: right; width: 200px;"><a rel="lightbox" href="http://www.majordojo.com/assets_c/2008/10/Picture 1-thumb-640xauto-1998.png" title="Publish Queue Manager screenshot"><img alt="Publish Queue Manager screenshot" src="http://www.majordojo.com/assets_c/2008/10/Picture 1-thumb-200x109-1998.png" width="200" height="109" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" /></a></div></span>There is one tool in particular that is recommended for most systems that utilize the Publish Queue, aptly named the Publish Queue Manager.</p> <p>This tool provides a user interface within Movable Type that allows administrators to monitor and inspect jobs on the queue. Each job can be deleted, or have its priority changed.</p> <p>For more information, visit the plugin's web site at the following URL:</p> <p><a href="http://www.majordojo.com/projects/movable-type/publish-queue-manager/">http://www.majordojo.com/projects/movable-type/publish-queue-manager/ </a></p> <h2>Additional Reading</h2> <p>To learn more about the Publish Queue, consider reading the following resources:</p> <ul> <li><a href="http://www.movabletype.org/documentation/administrator/publishing/publish-queue.html">Using the Publish Queue
</a></li> <li><a href="http://www.movabletype.org/documentation/administrator/setting-up-run-periodic-taskspl.html">Setting up run-periodic-tasks
</a></li> <li><a href="http://www.movabletype.org/documentation/enterprise/publish-queue.html">Scalable Publishing Models in Movable Type
</a></li> <li><a href="http://search.cpan.org/~bradfitz/TheSchwartz-1.07/lib/TheSchwartz.pm">The Schwartz Homepage</a></li> </ul> <p>By the way, a new version of the Movable Type Operations Manual is now <a href="http://www.majordojo.com/projects/downloads/MTOpsManual.pdf">available</a>.</p> </div> </div> <div class="asset-footer"><div class="asset-footer-inner"> <div class="entry-commentcount"><a href="http://www.majordojo.com/2009/04/about-movable-types-publish-queue.php#comments">4 <span>Comments</span></a></div> <div class="asset-footer-meta"> <p>Posted by <a href="http://www.majordojo.com/cgi-bin/mt/mt-cp.cgi?__mode=view&id=1&blog_id=3" class="fn url">Byrne</a> on Thursday, April 23, 2009 at 3:59 PM</p> <p>Filed in <a href="http://www.majordojo.com/blogging/movable-type/" rel="tag">Movable Type</a> and tagged <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=movable%20type&limit=20" rel="tag">movable type</a>, <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=operations&limit=20" rel="tag">operations</a>, <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=performance&limit=20" rel="tag">performance</a>, <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=publish%20queue&limit=20" rel="tag">publish queue</a>, <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=publish%20queue%20manager&limit=20" rel="tag">publish queue manager</a>, <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=publishing&limit=20" rel="tag">publishing</a>, <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=the%20schwartz&limit=20" rel="tag">the schwartz</a> </p> </div> </div></div> </div> <div id="entry-14185" class="entry-asset asset hentry"> <div class="asset-header"> <h2 class="asset-name entry-title"><a href="http://www.majordojo.com/projects/movable-type/custom-css/" rel="bookmark">Custom CSS Plugin for Movable Type</a></h2> <div class="asset-meta "> <div class="entry-meta-date"><abbr class="published" title="2009-04-13T16:07:10-08:00"><span class='day'>13</span> Apr 2009</abbr></div> </div> </div> <div class="asset-content entry-content pkg"> <div class="asset-body pkg"> <p>Have you ever wanted a simpler way to update your site's stylesheet? One that did not require you to click through 5 screens just to add a simple rule? Have you ever needed a way to let a client or user customize the CSS of their blog without giving them full access to the template editing interface for fear that they might hurt themselves or their blog?</p> <p><em>Enter the Custom CSS plugin for Movable Type.</em></p> <p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><div style="text-align: center; width: 525px;"><a rel="lightbox" href="http://www.majordojo.com/2009/04/13/Picture%201.png" title="Custom CSS Plugin"><img alt="Custom CSS Plugin" src="http://www.majordojo.com/assets_c/2009/04/Picture 1-thumb-525x248-3063.png" width="525" height="248" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a></div></span></p> <p>This plugin was born out of the simple desire to:</p> <ul> <li><p>Provide users with the ability to customize the CSS of a blog, without requiring to give them complete access to edit <em>all</em> the templates of a blog.</p></li> <li><p>Provide a better interface for editing CSS by devoting a larger portion of the screen's real estate to the editor window, unlike what is found on Movable Type's native "Edit Template" screen.</p></li> <li><p>Insulate a theme from a user inadvertently disrupting a site's design by permanently editing or modifying the theme's core CSS definition.</p></li> </ul> <p>The plugin therefore adds a menu item called "Customize Stylesheet" to the Design menu of Movable Type for those blogs which have opted to utilize the Custom CSS feature provided by this plugin.</p> <p>Clicking that menu item will take users to a screen devoted to editing a site's stylesheet.</p> <h2>Prerequisites</h2> <p>Prior to installation, the following requirements must be satisfied:</p> <ul> <li>User has MovableType 4.2 or later installed <ul> <li>it could work on 4.0, but it has not been tested, nor is it supported.</li> </ul></li> <li><a href="http://www.majordojo.com/projects/movable-type/config-assistant/">Config Assistant</a> has been installed.</li> </ul> <h2>Download</h2> <ul> <li><a href="/projects/downloads/CustomCSS-0.95.zip">Download 0.95</a></li> </ul> <h2>Installation</h2> <p>This plugin is installed <a href="http://www.majordojo.com/2008/12/the-ultimate-guide-to-installing-movable-type-plugins.php">just like any other Movable Type Plugin</a>.</p> <p>You will also need to install the <a href="http://www.majordojo.com/projects/movable-type/config-assistant/">Config Assistant plugin</a>.</p> <h2>Usage</h2> <p>By default the "Customize Stylesheet" menu option is not visible unless one of the two conditions have been met:</p> <ul> <li>You have enabled "Custom CSS" in your Custom CSS plugin settings for the current blog.</li> <li>The current blog utilizes a template set for which custom css has been enabled.</li> </ul> <h3>Enabling the Custom CSS Menu Item</h3> <p>If you are using a theme that does not explicitly support this plugin, but would still like to utilize its functionality, follow these steps:</p> <ol> <li>From your blog's dashboard, click "Plugins" from the "Tools" menu.</li> <li>Find "Custom CSS" in the list of plugins and click its name.</li> <li>Click "Settings."</li> <li>Click the check box labeled, "Enable Custom CSS" and hit Save. </li> </ol> <p>Once the page has reloaded you will see the "Customize Stylesheet" option in the Design menu for that blog.</p> <h3>Embedding Custom CSS in your Stylesheet</h3> <p>This plugin makes available a single template tag: </p> <pre><code><$mt:CustomCSS$> </code></pre> <p>This tag will return whatever raw text has been entered into the large "Edit Custom CSS" text area. It does <em>not</em> process template tags.</p> <p><strong>Example</strong></p> <p>In an index template in the <code><head></code> element:</p> <pre><code><style type="text/css"> <$mt:CustomCSS$> </style> </code></pre> <h2>Designer Guide</h2> <p>This plugin allows designers to designate templates within their template sets which utilize or depend upon user-provided CSS. Templates flagged with the <code>custom_css</code> option will be republished automatically whenever a user makes changes to their custom css.</p> <p>To flag an index template as one that depends upon custom css, consult the example below:</p> <pre><code>template_sets: mytheme: label: 'My Template Set' templates: index: main_index: label: 'Main Index' outfile: index.html rebuild_me: 1 styles: label: Stylesheet outfile: styles.css rebuild_me: 1 custom_css: 1 </code></pre> <p>The operative element being the last line above: </p> <pre><code>custom_css: 1 </code></pre> <p>The assumption of course being that the template identified by this flag contains the <code><$mt:CustomCSS$></code> tag. Again, adding this flag instructs the Custom CSS plugin to rebuild that template whenever a user makes a change to their custom CSS.</p> </div> </div> <div class="asset-footer"><div class="asset-footer-inner"> <div class="entry-commentcount"><a href="http://www.majordojo.com/projects/movable-type/custom-css/#comments">6 <span>Comments</span></a></div> <div class="asset-footer-meta"> <p>Posted by <a href="http://www.majordojo.com/cgi-bin/mt/mt-cp.cgi?__mode=view&id=1&blog_id=3" class="fn url">Byrne</a> on Monday, April 13, 2009 at 4:07 PM</p> <p>Filed in <a href="http://www.majordojo.com/projects/movable-type/custom-css/" rel="tag">Custom CSS</a> </p> </div> </div></div> </div> </div><div class="autopagerize_insert_before"></div> <div class="content-nav"> 1 <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?search=movable%20type&__mode=tag&IncludeBlogs=3&limit=20&offset=20">2</a> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?search=movable%20type&__mode=tag&IncludeBlogs=3&limit=20&offset=40">3</a> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?search=movable%20type&__mode=tag&IncludeBlogs=3&limit=20&offset=60">4</a> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?search=movable%20type&__mode=tag&IncludeBlogs=3&limit=20&offset=80">5</a> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?search=movable%20type&__mode=tag&IncludeBlogs=3&limit=20&offset=100">6</a> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?search=movable%20type&__mode=tag&IncludeBlogs=3&limit=20&offset=120">7</a> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?search=movable%20type&__mode=tag&IncludeBlogs=3&limit=20&offset=140">8</a> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?search=movable%20type&__mode=tag&IncludeBlogs=3&limit=20&offset=160">9</a>  <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?search=movable%20type&__mode=tag&IncludeBlogs=3&limit=20&offset=20" rel="next" onclick="return swapContent();">Next ></a> </div> </div> <script type="text/javascript"> <!-- var div = document.getElementById('search-results'); var results = { '1': { 'content': div.innerHTML, 'next_url': 'http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?search=movable%20type&__mode=tag&IncludeBlogs=3&limit=20&offset=20' } }; var timer = window.setTimeout("getResults(" + 1 + ")", 1*1000); //--> </script> </div> </div> <div id="beta"> <div id="beta-inner"> <div class="widget-gallery widget"> <div class="inner"> <h3 class="widget-header">Reading and Watching</h3> <div class="gallery-item-nav"> <a href="javascript:galleryPrev();" id="showcase-prev" class="inactive">Prev</a> <a href="javascript:galleryNext();" id="showcase-next" class="inactive">Next</a> </div> <div class="widget-content"><div class="widget-content-inner"> <div id="gallery-item-1" class="gallery-item" style="display: block;"> <a class="asset-image" href="http://www.amazon.com/Glee-Vol-One-Road-Sectionals/dp/B002AMVEF6%3FSubscriptionId%3D1FNQS2WS91241WGETX82%26tag%3Dws%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB002AMVEF6"><img src="http://images.amazon.com/images/P/B002AMVEF6.01._SCLZZZZZZZ_SX120_.jpg" class="asset-img-thumb" alt="Glee, Vol. One: Road to Sectionals" title="Glee, Vol. One: Road to Sectionals" /></a> <h3><a href="http://www.amazon.com/Glee-Vol-One-Road-Sectionals/dp/B002AMVEF6%3FSubscriptionId%3D1FNQS2WS91241WGETX82%26tag%3Dws%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB002AMVEF6">Glee, Vol. One: Road to Sectionals</a></h3> <div class="asset-description">Best new show on television. Period.</div> </div> <div id="gallery-item-2" class="gallery-item" > <a class="asset-image" href="http://www.amazon.com/Kings-Season-One-Ian-McShane/dp/B0024FAD88%3FSubscriptionId%3D1FNQS2WS91241WGETX82%26tag%3Dmajordojo-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB0024FAD88"><img src="http://images.amazon.com/images/P/B0024FAD88.01._SCLZZZZZZZ_SX120_.jpg" class="asset-img-thumb" alt="Kings - Season One" title="Kings - Season One" /></a> <h3><a href="http://www.amazon.com/Kings-Season-One-Ian-McShane/dp/B0024FAD88%3FSubscriptionId%3D1FNQS2WS91241WGETX82%26tag%3Dmajordojo-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB0024FAD88">Kings - Season One</a></h3> <div class="asset-description">What in the first 3-4 episodes made me think this could be the next great TV show, the last 6 episodes made me sad for how quickly it turned sour.</div> </div> <div id="gallery-item-3" class="gallery-item" > <a class="asset-image" href="http://www.amazon.com/Weeds-Season-4-Hunter-Parrish/dp/B001AQBGM4%3FSubscriptionId%3D1FNQS2WS91241WGETX82%26tag%3Dmajordojo-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB001AQBGM4"><img src="http://images.amazon.com/images/P/B001AQBGM4.01._SCLZZZZZZZ_SX120_.jpg" class="asset-img-thumb" alt="Weeds - Season 4" title="Weeds - Season 4" /></a> <h3><a href="http://www.amazon.com/Weeds-Season-4-Hunter-Parrish/dp/B001AQBGM4%3FSubscriptionId%3D1FNQS2WS91241WGETX82%26tag%3Dmajordojo-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB001AQBGM4">Weeds - Season 4</a></h3> <div class="asset-description">After another season in the 'burbs I was losing interest. Weeds was just getting too dried out and stale. But Season Four really turned the season around for me.</div> </div> <div id="gallery-item-4" class="gallery-item" > <a class="asset-image" href="http://www.amazon.com/Caprica-Eric-Stoltz/dp/B001RTCP1U%3FSubscriptionId%3D1FNQS2WS91241WGETX82%26tag%3Dmajordojo-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB001RTCP1U"><img src="http://images.amazon.com/images/P/B001RTCP1U.01._SCLZZZZZZZ_SX120_.jpg" class="asset-img-thumb" alt="Caprica" title="Caprica" /></a> <h3><a href="http://www.amazon.com/Caprica-Eric-Stoltz/dp/B001RTCP1U%3FSubscriptionId%3D1FNQS2WS91241WGETX82%26tag%3Dmajordojo-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB001RTCP1U">Caprica</a></h3> <div class="asset-description">There are things I like, things I don't. The production is excellent though - which is why I will tune in this Fal.</div> </div> <div id="gallery-item-5" class="gallery-item" > <a class="asset-image" href="http://www.amazon.com/Religulous-Bill-Maher/dp/B001MFNB5I%3FSubscriptionId%3D1FNQS2WS91241WGETX82%26tag%3Dmajordojo-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB001MFNB5I"><img src="http://images.amazon.com/images/P/B001MFNB5I.01._SCLZZZZZZZ_SX120_.jpg" class="asset-img-thumb" alt="Religulous" title="Religulous" /></a> <h3><a href="http://www.amazon.com/Religulous-Bill-Maher/dp/B001MFNB5I%3FSubscriptionId%3D1FNQS2WS91241WGETX82%26tag%3Dmajordojo-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB001MFNB5I">Religulous</a></h3> <div class="asset-description">Yet another documentarian, like Mike Moore, whose ideas I 100% agree with, but whose delivery hurts the message. Everyone should watch this film.</div> </div> </div></div> </div> </div> <script type="text/javascript" charset="utf-8"> // set starting point and ending point -- will show max of 10 images var currentItem = 1; var lastItem = $('.widget-gallery .gallery-item').size(); </script><script type="text/javascript"><!-- google_ad_client = "pub-3972496675721577"; /* 300x250, created 10/4/08 */ google_ad_slot = "3689093583"; google_ad_width = 300; google_ad_height = 250; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> <br /><br /> <div id="beta-columns-left"> <div class="widget-archive widget-archive-category widget"> <h3 class="widget-header">Categories</h3> <div class="widget-content"> <ul class="widget-list"> <li class="widget-list-item"><a href="http://www.majordojo.com/aint-it-cool/">Ain't it Cool (65)</a> </li> <li class="widget-list-item"><a href="http://www.majordojo.com/announcements/">Announcements (53)</a> </li> <li class="widget-list-item"><a href="http://www.majordojo.com/blogging/">Blogging (108)</a> <ul class="widget-list"> <li class="widget-list-item"><a href="http://www.majordojo.com/blogging/movable-type/">Movable Type (100)</a> </li> <li class="widget-list-item"><a href="http://www.majordojo.com/blogging/podcasting/">Podcasting (11)</a> </li> </ul> </li> <li class="widget-list-item"><a href="http://www.majordojo.com/books/">Books (7)</a> </li> <li class="widget-list-item"><a href="http://www.majordojo.com/current-events/">Current Events (64)</a> </li> <li class="widget-list-item"><a href="http://www.majordojo.com/design/">Design (40)</a> </li> <li class="widget-list-item"><a href="http://www.majordojo.com/family/">Family (29)</a> </li> <li class="widget-list-item"><a href="http://www.majordojo.com/food/">Food (1)</a> </li> <li class="widget-list-item"><a href="http://www.majordojo.com/geeky-goodness/">Geeky Goodness (33)</a> </li> <li class="widget-list-item"><a href="http://www.majordojo.com/hodge-podge/" title="Just a bucket for random topics... if a topic keeps reoccuring, I will give it a category, if not, then it will go here.">Hodge Podge (48)</a> </li> <li class="widget-list-item"><a href="http://www.majordojo.com/its-funny-laugh/">It's Funny, Laugh (41)</a> </li> <li class="widget-list-item"><a href="http://www.majordojo.com/links/">Links (31)</a> </li> <li class="widget-list-item"><a href="http://www.majordojo.com/personal-projects/">Personal Projects (54)</a> </li> <li class="widget-list-item"><a href="http://www.majordojo.com/product-management/">Product Management (3)</a> </li> <li class="widget-list-item"><a href="http://www.majordojo.com/science-fiction/">Science Fiction (20)</a> </li> <li class="widget-list-item"><a href="http://www.majordojo.com/technology/">Technology (46)</a> <ul class="widget-list"> <li class="widget-list-item"><a href="http://www.majordojo.com/technology/open-source/">Open Source (55)</a> </li> <li class="widget-list-item"><a href="http://www.majordojo.com/technology/programming/">Programming (29)</a> </li> </ul> </li> <li class="widget-list-item"><a href="http://www.majordojo.com/television/">Television (23)</a> </li> <li class="widget-list-item"><a href="http://www.majordojo.com/travelogue/">Travelogue (19)</a> </li> <li class="widget-list-item"><a href="http://www.majordojo.com/vegetarian-bbq/">Vegetarian BBQ (3)</a> </li> <li class="widget-list-item"><a href="http://www.majordojo.com/web-services/">Web Services (14)</a> <ul class="widget-list"> <li class="widget-list-item"><a href="http://www.majordojo.com/web-services/atom/">Atom (12)</a> </li> <li class="widget-list-item"><a href="http://www.majordojo.com/web-services/soapmime/">SOAP-MIME (2)</a> </li> </ul> </li> </ul> </div> </div> <div class="widget-archive-monthly widget-archive widget"> <h3 class="widget-header">Monthly <a href="http://www.majordojo.com/archives.php">Archives</a></h3> <div class="widget-content"> <ul class="widget-list"> <li class="widget-list-item"><a href="http://www.majordojo.com/2010/07/">July 2010 (7)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2010/06/">June 2010 (2)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2010/05/">May 2010 (13)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2010/04/">April 2010 (9)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2010/03/">March 2010 (7)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2010/02/">February 2010 (5)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2010/01/">January 2010 (3)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2009/12/">December 2009 (3)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2009/11/">November 2009 (1)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2009/10/">October 2009 (6)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2009/09/">September 2009 (7)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2009/08/">August 2009 (2)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2009/06/">June 2009 (7)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2009/05/">May 2009 (4)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2009/04/">April 2009 (9)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2009/03/">March 2009 (3)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2009/02/">February 2009 (8)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2009/01/">January 2009 (7)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2008/12/">December 2008 (6)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2008/11/">November 2008 (9)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2008/10/">October 2008 (12)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2008/09/">September 2008 (3)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2008/08/">August 2008 (7)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2008/07/">July 2008 (2)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2008/06/">June 2008 (4)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2008/05/">May 2008 (8)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2008/04/">April 2008 (3)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2008/03/">March 2008 (8)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2008/02/">February 2008 (13)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2008/01/">January 2008 (7)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2007/12/">December 2007 (8)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2007/11/">November 2007 (29)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2007/10/">October 2007 (27)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2007/09/">September 2007 (14)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2007/08/">August 2007 (3)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2007/06/">June 2007 (1)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2007/05/">May 2007 (1)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2007/04/">April 2007 (1)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2007/03/">March 2007 (8)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2007/02/">February 2007 (14)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2007/01/">January 2007 (5)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2006/12/">December 2006 (13)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2006/11/">November 2006 (24)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2006/10/">October 2006 (4)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2006/08/">August 2006 (5)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2006/07/">July 2006 (3)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2006/06/">June 2006 (7)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2006/05/">May 2006 (7)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2006/04/">April 2006 (13)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2006/03/">March 2006 (3)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2006/02/">February 2006 (8)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2006/01/">January 2006 (13)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2005/12/">December 2005 (32)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2005/11/">November 2005 (5)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2005/10/">October 2005 (10)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2005/09/">September 2005 (6)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2005/07/">July 2005 (5)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2005/06/">June 2005 (2)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2005/05/">May 2005 (1)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2005/04/">April 2005 (4)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2005/03/">March 2005 (2)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2005/02/">February 2005 (1)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2005/01/">January 2005 (2)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2004/12/">December 2004 (7)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2004/11/">November 2004 (10)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2004/10/">October 2004 (8)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2004/09/">September 2004 (2)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2004/08/">August 2004 (6)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2004/07/">July 2004 (10)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2004/06/">June 2004 (2)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2004/05/">May 2004 (8)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2004/04/">April 2004 (5)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2004/03/">March 2004 (3)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2004/02/">February 2004 (4)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2004/01/">January 2004 (2)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2003/12/">December 2003 (5)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2003/11/">November 2003 (5)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2003/10/">October 2003 (4)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2003/09/">September 2003 (4)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2003/08/">August 2003 (10)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2003/07/">July 2003 (7)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2003/06/">June 2003 (2)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2003/05/">May 2003 (2)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2003/04/">April 2003 (4)</a></li> <li class="widget-list-item"><a href="http://www.majordojo.com/2000/01/">January 2000 (3)</a></li> </ul> </div> </div> </div><!-- end #beta-columns-left --> <div id="beta-columns-right"> <div class="widget-recent-comments widget"> <h3 class="widget-header">Recent Comments</h3> <div class="widget-content"> <ul class="recent-comments-list"> <li><p>Hi again, thank's a lot! It's working well, but I would suggest you change the download link above to the new version. ...</p><div class="comment-attribution">Hlynur Helgason<br /><a href="http://www.majordojo.com/projects/movable-type/custom-css/index.php#comment-167872">Custom CSS Plugin for Movable Type</a></div></li> <li><p>Already fixed. Please upgrade to the latest version of CustomCSS available from github. ...</p><div class="comment-attribution">Byrne<br /><a href="http://www.majordojo.com/projects/movable-type/custom-css/index.php#comment-166820">Custom CSS Plugin for Movable Type</a></div></li> <li><p>Hi, trying to install Custom CSS under 4.32 and get the following error: Our sincerest apologies. This plugin uses a Config Assistant syntax which is no longer supported. Please notify the developer of the plugin. Any c...</p><div class="comment-attribution">Hlynur Helgason<br /><a href="http://www.majordojo.com/projects/movable-type/custom-css/index.php#comment-166819">Custom CSS Plugin for Movable Type</a></div></li> <li><p>Bryne, I tried to print a copy of this post, and (ironically) the post spills off the bottom of the page. Would you kindly modify the stylesheet for this post so that it is printer-friendly? Alternatively, would y...</p><div class="comment-attribution">russ<br /><a href="http://www.majordojo.com/projects/movable-type/custom-css/index.php#comment-163083">Custom CSS Plugin for Movable Type</a></div></li> <li><p>You also need to install the Config Assistant plugin. ...</p><div class="comment-attribution">Byrne<br /><a href="http://www.majordojo.com/projects/movable-type/custom-css/index.php#comment-162807">Custom CSS Plugin for Movable Type</a></div></li> </ul> </div> </div> </div><!-- end #beta-columns-right --> </div><!-- end #beta-inner --> </div><!-- end #beta --> </div> </div> <div id="footer"> <div id="footer-inner"> <div id="footer-content"> <div class="widget-archive widget-archive-category widget"> <h3 class="widget-header">Categories</h3> <div class="widget-content"> <ul class="widget-list"> <li class="widget-list-item"><a href="http://www.majordojo.com/aint-it-cool/">Ain't it Cool (65)</a> </li> <li class="widget-list-item"><a href="http://www.majordojo.com/announcements/">Announcements (53)</a> </li> <li class="widget-list-item"><a href="http://www.majordojo.com/blogging/">Blogging (108)</a> <ul class="widget-list"> <li class="widget-list-item"><a href="http://www.majordojo.com/blogging/movable-type/">Movable Type (100)</a> </li> <li class="widget-list-item"><a href="http://www.majordojo.com/blogging/podcasting/">Podcasting (11)</a> </li> </ul> </li> <li class="widget-list-item"><a href="http://www.majordojo.com/books/">Books (7)</a> </li> <li class="widget-list-item"><a href="http://www.majordojo.com/current-events/">Current Events (64)</a> </li> <li class="widget-list-item"><a href="http://www.majordojo.com/design/">Design (40)</a> </li> <li class="widget-list-item"><a href="http://www.majordojo.com/family/">Family (29)</a> </li> <li class="widget-list-item"><a href="http://www.majordojo.com/food/">Food (1)</a> </li> <li class="widget-list-item"><a href="http://www.majordojo.com/geeky-goodness/">Geeky Goodness (33)</a> </li> <li class="widget-list-item"><a href="http://www.majordojo.com/hodge-podge/" title="Just a bucket for random topics... if a topic keeps reoccuring, I will give it a category, if not, then it will go here.">Hodge Podge (48)</a> </li> <li class="widget-list-item"><a href="http://www.majordojo.com/its-funny-laugh/">It's Funny, Laugh (41)</a> </li> <li class="widget-list-item"><a href="http://www.majordojo.com/links/">Links (31)</a> </li> <li class="widget-list-item"><a href="http://www.majordojo.com/personal-projects/">Personal Projects (54)</a> </li> <li class="widget-list-item"><a href="http://www.majordojo.com/product-management/">Product Management (3)</a> </li> <li class="widget-list-item"><a href="http://www.majordojo.com/science-fiction/">Science Fiction (20)</a> </li> <li class="widget-list-item"><a href="http://www.majordojo.com/technology/">Technology (46)</a> <ul class="widget-list"> <li class="widget-list-item"><a href="http://www.majordojo.com/technology/open-source/">Open Source (55)</a> </li> <li class="widget-list-item"><a href="http://www.majordojo.com/technology/programming/">Programming (29)</a> </li> </ul> </li> <li class="widget-list-item"><a href="http://www.majordojo.com/television/">Television (23)</a> </li> <li class="widget-list-item"><a href="http://www.majordojo.com/travelogue/">Travelogue (19)</a> </li> <li class="widget-list-item"><a href="http://www.majordojo.com/vegetarian-bbq/">Vegetarian BBQ (3)</a> </li> <li class="widget-list-item"><a href="http://www.majordojo.com/web-services/">Web Services (14)</a> <ul class="widget-list"> <li class="widget-list-item"><a href="http://www.majordojo.com/web-services/atom/">Atom (12)</a> </li> <li class="widget-list-item"><a href="http://www.majordojo.com/web-services/soapmime/">SOAP-MIME (2)</a> </li> </ul> </li> </ul> </div> </div> <div class="widget-tag-cloud widget"> <h3 class="widget-header">Tags</h3> <div class="widget-content"> <ul class="widget-list"> <li class="rank-7 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=amazon&limit=20">amazon</a> </li> <li class="rank-7 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=arin&limit=20">arin</a> </li> <li class="rank-7 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=authentication&limit=20">authentication</a> </li> <li class="rank-6 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=awesome&limit=20">awesome</a> </li> <li class="rank-7 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=barak%20obama&limit=20">barak obama</a> </li> <li class="rank-6 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=battlestar%20galactica&limit=20">battlestar galactica</a> </li> <li class="rank-7 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=blogging&limit=20">blogging</a> </li> <li class="rank-7 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=books&limit=20">books</a> </li> <li class="rank-7 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=bsg&limit=20">bsg</a> </li> <li class="rank-7 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=byrne&limit=20">byrne</a> </li> <li class="rank-7 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=community&limit=20">community</a> </li> <li class="rank-6 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=cool&limit=20">cool</a> </li> <li class="rank-3 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=design&limit=20">design</a> </li> <li class="rank-7 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=doug%20bowman&limit=20">doug bowman</a> </li> <li class="rank-7 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=election%202008&limit=20">election 2008</a> </li> <li class="rank-6 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=family&limit=20">family</a> </li> <li class="rank-4 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=funny&limit=20">funny</a> </li> <li class="rank-7 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=google&limit=20">google</a> </li> <li class="rank-7 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=hackathon&limit=20">hackathon</a> </li> <li class="rank-7 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=hacks&limit=20">hacks</a> </li> <li class="rank-6 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=harper&limit=20">harper</a> </li> <li class="rank-7 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=javascript&limit=20">javascript</a> </li> <li class="rank-7 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=jquery&limit=20">jquery</a> </li> <li class="rank-7 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=livejournal&limit=20">livejournal</a> </li> <li class="rank-7 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=media%20manager&limit=20">media manager</a> </li> <li class="rank-1 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=movable%20type&limit=20">movable type</a> </li> <li class="rank-6 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=mtos&limit=20">mtos</a> </li> <li class="rank-7 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=music&limit=20">music</a> </li> <li class="rank-5 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=obama&limit=20">obama</a> </li> <li class="rank-3 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=open%20source&limit=20">open source</a> </li> <li class="rank-6 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=openid&limit=20">openid</a> </li> <li class="rank-7 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=performance&limit=20">performance</a> </li> <li class="rank-7 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=perl&limit=20">perl</a> </li> <li class="rank-5 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=personal%20project&limit=20">personal project</a> </li> <li class="rank-6 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=photo%20gallery&limit=20">photo gallery</a> </li> <li class="rank-7 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=photography&limit=20">photography</a> </li> <li class="rank-7 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=php&limit=20">php</a> </li> <li class="rank-3 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=plugins&limit=20">plugins</a> </li> <li class="rank-6 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=podcast&limit=20">podcast</a> </li> <li class="rank-6 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=politics&limit=20">politics</a> </li> <li class="rank-7 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=programming&limit=20">programming</a> </li> <li class="rank-7 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=protocols&limit=20">protocols</a> </li> <li class="rank-6 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=six%20apart&limit=20">six apart</a> </li> <li class="rank-6 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=star%20wars&limit=20">star wars</a> </li> <li class="rank-5 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=television&limit=20">television</a> </li> <li class="rank-7 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=themes&limit=20">themes</a> </li> <li class="rank-7 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=travel&limit=20">travel</a> </li> <li class="rank-3 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=video&limit=20">video</a> </li> <li class="rank-6 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=wordpress&limit=20">wordpress</a> </li> <li class="rank-6 widget-list-item"> <a href="http://www.majordojo.com/cgi-bin/mt/mt-search.cgi?IncludeBlogs=3&tag=youtube&limit=20">youtube</a> </li> </ul> </div> </div> <div class="widget-about widget"> <h3 class="widget-header">About Me</h3> <div class="widget-content"> Welcome to majordojo, powered by Mid-Century 2.0, a theme developed exclusively for Movable Type and Melody. </div> </div> <div class="widget-pages widget-archive widget"> <div class="widget-content"> <ul class="widget-list pkg"> <li class="widget-list-item first"><a href="http://www.majordojo.com/about.php">About</a></li> <li class="widget-list-item last"><a href="http://www.majordojo.com/projects/">Projects</a></li> </ul> </div> </div> <div class="widget-powered widget"> <div class="widget-content"> Powered by <a href="http://www.movabletype.com/" rel="generator">Movable Type Pro</a> </div> </div> <div class="widget-creative-commons widget"> <div class="widget-content"> <p><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/us/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/us/88x31.png" /></a><br />This <span xmlns:dc="http://purl.org/dc/elements/1.1/" href="http://purl.org/dc/dcmitype/Text" rel="dc:type">work</span> is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/us/">Creative Commons Attribution-Noncommercial-Share Alike 3.0 United States License</a>.</p> </div> </div> </div> </div> </div> <script type="text/javascript"> var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www."); document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E")); </script> <script type="text/javascript"> var pageTracker = _gat._getTracker("UA-2619105-1"); pageTracker._initData(); pageTracker._trackPageview(<?php if ($_SERVER['SCRIPT_NAME'] == "/404.php") { echo "'/404.php?page=' + document.location.pathname+document.location.search"; }?>); </script> </div> </div> <div id="overlay"></div> <div id="dialog"><div id="dialog-inner"> <div id="dialog-content"></div> <a href="javascript:dialogClose();" id="dialog-close">Close</a> </div></div> </body> </html>