Categories
Weblogging

There are no poor social software scientists

Recovered from the Wayback Machine.

Last week Liz Lawley wrote what I thought was a very thoughtful piece, both at her weblog and at Many-to-Many. She wrote:

I think we’re watching a significant moment in weblog history. Justified or not, the anger among MovableType’s users will push many of them to new tools, and has permanently changed the perception of SixApart by its customers. The users have spoken, and the landscape has shifted.

I agree with her completely. More than that, I think that this experience ultimately will prove healthy for all parties involved.

Years ago when I worked at Boeing, I worked very closely with the Oracle folks in the area because we were one of Oracle’s biggest customers. About that time Oracle released a new version of their flagship database product: Oracle 6.0. It generated a considerable amount of discussion on our floor, not to mention a lot of sleepless nights because unlike previous versions, 6.0 was a change in the architecture of the product, not a feature release. And boy was it a change, going from an old partition system to the new tablespaces, and providing a new fangled thing called row level locking..

Later on I was chatting with one of my friends at Oracle about the product, after the dust had settled and we were finally past the move. I remember saying something about how it takes guts to pull the rug out from under your customer’s feet with a new architecture. He just shook his head and said I didn’t even know the full truth of how much of an impact this move had on the company. He said the customer reaction was so severe that Oracle came within a half a step of having to declare bankruptcy, and going out of business.

It was a bite the bullet moment for Oracle.

I was reminded of this story while reading the criticism directed at Six Apart, and realize that this was Six Apart’s bite the bullet moment. All software products have to, at some or another, go through a bite the bullet release. Microsoft did so with .NET. IBM did so with DB2 (and Linux). Oracle, Sun, every company that has a maturing software product will at some time or another, have to re-think it’s architecture or strategy or consumer base and possibly issue a bite the bullet release.

If the company survives, they’ll look back on the moment, realize what they did right and wrong and hopefully be a better, stronger company as a result. If the company doesn’t survive, well, this too is a growth experience.

Just as Oracle’s customers did long ago, Six Apart’s customers are also having to bite the bullet with this release, jarred out of their complacent dependence on regular, no or low cost staircase upgrades, and forced into reviewing what they do, and don’t want from their environments. If the Six Apart crew has learned, hopefully, the value of good communication, we’ve learned that we can separate the technology from the people and make decisions about what’s best for us, overall, without having to be worry about the personal consequences–after all, the technology we use is a tool, not membership in a clan.

When the dust is settled, we’re all going to be a bit more mature, and our environments are going to be a bit richer; but we’re not going to be moving in the same direction. Some will stay with Movable Type, others move back to Blogger, or on to new environments like ExpressionEngine or WordPress or Textpattern or any of the other wonderful tools that exist – too many to list.

As Liz said, the landscape has shifted, and I think this is good; we’ve all been moving in lockstep too long. We need diversity, and not just in our technology.

Perhaps I should have stopped reading Many-to-Many at this point, otherwise I wouldn’t have read Clay Shirky’s amazingly condescending writing today. Rather than focus on the gentle, even slightly melancholic reflections of Liz’s post, or focus on the fact that Six Apart’s recent experience is a wonderful demonstration of how not to communicate with customers, he responds with the following:

First, most of the analyses have focussed on the users, as if MT were a word processor whose main value was to individuals. Seen in this light, the users complaining about the changes are behaving childishly.

However, that’s what users always do in this situation — the reaction is baked in. The problem is not with these particular users, it would be with any group of users in a similar situation. Weblogging tools are community enablers, and when you create community, you engage people’s emotions. Period. Community membership precedes rationality, both historically (all higher primates are social) and literally (children attach to their families before they can talk.)

The dilemma for people who build communal tools is this: if you want something that hooks people emotionally, you cannot have rational users, and vice-versa. And when you build a tool that helps create a social fabric, changes to the tool trigger social anxieties. Always.

This is not to say that MT shouldn’t charge for their product — we use it here, and I’m assuming we’ll upgrade when the time comes. It is to say, though, that because MT has succeeded in creating social value, you cannot expect users to act rationally to change. If you want users to really care about a piece of social software, they will invest in it emotionally. If you change the bargain they think they are operating under, even if that bargain is merely implicit and obviously unsupportable and even if you have the absolute and unilateral right to change it, they will freak out.

According to Clay, this really isn’t about money. It’s about the fact that we users are regressed infants, crying out when the bottle is taken away. Or is that chimps losing a banana?

It is impossible for me to understand how Clay can disregard what many of us have been saying so completely as to not only miss the mark, but to do so in about the most offensive way possible. But then I had to look at who he socializes with in the social software arena, to better understand where Clay is coming from: he’s used to interacting with people who are comfortably situated, and therefore has no idea–none– about how the difference between $70.00 and $150.00 (or $700.00!) can generate such a reaction.

After all, have we not spent the last year listening to the social software people as they talk about this trip to London and that trip to Zurich? How many conference reports have we had to sit through, or photos of dinners where all the faces looking amazingly alike from event to event? How many posts focused on this new iPod, or that new cellphone?

Didn’t Dave Winer demonstrate this so aptly? Calling us ‘childish’ because we reacted in shock to the license prices, while saying that after all a dinner costs $100.00, a hotel $150.00 –why are we bitching about software that costs $70.00?

These people, they don’t have a clue about how the rest of us live. They don’t know that for most of us, the difference between $70.00 and $150.00 is the difference between making a car payment or not; paying for tuition or your kid’s dentist bill; or paying one’s health insurance premium; or even making the rent or buying food.

Dinner cost $150.00? My big treat is to take my roommate and myself out for a concrete at the frozen custard place, and I can tell you, we drive ourselves, do not take a cab, and it costs less than $10.00. It also doesn’t come around that often, either.

Liz gave us the benefit of the doubt, that we were complaining about the cost because many of us could no longer afford to use the product, and we were given no warnings that such price increases were just around the corner. And she did so gracefully, in such a way that there is no loss of dignity–that we’re all shocked about the costs, we’re all in this together.

What Clay has done, is rubbed our noses in the fact that there are those that have, and those have not; and then made an assumption that everyone is a ‘have’ and therefore the complaints were about emotional investment not the cost.

Next time Clay, leave your assumptions at home with your Gucci case, next to your new iPod and the tickets from your last trip. You’ll excuse me as I go back to the free software us poor folk use.

Categories
Technology Weblogging

Survival guide to LAMP: PHP is not always open

P is for PHP

Right about now I imagine all those folks who downloaded the promotional free versions of ExpressionEngine given out over the weekend are finding something out: not all PHP is ‘open’. PHP source code can be encrypted so that the source code cannot be viewed, much less edited or copied. From the bit of open code within the EE files, it would seem that pMachine, Inc. (parent company for EE) is using Source Guardian’s encryption technology to protect their code. Encryption adds an extra step of security, but more than that, protects a company’s proprietary technology.

UpdateThanks to a tip in comments, I checked with pMachine, Inc. and found out that no, the purchased copy of ExpressionEngine is wide open, and as the owner states, “…beautifully commented”. Another aspect of encryption software such as Source Guardian’s is that the encryption can be set to terminate at a specific time, making it ideal for trial periods.

Which *blushes, kicks dirt, looks sheepish* I should have remembered before making the statement about EE.

My apologies for being wrong about ExpressionEngine’s use of encryption. Now, who has a copy that they’ll allow me access to so I can peek at the code? I am intrigued by the module architecture associated with the tool.

These source code protection systems are rather ingenious. How they work is that they provide client side applications that encrypt the PHP files and generate matched decoder files that are then included as part of the install of the source code. The call to load these decryptor files is in ‘plain view’ so that the PHP installation can run this part of the code without any additional software. Once the encryption functionality been loaded, it acts as a filter, providing the processing necessary to decrypt the code and allow it be to processed. You can see these files in a subdirectory included with ExpressionEngine labeled ‘ixed’.

Of course, for this type of system to be successful for webloggers, it must run in most environments without having to make any administrative changes on the server, and this depends on how secure the PHP installation is. For instance, if the server is running PHP in what is known as PHP safe mode, and has disabled dynamic module loading (the ability to load new PHP modules in at run time, which is what Source Guardian needs), then the application will fail and the only way for it to run would be for the system administrator’s to either disable that aspect of PHP safe mode or, what is more likely, to add an entry to the PHP configuration to allow this application to run.

(Note for Hosting Matters users: Hosting Matters servers are not running safe mode. Why? Safe mode is a pain in the butt, and breaks most of the really great open source PHP applications. As the PHP developers themselves have said, security should reside in the server management and operating system, not in the language tools. )

I think the fact that PHP can be encrypted is a surprise for some people because it’s such a major component of the whole open source movement. Myths aside, yes, you can use LAMP technologies, including PHP, to create closed source, proprietary, protected, copyrighted, encrypted applications. Contrary to any expectations you might have because of my strong, verbal support for open source technologies, I don’t believe there’s anything wrong with proprietary software–not as long as good faith is maintained between the company publishing the software and the customers using it.

Is there a risk that if the company folds, the customer is stuck with something that is no longer supported? Sure, but the same can be said of open source projects that never inspire any new community effort; Source Forge is littered with these.

I prefer using open source products as much as possible for my own site and home use because as I’ve said before, I’m a tweaker. I like to tweak the code, and I like to make the tweaks available for others to use. But I see nothing wrong with people using closed source applications. If I felt that all closed source applications were wrong, I’d have to give up my beloved Adobe Photoshop. I’ll sacrifice my two laptops out the window before I let you take Photoshop from either one of them.

(Fly, TiBook! Fly!)

And you couldn’t hold a gun to my head to get me to have anything to do with C code, again, open source or not. No, I take it back. You couldn’t hold a gun to my cat’s head, and get to me to work with C code, again.

This isn’t to say you can’t tweak in ExpressionEngine. It provides a ‘plugin’ environment, just as Movable TypeWordPress, and Textpattern do. The only difference with these applications is you can’t hack the internal code in ExpressionEngine even if you wanted to; you can with Movable Type but you shouldn’t because of license and future compatibility; and you’re welcome to with Textpattern and WordPress, and can distribute the hacks legally–as long as you and the other users of your hacks are aware that your code may be overwritten in future versions of these products, so you’re better off trying to work within the plugin environment as much as possible.

Speaking of WordPress, hacking, and plugins, back to work…

Categories
Technology Weblogging

I never promised you a rose garden

I’ve become so caught up in the comradery of the WordPress effort, that someone only need mention something and I’m off coding it. However, I can’t put all my time into ‘tweaking’–much as I’d like to. I have other things demanding immediate attention, and the rest of the LAMP essays and code tweaks will have to wait a few days.

I do this reluctantly, afraid someone else will ‘do the code’ first for the modifications and add-ons I want to build. However, I forget that in a community driven project such as WordPress, someone else may ‘do the code’ first, but this doesn’t mean I can’t also ‘do the code’, or that there aren’t other things to do, and other code to write. So, the rule is have fun, and no need to rush. Besides I don’t want to hurry the LAMP essays and do a poor job in the writing.

Speaking of the LAMP essays, O’Reilly was kind enough to point out the series in their subscriber email list, and I appreciate both the kind words and attention. Of course, I realized in one of the essays that I made a statement about existing books on MySQL and PHP and how they aren’t focusing on the ‘teach by tweak’ approach; I then go on to mention how ‘teach by tweak’ is the better approach in my opinion. My, my – as someone who was once a dear friend said to me, why do I do this? All I can say is, I guess that’s just the way I am, and this is part of the total package that is me. Love me, love the package.

However, ‘learn by tweak’ isn’t for everyone, and for others the excellent books on MySQL and PHP that may or may not fully incorporate this concept put out by O’Reilly are the better options. And did I happen to mention how extremely attractive and intelligent O’Reilly people are?

Anyway, back to WordPress 1.2. The modifications I plan on making, or have already made, to my version of WordPress 1.2 are:

  • Multiple weblog support: By this I mean written procedures for installing multiple weblogs, with scripts to help in the process, in addition to my multi-weblog emulation to the WordPress interface that allows a person to switch around among the weblogs.
  • Static rendering of pages: This includes a WordPress plugin that can be activated and will render static pages of the syndication feeds and the main weblog page when a new post is created. In addition, an ‘on-demand’ static rendering item can be added to the existing WordPress menu that allows for on-demand rendering of any given page. I may also add this as a checkbox in the Edit page.
  • Postmeta wrapper functions: WordPress 1.2 allows you to specify name-value pairs for a specific post. This means that you can attach information about the post, such as PHOTOGRAPH-FLOWER or STORY-CAT. You can see some key-value pairs I’ve added to recent posts in the test site; in the first couple of posts, at the bottom of each. At this time, there are functions to get this data, but not present it as one would like, and one of the wrapper functions I’m writing will allow you to ‘wrap’ the returned value in XHTML tags. Other functions will hopefully allow you to build lists of posts based on their key values.
  • Full page preview: WordPress 1.2 has preview at the bottom of the page for the edit page. However, I like my full page preview hacked for the 1.02 version and will port this over to 1.2.
  • Full comment preview: this is an iffy one. There is a inline comment preview workaround already implemented in WordPress that I can just include in my posts. I was going to do a full page preview, just as Movable Type implements for WordPress, but I’m not sure it’s a good use of my time. I think what I’ll do is implement the inline preview for now, and lower the priority for the full page preview. However, I will add my throttle code to that built into WP to ensure my comments don’t get crapflooded.
  • Adjust the interface to allow on demand moderation: I edited WordPress 1.02 to allow me to turn moderation on, post by post. This has made an enormous difference in the handling of comment spam on older posts. Because of this, I was able to open the older posts for comments, and have received some lovely ones, while still keeping out the garbage. I am porting my code changes for on-demand moderation over to WordPress 1.2. In addition, I’m incorporating an existing modification that turns moderation on for all posts over thirty days, automatically.
  • Bulk management of comments: WordPress 1.2 has the loveliest bulk comment management of any weblogging tool I’ve seen. I’ve been asking for this for over a year, and WordPress gave it to me. However, I am making one small change. In addition to the ability to search for comments by name, URI, email, text, and IP address, I’m also going to add the ability to pull in all comments for a particular time range. Once I have this, bulk deletion of comment spam will be trivial.

If you have other modifications you’d like to see, you can always add them to the comments. I may not be able to get to them, but I bet someone else will. Other than these items, though, I don’t have any other modifications I want to make. WordPress 1.2 really is a very good, straight from the box product. All I’m doing is ‘tweaking’ a bit to fit my needs, and possibly the needs of others (all of this code will be packaged and documented).

My plan is to go ahead and do the code and LAMP essays, but to ‘release’ the final version of the code only after WordPress 1.2 is released. This way those who want to play now, can now; but those who want stable can wait.

Once finished with the modifications, I have one more thing I’m going to do: I’m going to create a specialized version of WordPress to be the core element of the RDF Poetry Finder.

I’ve never forgotten the RDF Poetry Finder, nor the concept of building intelligence into metadata in order to not depend on fancy algorithms and luck to find complex semantic objects such as a poem. However, I’m a tweaker not necessarily a build from scratch person. If I was happy creating the Poetry Finder RDF/OWL vocabulary, and the processes to work with this data, I wasn’t happy about building the rather involved infrastructure that allows people to write about poetry, annotate it with their impressions, and then generate the RDF/XML searchable by external agents.

It was someone asking about WordPress’s postmeta data ability today that made me realize that for all intents and purposes, WordPress can form the core infrastructure of the RDF Poetry Finder. And since WordPress is GPL, I can make the modifications necessary to support the Finder functionality in the code, and then package it for others to use, as is, out of the box. After all, the more people using this application, the more data available; the more data available, the faster the spread of the data and the functionality; the faster the spread, the more people using this app….well, you see the cycle. Semantic web software doesn’t get distributed; it spreads, like a friendly fungus. Kind of like a mushroom you can eat and it won’t kill you.

So that’s one last thing on my to-do list, this long promised but never delivered functionality. It will be a relief to finish it.

Categories
Technology Weblogging

Additional links for moving from MT to WordPress

Carthik.net has a good summary on must reads for moving from Movable Type to WordPress.

LibraryPlanet just wrote up a migration strategy (and provided code) that encompasses how to use WordPress 1.2 new slug feature to support the MT keyword-based shorter file names.

If anyone else has any links related specifically to exporting out of MT and importing into MT, please let me know. Especially if you’ve run into problems and have work arounds.

PapaScott has some MT Export Gotchas to watch our for.

Categories
Technology Weblogging

Survival guide to LAMP: who says you gotta be dynamic?

This is just a quick tease not a full essay.

Want to see a static HTML page from WordPress? Take a peek. (You can see static rendering of the Atom syndication feed here. Burningbird hereProgram modified to grab all content in page and reproduce.)

I logged into the #wordpress IRC today, and the issue of static rendering of pages came up. A valid concern about dynamic systems such as WordPress, which use PHP and a database to generate content, is that sometimes this can be a burden on the system–not to mention the pages not displaying if something happens to the database.

For the most part, PHP/MySQL applications run without any problems, even with large numbers of people accessing the site. Currently the WordPress site is under load with all the sudden, new interest in this weblogging tool, not to mention being slashdotted, and it’s holding up just fine. However, if you have a page that is relatively stable and unchanging, such as a syndication feed, you might want to generate a static page just for the sake of added efficiency. In addition, things happen, and even a stable MySQL database can fail at times.

So, I played around with PHP source I found online and came up with a rendering routine that hopefully will render my main page and feeds each time I publish. Then with a little tweak or two in the .htaccess file, if something happens to my main feed or page, you’ll see the static pages instead. Or for feeds, you can have people link directly to the static feed to prevent extra burden on the system if you have a lot of subscribers.

Still playing with the code, and file permissions and PHP are an issue that deserves some in-depth writing –but I wanted to quickly point the result out, as another tease for LAMP essays for this week (writing the code is easy; writing the how-tos and documentation and creating procedure for non-techs, now that’s hard). I also wanted to mention how fun this is.

I Can’t remember the last time I had this much fun working with technology. I feel like a young, eager programmer again, ready to swig my Dew (or double strong caramel macchiatos), as I work into the wee hours of the morning, hacking line after line of code. Gone is the tired old woman who has written one too many semi-colons; burned out on bugs, tired of the latest new tech buzz, not to mention program managers who should have been drowned at birth. I have caught my second wind, if one can catch a second wind when it comes to software development.

Playing around with WordPress and the LAMP series has become a face lift for my soul. Now, if it only did breasts….