Tag: ubuntu

Next > Last >> Page 1 of 2

The Zoo of Rampant Sexism

Posted by lucidfox.org at

Apparently, the time has come for me to invoke the Unicorn Law.

As a disclaimer, I think the Ubuntu community in particular has been doing a great job in raising gender awareness, and most Ubuntu members I talked to leave a very good impression in this regard. That being said, I only communicate online and don’t know how things go when Ubuntu members meet in person — perhaps things are different there, and ugly incidents may happen.

In general, these days, resources like the Geek Feminism Wiki can quickly name and shame major incidents regarding sexism — and make the problems harder to simply handwave away as systematic patterns are easily seen. At least in the English-speaking world, these issues are easily exposed.

Not so behind the barriers of communication known as “foreign languages”.

Within the Russian open source community, there is an atrocity. No, worse — an Atrocity with a capital A. When seeing the discissions (usually known by a less family-friendly word) on that site, a sane person would be disgusted or horrified, or at best, assume the detached attitude of an observer looking at monkeys throwing feces at each other in a zoo cage.

I’m not going to speak about their attitudes towards LGBT people (myself included) — that kind of tolerance would be, perhaps, too much to demand from this crowd of mostly imageboard-level users. That aside, the wild, untamed sexism in that place is too much to bear. This Russian Linux website linux.org.ru, or LOR for short, is almost completely male-dominated, with only two or so women remaining there who learned to stay detached; the rest are scared away by 1990s-era demands like “tits or gtfo”, talks about “chicks” and “females” (using the Russian biological term reserved for non-human species), and outright doubting their gender and accusing them of being bearded admins.

Even that aside, every news entry that somehow mentions women gathers metric tons of annoying, disgusting, repulsive sexist comments. For me, this one was the last straw. Starting now, I feel ashamed that I ever posted on that site, and withdraw from it. In fact, it almost makes me feel ashamed to be a Russian Linux user.

The thread is about the announcement of Amber Graner being elected. Elizabeth Krumbach had the misfortune of having her name attached to the original announcement, and that’s where the feces hit the rotating air cooler. For a few hours, the news entry (checked and approved by a moderator!) erroneously claimed that Elizabeth announced herself being elected, before eventually being corrected by another moderator. The comments are a whole other story. Ranging from accusations of a “transvestite conspiracy” to utterly off-topic discussions of art and photography, they fit the aforementioned monkeys metaphor to a T. Most of this (almost exclusively male) crowd started discussing and ridiculing Elizabeth’s appearance in a very derogatory way.

Let me cite some specific examples of the general mindset of those users — ones that do not insult a specific person just for appearing in the news.

  • “To make it less scary for the fair sex to enter FOSS development, some men will have to pretend to be women to break stereotypes <…>”
  • “Ooooooo how I miss a woman!!! I want to howl!!! <…> I’d screw them all, but nobody gives me sex…”
  • “I’d do her.”
  • “These ones can cook, and their brains are fine. And they give sex more often, which is important.”
  • “This is what I’m talking about. These dames with negro homosexuals have eaten the baldness out of the normal man. Nobody left to screw.”
  • “Do these chicks not have enough herdness? I don’t understand.”

I’ll stop here — there are much more, but the general mood is clear. This is far from a solitary case, too. The last such news comments, about Valerie Aurora, made one of the two remaining female users temporarily quit the site.

“Get the Facts” Right, Microsoft…

Posted by lucidfox.org at

Usually I don’t pay attention to Microsoft’s “Get the Facts” style propaganda, but this one was so silly that I just couldn’t pass by when pointed to it.

Basically, there are two WMV screencasts “comparing” the easiness of installation of Perl and PHP on Windows and Linux. Notwithstanding the fact that the Linux screencast uses a three-year-old version of Ubuntu and the makers apparently didn’t hear of Synaptic and the Applications menu, what is it supposed to prove? If anything, that it’s easier to type a single command to “apt-get install” a package and get it working out of the box, than to run an installer (predownloaded from a third-party site and hopefully prescanned for viruses before the screencast begins) and making them work with IIS through a configuration window.

Or if it’s supposed to be aimed at Windows users to begin with (“I’d rather click Next into oblivion and then use the command line anyway to set up directories than just install everything with this unintuitive apt-get thing!”), who are they hoping to convince? If anything, it ends up looking like an advert for Linux instead.

Nice job breaking it, heroes.

Dear GNU Autohell…

Posted by lucidfox.org at

…could you please die?

In all seriousness, I don’t understand why in our age of cross-platform considerations, distribution packages, scripting languages and refactoring, so much Linux software still uses a stone-age build system.

I could list the advantages of CMake over GNU autohell… sorry, autotools for hours. I’ll just list the ones I submitted to the gtkpod developer who argued about its advantages, after I wrote a full CMake replacement for its autotools-based build system in one day.

  • autotools only generate makefiles; cmake can generate makefiles, project files for various IDEs, and has (from my experience) better support for hooking into IDEs in the first place.
  • There is only one command to learn to generate makefiles, regenerate the build system after making changes, etc. No need for autogen.sh.
  • cmake is well-documented and easily extensible. For nearly every dependency, you can either find the way to hook it in the base bundle, or find an existing project that has a .cmake file for it. And it’s easy to write new ones.
  • Strict checking of behavior between versions, compared to the constant problems with behavior mismatches depending on which versions of autotools were used to generate the configure script.
  • All configuration is in one place (but easily splittable into included files), rather than all throughout the source tree in various .am and .in files.
  • No difference in the steps to build from the VCS (which has no configure script) or tarball.
  • Includes only the files with relevant configuration and nothing else. autotools installs lots of additional files used in configuration and building, and while it allows one to build without autotools installed, cmake is a single binary available as a package in all major distributions.
  • Arguably more concise, intuitive and easy to learn. This is subjective, but compare the new CMakeLists.txt for gtkpod with its own configure.in and tell me which one you consider more concise and intuitive.
  • Faster, since it, again, only checks for dependencies directly relevant to the build, and caches the results.
  • Supports out-of-source builds. Cleaning up is as simple as deleting the build directory.

The only drawback is that cmake needs to be installed to build the software from the source tarball (autotools don’t even have this advantage for VCS builds). This may have mattered ten years ago, but not in modern desktop systems. Building from source (including installing all dependencies besides cmake) is not a task for the typical end user to begin with – they are expected to use distribution packages. And for package maintainers, cmake is a blessing – very customizable and patchable. I say that as an Ubuntu developer. :)

Icon themes for pure Qt applications

Posted by lucidfox.org at

Recently, I went to package the JuffEd text editor for Ubuntu (it’s on REVU now), and I was surprised that it used bundled Tango icons by default. Then I looked at the code and saw that support for XDG icon themes was really hackish, and didn’t work with inherited themes such as gnome-colors flavors.

It’s strange that support for “stock icons” is not in Qt, unlike GTK, but still, I’d like non-KDE Qt applications to support them properly. So, yesterday, I wrote a small library to properly implement the icon theme specification.

If you’re writing a Qt application dealing with icons, there are two classes of note in that library:

  • XdgIconManager keeps the list of themes installed in the system, and returns themes by human-readable names or directory names, or the user’s default theme.
  • XdgIconTheme looks up icons by names such as document-new and returns the full path to the file. If used from GUI applications, it can also return a QPixmap, rescaled to the required size if there is no exact match.

Q-XDG library at Google Code

UI Rant: Computer Janitor

Posted by lucidfox.org at

I won’t deny that the Ubuntu repository has plenty of software with badly designed UIs. Not much of it, however, makes it into main, and I’m even more puzzled to see something like this in the default installation — developed by Canonical, no less.

Look at it. Look at it.

UIs like this usually come from applications whose developers wrote them to scratch their own itches. Their purpose and the purpose of their controls are obvious to the developers, not much to Joe Average, Jr.

The description for this application, the Computer Janitor, suggests that its purpose is to “bring the system to a state close to being freshly installed”. Based on that, I assumed its purpose was to delete all packages except for the default install and revert system settings to the defaults as well. I was wrong — it does something different. In fact, I still have no idea what exactly it does.

The only hints at its function are the fact that the list entries in the Unused window are package names. Otherwise, it seems to be designed as cryptically as possible. You can probably guess that it’s designed to remove unneeded packages, but where is it stated? And what’s supposed to go into the other two list views? When there’s an empty list, a good UI usually gives me a hint what’s supposed to appear there. Here, I’m left without a clue.

Now, on to minor nitpicks:

  • No window icon, even though there is a taskbar one.
  • There is a “File” menu, even though there is nothing to suggest that this application works with files. The only menu item in it is, of course, “Exit”. In fact, the menu is so small that it could easily be moved into buttons in the window itself.
  • The “Optimize” list view is for some reason narrower than the other two.
  • It suggests me to remove (I guess) libsane-epson-perfection-1670, which is a package with binary firmware for my scanner that I installed manually. It’s not on apt-get autoremove — what is it doing here?
  • The spacing between widgets doesn’t comply to the GNOME HIG — there is no spacing between the list views and the edge of the window at all.

In short, we have an application whose UI is designed “for hackers” rather than for the general user (which is itself puzzling — “hackers” will just use command-line apt instead of a GUI utility like this). It would be no harm done if it was just lying somewhere quietly in universe, but what is this doing in the default install?

xchat-gnome User List

Posted by lucidfox.org at

I may be a minority regarding this choice, but I’ve always preferred xchat-gnome to plain xchat as my IRC client. Its minimalist interface fits well with my GNOME desktop, and the preferences dialogue is much cleaner than in regular xchat.

The only annoyance is the user list, which upstream insists on hiding behind a button despite all pleas to provide an option to show it in its own panel. Finally, I wrote a patch adding that option about a year ago, and today I fixed a bug with UI freeze in it.

I’ll try to get it into Lucid, but in case the core devs decide not to sponsor it, I’ve made a PPA for Karmic with the patched version.

Lucid Lynx

Posted by lucidfox.org at

Heh, I never expected an Ubuntu release named Lucid something. More Lucid animals, good and varied, as Russians say.

Although given that I’ve used LucidFox for years now, I imagine making packages for that release will feel awkward.

Also, I want a version of Ubuntu named Alliterative Animal.

Facebook Weirdness

Posted by lucidfox.org at

“Dear user. Your photo has been deleted. Would you like it to be deleted one final time to ensure that it’s, you know, deleted?”

Microsoft Patents Again… [sigh]

Posted by lucidfox.org at

So, Microsoft forces yet another company to pay for its Linux patent indulgence.

What’s interesting here? “…has agreed to pay an undisclosed sum… Microsoft disclosed Wednesday.” Microsoft once again refuses to state which patents Linux supposedly violates (no surprise here), but when someone actually agrees to pay them, they immediately blow the trumpets and make sure the media discuss the story ad infinitum. Obviously they don’t cover cases when their patent trolling is met with the middle finger.

What’s particularly frustrating here is that the more companies prefer to pay Microsoft just to get rid of their legal bullying, the more people will view Linux as a dangerous thing that “rightfully belongs” to an unethical competitor.

New Shirt

Posted by lucidfox.org at

There’s a service around here that prints custom images on T-shirts, any gender and size. Thanks to it, I painlessly got an… unofficial… item of Ubuntu merchandise without having to wait for weeks for some online shop abroad to ship it to Russia.

Forgive me, Canonical, I just couldn’t resist.

I Don’t Get Microblogging

Posted by lucidfox.org at

The fact that the entire Ubuntu community seems to have dived into this microblogging craze disturbs me.

Actually, “annoys” could be a better word. I occasionally get into this with fiction, like movies and TV series: “Okay, this is kind of decent, but definitely not the masterpiece I was told it is. So what did everyone find in this overrated piece of drivel?” And then I start ranting about it, in the hopes of provoking a discussion and an opportunity to vent.

Technology is sometimes the same for me. A new fad strikes the entire Internet, I fail to see what’s so special about it or what it’s even for, yet the fact that everyone talks about it all the time annoys me enough that I often intervene with complaints that “I don’t get it”.

I honestly tried to get it. I read articles on it, including the Wikipedia one, watched video explanations on YouTube. This diagram, obviously, completely clarified the situation. But seriously…

  • Random thoughts? IRC. Saying something that bugs me on an appropriate channel will inspire a more fulfilling response than a mess of short posts ever would. Or I could just write it in my blog — I have nothing against one-liners being there.
  • “What I’m doing now”? Well, who the heck cares what I’m doing at the moment? And if someone does care (I can see why my parents and coworkers would, hypothetically, but not beyond that), why would they trace it over the Internet? The fact that someone might actually be interested in reading up-to-the-minute status updates in daily life — and that someone can actually care to update — sounds kind of disturbing by itself. Like virtual voyeurism. This sounds really far-fetched. Using the Internet to trace your son’s meal or finding friends having a party at the moment? Seriously?

From what I’ve seen on screenshots, signal-to-noise ratio of a typical Twitter feed (how do I subscribe to the bloody things anyway? Is it like RSS, via a URL displayed somewhere?) is disturbingly low. You need to trace on the particular service the person is using. That’s just unwieldy.

Maybe I just don’t lead the kind of life where microblogging becomes useful, but then it’s concerning to be different in this aspect from seemingly everyone else in the Ubuntu community.

“I don’t get Twitter” returns 23,500 Google results. For a technology that’s supposed to be simple and intuitive, that’s disturbingly high. Without the “I”, I stumbled onto this phrase: “If you don’t get Twitter [or other similiar sites for that matter], then it’s not for you.” Maybe I should just bitterly follow this statement and disclaim it as “not my thing”?

But dang.

(Added: Someone came to this page from the horrendously designed Planet Ubuntu Twitter page. The irony.)

Rantify OSD

Posted by lucidfox.org at

One of Jaunty’s more controversial new features was the new notification server. It’s easy to decry as something Canonical pushed unilaterally, breaking a lot of GUI software and requiring fixes for unclear gain.

I’ll admit: I can see areas in which notify-osd can use improvement. At least the bubble background and text color should be customizable (not everyone likes black), as well as their position — they should at least be bindable to any of the four corners of the screen.

Yes, Jaunty shipped with an uncustomizable notification server that, at first sight, seems like a major regression from notification-daemon (no custom positioning, no actions, no clickable links…) and requires a custom GNOME session to replace. But while it may not have been completely polished on Jaunty release, from my (a mere user’s) point of view, I believe it’s a step in the right direction.

First, let’s be honest here: many applications, especially outside of the official GNOME set, didn’t have a well-thought-of concept of usability regarding notification bubbles. I pretty much agree with most of the usability concerns put in the notify-osd wiki articles. For me, a notification bubble is a signal that “something of interest happened”. I don’t usually read into them — I just scan them quickly with my eyes and switch to the application. Displaying a notification bubble indefinitely and expecting a user to click a button is just unwieldy.

Second: uniformity. I can’t stress enough how important this is for a professional feel. I know there are people for whom free software means, first and foremost, freedom of expression. So let’s have ten widget toolkits, five notification systems and innumerable icon themes that all look at odds with each other. The consequences of such a mindset can be seen most prominently in, ironically, Windows. With even Microsoft changing its aesthetics radically with every release (compare different versions of Office and Visual Studio), if the king does not lead, how can he expect his subordinates to follow? Add independent proprietary software developers each trying to make their application visually stand out with bling, older software retaining the Windows Classic theme, and we have a recipe for an eclectic mix that doesn’t feel like a cohesive desktop environment at all.

But let’s head back into the desktop Linux world. There are GTK and Qt, plus various more obscure toolkits — they’re of little interest to me, especially given that some (like wxWidgets) act as wrappers around the mainstream toolkits or emulate their look. But even two toolkits are troublesome on their own — how are you going to explain to Aunt Jane why that shiny DVD creator she has just installed looks so different from the rest of the desktop? That’s why, as a GNOME user, I regard the inclusion of qgtkstyle in Qt 4.5 as probably its single most important improvement in the X11 version. Common GTK users will have their uniformity by default, advanced users can install qt4-qtconfig and go from there, and for KDE, of course the issue is backwards.

Even among a single toolkit, guidelines exist to ensure that applications behave consistently. You can have varying opinions on the GNOME HIG and its practical implications, but you can’t really deny its clarity, internal consistency, and logic. There is nothing in GTK itself that stops you from placing the Help menu on the leftmost side of the menu bar, but should you really? Similarly, when I open the About menu, I have every right to expect that I’ll be shown the standard GTK about dialog, not the developer’s custom creation. This is actually important enough for me that I started filing bugs about HIG non-compliance, and some time ago joined gtkpod’s upstream development specifically to revamp its aesthetics, including the icons, about and preferences dialog, to make it feel more in place in a GNOME environment.

So, we have the GNOME HIG for general application behavior, the Tango guidelines for icons (I don’t use the default Tango or Human theme, but a custom ones following the guidelines, and it integrates well), and freedesktop.org standards for interoperability, including the notification specification. I don’t understand why KDE has its own notification system instead of implementing the standard, although they might have a good reason — but this doesn’t help interoperability. But the specification only defines what applications can expect, not what they should and shouldn’t do to be consistent. As it turns out, many fail even at expecting: they expect a specific implementation, notification-daemon. The Ubuntu developers weren’t out hunting for “non-compliance with notify-osd” — from what I understand, they were out finding such implementation assumptions, such as expecting support for actions, and making the applications behave with different implementations, including notify-osd.

In fact, I’m seeing the Notification Design Guidelines as Canonical’s more important contribution to this area — that is, more important than notify-osd. Why did they define these guidelines? Because nobody did it before, and nobody had a clear idea how notifications should be used. This is an important step on the way to a uniform, cohesive desktop, no matter what notification implementation is used.

As for notify-osd itself, it’s a question of taste. I hope it will eventually become configurable enough to mitigate some of the common complaints, and of course the default behavior of affected applications could use some improvement. I don’t know anyone who would like the proverbial example of Update Manager popping up — the old behavior with an icon and notification bubble seems more sane to me, even if the bubble is unclickable now. What notify-osd really succeeds in is making notifications looking consistent with each other and, let’s face it, slick. While it’s hard to define what a slick desktop or application is, for me, it means sensible intuitive layouts, with eye-capturing graphics and putting emphasis in accordance to how important or commonly used the information is. For applications most prominently following this kind of philosophy, of those I know, I can name Qt Creator, Brasero, GNOME Do, and now notify-osd — all displaying stark contrast to traditional “Windows-like” layouts.

On my quest for consistency, I’ve started looking for ways to make all notification popups go through notify-osd. That’s why I welcomed the experimental Firefox notify extension, why I’m looking for the Thunderbird one to exclude notifications of Gmail spam so I can actually start using it, and why I rebuilt Quassel without kdelibs to enable support for freedesktop.org notifications. Because order matters.

It’s a Conspiracy!

Posted by lucidfox.org at

Apparently I’m a Canonical employee now… At least in the wild imagination of the Boycott Novell folks. A friendly tip: before calling to boycott anyone in particular, get your facts straight first.

<ajmitch> LucidFox: but surely Canonical have made a secret backroom deal with Microsoft over making directhex a MOTU

(Heh, and as I was writing this, the author corrected it — with a strike tag. Apparently he thought everyone with an @ubuntu.com address was Canonical staff.)

Jumping the GPG Bandwagon

Posted by lucidfox.org at

I’ve created a new 2048-bit key and switched to SHA-256 digests, following the earlier posts here. On a somewhat amusing note, the new key’s ID is 12666C01 — good thing I’m not superstitious!

The original page at debian-administration.org seems to be undergoing a Slashdot effect. I used the Google cache to resolve the problem, but even then, the page kept loading forever and only appeared when I put Firefox in offline mode. Weird.

Localization and Gender-Specific Language

Posted by lucidfox.org at

Today, for the first time, I noticed that the Russian localization of Quassel used gender-specific language in its IRC log views. It was jarring to see the nickname of a known female user followed by the masculine form of the verb “changed”. I’ve made a patch for the .ts file in git and sent it upstream, but I noticed that Gajim was also an offender at least with the “Away” status — not sure about Pidgin, I’ll need to check it.

Now, Russian is a highly gender-specific language — verbs in past tense singular are always gender-specific, for instance. Translators need to dance around these issues. Yes, it’s hard, but it pays off.

I’m not on a political correctness crusade, I just have an issue with the very concept of “default gender” that most Russians seem to accept without question. In these days of rising gender awareness in FOSS (if the recent posts on Planet Ubuntu are anything to go by), presuming that online users are male by default is simply unacceptable. I’d like to see users recognize the ways choice of language affects human interaction and report questionable uses, and upstreams be cooperative in fixing their localized UIs correspondingly.

What I’m Working On

Posted by lucidfox.org at

As Karmic has opened for development, my primary concerns for now are:

  • Patch gtkpod to detect and use libmp4v2 dynamically, and thus eliminate the need for a separate gtkpod-aac package in multiverse. The patch will go upstream as well.
  • Get handbrake into Ubuntu already, in cooperation with John Dong.
  • More Java! First of all, package Execute Query. It depends on two Java libraries that are currently not in Ubuntu; browserlauncher2 is on REVU, and liquibase is going to join it soon.

On to Jaunty!

Posted by lucidfox.org at

First of all: good work on the release, everyone! I’ve been using unstable Jaunty for most of its development cycle, but upon release I did a clean reinstall and was surprised to see how slick everything looked. In particular, the updated partition manager, timezone selector and GDM login screen are pure eyecandy, giving a professional feel — kudos to the artwork team!

The reason I did a clean install in the first place was hoping to fix my chronic problems with PulseAudio from a hardy -> intrepid -> jaunty upgrade: random hangups, hiccups, muting, and flat-out refusing to work. Now it seems to work like a breeze — we’ll see.

Between the release of Jaunty and the opening of Karmic for development, I’ll direct my energy to unofficial updates of software I’m interested in, adding it to my new PPA. I’ve started with Arora 0.6 and Qt Creator 1.1.0.

gnote: The Dehydrated Tomboy

Posted by lucidfox.org at

To the delight of all Ubuntu users who have been complaining about Tomboy being a resource hog, thanks to Mackenzie ‘maco’ Morgan, I’ve discovered a Mono-free alternative: Gnote, which is basically a port of Tomboy to C++. It’s blazingly fast and, from her experience, integrates better with the GTK theme setting in KDE.

It is regretably not in the Ubuntu archive yet, but I’ve asked Vadim Peretokin, who has it available in his PPA, to contribute the package to karmic once it opens.

In Before the Freeze

Posted by lucidfox.org at

As it turned out, the day I found enough confidence to resume contributing to Ubuntu was coincidentally the last day before feature freeze. Luckily, I had some upstream version updates of interest to me prepared, so on this last day I’ve updated gtkpod, gtkpod-aac, smplayer, smplayer-themes, and qdvdauthor. Not enough time for REVU, unfortunately, and I regret all the time I missed due to silly personal insecurities.

That’s the public version of the post, can’t really afford to post the other one to a heavily-visited aggregator like Planet Ubuntu.

How to Write an Unmaintainable CMS

Posted by lucidfox.org at

Everything written below comes from personal experience of maintaining a Java CMS written by our predecessors, who gave us next to no instructions regarding that pile of code.

  • Don’t use an ORM library. If someone calls you on it, tell them that there were no ORMs available in 2003. Instead, write your own ad-hoc, bug-ridden object mapping layer that only works with Oracle.
  • Don’t use reflection to automatically handle POJO classes being mapped without writing boilerplate code. Instead, ensure that every class has a corresponding DAO class consisting entirely of copy-pasted code to insert, fetch, and update database records on the JDBC and SQL level.
  • As such, for every new database table, add three new classes and two interfaces.
  • In the base class for all those, use a primary key field of type Object. Ensure that it can really mean BigDecimal, Long, or Integer depending on the context, even for the same class, so to actually get the number value of the primary key, you have to write something like Long.valueOf(obj.getPK().toString()).
  • Pass all data in non-generic Lists (admittedly, generics weren’t invented yet) without any comments about what type these Lists actually contain.
  • Ensure that the core CMS library, the individual websites, and the utility application used for copying the database between hosts all use different technologies. For bonus points, make the utility application use pure JDBC on the lowest level possible.
  • Use a helper library written by your predecessors whose source code is lost, so your successors will have to decompile it first.
  • Depend on an application framework but never use its core features, rather only helper classes and tag libraries.
  • In JSPs, use nondescriptive names for temporary variables holding objects being rendered, such as “obj” or “list”.
  • Instead of using the traditional MVC pattern and letting the controller select the view, link to JSPs and let these JSPs call “pseudo-controller” classes that do all the parameter processing and redirection.
  • Start the name of such a pseudo-controller class with an arbitrary letter combination and ensure that nobody knows what it means (such as “PL”). Give all instances of these classes an identical and equally arbitrary name (such as “UC”).
  • In said pseudo-controllers, don’t use POJOs to represent submitted form data. Instead, use a self-written form-parsing library that requires to create a member object for every request parameter. Make all these fields public and refer to them from JSPs, better several of them at once.
  • Inherit these pseudo-controllers, so that you can’t tell what form fields are being handled without going all the way to the top of the class hierarchy.
  • Include JSPs in other JSPs, and in the included ones, reference objects declared in the outer one.
  • Create new sites by copy-pasting old ones, so that common functionality added along the way ends up being spread instead of consolidated in the core library. Ensure that every new UI-related feature requires modifying every site in which it’s already implemented.
  • Hardcode application logic into JSPs, or into the obscurest classes you can find in random places.
  • Tie the core library to the common admin panel, requiring it to be redeployed every time something changes.
  • Make said admin panel ridden with editable features that don’t actually work because they weren’t implemented for this particular site but nevertheless can’t be disabled in the admin panel.
  • For every feature, write two classes in different packages that do the same thing but slightly differently.
  • Use lazy singletons everywhere. Inherit them and initialize them in the strangest of places so that everything breaks down if an include is forgotten.
  • Use a self-written authentication system that randomly clears the session upon authentication for an unclear reason, and make the authentication so mind-boggling as to make that particular quirk as unfixable as possible.
  • Make the admin panel (which every application depends on) cache the page tree for every single site that exists in the system upon loading, and write that part as inefficiently as possible, so that the server spends minutes reloading the application when it starts fetching page structures from the database.
  • Have three different ways of sending mail and make each application use one that its developer liked the most.
  • Upgrade the built-in proprietary JavaScript-based text editor with major pain, then downgrade it when it turns out that the customer bought the wrong version by accident.
  • Make the menu handler return URLs that end in “.jsp” even though such JSPs don’t really exist and are all handled by one three-line JSP per page type.
  • Require restarting the target server every time the utility copy application is used.
  • Hardcode full URLs in the database, so that a text replace function has to be built into the utility application specifically to replace those.
  • Make error messages that the end user sees as non-descriptive and user-unfriendly as possible. They’re sure going to be fascinated when trying to register an account to find out that “NAME_EXISTS”.
  • Hire a web designer who insists on using table layouts, tag soup HTML, split images and no doctype on the grounds that everything should be compatible with IE5. In 2008.

Next > Last >> Page 1 of 2