The Good King Lisp
From HN:
The Good King Lisp raised his glass and toasted with the Knights of Lambda, “To much recursion!”
Twenty Four
What’s twenty-four?
- Six by four
- Eight by three
- Twelve by two
- Six past legal
- Three past drinking
- One before cheap insurance
- Space Shuttle Discovery
- SLR cameras
Nifty.
MantisBT Source Integration - BarCamp Presentation Slides
Since I’m about to present the topic, I’m making the presentation slides available for all. There will indeed be video of the talk, which I will post as soon I can afterwards.
The slides are hosted directly on Google Docs: http://docs.google.com/Presentation?id=dffhxmhs_1273ct3kc8
BarCamp Rochester
Context: BarCamp Rochester — Anyone and everyone is invited to attend, and everyone is highly encouraged to present something of their own, no matter what it is. It’s happening this weekend at RIT, where I’m studying (and graduating in about a month!) for Software Engineering.
I’ll be attending it to give a presentation on MantisBT and the Source Integration framework. Specifically, I’ll be covering the myriad of new features that have made it into the project over the past week and a half. I plan to walk through setting up a project in Mantis, creating a new repository on GitHub, linking the Source Integration framework to that, and showing how the branch mapping and auto-resolving features work. Should be interesting.
After the presentation, I plan to post the slides, along with my presentation notes, up here. If anyone decides to video the talk, I’ll also make sure I can get a copy of that as well, but no promises.
Cheers!
Integrating Source Control Tools with Mantis Bug Tracker
Update: The information in this post is unfortunately out of date. While much of the code samples are similar, the new method of creating new plugins has changed in subtle, but very significant ways. Until a new guide can be written, please refer to the existing plugins for code examples.
Considering that my last post on Integrating Git and SVN has garnered a fair amount of attention, I thought that it would be useful to discuss my Source Integration framework in more detail. Specifically, I’ll be covering topics such as the design and implementation of the framework and, more importantly, how developers can go about implementing support for other version control tools.
The point of this is to show that it’s quite possible to integrate just about any type of version control tool with the Source Integration system; indeed I planned from the beginning to create a generalized framework that would support many different types and paradigms for version control. This should at least be evident in that I have already created extension plugins for Git and Subversion - it should be quite possible to extend the concepts further to Mercurial, Bazaar, CVS, or any other tool.
For the point of brevity, I’ll make the assumption that the developer at least has a fair understanding of PHP, their version control tool, and how events and plugins work in MantisBT. If you are not yet familiar with the plugin system, there is currently a basic introduction in the MantisBT Developer’s Guide, which I’ll hopefully be adding more information to in the near future.
Integrating Git and SVN with the Mantis Bug Tracker
With the ongoing work towards a 1.2 release, the Mantis Bug Tracker features a brand new plugin and event system, which will allow users to implement entirely new features for MantisBT without ever needing to touch any of the core codebase. It’s a very extensible system, and allows plugin authors to implement only what they need, while still allowing advanced plugins as much flexibility as possible. Plugins can be as small as a single file with 20 lines of code, or as large as entire hierarchies of files, pages, with their own API’s.
As the core developer of the new plugin system, I have been working on a variety of plugins. In particular, I have created a vastly improved method of integrating source control repositories within MantisBT. The plugin package is named, aptly enough, Source Integration, and implements a generic framework that will allow integration with multiple repositories, each potentially using any source control systems available, simply by creating an extension plugin for each new tool. Currently, I have implemented integration packages for both Git and Subversion, my two source control tools of choice.
The Source Integration package tracks repository information based on a series of changesets, each of which may have a list of affected files. The data representation is generic enough to cover version control concepts used by all types of tools, from the ubiquitous CVS and Subversion, to modern distributed tools like Git and Hg. However, the system takes the stance of implementing as few details as possible, so it relies on existing repository-viewing tools for tasks such as viewing commit diffs, file contents, tree browsing, etc. Extension plugins handle translating tool-specific information, like history logs or checkin data, into the generalized data objects used by the framework. Extensions also generate URL’s for viewing files and diffs, but everything else is handled automatically by the core framework.
The true benefit of the Source Integration package lies in the amount of repository integration that it implements within MantisBT. When importing changesets from your repository, Source looks at the commit message of each changeset for references to bug numbers in your tracker, and sets up links in the database for any bugs mentioned. When viewing bugs mentioned in commit messages, a new section is displayed after the bugnotes called “Related Changesets”, giving a list of linked changes, including information about the changeset, such as the branch, author, timestamp, and a list of changed files.
On the Inelegance of PHP
As a well-seasoned PHP developer for MantisBT and other projects, but at the same time a seasoned developer in Python, C++, Lua, etc, I found this interesting article on Hacker News, Yet, a short piece on the “history” and development of PHP as a language.
A few choice quotes that I most enjoyed:
I don’t know anyone who programs in PHP and hasn’t … become much more acquainted with the concept of “haystack” and “needle” than any one person should have to in a lifetime.
With time, an experienced developer learns that the only reason why any particular functionality is not in PHP is that it’s not there — yet.
Invariably, PHP developers who try to settle into a framework have the (often irresistible) urge to simply drop it and write their own, because, you see, there is no framework that does things the way he or she wants — yet.
I really like working on the PHP projects that I’m a part of, but every time I write a Python script to do something, it just reminds me of how unsophisticated PHP really is as a language. Perhaps that’s OK; it certainly hasn’t stopped me… yet.
When Apple Stifles Innovation
John Gruber recently talked about how he deals with email on the iPhone, where Apple’s Mail tool lacks the ability to do something even as simple as flag a message in the inbox. He has go through a convoluted process of moving email to a specially-named folder, and then running a bit of AppleScript on his desktop that will take all the mail from the special folder, flag them, and move them back to the desktop. Good grief.
Why again does John need to go through this long, redirection process? Why not just use a different email client on the iPhone? Because Apple is anti-competitive, and third party apps can’t run in the background, straight from John Gruber himself.
Isn’t this a bit absurd? Why do people let Apple stifle competition like this? Am I the only one that thinks this situation is far worse than anything presented in the huge anti-trust cases against Microsoft in the past decade? Apple is specifically denying competition on the iPhone, and all the groupies think that it’s perfectly acceptable, even good for the consumer! But shame on Microsoft for bundling Internet Exploder and a Media Player; how dare they allow anyone to choose a different browser even!
People ask me why I purchased my Neo Freerunner instead of an iPhone. Even disregarding that I’d lose my choice of carrier, I don’t see why people are rushing to a company that depends on anti-competitive practices to maintain the ‘best’ apps on the phone. If Apple’s browser, mail reader, etc, don’t suit the customers’ needs (as is apparent from Gruber’s post), why are they trying to stop them choosing a better option? It’s not like Apple’s revenues depend on users choosing Safari or Mail.app; hell, wouldn’t they get even more revenues from the App Store if people could buy a superior browser for even $1 a pop?
Sounds to me like Apple cares more about maintaining control than providing their users with the best experience….
Break Sites Now to Make Sites Later
How about rather than asking web designers, server owners and IT staff everywhere to add some hack tag to their code, you force IE8 into compatibility mode unless a designer specifically enables IE8 rendering on their page by adding said tag? That mediates the issue pretty easily.
They [Microsoft] were originally planning to require a special tag to enable standards compliance in IE8, but there was a gigantic backlash from the web development and standards community.
Why? Because then we get nowhere; all the clueless web designers never find out about the special tag to make IE8 comply with internet standards, and continue making web pages for the broken IE rendering model for the next 10 years.
We need to make all those old websites break, because otherwise they’ll never comply with modern standards. We need to have standards based rendering be the default because then the designers that test against IE8 will be making sites that work better with other browsers.
By forcing developers to realize that their websites are non-compliant (either from angry users or specifically forcing quirks mode) and by defaulting to standards-based rendering, we make the web design future a much nicer place to be.
You Can't Judge Your Own Project
On the launch of the excellent Ticketstumbler site:
I don’t think the creator of an interface can ever objectively measure the usability of the interface, no matter how much they use it; they don’t ever have to learn it, because they created it in the first place.
…
I’m not saying usability is not the core. I’m saying that the creator of the interface is in no position to objective judge the usability because they have an innate knowledge of the system because they designed it and they know exactly how it functions and how it’s supposed to be used. If you want a real measure of usability, you have to get someone who understands the problem domain, but has never before seen your interface, and then objectively determine how easily they can figure out how to perform tasks and get things done. The fact that you, as the designer, already know exactly how the interface is built and operates precludes you from having an objective opinion of how easy the interface is to understand.
Similarly, a painting’s artist cannot objectively determine how beautiful/emotional/successful the work of art is, because he has an innate sense of what it is trying to convey to the viewers. Just because the artist sees the subtle details, nuances, allusions, etc, does not mean that other viewers will be able to glean the same information.
And to drive the nail home a third time, an engineer could not possibly be an objective judge of how easy a car is to operate (usability), because they already know where everything is and how it works. They need to have someone, without previous experience, sit in the seat to realize that putting the cigarette lighter and cup holders inside the center console is a bad idea and not at all intuitive…
Why Do We Like Indirect Governance?
On local government corruption in New York:
Where there is money and people with power corruption is very likely. What fascinates me, about America specifically, is how ingrained the representative democracy concept is. Direct democracy is this wild and crazy thing that absolutely and directly = Hitler. There could be an interesting argument why Swiss style direct democracy would not work for a huge country like the US. But what about local government? What about little towns? It’s fascinating that Americans from a very young age learn that the head of local government is the mayor. What would happen if a little town in nowhere decided to mimic Switzerland in governance and eliminates the middle men? Doom?
As an American, I think the biggest reason that the majority of Americans embrace (worship?) representative democracy is because it frees them from feelings of responsibility in the outcome of the government, and means that much less effort they must contribute back to society. Why learn about all the issues and directly vote for what I want, when I could more easily just elect someone else to do all that hard stuff for me so I can spend more time on the sofa watching the drama of Hollywood retards unfold on high definition TV?
As an added benefit, when my elected representatives then vote the “wrong” way, I certainly can’t blame myself, because A) I’m only one of thousands, or millions, of votes, B) I voted for the other guy, or C) I didn’t vote at all / that’s why I don’t ever vote. It’s the exact same reason that companies pay barrels of money for IT support contracts; it’s less work, and when something goes wrong, the blame always shifts to someone else.
Solution: Nuke it from orbit; it’s the only way to be sure…
What I Want From a Browser
With all the recent talk of Google Chrome and all the other browser options, I find more and more that the love-to-hate Firefox 3.0 is still my best friend, and will not be replaced anytime soon. However, the major annoyance I’ve noticed through all the options is that there is always some feature or set of features lacking from every single option, including Firefox, that can be found in the competition.
So for the public record, I’d like to list the set of features that I feel are most important to have in a browser, and how the array of competitors each handle themselves. Just want to see the results?
- Bookmark Tagging: Saving bookmarks into endless hierarchies of folders is extremely tedious and inefficient; the ability to instead tag bookmarks with multiple words allows users much better context for later search and retrieval. Using a third-party bookmark tagging site shouldn’t be necessary anymore; tagging bookmarks gives such a high return on investment of time and effort that it should be a no-brainer to implement this in any and all browsers. Mozilla was the first out of the gate with Firefox 3.0’s introduction of bookmark tagging, and as an avid user of the feature, coupled with the “Unsorted Bookmarks” option, it is extremely well implemented and dead simple to use. Click the star in the location bar to mark the page, and click again to add tags, rename the bookmark, or file it into a real location; type the tag name into the location bar (Awesome Bar!), and look through the results for what you want. As far as I know, none of the other major browsers have added, or plan to add, this functionality; ouch! Google Chrome gets negative points for not even letting you browse or use your bookmarks: you can only search them.
- Content Synchronization: With more and more users connecting to the internet from multiple locations on a regular basis, the task of synchronizing user content is becoming ever more important. Most importantly, bookmarks must be kept in sync, but things such as saved passwords, cookies, browsing history, and form fields are also up for grabs, and it all must be done securely. Bookmarking websites have it so easy, but some browsers are really stepping it up lately. Initially, Firefox was the only one with such a feature, in the form of much-loved Foxmarks plugin, which automatically syncs bookmarks to a remote server, and offers a page to use the bookmarks even from a browser without the plugin. These days, Foxmarks has been much improved, and works with the bookmark tagging from Firefox 3.0, and now Mozilla has thrown their hat in the ring with the rather ambitious plugin project titled Mozilla Weave, which promises to sync just about everything you can imagine, but is still in beta development. Opera also rounds out the list with their My Opera service, which is rather similar to Foxmarks, except that it’s built directly into the core browsing experience; very nice touch.
- Platform Integration: When I open my browser, it should look like it belongs on my desktop; it should share the same widgets, icons, color schemes, and fonts that I have configured for my environment. Firefox is really good at this on Mac and Windows, but while the Linux integration still looks really good, it’s not perfect, and can stutter on some fancy Gtk+ themes. Safari, Konqueror, and Epiphany fit perfectly, but only in their target desktops; Konqueror looks out of place on a Gnome desktop, and Opera looks horrid on Linux and doesn’t really look right on with Windows either. Chrome doesn’t even try to fit in anywhere (why?).
- Process Separation: When I have multiple windows or tabs open at the same time, JavaScript executing on one page should have no effect on operation of the browser interface, let alone on other web pages open in the browser. It shouldn’t take one poorly-written AJAX site to prevent the user from using the browser, or from working in another tab. So far, Chrome is the first and only browser, as far as I know, to implement this correctly. The way that Google has managed to use a separate process for every single tab, complete with a “task manager” to control errant pages, is phenomenally well put together. Opera comes in a distant second place, with better performance overall when compared to Firefox and friends, which will often block the user from interacting with any portion of the interface while executing JavaScript.
- Standards Compliance: When I visit a page that complies with the various HTML, XML, and CSS specifications, it should be rendered the same as on any other browser. As much as we all know that this will never be true, the harder we try for it, the better we make life for web developers, including me. This is basically a problem for all browsers, but more of a problem for some than others. We know all this already…
- Advertisement Blocking: At a time when online advertising is the lifeblood of the internet (and spam e-mails), the ability to have your browser automagically hide ads from web pages is extremely user-friendly. It doesn’t even need to be installed or turned on by default, but there must be some way to accomplish this task. Firefox takes the cake here, with an absurdly wonderful and easy to use plugin, Adblock Plus, which will automatically update itself with the latest list of ad sites on the internet, and allows the user to customize the list or add their own rules for blocking content. Sadly, this is only available for Mozilla products. However, ever time I mention this topic as a benefit for Firefox, I always get adamant Opera users claiming the wonders of Opera’s built-in content blocking options, but I just don’t see it as coming anywhere close to Adblock Plus; it requires the user to manually download and edit a file in their Opera profile containing the list of blocked content, and there’s no method for automatically updating the list, and if the user wants to block something else, they have to edit that file by hand with no guidance. This strikes me as an extremely unfriendly process, and is only a partial replacement for Adblock Plus. Do note however, that a similar system of ad blocking is also available for Konqueror, but no such option is given to Chrome or Safari.
Summary to Make That List A Waste of Time
So here’s how I see today’s options of browsers, with their best and worst parts:
- Mozilla Firefox: Extremely flexible and powerful with plugins, but a poor performer with many tabs.
- Opera: Fast and nifty, includes the kitchen sink, poor platform integration, no bookmark tagging.
- Konqueror: Platform integration done right, extensive protocol support, lacks content-oriented features.
- Google Chrome: Extremely fast and robust with true process separation, lacks almost every standard browser feature.
- Safari and Epiphany: Lightweight platform integration, lacking any advanced features.
I’m actually not very happy with any of the browser options available; they all have disadvantages when compared to other browsers, and there is no clear leader, especially when you consider that every user has a different set of requirements.
However, Firefox still makes me cry the least while I’m using it, and, with its myriad of plugins, makes my time surfing the web so much more enjoyable, except for when JavaScript makes it sop responding of course. Probably the best thing Mozilla could do to improve Firefox would be to implement process separation akin to Google Chrome, or at least prevent the UI from becoming unresponsive during heavy JavaScript execution. If that would happen, I would be absolutely elated.
So the real questions now are: Where does this leave us? How far are we towards a better web? Which browser will get us there the fastest? What will eventually make all this goofy garbage obsolete? When will I shut up and let you leave this page?
Your Freedom is a Choice
On the new G1 phone using Android:
i need a google account to use gphone; i need itunes to use iphone; i have to buy apps from approved channels. it favors the vendors apps; no thanks wake me when i can buy a device that runs apps i choose, connects to the network i want. i realize this is a pipe dream. the wireless world is a world of shit i might as well look for the smallest flash-based linux notebook possible that runs skype and just hold it up to my ear old-skule style like gordon gecko and that giant cell phone from wall street
I have an Openmoko Neo FreeRunner: it has GPS, accelerometers, WiFi G, high resolution 640x480px touch screen, Micro SD card slot, good quality speakers/headphone jack, and good battery life; it works with any GSM carrier; it can run just about any operating system compiled for its ARM CPU; you can run and compile programs on it in any language supported by GCC or an ARM-compiled interpreter; it can connect to the internet via GPRS, WiFi, or USB with a PC, to update it’s software, install software packages, accept/initiate SSH sessions; it allows software to run that uses any windowing toolkit, including Gtk, Qt, and E.
It costs $399 direct from Openmoko and is available through multiple worldwide resellers.
I’m not a fan of Openmoko, but you make a good point. There ARE options for people who want them. The cell phone market is more open now than it ever has been in the past.