Random PHP/MySQL discovery: time differences

On August 29, 2010, in Computer Matters, by Frederick

I had been plagued by a nagging question while developing a PHP application: how do I calculate the difference between two timestamps, to check whether the timestamps are within x minutes of each other?

My initial solution wasn't at all perfect, although it was still better than developing an algorithm from scratch to decipher timestamps into hour/minute/second objects and coding math.

Solution 1: MySQL's TIMESTAMPDIFF()

My first solution was to use a function native to MySQL, TIMESTAMPDIFF(). This function takes in three parameters: the unit of time in which the return value will be, and two datetime expressions.

To query whether a given timestamp was within 15 minutes (either +/-) of the current UTC timestamp, I used this statement:

SELECT ABS(TIMESTAMPDIFF(MINUTE, *********, UTC_TIMESTAMP())) < 15

It worked, but I wasn't satisfied with having an extra query just to verify a timestamp. Besides, I was concerned about speed; that one query takes about 0.004 seconds to execute, which was too much for me.

Then I discovered the native Date/Time extension, built-in on PHP 5.2 and above.

See the better solution after the jump »
Tagged with:
 

Tracking the #thesiswp matter: Part 1

On July 15, 2010, in Computer Matters, by Frederick

Twitter erupted into argument last night in a fairly important battle for open source, the GPL, and WordPress. At the centre of the issue is a theme framework called Thesis which plugs into WordPress, sold with a restrictive license that does not permit redistribution.

Background

To provide some background, WordPress is a blogging platform licensed under the GPLv2, which specifically forces all copies of a work licensed under GPL, as well as derivative works, to be licensed under the GPL:

2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:

b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.

The Free Software Foundation explicitly addresses plugins in its FAQ, making it clear that plugins that share data structures with the main program and make function calls to each other are derivative works to which the GPL also applies.

Themes were an uncertain matter prior to last year’s legal opinion from the Software Freedom Law Center, because these works from third parties certainly build on top of the WordPress platform, but often extend it with original artwork and programming. The analysis states clearly that:

… it is our opinion that the themes … contain elements that are derivative works of the WordPress software as well as elements that are potentially separate works. Specifically, the CSS files and material contained in the images directory of the “default” theme are works separate from the WordPress code. On the other hand, the PHP and HTML code that is intermingled with and operated on by PHP the code derives from the WordPress code.

Though almost all of the other theme foundries have adopted the GPL license for their PHP code, Chris Pearson stands nearly alone in asserting the GPL’s viral clause is inapplicable to him.

Initial controversy

On a live webcast with both Chris Pearson, the developer of Thesis, and Matt Mullenweg, the founder of Automattic and the WordPress project, Chris expressed his personal belief that the viral nature of the GPL goes against his personal freedoms and rights as a developer:

Chris: One, it would require me to make a concession about something that I don’t think that I need to concede to. Why should I change? I’m protected right now. My work is protected, which it should naturally be. I want to retain that right. If I go GPL then I am ceding that right. The number one issue for me is the personal concession that I would be making. Not of any real impact to my business. I don’t want to make that personal concession, because I don’t have to. Okay?

Note: it is possible, in terms of the GPL’s legality, that Chris never had the right to prevent users from redistributing his code; if the GPL applies, a developer cannot restrict redistribution.

Matt, on the other hand, debates to defend the applicability of the GPL to themes and plugins:

Matt: … If you build a module for Drupal or a module for WordPress or a theme for WordPress or anything like that, the license says that you do have to follow the GPL. I think that it’s just a matter of choosing the platform. If you disagree with the GPL, just use a platform that doesn’t have the GPL.

I listened to all of the long back-and-forth encounter, which was interesting until Chris began to assert his importance in the community:

Chris: I’ve done great things with WordPress since 2006. I have been arguably one of the top three most important figures in the history of WordPress. You, Mark Jaquith, and myself, are the three people that I am talking about.

Wait, what? A developer whose theme accounts for such a small fraction of WordPress’s usage puts himself in the top three figures in WordPress history? Jane Wells had a similar encounter with his ego.

» See the top 10 figures in WordPress history.

Analysis of this part of the controversy

The crux of the controversy is summarized by Chris’s sentences here:

Chris: I think the license, the GPL, is at odds with how I want to distribute my software and what I want it to be. I don’t think that it necessarily should inherit WordPress’ license when over 99% of the code within Thesis is Thesis code based on the actual process of building a website.

As someone who also contributes to open source software, I can certainly understand his sentiments on the ‘infectious’ nature of the GPL, which forces derivatives to inherit the GPL. It’s pretty hard to release projects under even more permissive licenses (for example, the Apache License), or in Chris’s case, extremely restrictive proprietary licenses, when so many open source projects enforce the GPL.

That really is, though, the purpose of the GPL: to keep open source open by prohibiting its inclusion in fully closed-source or proprietary (and restrictively-distributed) projects.

Are themes derivative works?

A lot of the open source advocates and lawyers seem to think so. After all, themes do things like:

<?php if ( get_comment_pages_count() > 1 && get_option( ‘page_comments’ ) ) : // Are there comments to navigate through? ?>

and

<?php if ( $wp_query->max_num_pages > 1 ) : ?>

which show clear integration with WordPress core functionality, much like a program in C would use the MySQL library with

mysql_real_connect()

Granted, the MySQL developers explicitly allow derivatives to use non-GPL licenses even though MySQL is GPL, through an additional license exception. The reason such an exception is necessary is that they understood that works which link to library code are derivatives.

The biggest problem is that the GPL was written with compiled code in mind, where derivatives would have to bundle the libraries (e.g. DLLs or SOs) in their releases. It’s sort of unclear for interpreted languages like PHP; is it an indication of derivation if one piece of code makes a function call to another?

It’s a bit unfortunate WordPress wasn’t licensed under GPLv3, because version 3 is much clearer about what it means to make a “modified version” or a work “based on” another work. It would also make for a better court case.

Caleb Jenkins (@CalebJenkins) iterates an interesting point: dependent != derivative. While I can see this being an interesting legal argument, it would have a lot of implications for open source in general, completely contrary to the way things have been operating.

If using a dependency is not being a derivative of that work, then it is conceivable that one can produce a C application which links to a GPL library (for example, the FOSS-licensed version of the MySQL client library) without bundling it and is released commercially under a closed-source, restrictive license. It is conceivable that a PHP program might require() WordPress to use its functionality, but simply not bundle WordPress, and would then avoid classification as a derivative.

I’m afraid I can’t entirely lend my support to that argument.

People have argued that making function calls to WordPress is akin to making system calls to the underlying operating system. Unfortunately, only GPLv3 is clear about distinguishing the system and compiler libraries from other general code; of course it doesn’t make sense that every application on the GPL Linux kernel must be open source. It’s a valid argument.

However, I agree more completely with Matt’s contention that a dependency = derivation when it gets to the point that a WordPress theme without WordPress will not work (just try loading any theme’s index.php in a browser) while WordPress without any themes will still function — it won’t show anything, but its backend is still fully functional.

Chris Pearson is wrong when he says “I think that what I’ve done stands alone outside of WordPress completely.” Interestingly, read the context of this quote:

Chris: How is that? I think that what I’ve done stands alone outside of WordPress completely. Why should I respect that? It’s not that I don’t respect WordPress. I do. I only build on WordPress and push people in its direction…

» Now here: Part 2 of Tracking the #thesiswp matter.

» Also read: Why WordPress Themes are Derivative of WordPress by Mark Jaquith (@markjaquith), a lead developer.

Tagged with:
 

Happy New Year!

On December 30, 2009, in Computer Matters, by Frederick

It’s the end of another year and the end of a ground-breaking decade. Let’s look back at what’s been accomplished in the years of 2000–2009, focusing on technology.

Technology

Windows has entered a new era

The decade—indeed, the century—began with Windows 2000, which I consider the first great version of the operating system. XP was the version that brought widespread success, and people just seem to refuse to upgrade; even today, almost three quarters of the computers on the net are on XP.

Despite the dismal failure of Windows Vista, it too brought change, which was followed by the enhancements of Windows 7. Compare my desktop today to the ugly screens of a decade ago:


Microsoft Store
Windows 98 desktop screenshot

Apple deserves an honourable mention for the ground-breaking work they’ve done on the Mac, elevating it to a newly trendy status.

Portable media players have completely changed

A decade ago, CD players and tape-based Walkmans were still the norm for ‘portable’ audio players. The iPod, launched in 2001, entirely changed the game. (I suppose this and the iPhone were the “comeback of the decade”.) It was no longer a device that played removable media. That was followed by thousands of other portable media players, to which the public generally refers inaccurately as “MP3 players”, reflecting the popularity of the 15-year-old MP3 format that has also been notorious for illegal file sharing (see below).

Cell phones and mobile devices have become ubiquitous

These devices used to be ugly, huge and heavy objects. As we move into 2010, cell phones have become more compact (usually this means thinner and lighter) and more powerful.

In China, about 739 million people have cell phones; that’s more than there are Internet users in China (which is about 360 million).

Mobile devices have become truly powerful. The iPhone, purportedly the most popular cell phone of 2009, is one of the biggest platforms for software development. And it has a touch screen. RIM’s BlackBerry, initially launched in 1999, is the most popular smartphone among business users.

Ordinary people begin to embrace ultra-portable netbooks for lightweight computing. The move to mobile is probably the most noticeable trend in end-user gadgetry in this decade.

Continue reading »

Tagged with:
 

A sad week for web hosts

On December 1, 2009, in Web Matters, by Frederick

Plugs and cables at computer ServerIt’s a sad week (well, two weeks) for web hosts. First, the company with which I have been a customer for over 2 years encountered issues after migrating to a new datacenter; these problems broke a number of my sites and caused me unending headaches. Then DreamHost, which hosts this blog and a number of other sites, had to perform network hardware maintenance, which was followed by sporadic periods of network failures. Finally, today I received an e-mail saying that the first company was shutting down in January and that I’d need to find a new place to host those sites.

What happened? Why do I feel like the Internet is collapsing? Aiya!

I’m really disappointed.

Continue reading »

Tagged with:
 

4 online document hosting services

On November 9, 2009, in Web Matters, by Frederick

Over a year ago, I compared two online services designed specifically for PowerPoint slideshows. Today, I want to review 4 free online document hosting services that take your document files and convert them to a format that can be embedded and shared on the Internet.

I’ll be giving scores based on these factors:

  • Web site design / usability
  • Compatibility
  • Converted appearance
  • Embeds

In case you’re wondering, these 4 document publishing services are Docstoc, edocr, Issuu and Scribd. Of these, Scribd and Docstoc are likely the best known and the best established.

I should give a warning for those on low bandwidth connections: this is a screenshot/media-heavy post.

Continue reading »

Tagged with:
 

Introducing Dropbox

On October 3, 2009, in Computer Matters, by Frederick

Syncing files across computer has never been easier. Dropbox is one of the leading services in this field, with 2 million users and growing.

Free 2GB cloud storage

As a free user, you get 2 GB of space to start, and files in those 2 GB will be synced not only to your other computers, but also to the cloud. You can access those files anywhere you can open up a browser to the Dropbox Web site, and you can even share links to files in your Public folder to help collaboration with others.

PCs, Macs, Linux and the iPhone

The desktop software works on PCs, Macs and Linux machines; updates with great improvements come out often. For example, some of the recent versions of the software added LAN syncing, which speeds up the sharing of files between computers on the same network by connecting directly to one another instead of uploading and downloading from their servers in the cloud. Moreover, there’s now a Dropbox app for the iPhone that syncs your files on the go.

Free extra 250 MB

Try it out for free; there’s no cost to getting started. You can get a free account (2 GB) with 250 MB as a gift from me for signing up. Reliable sync and backup has never been easier.

Tagged with: