The One with the Thoughts of Frans

Archive for Internet

Please, Use HTTP Language Headers

I’ve got my HTTP header set up as “Accept-Language: en-US,en;q=0.9,nl;q=0.8”, but the number of sites that actually seem to use this (that I have encountered) can be counted on one hand. Especially on Belgian sites it’s ludicrous: I’m clearly saying that I don’t want French, so unless there is a choice between English, Dutch, and French (on a minority of sites, sometimes also German) there’s no rationale whatsoever to bug me with the option for French when the only options are French and Dutch.

Don’t get me wrong: I want the option to override this automatic detection system with a language selector in the top-right or some such, but it seems like I’m sending out these headers to waste bandwidth. I guess I should just be grateful that they don’t make their language-selection pages Flash-based, though they do typically come attached with gigantic pictures that aren’t reused on the actual site.

I don’t know what the best method would be to utilize this, but in the case of the aforementioned majority of Belgian sites they tend to be like domain.be/nl/etc and domain.be/fr/etc, so I’d say just quietly redirect me to domain.be/nl (all through HTTP) whereas if I go directly to /nl or /fr nothing should happen.

PS The few sites that initially seemed to utilize this method (like argenta.be) actually perform some IP-based shenanigans. It happens to work out for me in this particular case, but generally speaking I consider that far worse than the redundant language selection screens, although a lot of that depends on overridability as well. Which reminds me of software that insists on displaying itself in Dutch based on my location settings while it should really just align itself with my OS language.

Comments

Opera 11 Addressbar Revisited

I already wrote down some thoughts about the addressbar changes in Opera 11 a few days ago, and it got me thinking that the addressbar could definitely be improved, just not by detracting from it.

To cut to the chase, here’s the addressbar I’m envisioning:

What you see on this screenshot, however, does not tell the whole story. Let’s start with what’s visible:

  • The protocol is grayed out. This is the method that most so-called URL highlighting uses to emphasize the domain. I think this is the wrong approach, but in the case of the protocol it seems the right thing to do. It is somewhat hidden, but still fully visible: no need to select the addressbar to find out what protocol is being used. People know that something is a web address when they see it in print thanks to the protocol, even if they have no idea what it means (and in fact many might mistakenly interpret HTTPS as safe), and combined with the large, clear button indicating security information you’d really have to try to misinterpret HTTPS as safe.
  • The domain is highlighted, specifically by bolding in this example, but it could also be done through underlining, a background color, or a combination of various things. The important part is that the domain is highlighted, rather than the rest of the URI lowlighted.
  • Query strings have parameter highlighting, and characters that separate parameters like ? and & are hidden and replaced by a small outline indicating what goes with what. The space between the various parameters corresponds to the size of the hidden ? or & characters and thus no shifting will occur when selecting them. I did not look into things like color blindness and the colors I used are solely for illustration purposes; they are no suggestion for specific colors.

Then, what’s not visible:

  • Complex query strings, meaning with 3 or 4 parameters or more, could be hidden from that point on, but this should be visibly indicated. An ellipsis is the standard method of conveying such information, so there’s no need to come up with something fancy. A complex query string like Google’s would thus look something like http://www.google.be/search [client=opera] [rls=en] [q=test]…

    Perhaps the number of parameters before hiding occurs should be configurable as well.

    This hiding should not affect links to IDs like #someID, which are hidden along with the query string at the moment.

  • Linkify URI segments on hover when a modifier key, such as Ctrl or Shift, is pressed. This has been implemented quite nicely by the Firefox extension Locationbar².

That’s about it for my proposal regarding how to truly upgrade the addressbar as opposed to trying to make it little more than a domain display.

Comments (4)

What’s Wrong With the Opera 11 Address Bar, And How to Fix It.

Opera 11 made some drastic changes to the addressbar. I think the thought is good, but the execution leaves quite a bit to be desired.

Opera 10.63

Here you can see the classic method as it is in 10.63: full URL. You could say that the security information is somewhat detached on the right.

Opera 11

This is Opera 11, with the changed addressbar. The favicon is removed, the protocol and query string are hidden, and the security information is made more prevalent.

Generally speaking I don’t care too much about http vs. https; secure vs. insecure certainly is a better way of presenting that, lest https give you a false sense of security. Then again, I think that keeping the protocol and simply moving the security indication to the spot of the favicon (while still getting rid of that) would’ve accomplished the same effect better without losing out on such information. After all, if I notice some site uses https, but is insecure, I should probably notify the site, right? The lack of something like ftp is slightly more annoying, but the lack query strings is the absolute worst. I realize that some query strings can be overly complex, but I fail to see why the lowest common denominator should get rid of the good query strings as well. Seeing or not seeing it is only part of the issue: it also kills the ability to easily select the relevant part of the query string that you want to change (like a search term).

Opera 11 as it should be

And here is my combination of both. Remove the favicon, which might give a false sense of being on the real site (and is already visible on the tab), and move the security information to where the favicon used to be. The rest of the URL can remain fully accessible, displaying information for those who can use it. Domain highlighting can take care of those who have trouble spotting the domain they’re on (and on Windows it already does, making the removal of the query string even more peculiar). No extra step is necessary to select parts of the URL.

I feel that this is a fair compromise: it makes the security information more accessible without compromising existing functionality.

Comments (1)

Javascript Associative Array of SVG Color Keywords

I thought I needed an associative array of SVG color keywords. I couldn’t find one, so I created this. Enjoy.

// see http://www.w3.org/TR/SVG/types.html#ColorKeywords
var SVGColors = new Object();
SVGColors['aliceblue'] = [240,248,255];
SVGColors['antiquewhite'] = [250,235,215];
SVGColors['aqua'] = [0,255,255];
SVGColors['aquamarine'] = [127,255,212];
SVGColors['azure'] = [240,255,255];
SVGColors['beige'] = [245,245,220];
SVGColors['bisque'] = [255,228,196];
SVGColors['black'] = [0,0,0];
SVGColors['blanchedalmond'] = [255,235,205];
SVGColors['blue'] = [0,0,255];
SVGColors['blueviolet'] = [138,43,226];
SVGColors['brown'] = [165,42,42];
SVGColors['burlywood'] = [222,184,135];
SVGColors['cadetblue'] = [95,158,160];
SVGColors['chartreuse'] = [127,255,0];
SVGColors['chocolate'] = [210,105,30];
SVGColors['coral'] = [255,127,80];
SVGColors['cornflowerblue'] = [100,149,237];
SVGColors['cornsilk'] = [255,248,220];
SVGColors['crimson'] = [220,20,60];
SVGColors['cyan'] = [0,255,255];
SVGColors['darkblue'] = [0,0,139];
SVGColors['darkcyan'] = [0,139,139];
SVGColors['darkgoldenrod'] = [184,134,11];
SVGColors['darkgray'] = [169,169,169];
SVGColors['darkgreen'] = [0,100,0];
SVGColors['darkgrey'] = [169,169,169];
SVGColors['darkkhaki'] = [189,183,107];
SVGColors['darkmagenta'] = [139,0,139];
SVGColors['darkolivegreen'] = [85,107,47];
SVGColors['darkorange'] = [255,140,0];
SVGColors['darkorchid'] = [153,50,204];
SVGColors['darkred'] = [139,0,0];
SVGColors['darksalmon'] = [233,150,122];
SVGColors['darkseagreen'] = [143,188,143];
SVGColors['darkslateblue'] = [72,61,139];
SVGColors['darkslategray'] = [47,79,79];
SVGColors['darkslategrey'] = [47,79,79];
SVGColors['darkturquoise'] = [0,206,209];
SVGColors['darkviolet'] = [148,0,211];
SVGColors['deeppink'] = [255,20,147];
SVGColors['deepskyblue'] = [0,191,255];
SVGColors['dimgray'] = [105,105,105];
SVGColors['dimgrey'] = [105,105,105];
SVGColors['dodgerblue'] = [30,144,255];
SVGColors['firebrick'] = [178,34,34];
SVGColors['floralwhite'] = [255,250,240];
SVGColors['forestgreen'] = [34,139,34];
SVGColors['fuchsia'] = [255,0,255];
SVGColors['gainsboro'] = [220,220,220];
SVGColors['ghostwhite'] = [248,248,255];
SVGColors['gold'] = [255,215,0];
SVGColors['goldenrod'] = [218,165,32];
SVGColors['gray'] = [128,128,128];
SVGColors['green'] = [0,128,0];
SVGColors['greenyellow'] = [173,255,47];
SVGColors['grey'] = [128,128,128];
SVGColors['honeydew'] = [240,255,240];
SVGColors['hotpink'] = [255,105,180];
SVGColors['indianred'] = [205,92,92];
SVGColors['indigo'] = [75,0,130];
SVGColors['ivory'] = [255,255,240];
SVGColors['khaki'] = [240,230,140];
SVGColors['lavender'] = [230,230,250];
SVGColors['lavenderblush'] = [255,240,245];
SVGColors['lawngreen'] = [124,252,0];
SVGColors['lemonchiffon'] = [255,250,205];
SVGColors['lightblue'] = [173,216,230];
SVGColors['lightcoral'] = [240,128,128];
SVGColors['lightcyan'] = [224,255,255];
SVGColors['lightgoldenrodyellow'] = [250,250,210];
SVGColors['lightgray'] = [211,211,211];
SVGColors['lightgreen'] = [144,238,144];
SVGColors['lightgrey'] = [211,211,211];
SVGColors['lightpink'] = [255,182,193];
SVGColors['lightsalmon'] = [255,160,122];
SVGColors['lightseagreen'] = [32,178,170];
SVGColors['lightskyblue'] = [135,206,250];
SVGColors['lightslategray'] = [119,136,153];
SVGColors['lightslategrey'] = [119,136,153];
SVGColors['lightsteelblue'] = [176,196,222];
SVGColors['lightyellow'] = [255,255,224];
SVGColors['lime'] = [0,255,0];
SVGColors['limegreen'] = [50,205,50];
SVGColors['linen'] = [250,240,230];
SVGColors['magenta'] = [255,0,255];
SVGColors['maroon'] = [128,0,0];
SVGColors['mediumaquamarine'] = [102,205,170];
SVGColors['mediumblue'] = [0,0,205];
SVGColors['mediumorchid'] = [186,85,211];
SVGColors['mediumpurple'] = [147,112,219];
SVGColors['mediumseagreen'] = [60,179,113];
SVGColors['mediumslateblue'] = [123,104,238];
SVGColors['mediumspringgreen'] = [0,250,154];
SVGColors['mediumturquoise'] = [72,209,204];
SVGColors['mediumvioletred'] = [199,21,133];
SVGColors['midnightblue'] = [25,25,112];
SVGColors['mintcream'] = [245,255,250];
SVGColors['mistyrose'] = [255,228,225];
SVGColors['moccasin'] = [255,228,181];
SVGColors['navajowhite'] = [255,222,173];
SVGColors['navy'] = [0,0,128];
SVGColors['oldlace'] = [253,245,230];
SVGColors['olive'] = [128,128,0];
SVGColors['olivedrab'] = [107,142,35];
SVGColors['orange'] = [255,165,0];
SVGColors['orangered'] = [255,69,0];
SVGColors['orchid'] = [218,112,214];
SVGColors['palegoldenrod'] = [238,232,170];
SVGColors['palegreen'] = [152,251,152];
SVGColors['paleturquoise'] = [175,238,238];
SVGColors['palevioletred'] = [219,112,147];
SVGColors['papayawhip'] = [255,239,213];
SVGColors['peachpuff'] = [255,218,185];
SVGColors['peru'] = [205,133,63];
SVGColors['pink'] = [255,192,203];
SVGColors['plum'] = [221,160,221];
SVGColors['powderblue'] = [176,224,230];
SVGColors['purple'] = [128,0,128];
SVGColors['red'] = [255,0,0];
SVGColors['rosybrown'] = [188,143,143];
SVGColors['royalblue'] = [65,105,225];
SVGColors['saddlebrown'] = [139,69,19];
SVGColors['salmon'] = [250,128,114];
SVGColors['sandybrown'] = [244,164,96];
SVGColors['seagreen'] = [46,139,87];
SVGColors['seashell'] = [255,245,238];
SVGColors['sienna'] = [160,82,45];
SVGColors['silver'] = [192,192,192];
SVGColors['skyblue'] = [135,206,235];
SVGColors['slateblue'] = [106,90,205];
SVGColors['slategray'] = [112,128,144];
SVGColors['slategrey'] = [112,128,144];
SVGColors['snow'] = [255,250,250];
SVGColors['springgreen'] = [0,255,127];
SVGColors['steelblue'] = [70,130,180];
SVGColors['tan'] = [210,180,140];
SVGColors['teal'] = [0,128,128];
SVGColors['thistle'] = [216,191,216];
SVGColors['tomato'] = [255,99,71];
SVGColors['turquoise'] = [64,224,208];
SVGColors['violet'] = [238,130,238];
SVGColors['wheat'] = [245,222,179];
SVGColors['white'] = [255,255,255];
SVGColors['whitesmoke'] = [245,245,245];
SVGColors['yellow'] = [255,255,0];
SVGColors['yellowgreen'] = [154,205,50];

CommentsTags:

Damn, It Is Cold

Weather in fall always comes paired with temperature drops, fall storms, and lots of rain. But seldom did the temperature drop from 20°C to a mere 7°C from one day to the next.

The release of Ubuntu 10.10 coincided with this change for wintry weather; however, while I’m sure it’s swell, you won’t see me upgrading just yet. Perhaps I’ll have to look a little harder into acquiring a netbook so I can use it with the Ubuntu Netbook Edition.

Of more interest is the announcement that Opera 11 will have extensions. Or, more particularly, that I was the first to guess this in a contest.

Comments

How to Disable Opera Speed Dial

As far as I’m concerned there are two reasons for disabling speed dials: it’s faster, and your history doesn’t misbehave.

The speed is less relevant since Opera 10, although more relevant again since Opera 10.50. The history argument is far more important to me. It really throws me off that the first page I visited in a window still allows me to go back. I don’t know why someone would want to go back to the speed dial; isn’t it faster to just open a new one?

To disable the speed dial, you have you change the SpeedDialState setting in opera:config.

0: Folded
1: Shown
2: Read only, and always show speed dial
3: Disable speed dial

Set it to 3 to disable speed dial completely. If you think this will impair your ability to open pages quickly and easily, you need to take note of go to nickname (Shift + F2).

Comments

Google Calendar Synchronization

syncme.sebeta performs synchronization of Google Calendar with SyncML supporting cellphones in a manner that easily outperforms all other alternatives.

Opera Mini and this kind of calendar synchronization enable me to use my now over three years old Sony Ericsson s500i much like it were a modern smartphone. I realize the phone is as ubiquitous these days as the Nokia 3310 was in the early 2000s, but I take comfort in being a pioneer: I got the phone about one to two months after it came out.

But none of that is really relevant. If you use Google Calendar and a phone that supports SyncML, syncme.se might just be what you were looking for.

Comments

What Is A Tab?

Recently I’ve noticed some ignorance regarding what constitutes a tab, largely fueled by the announcement of the badly-named Tab Candy. Panorama is a much better name.

To clarify what a tab is, I looked for a random picture of a tab and added a circle around the tab.

If those tabs aren’t there in some kind of metaphorical pixel-form, there are no tabs. Or to put it another way, a tab-based user interface consists of multiple internal windows with a sort of task bar.

CommentsTags:

Dealing With cPanel: Setting Up a 301 Redirect to Your Main Domain And Preventing .htaccess Hell

cPanel is surprisingly ill-suited for managing domains. Rather than treating each domain as a separate entity, you get one main domain and various so-called add-on domains. The most annoying aspect of this is that it always creates a subdomain when you add a new add-on domain. There should be no such thing as an add-on domain, just a bunch of domains. cPanel has some features that help you work around these defects, but I wasn’t too thrilled with those. It now seems to automatically redirect the www-subdomain to your no-www domain and you can easily set up subdomains to redirect through the interface, but it doesn’t satisfy me.

Setting Up a 301 Redirect

Instead of having to bother with a plethora of settings in cPanel itself, I came up with the following to stick at the top of .htaccess. A quick look around on the Internet brought up Fayaz Miraz’s blog, but while the solution suggestion was close, it misses one crucial aspect: it only redirects from the main page as far as I can tell. This is fixed easily by the addition of $1 (i.e. everything that was added after the main page).

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{HTTP_HOST} !^fransdejonge\.com$
RewriteRule ^(.*)$ //fransdejonge.com/$1 [R=301,L]

</IfModule>

Simply put, it matches all possible routes of approach (whether through www or through a subdomain of another domain) and if it’s not fransdejonge.com, it will 301 redirect to fransdejonge.com. The L means no further rewriting will occur after that rule. Mostly because it would just be inefficient, and partially because something else further down the line might mess things up.

Preventing .htaccess Hell

Another problem is that cPanel automatically creates a /public_html/addondomain directory. This is bad, because /public_html already contains a .htaccess file for the main domain. When accessing /public_html/addondomain, it would first parse the .htaccess file in /public_html before moving on and overriding it in /public_html/addondomain, and that’s assuming none of the rules in /public_html make anything go awry!

To prevent this kind of nightmare from occurring I took the simple precaution of creating a new directory /domains. This domain is contained in /domains/fransdejonge.com, for instance, and any other add-on or subdomains can reside in their own /domains/domain.com directory to prevent any added load from needlessly parsing .htaccess files.

Comments (1)

What Is a Malamanteau?

The following article appeared on Wikipedia for a very short time due to a recent xkcd comic. It’s a reference back to Language Log, which references xkcd sometimes, but the reverse seldom happens.

A malamanteau (plural malamanteaux) is a neologism for a portmanteau created by incorrectly combining a malapropism with a neologism. It is itself a portmanteau of malapropism and portmanteau. In a less strict definition, a portmanteau of a malapropism with another word can also be considered a malamanteau. The contained malapropism must be typically a very common one, probably most people are not aware of, in order to be able to regain the meaning of a malamanteau.

A malamanteau often is created when somebody tries to use a neologism (alternatively, an idiom) but mistakenly confuses a word with another one. However, unlike a malapropism or an eggcorn, the fumbled word is not completely replaced, but merely transfixed to the new one. A famous example is: “misunderestimate” which was popularized by the 43rd President of the United States, George W. Bush. Probably it was intended to be “underestimate” but mistakenly jumbled with “misunderstand.”

Examples

  • Somebody describes his misunderstanding of what someone was saying by stating, “I misconscrewed it up.”
  • Somenone explains his inability to talk while being upset by saying he was “flustrated.”
  • A meaningful malamanteau is “ambiviolent,” as in: “Beatrix Kiddo in Kill Bill was ambiviolent. She didn’t know who to kill first.”

I was going to write more about it when I made this draft, but by now it’s two weeks later and I’ve lost interest. Booyah.

Comments

« Newer EntriesOlder Entries »