What good is a browser that’s not being used?

About a week ago, I read about how Adobe is doing an opt-out bundling deal, including Chrome with Flash and Adobe Reader X. What struck me as odd was how there seemed to be no business case for whomever was footing the bill to make it happen. If you have to trick people into installing Chrome, what are the odds that they’ll just magically start clicking on the icon?

Today, I finally found the probable business case. It seems Google Chrome Frame now comes free (disabled, but in quick-enable mode) with every copy of Chrome and doesn’t require elevated privileges to install. (If you haven’t heard of it, it’s an Internet Explorer plugin which plugs the guts of Chrome into Internet Explorer so websites can opt out of Microsoft’s rendering engine… sort of like IE Tab in reverse)

That means that, every time Adobe tricks someone into installing Chrome, that’s one more copy of Internet Explorer that will use offer Webkit/V8 as an alternative to Trident/JScript when it encounters this variant of Microsoft’s X-UA-Compatible:

<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

Apparently IE7 users have already joined their IE6-using neighbors in being asked to either upgrade or install Chrome Frame when they open up GMail.

 

Posted in Web Wandering & Opinion | 2 Comments

URxvt: Pros and cons

After getting fed up with Yakuake‘s bloat, Yeahconsole‘s broken embedding, and Tilda‘s flickering, broken scrollbar, and broken URL handling, I decided to try URxvt, since it has a Perl extension that’ll turn it into a slide-down terminal without being embedded in Yeahconsole.

(And because stjerm, though well-recommended by some, is the name of two seemingly independent Google Code projects and somehow feels just a touch shady to me)

After a few days of intermittent fiddling, my reactions were mixed:

Pros Cons
Like XTerm, an order of magnitude lighter and more responsive than anything else out there. Like XTerm, terribly documented by 2011 standards for something you must personalize heavily.[1]
Extensible in Perl Extensible in Perl
Has a URL-recognizer (unlike XTerm) and opens unselected URLs with one middle-click. You can’t amend the context menu for selected text via the config file. You need Perl.
Beautifully accurate “smart selection” plugin Needed Perl hackery and /usr/bin/xclip just to rebind Copy/Paste keys.
Elegant ISO 14755 Unicode codepoint input support ISO 14755 breaks Ctrl+Shift+C/V clipboard bindings.
Backspace and Ctrl+Backspace produce distinct keycodes by default URxvt’s default Ctrl+Backspace is the only XTerm Backspace that termcap/terminfo gives to vim/man on my machine so I had to rebind anyway to stay compatible.
I love the “plain” scrollbar style No way to feed the scrollback buffer with secondaryScroll but hide the scrollbar when vim makes it un-clickable.
  • Doesn’t flicker like VTE-based terminals
  • Unbeatable font support
  • Yet another set of Ctrl+Up/Down, Home/End, etc. keycodes needed in in my .zshrc.
  • Keybinds alias to other keys like in Vim, not to internal functions like in XTerm.

Nonetheless, it’s generally a decent terminal and I’ve switched to its kuake Perl extension. It has its warts but, so far, I get the impression that URxvt’s warts won’t bother me as much as XTerm’s warts do.

Still, I did almost gave up on it several times before I stumbled on the little fix I needed and, if I weren’t procrastinating something else right now, I probably would have given up. In case anyone wants it for reference purposes, my URxvt config is up on GitHub.

1. Manpages seem to be the source format and, even with table-of-contents generation and hyperlinking for the manpage cross-references in HTML and texinfo converters, it still involves a lot of fumbling, fiddling, and Ctrl+F-ing within too-long pages where there are no links direct to the relevant sections and quite a few “See the …” references which aren’t hyperlinked and don’t give any clue where to look for the materials suggested.

Posted in Geek Stuff | 2 Comments

Research: Letting clicks through the transparent part of the GitHub ribbon

While I was working to de-uglify one of my GitHub pages (no time to prettify yet), I noticed that, the more fluid I made the layout, the more likely it was that the “Fork me” ribbon would cover up my most visible download buttons.

Obviously, this needs to be fixed, but according to what I could search up, there’s no general solution for clicking through the transparent parts of a PNG. However, given that the ribbon doesn’t necessarily have to be a PNG and that it’s not something like a frame with clear stuff in the center to be clicked through, there may be a specific solution.

None of the ones I’ve found are perfect, but here’s my research so far:

pointer-events
This nifty little property does exactly what I want… but only with an SVG image (For PNGs, it’s an all-or-nothing deal) and it’s apparently only implemented for HTML in Webkit and Gecko-based browsers.
CSS transform
This has actually been done (and since that was written, Opera 10.50 added support for it via the -o- vendor prefix) and you could probably use a polyfill like Transformie or cssSandpaper to make it work on Internet Explorer, but Firefox 6 and below on Linux don’t anti-alias it, so it looks awful. (I haven’t tested Firefox 7+ yet)
CSS clip and border-radius
This is paradoxically the best and worst for graceful degradation, not to mention being a less than ideal solution.If you use clip on your “position: absolute” container to shave off as much whitespace as you can without noticeably affecting the shadow in the PNG, and then use large values of border-radius on the image itself for the bottom-left and top-right corners, you can shave off a pretty respectable amount of the clickable region… but only in Gecko-based browsers (Firefox, SeaMonkey, Fennec, etc.). It turns out that, in other rendering engines, border-radius is a purely visual thing.

Anyway, that’s all I’ve found so far. If anyone has any further suggestions, leave them in the comments and I’ll work them into the post with credit.

Posted in Geek Stuff | Leave a comment

VFFA and FicFan Quote Randomizer Renovated

Throughout the years, I’ve started many projects at times when I didn’t really have time to do them well. Lately, I’ve been working on cleaning them up and this week, it was FicFan.org’s turn. The placeholder page is still up, but the Vanished FanFic Archive got a major renovation and some of it spilled over.

I’m not done, but this is a good place to stop for now and I can’t spare any more time,  so let’s focus on the good things rather than the remnants of the old look, like the ugly navigation box and the dated look for the randomizer’s tab box.

Here are the highlights of the new look:

  • Both the randomizer and the VFFA look pretty good now. (I may still change the color scheme, but it’s acceptable now)
  • Fluid layout tested all the way down to portrait-mode cellphones. (Developed on desktop development builds of Fennec and tested by a friend on his iPhone. One minor known bug still to be fixed.)
  • Print stylesheets (especially useful for the quote randomizer but I’m surprised how many workarounds the VFFA needed for Chrome print renderer bugs)
  • Tested with Fangs and tuned to work well with screen readers (I’m still a novice here, so I’m sure there’s more to be done)
  • Information on how to help the site is now clearly marked and includes a “fics wanted” list (that I’m still disentangling from the other VFFA TODOs).
  • Clear indicator icons for what will download rather than open in the browser.
  • Lemons are clearly marked and will ask for confirmation before opening.
  • Last updated dates for quotes and last checked dates for external links are now pretty-printed as relative intervals  if Javascript is enabled. (eg. 2 Months Ago)
  • Fandom information has been moved out of the description into the story header.
  • Stories without descriptions now automatically ask users to submit them.
  • Supplementary text is more concise and to the point.
  • Quote Randomizer’s tabs no longer trigger a full reload of the page if Javascript is enabled. (Known bug: The stats bar at the bottom stays on the category the page loaded on)

Of course, equally interesting (and time-consuming) is what’s going on under the hood. I’d have made these renovations months ago, but I was running in circles trying to “do the right thing” and reuse an existing static templating tool. I ended up deciding it was simpler and easier to just write my own.

It’s still got a lot of hard-coded stuff, but here are some of the things I’ve already got done:

  • Exports over 21,000 quotes to gzipped bundles in 10 seconds. (8 seconds for Mako, 2 seconds for GZip)
  • Validates HTML, CSS, and XML using OpenSP and µTidyLib, cssutils, and lxml, respectively. (JSHint and CoffeeScript support planned)
  • Lets me define most of the site in a mixture of Mako templates and markdown. (Jinja2, Textile, reStructuredText, and asciidoc support planned)
  • Minifies CSS using cssutils. (UglifyJS support and CSS/JS bundling planned)
  • Is much easier for me to hack on than Blogofile since I wrote it and also try to keep the codebase lean and well-documented with EPyDoc. (With Blogofile, I couldn’t even figure out how I was supposed to hook in code that takes more than one file in the source tree and produces a single zip in the build directory)

Obviously there’s a ton of stuff I’m not talking about (like how it doesn’t yet rebuild only files that have changed) that makes this only useful to me right now, but once doing so won’t be a procrastination risk for my coursework, I will be putting it up on GitHub. (Probably under an MIT license)

tl;dr It’s pretty, it works nicely with cellphones and printers now, and it’s easier for me to maintain.

Posted in Geek Stuff, Otaku Stuff, Site Updates | Leave a comment

Book Review: Venus Equilateral

Note: Venus Equilateral is more correctly a series of novelettes which may be bound in one or more volumes. The edition which I’m reading and reviewing is the second printing of The Complete Venus Equilateral with introduction by Arthur C. Clarke. (In which he admits that this series may have primed his mind for his eventual contribution to the communications satellite)

Written in the 1940s, Venus Equilateral focuses on the adventures of the crew of the titular space station, orbiting at one of Venus’s libration points in order to relay communication when the sun or its radio output make direct interplanetary communication impossible.

The book is definitely hard sci-fi, which lends it a very interesting flavor, over half a century later (Think “digging up ancient martian vacuum tubes and using oddly-shaped cogs to aim directional antennas so teletype messages can be sent to ships in transit”) but if you don’t mind the technobabble, it lends the stories a very interesting flavor. (Think “Sherlock Holmes”, which was also written in the contemporary style of a period now gone)

The series starts off a bit slow, but just continues to get better and better and, by doing it this way, both the villains and the more fantastic elements of the technology base can be built, grow, and change as you watch. In fact, it reminds me of the Ed stories or, in a more abstract fashion, the feel of some of the steampunk settings I’ve run across.

Each novelette follows a fairly simple formula: Some kind of conflict occurs (eg. a disaster happens, a villain schemes, etc.), some technological advancements have been kicking around, and through grit, innovation, and much technobabble and tablecloth-scribbling, the brilliant oddballs at Venus Equilateral save the day. (For example, when their boss is on a ship that gets hit by a meteor and signals VE for a rescue by turning the central well of the ship into a giant cathode-ray tube)

One especially refreshing example is how, when they eventually start developing matter transmission/replication technology à la Star Trek, the problems they encounter actually make sense as three-dimensional, material versions of electronic input/output problems television engineers of the day encountered, rather than technobabble with no real meaning. There’s something to be said for having an author knowledgeable enough to shrink the actual matter-conversion down to something that can be an infallible black box without the reader caring.

It gets even better when, thanks to the aforementioned technology, you then get to watch, as it happens, the side-effects of all material things (including currency) becoming infinitely duplicable and valueless in a 40s-inspired society… without the ending being some kind of stupid, irritating Aesop’s fable about how progress is evil. (In fact, on the philosophical side, the story in question, “Pandora’s Millions”, feels better than a lot of what authors write on the topic today, over 60 years later.)

The technical side of that particular short could’ve been better, but given that the author lacked knowledge of various other details that fall under the aegis of physics (like the feasibility of two-way communication with a space probe like Voyager 1) that’s easy to excuse as yet another artifact of when the stories were written.

All in all, a very fun read and something I’d highly recommend. Aside from the female characters being supporting cast only (something that really stands out to me now, but is unsurprising for the 40s), it could be a brilliant piece of retro sci-fi written today. 5 out of 5 stars.

Posted in Reviews | Leave a comment

Topic Glimpse: Distributed Issue Tracking

One topic that’s been getting explored off and on for the last half-decade is distributed issue tracking. The idea is that, with distributed version control systems like Git and Mercurial, maybe it’d be a good idea to also store your issue records (bugs and feature requests) in a decentralized fashion.

The two main upsides to this idea are:

  1. You can work with the bug database while disconnected, just like git/hg/bzr/etc. allow you to do with your other project resources.
  2. The status of a bug (open, fixed, wontfix, etc.) can be automatically kept on a per-branch basis, so you never need to worry about keeping track of which version of the code has which status for each bug.

However, there is a fairly large downside: It’s much more difficult to handle things that should be global, like discussion and keeping track of whether a given person has claimed a bug.

Personally, given that many similar arguments were made for staying with centralized version control software like Subversion, I think the idea has more potential than it might seem, but like any decentralized system, it’ll take a lot of time, effort, and PR work before it will be ready for prime-time.

Here are a few links if you’d like to start learning more:

Update 2014-04-29: You’ll probably also want to check out this StackOverflow Question.

Update 2014-04-30: …and this Current State of Distributed Issue Tracking blog post.

Update 2021-03-05: One of the issue trackers I remember when working on this post was Bugs Everywhere but, now, git-bug seems to be the most mature option, with support for import/export/sync with other issue trackers and a work-in-progress web UI of its own. Alternatively, there are also git-issue and bug.

Update 2021-09-03: Fedeproxy is an open-source service for synchronizing state between different services.

Posted in Web Wandering & Opinion | Leave a comment

Chrome vs. Firefox: August 2011

With Firefox making various controversial decisions lately, like wanting to remove the version number from the About dialog and following Chrome in removing http:// from the address bar without any reasonable justification I’m aware of, now feels like a good time for a fresh comparison of how Chrome and Firefox stack up as primary-use browsers.

I’ll start by clearly saying that I’m still a Firefox user through and through. Despite Firefox’s sluggishness under certain types of load, Firefox is still the only browser with a full set of about:config keys like browser.urlbar.trimURLs. The purpose of this is to explore how far Chrome has come by looking at what show-stoppers are left.

Core

Session recovery must become trustworthy
I’ll never switch to Chrome as my primary browser when it can still sometimes respond to the “Recover” button with another crash.
Userscripts must not break when JavaScript is disabled for a site
The Firefox+NoScript+Greasemonkey combo can pull it off and there are a surprising number of cases where I want no site scripts but I also want my userscripts.
Proper support for “open new windows as tabs”
Yes, Chrome has the One Window extension, but it has the odd rough edge. For example, it does occasionally miss a window and it breaks the “New Window” keyboard shortcut for when you do want one. (You have to open a new tab and then grab the mouse and “tear off” the tab into its own window)
Proper support for “clear my tracks on exit”
Chrome did Incognito Mode right (I never use Firefox’s “Private Browsing” because it doesn’t let me run regular and private windows at the same time) but Firefox did things like “clear cache on exit” right… things I need to ensure evercookie-like behaviour in the wild is all for naught.
The “this page was prevented from setting cookies” icon should include an option to set an exception right in the drop-down.
…to complete the “Session-only by default, whitelist to allow cookies to persist” behaviour so many power users are used to.
“Temporarily allow…”
For those sites where you know you’ll only be there once and you don’t want to have to babysit an open Preferences tab. (Remember, the script/cookie/etc. page action goes away once it’s allowed, so you have to keep the preferences open)
Smarter pop-up blocking
Currently, a pop-up or pop-under can bypass blocking on Chrome but not Firefox if clicking a hyperlink calls window.open() without also calling event.preventDefault(). That allows a website to display one pop-up every time the user navigates the existing window to a new page.
Ignore lower() on the currently focused window
Combined with the aforementioned popup-blocking flaw and One Window extension, this allows pop-unders (even ones which 404 due to HOSTS file blocking) to yank the browser below everything else on the desktop. (Especially irritating when you’re using LXPanel, which minimizes if the window is focused but not on top, throwing off muscle memory)
Favicons for Bookmarklets
I use various bookmarklets and it’s just not good enough for them all to have the same “blank page” icon. Really slows me down.
window.opener Ruins the Multiprocess Dream
Under certain common “open many tabs” scenarios, Chrome’s current implementation of the JavaScript window.opener property forces all of the tabs to open in the same process, revealing that Firefox is much better than Chrome at avoiding thrashing within a single renderer process when necessary.

Extension API

Issues that I’m directly aware of. The “Extensions” section also counts toward this in some cases.

Reading and Modifying HTTP Headers (including for NPAPI requests)
Essential for re-implementing Video DownloadHelper‘s automatic support for all non-RTMP videos, HTTPS Everywhere, InlineDisposition, RefControl‘s “Forge” option for Referer: headers, and User Agent Switcher.
Custom File Openers That Aren’t “In The Cloud”
For example, allowing the RSS Subscription Extension to send feed URLs to local applications like Thunderbird without a hack like feed:.
Customizing “Save As” targets
I’ve grown very used to the “Automatic Save Folder” extension and Video DownloadHelper‘s ability to remember a “last used” save directory different from the rest of the browser… so Chrome would need an extension API capable of setting the directory for an about-to-be-shown Save As… dialog and allowing extensions to modify the process of remembering the last place you saved something to. (If they want to keep it secure, I’d suggest using some kind of key-value store for remembering save locations and allowing the API to set the key to be used and whether it will persist across browser restarts)

Extensions

Firefox Chrome
Cookie Monster Built-in (partial)
BitTorrent WebUI (More Flexible) Deluge in Chrome (Superior UI)
DownThemAll! None yet
Download Statusbar Built-in (bulkier)
FlashVideoReplacer Pending
NoScript ScriptNo + Built-in ClickToFlash
Panorama (built-in) Tab Sugar (shaky future)
None yet PasswordFail
ScrapBook Scrapbook
StumbleUpon with XUL Userstyle None yet
Symantec’s OpenID Seatbelt OpenID AutoFill
Toggle Word Wrap (off by default)  Always on by default

Chrome’s Strengths

  • Chrome’s extension API is forward-compatible. An extension that worked on Chrome N will just work on Chrome N+1 without the developer having to test and babysit a maxVersion value.
  • Extensions in Chrome can’t clutter up the toolbar and have no control over whether their toolbar icon is hidden on visible.
  • Extensions can’t add more than one top-level item to the context menu and Google seems to have done a good job at cultivating the understanding that, if you add something to the context menu, you provide a way to hide it.
  • All Chrome extensions are “restartless
  • Address bar integration for OpenSearch is much more polished. (But address bar search for history and bookmarks is significantly inferior)

Conclusions

Firefox
Still has its warts, but its design philosophy and plugin API allow power users who value personalization over convenient defaults (like me) to patch them away and get on with our day. Good for power users, control freaks, and people who care about their privacy. The MemShrink project will probably help Firefox regain the clear memory footprint lead Fx 3.6 had over Chrome with many tabs open.
Chrome/Chromium
Catching up nicely, but its design philosophy means that, if a wart or shortcoming bothers you, you’re probably out of luck and, unless you’re using Chromium on Linux, you’re forced into their update schedule. Beats Firefox hands-down for making it easy to keep a clean, streamlined UI in the face of extensions. Good for the average person and power users who fit what it can already do. Not good for anyone who would rage at the loss of their browsing session or who runs nVidia binary drivers and Adobe’s Flash plugin on Linux.
Posted in Geek Stuff | 4 Comments