<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
 
 <title>Jeremy Thomas</title>
 <link href="http://jgthms.com/atom.xml" rel="self"/>
 <link href="http://jgthms.com/"/>
 <updated>2024-01-11T22:18:12+00:00</updated>
 <id>http://jgthms.com/</id>
 <author>
   <name>JT</name>
   <email>bbxdesign@gmail.com</email>
 </author>

 
 <entry>
   <title>A better Android "Complete action using"</title>
   <link href="http://jgthms.com/a-better-android-complete-action-using.html"/>
   <updated>2015-03-21T00:00:00+00:00</updated>
   <id>http://jgthms.com/a-better-android-complete-action-using</id>
   <content type="html">&lt;p&gt;When opening a specific type of &lt;strong&gt;link&lt;/strong&gt;, Android prompts you to choose between several apps. It’s the mobile equivalent of the desktop &lt;em&gt;“Open With…“&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;For example, when tapping on a Airbnb link, this modal appears:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/android-complete-action-using-default.png&quot; alt=&quot;Android &amp;quot;Complete action with&amp;quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The key part of this modal is the bottom part, where 2 options appear:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Always&lt;/strong&gt;: subsequent taps on similar types of links will always open the selected app.&lt;br /&gt;
The modal won’t appear again.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Just once&lt;/strong&gt;: the link will only open in the selected app this time.&lt;br /&gt;
The modal will reappear next time a similar link is opened.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;strong&gt;problem&lt;/strong&gt; with this approach is that &lt;em&gt;any&lt;/em&gt; action requires &lt;strong&gt;2 taps&lt;/strong&gt;: selecting &lt;em&gt;which&lt;/em&gt; app to use and &lt;em&gt;how&lt;/em&gt; subsequent taps will behave.&lt;/p&gt;

&lt;p&gt;As a result, choosing the &lt;strong&gt;permanent&lt;/strong&gt; behavior is &lt;em&gt;as easy as&lt;/em&gt; choosing a &lt;strong&gt;one-time&lt;/strong&gt; behavior. If a user chose &lt;em&gt;“Always”&lt;/em&gt; by mistake, he’d have to dig deep into the phone settings to &lt;em&gt;undo&lt;/em&gt; his error, which will also clear the app’s behavior regarding &lt;em&gt;other&lt;/em&gt; types of links.&lt;/p&gt;

&lt;h3 id=&quot;a-less-error-prone-approach&quot;&gt;A less error-prone approach&lt;/h3&gt;

&lt;p&gt;To simplify the opening of a link &lt;strong&gt;and&lt;/strong&gt; to prevent any permanent decision, the modal should look like this:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/android-complete-action-using-better.png&quot; alt=&quot;Better Android &amp;quot;Complete action with&amp;quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;How it works:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;No app is selected by default.&lt;/li&gt;
  &lt;li&gt;Tapping on an app will open the link in that app.&lt;/li&gt;
  &lt;li&gt;Choosing that app as the permanent choice requires 2 taps.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;strong&gt;one-time&lt;/strong&gt; action is quicker as it requires only a &lt;strong&gt;single&lt;/strong&gt; tap.&lt;/p&gt;

&lt;p&gt;Although defining the &lt;strong&gt;permanent&lt;/strong&gt; action requires to tap at the bottom and &lt;em&gt;then&lt;/em&gt; in the list, opting for a less straightforward approach is &lt;strong&gt;deliberate&lt;/strong&gt;, as it prevents easy mistakes.&lt;/p&gt;

&lt;p&gt;If a user wishes to choose an app as the default one, he’d have to &lt;em&gt;actively&lt;/em&gt; decide to do so.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>An alternative to infinite scroll</title>
   <link href="http://jgthms.com/an-alternative-to-infinite-scroll.html"/>
   <updated>2014-11-04T00:00:00+00:00</updated>
   <id>http://jgthms.com/an-alternative-to-infinite-scroll</id>
   <content type="html">&lt;figure&gt;
  &lt;a href=&quot;http://jgthms.com/lavalamp.js/lavalamp.html&quot;&gt;
    &lt;img alt=&quot;Infinite scroll alternative&quot; src=&quot;/images/infinite-scroll-alternative.gif&quot; /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;&lt;a href=&quot;https://github.com/jgthms/lavalamp.js&quot;&gt;Lavalamp.js&lt;/a&gt; demo&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;to-infinity-but-not-beyond&quot;&gt;To infinity but not beyond&lt;/h2&gt;

&lt;p&gt;Whoever initially implemented infinite scrolling was probably well-intentioned. The fundamental idea is clever: &lt;strong&gt;accelerating&lt;/strong&gt; the process of finding what you’re looking for by &lt;strong&gt;eliminating&lt;/strong&gt; any hurdle. No need to load a whole new page, nor to take any &lt;em&gt;action&lt;/em&gt; at all. The browsing experience is &lt;strong&gt;seamless&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;But also &lt;strong&gt;endless&lt;/strong&gt;. The flood of results can be overwhelming. The page scrolling can drastically slow down. Retrieving your previous position can be challenging. Bookmarking is almost impossible. Keeping a sense of space (and time?) is troublesome. There’s too much, too quick.&lt;/p&gt;

&lt;figure&gt;
  &lt;a href=&quot;https://xkcd.com/1309/&quot;&gt;
    &lt;img src=&quot;http://imgs.xkcd.com/comics/infinite_scrolling.png&quot; alt=&quot;xkcd: Infinite Scrolling&quot; /&gt;
  &lt;/a&gt;
&lt;/figure&gt;

&lt;p&gt;Although some of these issues can be circumvented through technical and layout tweaks, the underlying question remains to know if infinite scroll is necessary &lt;em&gt;at all&lt;/em&gt;. &lt;a href=&quot;http://danwin.com/2013/01/infinite-scroll-fail-etsy/&quot;&gt;Etsy dropped infinite scroll&lt;/a&gt; after making the wrong assumption that users wanted both more results per page and faster results. Probably the &lt;strong&gt;incessant flow&lt;/strong&gt; of results prevented the user from taking any &lt;strong&gt;decision&lt;/strong&gt; at all, and led him to forget what he was looking for, or why he started browsing the page in the first place.&lt;/p&gt;

&lt;h2 id=&quot;a-mobile-paradigm&quot;&gt;A mobile paradigm&lt;/h2&gt;

&lt;p&gt;The infinite scroll UX paradigm has found its way in &lt;em&gt;many&lt;/em&gt; interfaces, especially on &lt;strong&gt;mobile&lt;/strong&gt;. It’s probably due to users (including me) being lazy: swiping (for scrolling) is more convenient than tapping. It’s a more natural, less demanding gesture.&lt;/p&gt;

&lt;p&gt;It does makes sense for &lt;strong&gt;feeds&lt;/strong&gt; (Twitter, Facebook) because they only require one page, and are meant to be consumed in one direction primarily. It’s less convenient for &lt;strong&gt;search results&lt;/strong&gt; though, where there’s a sub-page to be accessed, and where the uncertainty to end and probablity to alter your navigation are both higher.&lt;/p&gt;

&lt;p&gt;What about a regular &lt;strong&gt;pagination&lt;/strong&gt;? &lt;em&gt;Next&lt;/em&gt; and &lt;em&gt;Previous&lt;/em&gt; buttons are mandatory, but displaying pages on a mobile device is less of a requirement, or should at least not be interactive.&lt;/p&gt;

&lt;h2 id=&quot;simplifying-the-flow&quot;&gt;Simplifying the flow&lt;/h2&gt;

&lt;p&gt;Some of infinite scrolling’s assumptions are correct, but need to be reduced and/or altered to fit a mobile device’s needs:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;speed up&lt;/strong&gt; the browsing experience by remaining on the same page&lt;/li&gt;
  &lt;li&gt;unburden the DOM from &lt;strong&gt;past&lt;/strong&gt; results&lt;/li&gt;
  &lt;li&gt;maintain the possibility to navigate to the &lt;strong&gt;previous&lt;/strong&gt; page&lt;/li&gt;
  &lt;li&gt;provide the user with a sense of &lt;strong&gt;completion&lt;/strong&gt; by displaying a milestone (the &lt;em&gt;Load next&lt;/em&gt; button)&lt;/li&gt;
  &lt;li&gt;keep the user focused by requiring his &lt;strong&gt;action&lt;/strong&gt; to navigate&lt;/li&gt;
  &lt;li&gt;design a &lt;strong&gt;seamless&lt;/strong&gt; experience&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Demo: &lt;a href=&quot;http://jgthms.com/lavalamp.js/lavalamp.html&quot;&gt;http://jgthms.com/lavalamp.js/lavalamp.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When tapping the “Next” button, an animated element covers up the viewport, remains fixed on top (while the new content is loaded and the page scrolls back up), before it shrinks to match the “Previous” button and then disappear.&lt;/p&gt;

&lt;p&gt;Source: &lt;a href=&quot;https://github.com/jgthms/lavalamp.js&quot;&gt;https://github.com/jgthms/lavalamp.js&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Chrome's black scrollbar bug</title>
   <link href="http://jgthms.com/chrome-black-scrollbar-bug.html"/>
   <updated>2014-06-04T00:00:00+01:00</updated>
   <id>http://jgthms.com/chrome-black-scrollbar-bug</id>
   <content type="html">&lt;p&gt;Have you ever encountered a black scrollbar like the one below?&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/chrome-black-scrollbar.png&quot; alt=&quot;Chrome black scrollbar&quot; /&gt;&lt;/p&gt;

&lt;p&gt;If so, you might wonder &lt;em&gt;where&lt;/em&gt; it comes from. For the last couple of months, I’ve been experiencing this issue on a regular basis, without actually understanding &lt;em&gt;why&lt;/em&gt; it occured, so it was difficult to find a workaround.&lt;/p&gt;

&lt;p&gt;In my case, it only happened in Chrome on my Macbook Air. Although refreshing the page fixed the problem, I wanted to find out what triggered it in the first place.&lt;/p&gt;

&lt;p&gt;And then it occured to me.&lt;/p&gt;

&lt;p&gt;I’ve been using a Logitech mouse since February. At times, when working with a colleague, I would unplug my mouse, grab my laptop, and sit at his desk. That’s when the black scrollbar would appear.&lt;/p&gt;

&lt;figure&gt;
  &lt;img alt=&quot;Scrollbar with mouse or trackpad&quot; src=&quot;/images/scrollbar-with-mouse-or-trackpad.gif&quot; /&gt;&lt;br /&gt;
  &lt;figcaption&gt;The viewport will be 15px less wide with the mouse plugged in&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;ul&gt;
  &lt;li&gt;When using a &lt;strong&gt;mouse&lt;/strong&gt;, Chrome renders a fixed scrollbar that’s 15 pixels wide.&lt;/li&gt;
  &lt;li&gt;When using the &lt;strong&gt;trackpad&lt;/strong&gt;, Chrome uses an “overlay” scrollbar, that doesn’t take up any space, and only displays the scroll handle when interacting with it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Unplugging the mouse while visiting a page in Chrome would remove the fixed scrollbar and replace it with a black rectangle.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Order and hierarchy in menus</title>
   <link href="http://jgthms.com/order-and-hierarchy-in-menus.html"/>
   <updated>2014-05-19T00:00:00+01:00</updated>
   <id>http://jgthms.com/order-and-hierarchy-in-menus</id>
   <content type="html">&lt;p&gt;While using Chrome on Android, it occured to me its menu carried a behavior that’s recurrent in many interfaces.&lt;/p&gt;

&lt;figure&gt;
  &lt;img alt=&quot;Chrome Android first screen&quot; src=&quot;/images/chrome-android-first-screen.png&quot; /&gt;&lt;br /&gt;
  &lt;figcaption&gt;Chrome Android&apos;s first menu screen&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Apart from the &lt;code&gt;Back&lt;/code&gt;, &lt;code&gt;Forward&lt;/code&gt;, and &lt;code&gt;Favorite&lt;/code&gt; buttons, all the other items appear identical. But apart from their visual similarity, their respective &lt;strong&gt;position&lt;/strong&gt; determines their importance ; a higher position denotes a more significant role (especially when using the useful one-swipe-only interaction).&lt;/p&gt;

&lt;p&gt;It’s therefore natural to find the ‘New tab’ button in 1st position. But the others buttons’ relative position?&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code&gt;New incognito tab&lt;/code&gt; is seldom used but is 2nd, though its position is probably due to its resemblance with &lt;code&gt;New tab&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;I never used &lt;code&gt;Other devices&lt;/code&gt; but it’s 4th&lt;/li&gt;
  &lt;li&gt;Same applies to &lt;code&gt;Print&lt;/code&gt; (7th), for which I can’t see any reasonable use case (printing a web page &lt;em&gt;and&lt;/em&gt; via a phone?)&lt;/li&gt;
  &lt;li&gt;The more useful &lt;code&gt;Request desktop site&lt;/code&gt; (considering the poor state of dedicated mobile websites) is buried third to last&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;Settings&lt;/code&gt; are second to last&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Re-arranging the &lt;strong&gt;order&lt;/strong&gt; of these buttons is a good step towards a more usable interface.&lt;/p&gt;

&lt;p&gt;Going further in providing a quicker and better experience, I wonder why all buttons provide the &lt;strong&gt;same interactive area&lt;/strong&gt; while they don’t carry the same importance. I assume it’s due to the less error-prone touch interface. But it makes sense on desktop, especially for people not well acquainted with keyboard shortcuts:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/chrome-desktop-menu-buttons.png&quot; alt=&quot;Chrome Desktop menu buttons&quot; /&gt;&lt;/p&gt;

&lt;p&gt;On a side note, hiding the menu &lt;em&gt;while&lt;/em&gt; interacting with &lt;code&gt;Back&lt;/code&gt; and &lt;code&gt;Forward&lt;/code&gt; is bad UX, considering they’re often used repeatedly in a row.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CSS interview questions and answers</title>
   <link href="http://jgthms.com/css-interview-questions-and-answers.html"/>
   <updated>2014-04-29T00:00:00+01:00</updated>
   <id>http://jgthms.com/css-interview-questions-and-answers</id>
   <content type="html">&lt;p&gt;While browsing through my starred GitHub repositories, I noticed an interesting one I had forgotten about: &lt;a href=&quot;https://github.com/darcyclarke/Front-end-Developer-Interview-Questions&quot;&gt;Front-end Job Interview Questions&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Only once have I had to provide a CSS layout for a job application. But I also happened to rate candidates based on a CSS exercise I set up when Steaw was looking for additional Front-end Developers.&lt;/p&gt;

&lt;p&gt;I thought it’d be both entertaining and stimulating to try myself at a fictitious interview based upon the CSS-related questions of that repo. I’ll play by the implied rules: answer directly, without putting too much thought into it, write as I’d speak, and leave the potential mix-ups or innacuracies I’d drop in such a situation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;: I agree, it’s long. But it reads quickly considering I wrote it quickly.&lt;/p&gt;

&lt;h2 id=&quot;describe-what-a-reset-css-file-does-and-how-its-useful&quot;&gt;Describe what a “reset” CSS file does and how it’s useful.&lt;/h2&gt;

&lt;p&gt;It’s meant for cross-browser consistency. Basically, each browser provides its own user-agent stylesheet that acts as the default one if no stylesheet is present. So you have default font-sizes, margins, colors, paddings… They’re all slightly different for each browser. So instead of fighting with these differences when writing your own CSS, you just “reset” them as much as you can. It’s like a solid foundation on which you can define your own styles.&lt;/p&gt;

&lt;p&gt;I’ve usually used either Eric Meyer’s CSS reset, or the Yahoo one. I just copy paste it on 1 line and forget about it. Recently, I use an HTML5 one that I found somewhere, and that works quite well. It’s a usual “set it and forget it”.&lt;/p&gt;

&lt;h2 id=&quot;describe-floats-and-how-they-work&quot;&gt;Describe Floats and how they work.&lt;/h2&gt;

&lt;p&gt;Ah, floats… Probably the least understood CSS property. It’s hard to handle it because it not only affects the element you’re targetting, but also the surroundings: the parent, the siblings, the following elements…&lt;/p&gt;

&lt;p&gt;What it does is “push” an element to the side you’ve chosen, either left or right. That’s why you don’t have a float: center. It’s simple to understand and see how it affects the targeted element. But the issues come from the surroundings: a parent with only floated childs will have a height of zero, as if the children weren’t there. The text that follows a floated element will be wrapped around it. If you have float: left, the text will use the remaining space on the right, and then the one remaining below. Visually, it looks like stairs. But if you inspect it, you can see that the element containing this text is actually &lt;em&gt;behind&lt;/em&gt; the floated element. So, it feels weird.&lt;/p&gt;

&lt;p&gt;The thing is, a float will take an element &lt;em&gt;out&lt;/em&gt; of the flow, a bit like position absolute or position fixed but not exactly. I say not exactly because the surrounding elements are mostly aware that the floated element is still &lt;em&gt;there&lt;/em&gt; (they will wrap around it), but the parent won’t.&lt;/p&gt;

&lt;p&gt;The float is directly related to the clear property, which reintroduces the floated element in the flow, by placing a cleared element &lt;em&gt;after&lt;/em&gt; the floated one. There are other clear techniques, like putting a float or an overflow visible on the parent, but it only delay the issue. So I usually use a cleared element.&lt;/p&gt;

&lt;h2 id=&quot;describe-z-index-and-how-stacking-context-is-formed&quot;&gt;Describe z-index and how stacking context is formed.&lt;/h2&gt;

&lt;p&gt;z-index is for visual depth. Because some elements overlap, because some elements are nested within each other, there’s a natural visual depth that builds, where you can see some elements on top or behind other ones.&lt;/p&gt;

&lt;p&gt;The natural depth depends upon a couple of things:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;if an element is nested &lt;em&gt;within&lt;/em&gt; another one, then it shows up on top of its parent&lt;/li&gt;
  &lt;li&gt;if a sibling comes &lt;em&gt;after&lt;/em&gt; another sibling, it’s on top as well&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Position absolute or position fixed will mess with that: they’ll show up on top &lt;em&gt;regardless&lt;/em&gt; of their tree position. Well, sometimes… I’m not sure. But because it’s sometimes a burden to move elements in the HTML tree, or because the depth behavior can be unreliable, you can use the z-index property to make sure how elements will “stack” upon each other (when they overlap obviously). By the way, you need an element to be positioned (relative, absolute, fixed) for the z-index to work.&lt;/p&gt;

&lt;p&gt;The z-index value is relative. So you can have one element with z-index: 1 and another with 2, and the latter will show up on top. Same thing would happen with values of 1000 and 4875.&lt;/p&gt;

&lt;p&gt;What I usually do is regroup all the z-index values at the end of my CSS, in order to adjust the values according to the other elements’ values. I start with the highest value so that my selectors order reflects the visual depth order. Also, I put multiples of 100 as values, so that if I have to insert up to 99 elements between 2 others, without having to readjust all the other values. In practice, I usually insert 2 or 3.&lt;/p&gt;

&lt;h2 id=&quot;what-are-the-various-clearing-techniques-and-which-is-appropriate-for-what-context&quot;&gt;What are the various clearing techniques and which is appropriate for what context?&lt;/h2&gt;

&lt;p&gt;The obvious one is by using the clear property, which can have values of none, left, right, or both (left and right). Another one is to float the parent element. Another I’ve heard of is put overflow: visible on the parent, or something like that.&lt;/p&gt;

&lt;p&gt;In the end, I just rely upon the clear property, because that’s what it’s meant for. Sometimes I put it directly on an element, sometimes I use a dedicated class for that (the famous “clearfix”), and sometimes I use the :after pseudo-selector.&lt;/p&gt;

&lt;p&gt;The thing is: the clear property does &lt;em&gt;only&lt;/em&gt; that. You rarely apply it along with other properties. Sometimes, it can actually clash&amp;gt;&lt;/p&gt;

&lt;p&gt;For example, you have a ul with lots of li’s that are floated left, have some height, some background, some padding… You target them by using a ul li selector (or .whateverclasstheulhas li), because you want to make use of the hierarchy selector and not but a class on each li.&lt;/p&gt;

&lt;p&gt;Because the li’s are floated, the ul will have a height of zero. What do you do?&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;float the ul and put a cleared element after that?&lt;/li&gt;
  &lt;li&gt;use a clear on ul:after, and cross your fingers for browser compatibility?&lt;/li&gt;
  &lt;li&gt;put a clear on the last li?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In every case, the clear property will be used. But for the second option, it will clash with the styling of the li. So you’d need to reset that &lt;em&gt;only&lt;/em&gt; for that cleared li. It’s usually a pain. So you either don’t use the hierarchy selector, or don’t use li’s, or just float the ul and add a “clearfix” div after that.&lt;/p&gt;

&lt;p&gt;Because I often work with developers who just want some practical solutions, I have a .clearfix class in my CSS that does just that. It might be semantically irrelevant, but it get things done.&lt;/p&gt;

&lt;h2 id=&quot;explain-css-sprites-and-how-you-would-implement-them-on-a-page-or-site&quot;&gt;Explain CSS sprites, and how you would implement them on a page or site.&lt;/h2&gt;

&lt;p&gt;A CSS sprite is a big image containing several background images at once. It’s a collection of images combined in one big image. You choose the background image you want to show by playing with the dimensions of the element (which acts like a viewport) and the background position.&lt;/p&gt;

&lt;p&gt;Advantages are:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;bandwidth: you just have 1 HTTP request for one image, and the combined image is often lighter than separate images combined&lt;/li&gt;
  &lt;li&gt;rendering: as soon as the sprite is called and displayed once (and even cached), you can re-use it with other elements. Works well with the :hover pseudo-state. There’s no blinking.&lt;/li&gt;
  &lt;li&gt;maintenance: it’s easier in Photoshop or Sketch to export a single asset with everything&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s not a new technique. I remember old games having sprites. Even Mario Kart 64 has sprites for the cars!&lt;/p&gt;

&lt;p&gt;Because a sprite is an image that’s meant to be used on a lot of elements, I consider it a shared property. So I regroup all selectors that use the sprite, and but my CSS code on 1 line for that (with some text-replacement code just in case).&lt;/p&gt;

&lt;p&gt;Sprites are often used with icons of the same dimensions. Although you can actually build a sprite for &lt;em&gt;all&lt;/em&gt; the background images of your site, of various dimensions, it’s a pain to maintain. Plus: sprites are mainly used for non-repeated background images. I’ve done some with horizontally &lt;em&gt;or&lt;/em&gt; vertically repeated (but not both) images, but it has its limits.&lt;/p&gt;

&lt;p&gt;So I usually have only sprites for icons now. There’s a tool to generate the sprite: you upload a zip of icons with the same dimensions, set the offset, set a CSS class, and it generates both the sprite &lt;em&gt;and&lt;/em&gt; the CSS background positions for each selector. It’s amazing.&lt;/p&gt;

&lt;h2 id=&quot;what-are-your-favourite-image-replacement-techniques-and-which-do-you-use-when&quot;&gt;What are your favourite image replacement techniques and which do you use when?&lt;/h2&gt;

&lt;p&gt;I stick to the one I first learned about: overflow hidden and a huge negative text-indent. I actually use -290486px because that’s my date of birth, so it acts like a CSS signature. It’s silly but considering you can put any value, why not make it a bit meaningful? Sometimes I Google it and find people who copy-pasted my code. I don’t mind: that’s what it’s meant for.&lt;/p&gt;

&lt;p&gt;There are probably other image replacement techniques, but I never bothered to look for an alternative. I mean: this one has worked for years, and I know how to handle it.&lt;/p&gt;

&lt;h2 id=&quot;how-do-you-serve-your-pages-for-feature-constrained-browsers&quot;&gt;How do you serve your pages for feature-constrained browsers?&lt;/h2&gt;

&lt;p&gt;I guess you mean all that vendor-prefixed properties? There’s this term, “progressive enhancement”, and its counterpart, that I don’t remember actually. It’s that permanent question: should I code for the older but still used browsers, and add some magic for the more modern ones, &lt;em&gt;or&lt;/em&gt; make it look great for the modern ones, and fix it with hacks for the older ones?&lt;/p&gt;

&lt;p&gt;I prefer the second approach. It’s more future-proof: eventually, the browser market will catch up and you won’t have to update anything because the hacks you implemented won’t be needed, and won’t even be actually called. Plus: it’s less frustrating. You can actually design stuff the way you want, make it both look better and with cleaner code. Then I test it on IE to see what’s going wrong, call an ie7.css file thanks to the MS conditional tags, and add some hacks there.&lt;/p&gt;

&lt;p&gt;That’s for really basic CSS properties, that should be available in all browsers &lt;em&gt;today&lt;/em&gt;. For more advanced or funny styling, I sometimes check the Webkit or Mozilla documentation to see what my browser is capable of.&lt;/p&gt;

&lt;p&gt;I love caniuse.com by the way. Stupid designers will say it’s ugly. It’s actually very well designed: it’s quick, well documented, easy to read and scan, and it gets straight to the point. At a glance, I know if the CSS property I intend to use is supported or not.&lt;/p&gt;

&lt;p&gt;In the end, if it’s a personal project, I won’t bother testing with IE. If it’s for a client, I’ll ask him to test. IE has come a long way, and considering I’ve had years of IE6 hacking, I’m glad IE 10 is getting there.&lt;/p&gt;

&lt;h2 id=&quot;what-are-the-different-ways-to-visually-hide-content-and-make-it-available-only-for-screen-readers&quot;&gt;What are the different ways to visually hide content (and make it available only for screen readers)?&lt;/h2&gt;

&lt;p&gt;Well it’s the same image replacement technique I mentioned earlier: overflow hidden and text-indent -290486px. The text is there in the code, but doesn’t appear on screen. That’s another reason why I still use this technique: I’m pretty sure it doesn’t affect the screen readers or the SEO.&lt;/p&gt;

&lt;h2 id=&quot;have-you-ever-used-a-grid-system-and-if-so-what-do-you-prefer&quot;&gt;Have you ever used a grid system, and if so, what do you prefer?&lt;/h2&gt;

&lt;p&gt;Only with Bootstrap actually. In general, I don’t like grid systems because they transfer the styling &lt;em&gt;from&lt;/em&gt; the CSS &lt;em&gt;to&lt;/em&gt; the HTML, and my Golden rule is to respect a division between the content (HTML) and the layout (CSS). For example, I’d rather have .button-signup and a .button-upload, and combine them in a selector, rather than having a .button-primary used in both cases because I’d have to dig into the HTML to change the styling, and that’s not the point of CSS.&lt;/p&gt;

&lt;p&gt;So for a grid system, you’d have things like .col-3 and .col-9 for a sidebar and a “main”, in a 12 columns layout. First, the styling is in the HTML. Second, what if you want to put that sidebar on the right and not the left? Well you’d have to modify your HTML structure, instead of changing 2 words in your CSS.&lt;/p&gt;

&lt;p&gt;Also, when coding a responsive website, you’d be stuck with 2 columns in this case. You can’t go from 4 to 3 to 2 to 1 column, depending upon the space available. You’d have either 2 or 1 column.&lt;/p&gt;

&lt;p&gt;In the end, I use a grid when I use Bootstrap, but only because Bootstrap comes with tons of other stuff.&lt;/p&gt;

&lt;h2 id=&quot;have-you-used-or-implemented-media-queries-or-mobile-specific-layoutscss&quot;&gt;Have you used or implemented media queries or mobile specific layouts/CSS?&lt;/h2&gt;

&lt;p&gt;Yes, a lot. I love it. It’s like a challenge actually. At first, I was just playing with it and thought it was magic. I’d design my desktop website, finish coding it, and then add some rules to make it decent on mobile.&lt;/p&gt;

&lt;p&gt;Nowadays, I try to go the “mobile-first” way. It’s quite easy: you just follow the HTML flow. But then the desktop layout can end up feeling like a watered down version of what you could have achieved &lt;em&gt;if&lt;/em&gt; you’d started with that version first.&lt;/p&gt;

&lt;p&gt;In any case, I really enjoy media queries. I tend to stick to min-width and max-width though.&lt;/p&gt;

&lt;p&gt;Also, I’ve had issues with synchronizing these media queries values with the ones I use in jQuery. For some reason, some browsers include the scrollbar in the calculated width, some others don’t. So it can be tricky to trigger the responsiveness in both you CSS and your jQuery.&lt;/p&gt;

&lt;h2 id=&quot;any-familiarity-with-styling-svg&quot;&gt;Any familiarity with styling SVG?&lt;/h2&gt;

&lt;p&gt;SVG directly in the HTML code? Not so much. I’ve seen some people playing with the path and fill attributes, and animating it. It’s quite fun. What I like is that you can write the colors in CSS, and avoid color profiles issues! That’s really interesting.&lt;/p&gt;

&lt;p&gt;I’ve had SVGs in image tags as well. Had color profile issues so I try to avoid that now.&lt;/p&gt;

&lt;p&gt;I haven’t tried SVGs much in CSS background-images.&lt;/p&gt;

&lt;p&gt;The best use of SVG I’ve found is icon fonts. There’s Icomoon, which is an app where you can upload your SVGs or choose existing one, and generate an icon font. And of course there’s Font Awesome, which is &lt;em&gt;really&lt;/em&gt; convenient. In both cases, what I like is the fact that I can use text CSS properties to style the icons: font-size, color, text-shadow, line-height, vertical-align… And because it’s vectorial, it looks great at any size. It’s perfect for Retina screens for example.&lt;/p&gt;

&lt;h2 id=&quot;how-do-you-optimize-your-webpages-for-print&quot;&gt;How do you optimize your webpages for print?&lt;/h2&gt;

&lt;p&gt;I don’t, really. I think I only wrote once a CSS for print specifically. I don’t even remember how to do it. Maybe a media query? Or an attribute in the link tag? Something like that.&lt;/p&gt;

&lt;h2 id=&quot;what-are-some-of-the-gotchas-for-writing-efficient-css&quot;&gt;What are some of the “gotchas” for writing efficient CSS?&lt;/h2&gt;

&lt;p&gt;I have a few that I’ve developed over the years. They’re quite personal, but in any case I don’t think there’s a real standard for writing CSS.&lt;/p&gt;

&lt;p&gt;Here are a few rules I follow:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;I write my CSS in line. I must be part of a very small minority. The thing is: I absolute love information density. I want to see the CSS structure in front of me, so I make use of the all the horizontal space. When writing 1 property per line (as everyone), it’s easy to read the properties. But I don’t care about the properties: I know them. I want to read the &lt;strong&gt;selectors&lt;/strong&gt;. So I have one set of properties per line, with 1 or multiple selectors. Sometimes I put selectors on several lines, sometimes not. Depends.&lt;/li&gt;
  &lt;li&gt;to be able to scan my properties quickly despite the fact that they’re on single line, I put them in alphabetical order. It works pretty well with time. I know roughly where to look to find a margin or a width or a text-transform.&lt;/li&gt;
  &lt;li&gt;group shared properties with selectors. If several elements share a same set of properties, you could have dedicated class, or repeat yourself, or use a mixin. What I do is just list all the selectors that share this set. Then, I can have specific styles for each of these selectors. &lt;em&gt;Way&lt;/em&gt; better than having a dedicated class.&lt;/li&gt;
  &lt;li&gt;I only use classes. I keep ids only for jQuery stuff. CSS priority is hard to graps, and ids are powerful selectors. They can take over the styling quite easily. To avoid headaches, I just use classes. Ids are meant to be used for unique elements. But nothing prevents from using classes like that. There’s no semantic in CSS. So use .header instead of #header, and you’ll avoid priority issues. Especially true when having #nav li, because if a li has #nav-home, you can’t use &lt;em&gt;just&lt;/em&gt; #nav-home and it’s stupid because it’s an id selector, so the uniqueness should work. But it doesn’t because #nav li is stronger. So you have to do #nav #nav-home, which looks really stupid.&lt;/li&gt;
  &lt;li&gt;Here’s how I order my styles: reset, fonts, generic tags, shared properties, common elements (that appear on every page), elements, elements &lt;em&gt;in&lt;/em&gt; context, colors (background, borders included), z-index, animations, CSS3 vendor-prefix stuff.&lt;/li&gt;
  &lt;li&gt;I use a tab to show a variation of the styling of an element.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;what-are-the-advantagesdisadvantages-of-using-css-preprocessors-sass-compass-stylus-less&quot;&gt;What are the advantages/disadvantages of using CSS preprocessors? (SASS, Compass, Stylus, LESS)&lt;/h2&gt;

&lt;p&gt;I tried both SASS and LESS, but never managed to integrate them in my workflow. The things I wanted to use them for is variables mainly. But I found that regrouping selectors works way better for me. One thing is that I can change the &lt;strong&gt;single&lt;/strong&gt; value in the Chrome Inspector and see it changing live &lt;em&gt;everywhere&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Also, mixins look nice. But in the end, I feel it’s an overkill to have a separate tool for something as simple (but not easy) as CSS. I’ve written my CSS and HTML in Notepad++ for years, even without auto-completion. This has helped me find ways to write my CSS efficiently, by regrouping stuff, by keeping the HTML structure clean and light, by having a clear flow in my CSS, by keeping a tidy namespace as well.&lt;/p&gt;

&lt;p&gt;So preprocessors might just be for developers looking for writing efficient CSS &lt;em&gt;for them&lt;/em&gt;. But that’s not for me. I like the static feel of a text editor and a browser.&lt;/p&gt;

&lt;h2 id=&quot;how-would-you-implement-a-web-design-comp-that-uses-non-standard-fonts&quot;&gt;How would you implement a web design comp that uses non-standard fonts?&lt;/h2&gt;

&lt;p&gt;If it’s a Google Font, just use a link tag, with the minimum amount of fonts necessary. I never used Typekit. I’ve often used a font-face generator online. I then put it in a seperate CSS file because the code can be quite long. Also: I try to keep the same font-family name for the various styles and weights. It’s easier for example to change the font-weight rather than the font-family.&lt;/p&gt;

&lt;h2 id=&quot;explain-how-a-browser-determines-what-elements-match-a-css-selector&quot;&gt;Explain how a browser determines what elements match a CSS selector?&lt;/h2&gt;

&lt;p&gt;Well I guess it’ll start by looking for the generic tag selector, then the class, then the id. (I won’t talk about inline styles or CSS in the head). Also, some properties are inherited. But some elements don’t inherit stuff (like links who don’t inherit the color). Then you also have to take into account a multiple part CSS selector, like with 2 classes. Which one takes priority? But that’s beyond the scope of the question I think.&lt;/p&gt;

&lt;h2 id=&quot;explain-your-understanding-of-the-box-model-and-how-you-would-tell-the-browser-in-css-to-render-your-layout-in-different-box-models&quot;&gt;Explain your understanding of the box model and how you would tell the browser in CSS to render your layout in different box models.&lt;/h2&gt;

&lt;p&gt;The box model basically determines how much space an element will take on the screen. It includes the height/width (applied or generated), the padding, and the borders. The paddings and borders are usually set. The height/width is often flexible, and is determined by the inner text or child elements.&lt;/p&gt;

&lt;p&gt;If you want a different box model, just use IE6 and delete the doctype. You’ll trigger Quirks mode. It’s like the new box-sizing: border-box. I’m not used to that. I’m used to the content-box, where the width doesn’t include the paddings nor borders.&lt;/p&gt;

&lt;h2 id=&quot;what-does---box-sizing-border-box--do-what-are-its-advantages&quot;&gt;What does * { box-sizing: border-box; } do? What are its advantages?&lt;/h2&gt;

&lt;p&gt;It’s the IE6 Quirks mode: if you set a width, and add paddings and borders, the &lt;em&gt;total&lt;/em&gt; width won’t change. It’s the innerwidth that’ll adapt.&lt;/p&gt;

&lt;p&gt;Advantage? You can play with the paddings and border values without worrying about expanding your box. Very convenient for column layouts. And you can mix percentage and pixel values, so you don’t have to rely on a child element for the padding.&lt;/p&gt;

&lt;p&gt;Disadvtange? Well, I’ve spent 7 years designing with the content-box model in mind, and now it seems he border-box model is catching up. I feel like dealing with IE6 again. But apparently, I’ve heard that the W3C always wanting to make the border-box model the standard. So I guess it’s a good idea to get acquainted with it right away. Bootstrap uses it, and my HTML5 reset uses it. And the browser compatibility seems ok.&lt;/p&gt;

&lt;h2 id=&quot;list-as-many-values-for-the-display-property-that-you-can-remember&quot;&gt;List as many values for the display property that you can remember.&lt;/h2&gt;

&lt;p&gt;Ah well, block and inline. The 2 big ones! list-item, which is quite useless. none, table, table-cell, table-row.&lt;/p&gt;

&lt;p&gt;I’ve been using table-cell a lot lately. Two things it does well is vertical-align, and taking up all the horizontal space (although you need table and table-row for that). It’s like designing with tables, but with only the good parts (and the correct semantics).&lt;/p&gt;

&lt;h2 id=&quot;whats-the-difference-between-inline-and-inline-block&quot;&gt;What’s the difference between inline and inline-block?&lt;/h2&gt;

&lt;p&gt;Ah, forgot about inline-block in the previous question. Well, inline-block is like the best of both worlds (or the worst). Main difference with inline is that you can actually set a height and width on the inline-block. And you can still use text-align center on the parent to center these!&lt;/p&gt;

&lt;p&gt;So inline-block is like a mini block that you can insert in text. It’s like an image basically, which is the most hybrid HTML element.&lt;/p&gt;

&lt;h2 id=&quot;whats-the-difference-between-a-relative-fixed-absolute-and-statically-positioned-element&quot;&gt;What’s the difference between a relative, fixed, absolute and statically positioned element?&lt;/h2&gt;

&lt;p&gt;Static is the default value. The element stays in the flow.
Relative is almost like static, but with some tweaks. It also stays in the flow (which is the magic part), but you can use left/right/top/bottom to actually &lt;em&gt;offset&lt;/em&gt; the element, &lt;strong&gt;without&lt;/strong&gt; the other elements being aware of it! It’s like movement in disguise. Also: you can use the z-index. And also (very important): it acts like a point of reference for absolute-positioned child elements.
Absolute takes the element out of the flow. So the other elements act like it’s not there. That’s why absolute elements appear on top. Then the first positioned parent acts like a reference point: you can use left/right and top/bottom to position the element, like on a grid axis. One trick is to provide values for the 4 properties, keep height and width to auto, and you have a perfect flexible overlay!
Fixed positioning is like absolute, but the reference is the body, or the viewport actually. Usually used for headers, but is also perfect for overlays, because fixed elements don’t scroll.&lt;/p&gt;

&lt;h2 id=&quot;what-existing-css-frameworks-have-you-used-locally-or-in-production-bootstrap-purecss-foundation-etc&quot;&gt;What existing CSS frameworks have you used locally, or in production? (Bootstrap, PureCSS, Foundation etc.)&lt;/h2&gt;

&lt;p&gt;Bootstrap only. Used it for a few projects only recently. I think it’s great for web apps, because you don’t care about semantics, you just need a workable interface that works well on most browsers. And in this case, I’m in a “Just make it work” state of mind, so I don’t care about writing/rewriting my HTML for building my layout.&lt;/p&gt;

&lt;p&gt;What I do is have an override.css to alter the Bootstrap elements, and have a specific.css for additional classes.&lt;/p&gt;

&lt;p&gt;What I mostly like about Bootstrap is the grid system, the form elements (&lt;em&gt;really&lt;/em&gt; great implementation), the basic responsiveness, the JS plugins, the buttons that work everywhere.&lt;/p&gt;

&lt;p&gt;For a quick dashboard, or a simple WordPress theme, I’d use Bootstrap because I want to gain time. But for bigger projects, I have my very own way of writing CSS and imagining its structure, that I’d write everything from scratch. It’s more flexible for maintaining, and it also allows me to design more complex layouts.&lt;/p&gt;

&lt;h2 id=&quot;have-you-played-around-with-the-new-css-flexbox-or-grid-specs&quot;&gt;Have you played around with the new CSS Flexbox or Grid specs?&lt;/h2&gt;

&lt;p&gt;No.&lt;/p&gt;

</content>
 </entry>
 
 <entry>
   <title>Wikipedia redesign</title>
   <link href="http://jgthms.com/wikipedia-redesign.html"/>
   <updated>2014-04-27T00:00:00+01:00</updated>
   <id>http://jgthms.com/wikipedia-redesign</id>
   <content type="html">&lt;p&gt;It’s a common thing among designers to provide a so-called “unsolicited redesign” of a well-known website and write about it. Here’s my humble attempt.&lt;/p&gt;

&lt;figure&gt;
  &lt;a href=&quot;/images/wikipedia-redesign-full.png&quot;&gt;&lt;img alt=&quot;Wikipedia Redesign&quot; src=&quot;/images/wikipedia-redesign.png&quot; /&gt;&lt;/a&gt;
&lt;/figure&gt;

&lt;p&gt;As you would have figured, it’s just a screenshot. I didn’t change anything because &lt;em&gt;there is nothing to change&lt;/em&gt;. Or at least, not enough to prompt a complete graphical overhaul.&lt;/p&gt;

&lt;h2 id=&quot;its-about-content-stupid&quot;&gt;“It’s about content, stupid!”&lt;/h2&gt;

&lt;p&gt;Wikipedia is probably my favorite website. I like to imagine it as the epitome of Sir Tim Berners-Lee’s vision when he created the Web: a collaborative tool to gather and share knowledge freely.&lt;/p&gt;

&lt;p&gt;An open encyclopedia? Accessible online for free? But most importantly, editable by anyone? &lt;em&gt;“That’s crazy, it’s never gonna work.”&lt;/em&gt; The ability to easily insert false information embodies the usual criticism you would encounter, but actually acts like a fraudulent proof-of-concept of Wikipedia’s doomed premise. The thing is, there is in the long run no incentive to alter Wikipedia’s content and degrade its integrity. The collaborative authority will prevent it anyway.&lt;/p&gt;

&lt;p&gt;As a result, Wikipedia’s main, and sole, purpose is to &lt;strong&gt;deliver content&lt;/strong&gt;. It’s a database of information, 95% of which is text, the not coincidentally “T” in HTML.&lt;/p&gt;

&lt;h2 id=&quot;the-tldr-of-the-links-it-references&quot;&gt;The TL;DR of the links it references&lt;/h2&gt;

&lt;p&gt;You usually don’t &lt;em&gt;read&lt;/em&gt; Wikipedia: you &lt;strong&gt;scan&lt;/strong&gt; it. Well, it &lt;em&gt;is&lt;/em&gt; a website, and with it comes the usual browsing behavior. Any redesign that crushes the &lt;strong&gt;information density&lt;/strong&gt; is missing the primary use case: looking for a specific bit of information in a well-structured page &lt;em&gt;full of text&lt;/em&gt;. It’s a starting point that provides a condensed overview.&lt;/p&gt;

&lt;p&gt;There are studies about how each line of text shouldn’t exceed 70-80 characters. I hope Wikipedia never blindly sticks to that rule. I want the data, the text, the hyperlinks, the sidebar summary, the hierarchy &lt;em&gt;in the layout&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;And whenever I &lt;em&gt;do&lt;/em&gt; read a page in full, the design never bothered me. I actually didn’t &lt;em&gt;see&lt;/em&gt; the design. I wasn’t aware of it. And that’s actually the point.&lt;/p&gt;

&lt;h2 id=&quot;the-fairy-tale-mockup&quot;&gt;The “fairy tale” mockup&lt;/h2&gt;

&lt;p&gt;You’ve seen it in all redesigns already:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;the Facebook news feed with gorgeous friends pictures&lt;/li&gt;
  &lt;li&gt;the ad-less IMDB&lt;/li&gt;
  &lt;li&gt;the content-curated Wikipedia page&lt;/li&gt;
  &lt;li&gt;the huge screen/no border iPhone concept&lt;/li&gt;
  &lt;li&gt;the image-heavy “2560x1440 optimized” airline website&lt;/li&gt;
&lt;/ul&gt;

&lt;figure&gt;
  &lt;a href=&quot;http://cdn.gkvasnikov.com/img/design-1.jpg&quot;&gt;&lt;img alt=&quot;Funky Wikipedia&quot; src=&quot;/images/funky-hp.jpg&quot; /&gt;&lt;/a&gt;
&lt;/figure&gt;

&lt;p&gt;In the latest Wikipedia redesign concept, the &lt;a href=&quot;http://cdn.gkvasnikov.com/img/design-1.jpg&quot;&gt;homepage&lt;/a&gt; uses a grid of high-quality images as its primary content. Why high-quality? Well, they’re mostly &lt;strong&gt;pictures&lt;/strong&gt;, either aesthethically pleasing &lt;em&gt;or&lt;/em&gt; immediately identifiable. It’s easy to dismiss the text when choosing pictures/paintings of Steve Jobs, Virgina Woolf, Horatio Nelson, Nelson Mandela, Henri VIII…&lt;/p&gt;

&lt;p&gt;I guess Wikipedia mention them every month, right? What about the content that’s on &lt;a href=&quot;http://en.wikipedia.org/wiki/Main_Page&quot;&gt;Wikipedia right now&lt;/a&gt;?&lt;/p&gt;

&lt;figure&gt;
  &lt;img alt=&quot;Nichiren&quot; src=&quot;/images/national-road.jpg&quot; /&gt;
  &lt;img alt=&quot;Sundial solstice&quot; src=&quot;/images/sundial-solstice.gif&quot; /&gt;&lt;br /&gt;
  &lt;figcaption&gt;The Alt US 40, and the sundial solstice declination lines for different latitudes. Not &quot;good enough&quot; for mockups, but probably more interesting.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Sure, let’s drop the substance, or alter it enough to fit our needs. It works for me, in my context, on my screen, it should be fine, right? Well, that’s not designing. That’s &lt;strong&gt;cheating&lt;/strong&gt;. You’re skewing the content’s use, perverting its value.&lt;/p&gt;

&lt;h2 id=&quot;i-wouldnt-hire-you&quot;&gt;I wouldn’t hire you&lt;/h2&gt;

&lt;p&gt;So you wanted to show off your Photoshop skills? And you chose one of the top 5 websites? Surely nobody thought about it (both the project choice and &lt;em&gt;actually&lt;/em&gt; redesigning Wikipedia).&lt;/p&gt;

&lt;p&gt;Why Wikipedia? Because you often stumbled upon it and thought “Urgh, it’s so ugly!”? If so, &lt;strong&gt;you weren’t using it&lt;/strong&gt;. You were &lt;em&gt;looking&lt;/em&gt; at it. That usually happens with clients and their feedback. And it’s tiring.&lt;/p&gt;

&lt;p&gt;I understand you want to build a stunning visual portfolio, and relying upon a familiar brand will trigger a better (or bigger at least) response.&lt;/p&gt;

&lt;p&gt;But you’re missing the point of designing websites. And if you provide a Wikipedia redesign only to dismiss everything that made its success, and insert your own version of Dribbble’s latest trends, then you’re probably not worth hiring because you’re incapable of analyzing the core purpose of a project and tackling real-world problems.&lt;/p&gt;

&lt;p&gt;Want some UI ideas? Make a todo app, a weather widget, I don’t care. It’s overdone, but at least you can focus on the eye-candy without killing the purpose.&lt;/p&gt;

&lt;p&gt;And don’t call yourself a UX designer. You probably don’t know anything about UX. I know I don’t. Changing the color of a button to attract the eye is not UX. Whitespace is not UX. Oh, and not distinguishing visited from non-visited links is definitely &lt;em&gt;bad&lt;/em&gt; UX.&lt;/p&gt;

&lt;p&gt;So yeah, I wouldn’t hire you. But what do I know? I’m just a designer.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Why and how I divided my articles by season</title>
   <link href="http://jgthms.com/why-and-how-i-divided-my-articles-by-season.html"/>
   <updated>2014-03-05T00:00:00+00:00</updated>
   <id>http://jgthms.com/why-and-how-i-divided-my-articles-by-season</id>
   <content type="html">&lt;p&gt;I just wrote an article about why I chose &lt;a href=&quot;/svg-and-css-rem-for-responsiveness.html&quot;&gt;SVG and CSS rem&lt;/a&gt; in this blog’s latest redesign, an article in which I mentioned having divided my articles by &lt;strong&gt;season&lt;/strong&gt;.&lt;/p&gt;

&lt;h2 id=&quot;visual-hierarchy-and-relevant-information&quot;&gt;Visual hierarchy and relevant information&lt;/h2&gt;

&lt;p&gt;With any kind of interface, I like being able to visually scan the overall layout, like having a &lt;strong&gt;macro&lt;/strong&gt; overview of the content that’s being displayed. That’s the main reason why I write &lt;strong&gt;single-line&lt;/strong&gt; CSS rules: it helps visualize the &lt;em&gt;selectors&lt;/em&gt; hierarchy rather than the &lt;em&gt;properties&lt;/em&gt; of a single selector.&lt;/p&gt;

&lt;p&gt;Anyway, I started by grouping my articles by &lt;strong&gt;year&lt;/strong&gt;. But considering I’ve only been writing on this blog for 2 years, and that each year averages 15 posts, the &lt;strong&gt;information density&lt;/strong&gt; was not high enough to quickly scan both the frequency of my writing and a particular article’s time period.&lt;/p&gt;

&lt;p&gt;I could have divided my articles furthermore by &lt;strong&gt;month&lt;/strong&gt;. But in that case, the information became both:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;irrelevant: there is no big difference in October and November for example&lt;/li&gt;
  &lt;li&gt;too precise: I would have needed to include “empty” months, those during which I didn’t write anything&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The natural compromise was to use &lt;strong&gt;seasons&lt;/strong&gt; instead, which, combined with the yearly-based division, could convey a better overview of an article’s time period.&lt;/p&gt;

&lt;p&gt;The added benefit was the opportunity to include &lt;strong&gt;colors&lt;/strong&gt; in the interface, which strengthened the ability to visually scan the chronology. (I actually used 4 of Sketch’s default colors, to which I applied a 48% opacity).&lt;/p&gt;

&lt;h2 id=&quot;playing-with-liquid-templates&quot;&gt;Playing with Liquid templates&lt;/h2&gt;

&lt;p&gt;Because this blog is hosted on &lt;a href=&quot;http://pages.github.com/&quot;&gt;GitHub Pages&lt;/a&gt;, I could not tweak Jekyll’s source code. But it was not necessary, because the &lt;a href=&quot;http://liquidmarkup.org/&quot;&gt;Liquid templating language&lt;/a&gt; was enough to generate the relevant HTML code.&lt;/p&gt;

&lt;p&gt;When looping through the articles, I have access to all the data I need, especially the &lt;strong&gt;date&lt;/strong&gt;. It was just a matter of conditional tags that allowed me to extract, for each article, both the year and the season. This &lt;a href=&quot;http://stackoverflow.com/questions/19086284/jekyll-liquid-templating-how-to-group-blog-posts-by-year&quot;&gt;Stack Overflow answer&lt;/a&gt; helped a lot.&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;https://github.com/jgthms/jgthms.github.io/blob/master/articles.html&quot;&gt;resulting code&lt;/a&gt; is quite ugly. But it doesn’t matter because &lt;em&gt;it works&lt;/em&gt;. I have no concern about my code’s performance because, after all, Jekyll is a &lt;em&gt;static&lt;/em&gt; site generator. It just has to run once in a while, as long as the generated HTML is correct.&lt;/p&gt;

&lt;p&gt;By the way, I used months and not particular ranges (like 21st of December - 21st of March) to decide which season an article belonged to. Winter overlapping 2 consecutive years would have been difficult to handle. Plus, this season division is just a visual aid.&lt;/p&gt;

&lt;h3 id=&quot;affixjs-for-scrolling-purposes&quot;&gt;Affix.js for scrolling purposes&lt;/h3&gt;

&lt;p&gt;I wanted, for each set of article currently displayed, to show the associated year-season information &lt;em&gt;constantly&lt;/em&gt;. I used Bootstrap’s excellent &lt;a href=&quot;http://getbootstrap.com/javascript/#affix&quot;&gt;Affix.js&lt;/a&gt; plugin in order to &lt;strong&gt;fix&lt;/strong&gt; the relevant time period at the top of the viewport, until it reached the next time period.&lt;/p&gt;

&lt;p&gt;I realized afterwards that I didn’t write during 2 seasons in 2012. Never noticed that before. So I guess this interface reached its objective, at least for me as a reader.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>SVG and CSS rem for responsiveness</title>
   <link href="http://jgthms.com/svg-and-css-rem-for-responsiveness.html"/>
   <updated>2014-03-02T00:00:00+00:00</updated>
   <id>http://jgthms.com/svg-and-css-rem-for-responsiveness</id>
   <content type="html">&lt;p&gt;I’ve redesigned this blog 9 times since I launched it in 2012. The latest version is focused on &lt;strong&gt;simplicity&lt;/strong&gt;, both visually and content-wise. I’ve dropped the portfolio, the music section, the colophon, the “small talk”, and the filter labels. And I’ve divided my posts by season (I’ll explain why in another post).&lt;/p&gt;

&lt;p&gt;The fact that I’ve been using &lt;a href=&quot;http://bohemiancoding.com/sketch/&quot;&gt;Sketch&lt;/a&gt; for 2 weeks now has quite affected both my design process and the final result.&lt;/p&gt;

&lt;h2 id=&quot;images-svg-instead-of-retina&quot;&gt;Images: SVG instead of Retina&lt;/h2&gt;

&lt;p&gt;Sketch makes it &lt;em&gt;very&lt;/em&gt; easy to export assets. It can automatically trim transparent pixels, provide a Retina version, and export all slices at once.&lt;/p&gt;

&lt;p&gt;I actually started going the “Retina” road, by exporting @2x versions of each image and implementing the &lt;a href=&quot;http://retinajs.com/&quot;&gt;retina.js&lt;/a&gt; script. But color profile and pixel-rendering issues led me to choose &lt;strong&gt;SVGs&lt;/strong&gt; instead.&lt;/p&gt;

&lt;p&gt;SVGs are:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;lighter&lt;/strong&gt;: it’s just code&lt;/li&gt;
  &lt;li&gt;infinitally &lt;strong&gt;scalable&lt;/strong&gt;: they keep their sharpness at any size&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;reliable&lt;/strong&gt;: no color rendering issues&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;imperishable&lt;/strong&gt;: I don’t have to export them again if I want to change their display size&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;logos&quot;&gt;Logos&lt;/h3&gt;

&lt;p&gt;For example, my logo is really simple: a circle with some overlapping rectangles.&lt;/p&gt;

&lt;figure&gt;
  &lt;img alt=&quot;JT logo&quot; src=&quot;/images/logo.svg&quot; style=&quot;height: 150px;&quot; /&gt;&lt;br /&gt;
  &lt;figcaption&gt;Scaled at 150*150px&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;It’s the perfect opportunity to try out SVG instead of PNG, especially considering Sketch makes it just as easy to export in that format.&lt;/p&gt;

&lt;p&gt;Other images used in this design overhaul include client (Microsoft, Sony…) and technology (HTML 5, jQuery…) logos, for which a SVG version was easy to find (I’d like to thank &lt;strong&gt;Wikipedia&lt;/strong&gt; for providing most of them).&lt;/p&gt;

&lt;h2 id=&quot;fonts-and-icons&quot;&gt;Fonts and Icons&lt;/h2&gt;

&lt;p&gt;Considering that fonts are made of &lt;strong&gt;Bézier curves&lt;/strong&gt;, they are infinitally scalable as well. They’re usually the only elements of a webpage that keep their sharpness when increasing the browser’s zoom.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Icon fonts&lt;/strong&gt; combine the benefits of vector assets and CSS font properties, especially size and color.&lt;/p&gt;

&lt;p&gt;Being concerned about loading efficiency, I built my own icon font with the very useful &lt;a href=&quot;http://fontello.com/&quot;&gt;Fontello&lt;/a&gt;.&lt;/p&gt;

&lt;figure&gt;
  &lt;img alt=&quot;Custom icon font with Fontello&quot; src=&quot;/images/custom-icon-font.png&quot; /&gt;&lt;br /&gt;
  &lt;figcaption&gt;Custom icon font built with Fontello&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;css-rem-responsiveness-with-font-size&quot;&gt;CSS rem: responsiveness with font-size&lt;/h2&gt;

&lt;p&gt;CSS 3 has introduced a new unit: &lt;strong&gt;rem&lt;/strong&gt; (which stands for &lt;code&gt;root em&lt;/code&gt;). Jonathan Snook &lt;a href=&quot;http://snook.ca/archives/html_and_css/font-size-with-rem&quot;&gt;wrote about it&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The &lt;code&gt;em&lt;/code&gt; unit is relative to the font-size of the parent, which causes the compounding issue. The &lt;code&gt;rem&lt;/code&gt; unit is relative to the &lt;strong&gt;root&lt;/strong&gt;-or the html—element. That means that we can define a &lt;strong&gt;single font size&lt;/strong&gt; on the html element and define &lt;strong&gt;all&lt;/strong&gt; rem units to be a percentage of that.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I’ve used &lt;code&gt;em&lt;/code&gt; for a long time, especially for margins and paddings. Spacing elements &lt;em&gt;relatively&lt;/em&gt; to their font-size helps readibility and maintenance. I also use unit-less &lt;code&gt;line-height&lt;/code&gt; values (like “1.5”) which are relative as well.&lt;/p&gt;

&lt;p&gt;As Snook’s article explains, the problem with &lt;code&gt;em&lt;/code&gt; is that it’s &lt;strong&gt;cascading&lt;/strong&gt;. Having for example &lt;code&gt;1.5em&lt;/code&gt; on both &lt;code&gt;&amp;lt;ul&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;li&amp;gt;&lt;/code&gt; will cause the latter to be 36px instead of 24px.&lt;/p&gt;

&lt;p&gt;In the end, it’s hard to keep track of what the rendered font-size actually is.&lt;/p&gt;

&lt;h3 id=&quot;rem-for-height--width--margin--padding&quot;&gt;rem for height / width / margin / padding&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;em&lt;/code&gt; can be used for CSS box properties as well, but considering its unreliability, &lt;code&gt;rem&lt;/code&gt; is a better option.&lt;/p&gt;

&lt;p&gt;How it works is:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;You &lt;strong&gt;define&lt;/strong&gt; a &lt;code&gt;font-size&lt;/code&gt; value on the root element &lt;code&gt;html&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;You &lt;strong&gt;refer&lt;/strong&gt; to this value when defining height, width, margin and padding&lt;/li&gt;
  &lt;li&gt;You can then &lt;strong&gt;modify&lt;/strong&gt; the root value and &lt;strong&gt;resize&lt;/strong&gt; your whole layout instantly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So instead of having &lt;code&gt;width: 960px&lt;/code&gt; you would write &lt;code&gt;width: 60rem&lt;/code&gt;, or &lt;code&gt;margin-top: 2rem&lt;/code&gt; instead of &lt;code&gt;margin-top: 32px&lt;/code&gt;.&lt;/p&gt;

&lt;h3 id=&quot;elastic-grid-system&quot;&gt;Elastic grid system&lt;/h3&gt;

&lt;p&gt;I came up with a simple &lt;strong&gt;grid&lt;/strong&gt; system where each column would be &lt;code&gt;3rem&lt;/code&gt; and each gutter &lt;code&gt;2rem&lt;/code&gt;, resulting in a &lt;code&gt;58rem&lt;/code&gt; container width.&lt;/p&gt;

&lt;p&gt;It’s called “&lt;strong&gt;Elastic&lt;/strong&gt;” because it’s relative to the font-size (the term apparently comes from &lt;a href=&quot;http://www.thesitewizard.com/webdesign/liquid-elastic-fixed-relative-layout.shtml&quot;&gt;Dreamweaver&lt;/a&gt;).&lt;/p&gt;

&lt;h2 id=&quot;media-queries&quot;&gt;Media queries&lt;/h2&gt;

&lt;p&gt;My default &lt;code&gt;rem&lt;/code&gt; value is set to &lt;code&gt;20px&lt;/code&gt;. Considering my &lt;code&gt;body&lt;/code&gt; full width is &lt;code&gt;58rem&lt;/code&gt;, it equals to &lt;strong&gt;1160px&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;As a result, I added a responsive breakpoint where I &lt;strong&gt;only&lt;/strong&gt; redefine my &lt;code&gt;rem&lt;/code&gt; value:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;@media (max-width: 1159px) {
  html{ font-size: 16px;}
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;And that’s all there is to it. All heights, widths, margins, paddings, font sizes, and especially &lt;strong&gt;SVG&lt;/strong&gt; images (whose heights are set in &lt;code&gt;rem&lt;/code&gt; as well) adjust themselves to this new value. It’s basically like setting your &lt;strong&gt;browser’s zoom&lt;/strong&gt; at 80%.&lt;/p&gt;

&lt;p&gt;For this responsive breakpoint, I went from about 25 lines of code to only 1.&lt;/p&gt;

&lt;h3 id=&quot;mobile-layout&quot;&gt;Mobile layout&lt;/h3&gt;

&lt;p&gt;I only have a second breakpoint at &lt;strong&gt;929px&lt;/strong&gt; which basically triggers a mobile-friendly layout. Although less relevant, &lt;code&gt;rem&lt;/code&gt; values still come into play.&lt;/p&gt;

&lt;p&gt;The main benefit here comes from the &lt;strong&gt;SVGs&lt;/strong&gt;, who render very sharply on my phone. And I don’t have to worry about Retina and non-Retina screens.&lt;/p&gt;

&lt;p&gt;As for all versions of my blog, the code is available in my &lt;a href=&quot;https://github.com/jgthms/jgthms.github.io&quot;&gt;GitHub repository&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Send a login token via email after failed attempts</title>
   <link href="http://jgthms.com/send-a-login-token-via-email-after-failed-attempts.html"/>
   <updated>2013-11-28T00:00:00+00:00</updated>
   <id>http://jgthms.com/send-a-login-token-via-email-after-failed-attempts</id>
   <content type="html">&lt;p&gt;Yesterday, I signed up for Covoiturage.fr, a carpool website. I had to provide my name, email, phone number, but no password, which was weird. After completeting the quick process, I was sent a verification email which also included an auto-generated password. I didn’t use it because clicking the “&lt;em&gt;Validate your email&lt;/em&gt;” button automatically logged me in for that one time, and I was able to send a private message like I wished to.&lt;/p&gt;

&lt;p&gt;A few hours later, I got a notification email telling me I had received a message. I clicked on “&lt;em&gt;View the message&lt;/em&gt;” and was sent to the website, which prompted me to login, considering my temporary session had expired. I tried using a usual password but it obviously failed, since I hadn’t provided one and had forgotten about the auto-generated one.&lt;/p&gt;

&lt;p&gt;Almost instantly, I received this email:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/carpool-access-token.png&quot; alt=&quot;Carpool access token&quot; /&gt;&lt;/p&gt;

&lt;p&gt;It gave me the ability to instantly connect to the website by using this single-use access token. I was both pleased and surprised to receive such an email: I just wanted to see the reply to my private message and didn’t want to bother finding and copy-pasting the auto-generated password, logging in to the website, and changing my password to an easier one.&lt;/p&gt;

&lt;p&gt;There are some issues with the whole process:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;I couldn’t define my own password at sign up&lt;/li&gt;
  &lt;li&gt;I was sent a login token after my first failed login attempt&lt;/li&gt;
  &lt;li&gt;It can encourage using this login method rather than the usual one&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But despite these 3 small quirks, the login token made sense in this situation:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;A carpool website is not a site you daily visit, but rather use on a punctual basis. So you’ll probably end up forgetting your password anyway.&lt;/li&gt;
  &lt;li&gt;Time is important: there are a limited number of seats and you need to react quickly. The login token made me gain valuable time.&lt;/li&gt;
  &lt;li&gt;Carpool users are probably mainly non tech-saavy, and are thus not good at managing passwords and/or coming up with a strong one. A login token might add a layer of security.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I ended up providing my own password but I understand why this login feature was implemented in the first place. If you’re developing a web app, you should consider providing an email access token after several failed login attempts. But, like anything, it should make sense &lt;em&gt;in your context&lt;/em&gt; and shouldn’ be implemented in &lt;em&gt;every&lt;/em&gt; case.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Another reason why target blank is still widely used</title>
   <link href="http://jgthms.com/another-reason-why-target-blank-is-still-widely-used.html"/>
   <updated>2013-11-27T00:00:00+00:00</updated>
   <id>http://jgthms.com/another-reason-why-target-blank-is-still-widely-used</id>
   <content type="html">&lt;p&gt;I’ve always hated the target blank feature. Whenever I click a link that unintentionally opens in a new tab, it feels like an intrusion on my liberty to interact like I wish to, and even feels like my browser is taken as a hostage. Ok, it sounds as an overkill to put it that way, but users actually &lt;em&gt;can&lt;/em&gt; open links in new tabs ; target blanks just remove the &lt;strong&gt;choice&lt;/strong&gt; to do so. The worst are links &lt;em&gt;of the same domain&lt;/em&gt; that open in a new tab (luckily, it’s very rare). In any case, target blank links can end up populating your browser with dozens of unnecessary tabs.&lt;/p&gt;

&lt;p&gt;The reasoning being implementing them is to prevent the user from leaving your site. Actually, the user &lt;em&gt;does&lt;/em&gt; leave your site, but you hope that, while closing tabs and eventually stumbling again upon your site left in an inactive but open tab, the user will eventually resume his browsing or at least remember where he initially came from.&lt;/p&gt;

&lt;p&gt;Most users probably do the same thing as me: close this tab we’ve forgotten about and just move on. So, does the target blank fail to fulfill its sole objective? Not really. Leaving a tab inactive but open probably still counts as a visitor &lt;em&gt;present&lt;/em&gt; on your site, and will show as such in any implemented analytics script. And I guess ‘Visit duration’ can act as an interesting leverage in any advertisement-focused decision.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Why I'm still uncomfortable using my iMac</title>
   <link href="http://jgthms.com/why-im-still-uncomfortable-using-my-mac.html"/>
   <updated>2013-10-13T00:00:00+01:00</updated>
   <id>http://jgthms.com/why-im-still-uncomfortable-using-my-mac</id>
   <content type="html">&lt;p&gt;I bought my first Mac two years ago, a brand new (and relatively expensive) 27 inch iMac. The main reason behind my purchase was my wish to turn it into my primary music production setup. I intensively use Ableton Live (for recording and writing) and Logic Pro (for mixing). Since then, my iMac has proved to be a very reliable and fast computer for my musical needs. Mac OS’ UI and core features are very pleasant as well: Spotlight, Finder’s column view, Time Machine backups, keyboard controls, screen captures… Apple’s own software is also of great use: iTunes works &lt;em&gt;way&lt;/em&gt; better than Windows’ counterpart, iMovie is incredibly easy to handle, and iPhoto has proved very useful. My iMac has also become my programming computer considering how easy it is to install Python, Ruby, Rails, Node.js, Git…&lt;/p&gt;

&lt;p&gt;As a result, I’ve been inclined to turn my iMac into my &lt;em&gt;sole&lt;/em&gt; workstation, the one I’d turn to for &lt;em&gt;any&lt;/em&gt; computer-related task, no matter how casual or insignificant: browsing the web, checking my mail, watching videos, designing websites, playing games… But I still naturally settle for my older 2-screen Windows 7 desktop computer. I wondered why, and came up with the following reasons:&lt;/p&gt;

&lt;h2 id=&quot;the-imac-mouse&quot;&gt;The iMac mouse&lt;/h2&gt;

&lt;p&gt;Simply put, the Magic Mouse, is &lt;em&gt;different&lt;/em&gt;. It’s Apple’s attempt to improve, or at least disrupt, one of the most basic interface device. The thing is, there &lt;em&gt;is&lt;/em&gt; a learning curve, which is unusual for an invention that has only been slightly altered for the last 30 years. But I decided to give it a chance, considering its interesting interactions with Mac OS, like the multi-touch gestures it provides.&lt;/p&gt;

&lt;h3 id=&quot;scrolling&quot;&gt;Scrolling&lt;/h3&gt;

&lt;p&gt;Scrolling on a Magic Mouse is a vastly superior experience than on any other mouse I’ve encountered. It’s probably why Apple has even horizontal scrolling play an important part in many of its app and web interfaces. But I think the Magic Mouse actually loves scrolling too much…&lt;/p&gt;

&lt;p&gt;Countless times I’ve triggered scrolling when all I wanted is click an element. (Funnily enough, this also happens in iOS). For example, trying to click a small web link usually ends up in scrolling (and not even triggering the link), or trying to select an element in Photoshop ends up in zooming out.&lt;/p&gt;

&lt;p&gt;Because both a Magic’s Mouse surface &lt;em&gt;and&lt;/em&gt; scrolling area are indistinguishable, scrolling is often an unwanted command that can’t be easily avoided.&lt;/p&gt;

&lt;h3 id=&quot;secondary-click&quot;&gt;Secondary click&lt;/h3&gt;

&lt;p&gt;The Magic Mouse doesn’t provide a true secondary click button. As a matter fact, the primary click button is &lt;em&gt;huge&lt;/em&gt;, spawning across the whole width of the device.&lt;/p&gt;

&lt;p&gt;The lack of secondary click isn’t new: Apple always favored a Ctrl + Primary Click to trigger context menus. But requiring both hands for such a basic and widely adopted feature always seemed peculiar and truly a usability issue. Browsing the web while copy/pasting text, opening links in new tabs, or launching the web inspector, becomes a two-handed task that prevents my left one from holding a phone conversation, having a drink, scratching my head, or just plainly resting.&lt;/p&gt;

&lt;p&gt;I just &lt;em&gt;need&lt;/em&gt; that secondary click, a real one.&lt;/p&gt;

&lt;h3 id=&quot;acceleration-curve&quot;&gt;Acceleration curve&lt;/h3&gt;

&lt;p&gt;With all these hardware-related mouse issues, why not simply buy a new one? I could, and it would offer me a true right-click, a real scrolling wheel, and even a third-click. But still, it wouldn’t solve the biggest issue encountered with any Mac OS mouse: the &lt;strong&gt;acceleration curve&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I’ve always been confused by Mac OS’ pointer movements. I could never explain what &lt;em&gt;exactly&lt;/em&gt; was the cause of my discomfort. Some say it’s the acceleration curve, some &lt;a href=&quot;http://d43.me/blog/1205/the-cause-for-all-your-mac-os-x-mouse-annoyances/&quot;&gt;say it’s lag&lt;/a&gt;, some &lt;a href=&quot;https://news.ycombinator.com/item?id=3557247&quot;&gt;don’t even feel any annoyance&lt;/a&gt;. For what it’s worth, I really believe it’s the curve. The cursor speed &lt;strong&gt;difference&lt;/strong&gt; between a rapid mouse movement and a slow one is truly bigger than on Windows. And it becomes even more distinct when moving a Mac Mouse very slowly.&lt;/p&gt;

&lt;p&gt;I never understand how designers using Photoshop on a daily basis can feel comfortable with these pointer movements. I always have trouble selecting a precise amount of pixels or moving an element around.&lt;/p&gt;

&lt;p&gt;Anyway, there is something &lt;em&gt;odd&lt;/em&gt; about pointer movements in Mac OS. And no matter what tweak I’ve tried or setting I’ve adjusted, it’s still there.&lt;/p&gt;

&lt;p&gt;As a result, I still decided to stick to the Magic Mouse because it’s connected to a &lt;a href=&quot;http://alistapart.com/article/habit-fields&quot;&gt;habit field&lt;/a&gt;: the moment I touch a Magic Mouse, I instinctively &lt;em&gt;know&lt;/em&gt; that the acceleration curve will be different, the scrolling sensitive, the secondary click fuzzy and the third one lacking. My hand subconciously tells my brain to adapt to this new context. This provides me the ability to easily switch back and forth between my iMac and my Windows desktop without any reconfiguration period.&lt;/p&gt;

&lt;h2 id=&quot;keyboard-shorcuts-and-discoverability&quot;&gt;Keyboard shorcuts and discoverability&lt;/h2&gt;

&lt;p&gt;I love the iMac keyboard, especially because it’s a &lt;a href=&quot;http://en.wikipedia.org/wiki/Chiclet_keyboard&quot;&gt;chiclet one&lt;/a&gt; which reduces the distance and amount of effort to press a key. I also like its weight, its design, and its OS controls.&lt;/p&gt;

&lt;p&gt;Because any designer or programmer’s computer is his primary (and often sole) working device, he will intensively make use of keyboard shortcuts. Any time spent learning or configuring a shortcut is a profitable investment in future hours of time saved and improved workflow.&lt;/p&gt;

&lt;p&gt;But triggering a keyboard shortcut on a Mac is a hassle. Almost all of them require the oddly placed Cmd key. It’s located right under your palm, and I instinctively use my thumb to press it. I got used to it. But for more advanced shortcuts, you need to considerably bend your fingers to reach the Alt and Control keys, ending up pressing them with your nails instead of your skin, creating an unstable contact that sometimes end up in your finger slipping away.&lt;/p&gt;

&lt;p&gt;Shortcut keys are configurable: you can modify their assignment, which is like altering their physical position. But there’s still that Function key that monopolizes the best spot for a shortcut key: the bottom-left corner.&lt;/p&gt;

&lt;p&gt;Here again, I could buy a new keyboard, with better-located Ctrl, Alt, and Fn keys, assign them correctly, and spend hours scratching my head wondering how this software’s shortcut is meant to be triggered on this particular keyboard. But I’d probably lose the Mac OS keyboard controls, and it’d still not solve the following problem.&lt;/p&gt;

&lt;h3 id=&quot;keyboard-combinations&quot;&gt;Keyboard combinations&lt;/h3&gt;

&lt;p&gt;Considering the amount of keyboard shortcuts available in more advanced softwares and the amount of keys on a keyboard, most keyboard shortcuts are &lt;strong&gt;combinations&lt;/strong&gt;, i.e. a number of keys meant to be pressed &lt;em&gt;simultaneously&lt;/em&gt;. There are multiple levels of combination:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;1 shortcut key + 1 letter: Cmd + S, Cmd + C, Cmd + V…&lt;/li&gt;
  &lt;li&gt;2 shortcut keys + 1 letter: Cmd + Shift + S, Cmd + Alt + P…&lt;/li&gt;
  &lt;li&gt;3 shortcut keys + 1 letter: Cmd + Alt + Shift + S (‘Save for the web’ in Photoshop)&lt;/li&gt;
  &lt;li&gt;4 shortcut keys + 1 letter (very rare though)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because there are 4 shortcut keys, and because you can press a different combination for each level (besides the 4th level), you can for example in the 2nd level, have either Cmd + Alt or Cmd + Shift or Cmd +  Ctrl. If you then attach a letter to each of these combinations, you have multiple shortcuts for the &lt;em&gt;same&lt;/em&gt; letter. In the end, there are &lt;em&gt;a lot&lt;/em&gt; of keyboard shortcuts available.&lt;/p&gt;

&lt;p&gt;Well then, what’s the problem with combinations?&lt;/p&gt;

&lt;p&gt;The problem is exactly what I just showed: besides the fact that some combinations are a physical pain to trigger, there are too many of them. For each software you’ll use, you’ll need to learn and memorize them. And if not implemented, you’ll have to configure them and make sure you don’t override any other shortcut, especially system-wide ones.&lt;/p&gt;

&lt;p&gt;What’s the solution to combinations?&lt;/p&gt;

&lt;h3 id=&quot;keyboard-sequences&quot;&gt;Keyboard sequences&lt;/h3&gt;

&lt;p&gt;Instead of pressing multiple keys at once, just hold a shortcut key while pressing letters &lt;em&gt;one after the other&lt;/em&gt;, in a &lt;strong&gt;sequence&lt;/strong&gt;. For example, in Sublime Text, toggling the sidebar is done by holding Cmd, pressing K, &lt;em&gt;then&lt;/em&gt; pressing B.&lt;/p&gt;

&lt;p&gt;Sequences and combinations are not mutually exclusive. And sequences are not Windows or Linux exclusive either. But what makes Windows (and maybe Linux, I don’t know) superior in that domain is &lt;strong&gt;keyboard shortcuts discoverability&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Alt&lt;/strong&gt; key in Windows both highlights the menu bar, and underlines certain letters (generally the initial). This underlining hints at the fact that you can press that letter to trigger the related submenu. Furthermore, it’s a multi-level feature: after having pressed a letter while holding Alt, the submenu appears and highlights letters for these sub-elements. (By the way, the letter list is reset at each level so that you can use the same letter in different submenus). If a submenu holding another sub-level is opened, it will highlight its letters as well.&lt;/p&gt;

&lt;p&gt;A quick gif example (in French):&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/windows-keyboard-alt-sequence.gif&quot; alt=&quot;Windows Alt key sequence shortcut&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The 3 states are:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;ol&gt;
      &lt;li&gt;No key pressed&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;ol&gt;
      &lt;li&gt;Alt key pressed and held&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;ol&gt;
      &lt;li&gt;Letter ‘i’ pressed and the submenu opens, highlighting new elements&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this case, I wanted to crop the viewport (‘Recadrer’). Although I know this shortcut by heart, I don’t actually &lt;em&gt;need&lt;/em&gt; to learn it: I just follow the letters. Alt + I, then C. If I use such a sequence shortcut a lot, I will eventually learn it. If I don’t and just want to trigger a Photoshop function I rarely use, I can easily browse through the menus using only my keyboard.&lt;/p&gt;

&lt;p&gt;I have Photoshop on my iMac as well and really miss these kinds of sequences that are applicable across all Windows apps.&lt;/p&gt;

&lt;h2 id=&quot;window-management&quot;&gt;Window management&lt;/h2&gt;

&lt;p&gt;I’ve been accustomed to using 2 monitors, at work and at home. Firefox or Chrome on the left, Sublime Text on the right, and Photoshop across both sides (canvas on the left, some tools on the right). I don’t have a 2nd monitor for my iMac. I could set up one, but:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;I lack the space to&lt;/li&gt;
  &lt;li&gt;I would need an equally or closely sized monitor to maintain a certain balance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Although the Mac OS interface is single-task oriented, the screen real estate isn’t. Apart from Photoshop or Ableton Live, you don’t launch apps in fullscreen on a 27 inch monitor. Text-oriented apps such as a web browser or a text editor can not be efficiently used when a single line of text comprises &lt;em&gt;hundreds&lt;/em&gt; of characters.&lt;/p&gt;

&lt;p&gt;So you end up resizing your windows half the width of the monitor. And this in turn, creates another issue: windows keep randomly &lt;strong&gt;stacking up&lt;/strong&gt; across the viewport. I’m unable to find a decent position for them, probably because the positions and dimensions are up to you, and thus their number incredibly large.&lt;/p&gt;

&lt;p&gt;I’ve tried using Spaces but I couldn’t get accustomed to it. I need my windows to exist within my viewing area, and not have theme figuratively disappear beyond the scope of my monitor. Besides, I hate the movement Spaces triggers when switching back and forth between apps that aren’t in the same Space.&lt;/p&gt;

&lt;p&gt;Although I’ve tried some window management utilities, I couldn’t find one that suited me well. Maybe &lt;a href=&quot;https://itunes.apple.com/us/app/bettersnaptool/id417375580&quot;&gt;BetterSnapTool&lt;/a&gt; that I discovered recently will do the work, considering it replicates Win 7’s Aero Snap (and even seems to improve it).&lt;/p&gt;

&lt;h2 id=&quot;an-apple-laptop-is-okay&quot;&gt;An Apple laptop is okay&lt;/h2&gt;

&lt;p&gt;Weirdly, I have trouble using my iMac, but I don’t using my MacBook Air. It probably resides in the fact that:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;a laptop has no mouse&lt;/li&gt;
  &lt;li&gt;its single and small screen is more suited for single-tasking&lt;/li&gt;
  &lt;li&gt;I can launch my apps in fullscreen&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Plus, Mac OS 10.7 is really well suited for multi-touch gestures. Opening my MBA triggers a habit field upon a limited environment for better oriented work.&lt;/p&gt;

&lt;p&gt;Some (and maybe most actually) people have perfectly managed and embraced their Windows-to-Mac transition. Maybe having spent more than 10 years solely on Windows has hindered my iMac adoption, the mouse movement issues being the main culprit. I’d like to focus on one particular OS, but my designing and casual needs require a Windows environment whereas my musical orientations entail a Mac one. And if it wasn’t for my many third-party proprietary software needs, I’d probably give Linux a shot as well.&lt;/p&gt;

</content>
 </entry>
 
 <entry>
   <title>Tap a little higher on Windows Phone</title>
   <link href="http://jgthms.com/tap-a-little-higher-on-windows-phone.html"/>
   <updated>2013-07-23T00:00:00+01:00</updated>
   <id>http://jgthms.com/tap-a-little-higher-on-windows-phone</id>
   <content type="html">&lt;p&gt;I recently purchased a &lt;a href=&quot;http://www.nokia.com/global/products/phone/lumia620/&quot;&gt;Nokia Lumia 620&lt;/a&gt;. I owned an iPhone some years ago, but when it got stolen, I didn’t feel the need to have a permanent internet access anymore. But recently I figured that owning a smartphone is ultimately benefitial, as long as you prevent yourself from installing any casual game or aimlessly browsing the web.&lt;/p&gt;

&lt;p&gt;Anyway, I’m still very familiar with iOS. After I lost my iPhone, I purchased an iPad 1, an iPod Touch, and recently an iPad Mini. I still consider iOS the best mobile OS available, in terms of responsiveness, usability, and global appeal.&lt;/p&gt;

&lt;p&gt;Like anything new though, I am pleased with my Windows Phone. Great hardware, live tiles, predictive typing, decent default apps (especially the Nokia GPS), iTunes-free administration… Apart from the radically different design approach, the recurrent issue I still encounter with my Windows Phone is to &lt;strong&gt;tap too low&lt;/strong&gt;. If I want to tap on a link, I usually end up taping the one right below. I figured that WP’s taping area is calibrated &lt;em&gt;exactly&lt;/em&gt; on its location, meaning that, in order to tap on a link, my thumb has to cover it completely. On iOS, the calibration is slightly different: you need to tap a little below the link, which actually prevents your thumb from hiding the link you’re trying to interact with.&lt;/p&gt;

&lt;p&gt;I don’t know which approach is the best but switching from one device to the other still yields some unexpected behavior.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Designing with CSS animations</title>
   <link href="http://jgthms.com/designing-a-single-page-with-css-animations-keyframes-and-a-full-size-background-cover.html"/>
   <updated>2013-07-11T00:00:00+01:00</updated>
   <id>http://jgthms.com/designing-a-single-page-with-css-animations-keyframes-and-a-full-size-background-cover</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://jt.ms&quot;&gt;&lt;img src=&quot;/images/jtms.jpg&quot; alt=&quot;JT.ms&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For almost a year now, I’ve had this 4-letter domain: &lt;a href=&quot;http://jt.ms&quot;&gt;jt.ms&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’ve only recently started using it as quick URL shortener so that, if anyone asked me (in real life) the address of my blog or my SoundCloud profile, I’d tell them “jt.ms/blog” or “jt.ms/music”, rather than a slightly longer URL. But I also wanted this domain to act as a tiny portal to some of my websites and as a simple profile for my musical aspirations.&lt;/p&gt;

&lt;p&gt;So I decided to quickly design one, and use the opportunity to have fun with some new CSS features.&lt;/p&gt;

&lt;h2 id=&quot;css-background-cover&quot;&gt;CSS background cover&lt;/h2&gt;

&lt;p&gt;I remember when I had to settle for jQuery to fill a webpage’s background with a full-size image. Luckily enough, CSS 3 implementation has come a long way and the &lt;code&gt;background-size&lt;/code&gt; property is nowadays &lt;a href=&quot;http://caniuse.com/#feat=background-img-opts&quot;&gt;pretty well supported&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I just had to figure what image to put. And that’s what actually triggered the whole redesign process. I had an instant vision of what picture to take: an overview of my desktop setup. I guess it’s a designer’s thing to showcase his working desktop (the same way a developer would sometimes list his Vim/Emac plugins or discuss his favorite coding practices…). Anyway, I felt it was an appealing way to convey what I do as an aspiring music producer.&lt;/p&gt;

&lt;p&gt;So I semi-randomly placed my gear, opened Ableton Live and launched a fake recording session to light up the whole thing. I took a few pictures, and the last one looked good enough. I launched Photoshop and applied a script I had saved some time ago and it turned out &lt;a href=&quot;http://jt.ms/jt.jpg&quot;&gt;pretty well&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;background-size&lt;/code&gt; property is incredibly easy to implement:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;html { 
  background: #0c031e url(jt.jpg) no-repeat center center fixed; 
  -webkit-background-size: cover;
  -moz-background-size: cover;
  -o-background-size: cover;
  background-size: cover;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The browser will take care of the redimensioning and make sure that the whole background is always covered by the image, while maintaining its aspect ratio, especially if it doesn’t match the browser’s window one.&lt;/p&gt;

&lt;h2 id=&quot;css-animations-on-hover-effects&quot;&gt;CSS animations on hover effects&lt;/h2&gt;

&lt;p&gt;I only had 4 links to insert on my page:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;my personal blog: &lt;a href=&quot;http://jthom.as&quot;&gt;jthom.as&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;my SoundCloud profile: &lt;a href=&quot;https://soundcloud.com/jgthms&quot;&gt;soundcloud.com/jgthms&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;this blog about design: &lt;a href=&quot;http://jgthms.com&quot;&gt;jgthms.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;a JavaScript-generated mailto contact link&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The 3 websites’ main color turned out surprisingly complementary.&lt;/p&gt;

&lt;figure&gt;
  &lt;img alt=&quot;JT.ms links&quot; src=&quot;/images/jtms-links.jpg&quot; /&gt;
&lt;/figure&gt;

&lt;p&gt;I quickly settled for simple circles. For the hover event, I recalled &lt;a href=&quot;http://svbtle.com/&quot;&gt;Svbtle’s Kudos button&lt;/a&gt; and its animation when submitting a vote. I discovered a &lt;a href=&quot;https://github.com/masukomi/kudos&quot;&gt;GitHub repo&lt;/a&gt; that implemented this functionality. I took only some part of the client-side code, especially the &lt;a href=&quot;https://github.com/masukomi/kudos/blob/master/kudos.css&quot;&gt;CSS transitions&lt;/a&gt;. The jQuery code came down to a adding/removing a class.&lt;/p&gt;

&lt;p&gt;CSS animations are great, but &lt;a href=&quot;http://stackoverflow.com/questions/10090582/can-i-use-hover-to-trigger-a-css3-animation-or-transition-which-keeps-running&quot;&gt;you can’t trigger them on a :hover event&lt;/a&gt;. So you need to use jQuery to add/remove a CSS class on the element you want to trigger a different animation on, and define this new animation within a new CSS block that refers to that new CSS class.&lt;/p&gt;

&lt;p&gt;Ok, let’s use an example. Here’s the HTML code of my links:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;a&amp;gt;
  &amp;lt;strong&amp;gt;music&amp;lt;/strong&amp;gt;
  &amp;lt;em&amp;gt;&amp;lt;/em&amp;gt;
  &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;/a&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;ul&gt;
  &lt;li&gt;The &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; is the container&lt;/li&gt;
  &lt;li&gt;The &lt;code&gt;&amp;lt;strong&amp;gt;&lt;/code&gt; holds the text (and doesn’t move)&lt;/li&gt;
  &lt;li&gt;The &lt;code&gt;&amp;lt;em&amp;gt;&lt;/code&gt; is the bordered circle that shrinks down on hover&lt;/li&gt;
  &lt;li&gt;The &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; is the full colored disc that expands on hover&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Only the &lt;code&gt;&amp;lt;em&amp;gt;&lt;/code&gt; and the &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; are actually animated.&lt;/p&gt;

&lt;h3 id=&quot;the-bordered-circle&quot;&gt;The bordered circle&lt;/h3&gt;

&lt;p&gt;Here’s the code for the &lt;code&gt;&amp;lt;em&amp;gt;&lt;/code&gt; taken from the &lt;a href=&quot;https://github.com/masukomi/kudos/blob/master/kudos.css&quot;&gt;GitHub repo&lt;/a&gt; I mentioned above (and for the sake of readibility, I removed all vendor-prefixed CSS properties, but you should use them in production):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;a em {
  border: 1px solid rgba(255, 255, 255, 0.48);
  border-radius: 50%;
  height: 94px;
  left: 50%;
  margin-left: -48px;
  margin-top: -48px;
  position: absolute;
  top: 50%;
  width: 94px;

  transform: scale(1);
  transition-duration: 500ms;
  transition-property: transform, background-color;
  transition-timing-function: ease-out;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Ok so the first 9 lines are purely for styling and positioning (I especially like the &lt;code&gt;border-radius: 50%&lt;/code&gt;, a nice find).&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;transform&lt;/code&gt; property defines the &lt;strong&gt;initial&lt;/strong&gt; state of the &lt;code&gt;&amp;lt;em&amp;gt;&lt;/code&gt; element.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;transition&lt;/code&gt; prefixed properties define &lt;strong&gt;how&lt;/strong&gt; we’re going from the initial state to the final state (which I’ll write later):&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code&gt;duration&lt;/code&gt;: how long does it take to go from the initial state to the final state (and vice-versa)&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;property&lt;/code&gt;: what CSS properties will be animated. The default value is &lt;code&gt;all&lt;/code&gt;. I don’t think defining only the ones you want is for performance reasons, but rather to prevent animating properties that don’t &lt;em&gt;animate&lt;/em&gt; well, or that you don’t want to animate (font-size, margins, positions…).&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;timing-function&lt;/code&gt;: the easing of the animation. The default is linear, but the ease-out is more interesting. Here’s a &lt;a href=&quot;http://easings.net/&quot;&gt;easing cheat sheet&lt;/a&gt; to visualize how the different functions look (though in CSS, only a subset of them are available).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;the-full-colored-disc&quot;&gt;The full colored disc&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; element is hidden at first, and expands when hovering the link.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;a span {
  background: #D4C4C2;
  border-radius: 50%;
  height: 96px;
  left: 50%;
  margin-left: -48px;
  margin-top: -48px;
  position: absolute;
  top: 50%;
  width: 96px;

  transform: scale(0);
  transition-property: transform, background-color;
  transition-duration: 500ms;
  transition-timing-function: ease-out;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The code is almost the same (I deliberately posted both CSS blocks in their entirety for the sake of this article, but feel free to refactor your CSS in production, as I did myself). There are 2 differences:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;the styling (a disc instead of a thin circle)&lt;/li&gt;
  &lt;li&gt;the initial state (the &lt;code&gt;scale&lt;/code&gt; is set to 0 instead of 1)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;no-hover-event-for-animations&quot;&gt;No hover event for animations&lt;/h3&gt;

&lt;p&gt;As I said earlier, you can’t trigger animations on a hover event. So you need to modify the DOM to trigger a new CSS block in which you’ll set the final state of the animation. The easiest way is to add a CSS class to the hovered element. In jQuery, it’s as easy as:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$(&apos;a&apos;).hover(
  function() {
    $(this).addClass(&apos;active&apos;);
  },
  function() {
    $(this).removeClass(&apos;active&apos;);
  }
);
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Nothing complicated. We now need to write the new CSS block related to this new selector we’ve been given.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;.active em{
  transform: scale(0);
}

.active span{
  transform: scale(1.125);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;And that’s it! The thing circle (&lt;code&gt;&amp;lt;em&amp;gt;&lt;/code&gt;) will disappear, and the colored disc (&lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt;) will expand to 112.5% its size. You can set that value to whatever you want, but making it bigger than the circle is a nice effect.&lt;/p&gt;

&lt;h2 id=&quot;positioning-elements-on-the-background-cover&quot;&gt;Positioning elements on the background cover&lt;/h2&gt;

&lt;p&gt;Ok, my page was actually finished, but looked quite empty, and rightfully so, because that’s how I meant it. But I wanted to add &lt;em&gt;something else&lt;/em&gt;: &lt;strong&gt;tooltips across the image&lt;/strong&gt;. Shouldn’t be too difficult, right?&lt;/p&gt;

&lt;p&gt;The thing is, my image is not an &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; tag with well-defined dimensions, but rather a background-image that’s resized according to the window’s dimensions, but &lt;em&gt;not exactly&lt;/em&gt;. What I mean is that, in order for the image to &lt;strong&gt;completely&lt;/strong&gt; cover the background &lt;em&gt;while&lt;/em&gt; maintaining the image’s ratio, it needs to follow the window’s resizing according to a &lt;strong&gt;function&lt;/strong&gt;. What function is that? Well, I found the answer on StackOverflow: &lt;a href=&quot;http://stackoverflow.com/questions/10285134/whats-the-math-behind-csss-background-sizecover&quot;&gt;‘What’s the math behind CSS’s background-size:cover’&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;How it works: you calculate the window’s ratio and compare it to the image’s ratio (mine is 3/2). According to the result, the height &lt;em&gt;or&lt;/em&gt; the width of the image is set to the window’s, and the other value (width &lt;em&gt;or&lt;/em&gt; height) is calculated to keep the image’s ratio.&lt;/p&gt;

&lt;p&gt;So I set up a &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; that has the exact dimensions of, and is exactly positioned as the background-image. I resized my window a few times to understand how the browser actually redimensionned the background-image and figured out how it worked.&lt;/p&gt;

&lt;p&gt;Here’s the function I quicky wrote:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;var a = $(&apos;div&apos;);

Position = function() {
  windowHeight = $(window).height();
  windowWidth = $(window).width();
  windowRatio = windowWidth / windowHeight;
  if (windowRatio &amp;gt; 1.5) {
    a.css(&apos;top&apos;, (windowHeight / 2) - ((windowWidth / 1.5) / 2));
    a.css(&apos;left&apos;, 0);
    a.css(&apos;height&apos;, windowWidth / 1.5);
    a.css(&apos;width&apos;, windowWidth);
  } else {
    a.css(&apos;top&apos;, 0);
    a.css(&apos;left&apos;, (windowWidth / 2) - ((windowHeight * 1.5) / 2));
    a.css(&apos;height&apos;, windowHeight);
    a.css(&apos;width&apos;, windowHeight * 1.5);
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Depending on the window’s ratio, the &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; is resized and positioned to exactly cover the background-image. Of course, most of the time, the window’s ratio is not equal to the image’s one, so the &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; will be either wider or taller than the window, and that’s what we want.&lt;/p&gt;

&lt;h3 id=&quot;positioning-the-tooltips&quot;&gt;Positioning the tooltips&lt;/h3&gt;

&lt;p&gt;Because the background-image (and thus the &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; as well) keep their aspect ratio no matter what, I just had to position all my tooltips using &lt;strong&gt;percent values&lt;/strong&gt; and &lt;a href=&quot;http://jt.ms/&quot;&gt;&lt;em&gt;voilà&lt;/em&gt;&lt;/a&gt;! I styled them like the other links (because they’re links as well) and made the text fade in on hover. It’s funny to see these tooltips disappear beyond the viewport when resizing the window because it’s not common for an HTML element to &lt;em&gt;not&lt;/em&gt; appear in the viewport.&lt;/p&gt;

&lt;h2 id=&quot;css-keyframes&quot;&gt;CSS keyframes&lt;/h2&gt;

&lt;p&gt;I also added some introduction animations using keyframes. For example, here’s how the 3 main links “introduce” themselves:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;a {
  animation-duration: 1000ms;
  animation-fill-mode: both;
  animation-name: one;
  animation-timing-function: ease-out;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Looks exactly like the &lt;code&gt;transition&lt;/code&gt; prefixed properties, with 2 new important properties: fill-mode and name.&lt;/p&gt;

&lt;h3 id=&quot;animation-name-explained&quot;&gt;animation-name explained&lt;/h3&gt;

&lt;p&gt;This property lets you define the &lt;strong&gt;name&lt;/strong&gt; of the keyframe function that will be called. You need to write this function separately. Here’s the one I use for my main links:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;@keyframes one {
  0% { opacity: 0; transform: translateY(-24px);}
  100% { opacity: 0.29; transform: translateY(0);}
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;So my 3 circles go from hidden (opacity: 0) to semi-visible (opacity: 0.29), and also move up 24px. 0% is the initial state, and 100% the final one. You can add more keyframes if you want.&lt;/p&gt;

&lt;p&gt;But what happens &lt;em&gt;before&lt;/em&gt; and &lt;em&gt;after&lt;/em&gt; the animation?&lt;/p&gt;

&lt;h3 id=&quot;animation-fill-mode-explained&quot;&gt;animation-fill-mode explained&lt;/h3&gt;

&lt;p&gt;To understand this property, you need to understand how a keyframe animation works. There are &lt;em&gt;3 states&lt;/em&gt; in an animation: before, during, and after. The “during” state is the easiest to understand because that’s the animation. That’s what the keyframe function is for.&lt;/p&gt;

&lt;p&gt;So what style is applied before and after the animation? Well the &lt;strong&gt;default&lt;/strong&gt; style is applied. And here, my links have a default opacity of 0.29. But let’s set that to 1 for demonstration purposes.&lt;/p&gt;

&lt;p&gt;So the &lt;strong&gt;full&lt;/strong&gt; animation goes like:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;before&lt;/strong&gt;: opacity = 1&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;animation start&lt;/strong&gt;: opacity = 0&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;animation end&lt;/strong&gt;: opacity = 0.29&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;after&lt;/strong&gt;: opacity = 1&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s not a problem if the animation starts &lt;strong&gt;directly&lt;/strong&gt;. But I actually set up a delay on the 2nd and 3rd of my main links. So they start visible, then disappear, then fade in slowly.&lt;/p&gt;

&lt;p&gt;That’s where the value of &lt;code&gt;animation-fill-mode&lt;/code&gt; comes in:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code&gt;none&lt;/code&gt; (default): the before and after states have the default style applied (1 here)&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;forwards&lt;/code&gt;: the after state has the animation end value (0.29 here)&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;backwards&lt;/code&gt;: the before states has the animation start value (0)&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;both&lt;/code&gt;: it’s forwards and backwards combined&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So if you put “both” (and that’s what I recommend), it means that the styles you’ll define in the keyframes will be applied before the animation starts &lt;em&gt;and&lt;/em&gt; after it ends.&lt;/p&gt;

&lt;p&gt;So the &lt;strong&gt;corrected&lt;/strong&gt; animation goes like:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;before&lt;/strong&gt;: opacity = 0&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;animation start&lt;/strong&gt;: opacity = 0&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;animation end&lt;/strong&gt;: opacity = 0.29&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;after&lt;/strong&gt;: opacity = 0.29&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This way, you’re sure that the animation will run smoothly, no matter what delay you’ve put &lt;em&gt;before&lt;/em&gt;, and no matter what default style would have been applied &lt;em&gt;after&lt;/em&gt;.&lt;/p&gt;

&lt;h3 id=&quot;animation-delay&quot;&gt;animation-delay&lt;/h3&gt;

&lt;p&gt;Here’s the delay property I was talking about:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;#life { animation-delay: 0;}
#music { animation-delay: 500ms;}
#design { animation-delay: 1000ms;}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;So the first link starts its animation right as the page is loaded (so there’s technically no “before” state). The following links start theirs half a second after the previous one.&lt;/p&gt;

&lt;h2 id=&quot;wrap-up&quot;&gt;Wrap-up&lt;/h2&gt;

&lt;p&gt;CSS animations are really easy to implement and rather well supported across the different browsers. For this single page, it makes sense to make use of them because:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;it’s a single page&lt;/li&gt;
  &lt;li&gt;there isn’t much content&lt;/li&gt;
  &lt;li&gt;it’s more a showcase than an actual website&lt;/li&gt;
  &lt;li&gt;it’s rather unobtrusive because there’s almost no interaction possible&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So be aware to use these CSS animations sparingly.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>How iOS 7 can still end up looking</title>
   <link href="http://jgthms.com/how-ios-7-can-still-end-up-looking.html"/>
   <updated>2013-06-13T00:00:00+01:00</updated>
   <id>http://jgthms.com/how-ios-7-can-still-end-up-looking</id>
   <content type="html">&lt;p&gt;The new iOS 7 icons made most (if not all) designers cringe. They don’t criticize the decision to head for a flatter (but not completely flat) layout but rather the execution. The acid unpleasant visual result is probably due to the fact that &lt;a href=&quot;http://www.macrumors.com/2013/06/12/jony-ive-put-apples-marketing-team-in-charge-of-ios-7-icon-design/&quot;&gt;Jony Ive put Apple’s marketing team in charge of iOS 7 icon design&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Each team in a large company has a different &lt;em&gt;single&lt;/em&gt; goal. Marketing needs to sell, developers need to make things work, designers to make things beautiful and usable. If 2 of these goals are assigned to the same team, there is a purpose conflict. You can not refine one aspect of your work without the fear of damaging the other. So you end up in a gray area where none of your 2 goals is completely fulfilled.&lt;/p&gt;

&lt;p&gt;iOS 7 is still in beta, so there’s still time to polish the shipped product, and it’ll probably happen:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The look and feel of the icons and other new UI bits are likely to change significantly as the iOS 7 beta proceeds.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;After Apple unveiled the new iOS 7 design, I headed for &lt;a href=&quot;http://dribbble.com/tags/ios7&quot;&gt;Dribbble&lt;/a&gt; because I &lt;em&gt;knew&lt;/em&gt; designers would rapidly come up with dozens of alternatives, which ultimately turn out as more than decent solutions to a real issue.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://dribbble.com/shots/1111319-I-know-I-know&quot;&gt;&lt;img src=&quot;/images/ios7-safari-icon.jpg&quot; alt=&quot;iOS 7&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://dribbble.com/shots/1112950-iTunes-iOS7&quot;&gt;&lt;img src=&quot;/images/ios7-itunes-icon.jpg&quot; alt=&quot;iOS 7&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://dribbble.com/shots/1112094-iOS-7&quot;&gt;&lt;img src=&quot;/images/ios7-redesign.png&quot; alt=&quot;iOS 7&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://dribbble.com/shots/1111638-iOS7-Reimagined&quot;&gt;&lt;img src=&quot;/images/ios7-reimagined.png&quot; alt=&quot;iOS 7&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;iOS 7 is a big disruption in Apple’s interface history. It can be a big leap forward as long as refinements are made. We weren’t used to Apple shipping a half-baked product. Luckily there’s still time to polish it and respond to the collective roar of the design community, though historically large companies seldom alter their decision based on people’s discontent (Xbox One?).&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>iOS 7, gradients, and usability</title>
   <link href="http://jgthms.com/ios-7-gradients-and-usability.html"/>
   <updated>2013-06-11T00:00:00+01:00</updated>
   <id>http://jgthms.com/ios-7-gradients-and-usability</id>
   <content type="html">&lt;p&gt;I must say, I was &lt;em&gt;very&lt;/em&gt; surprised by Apple’s iOS 7 unveiling. I’m a designer (though not a great one) so I’m usually first concerned about how it looks and my first thought was “It looks terrible.” And apparently, &lt;a href=&quot;http://designerscomplaining.tumblr.com/&quot;&gt;I’m not the only one&lt;/a&gt;. Of course it’s hard to have a complete valid judgment without having held an iPhone with iOS 7 in your own hands. But I remember being delighted by the first iOS’s screenshots back in 2007. It was a great start and a solid base to increment on, hence the light changes in a span of 6 years.&lt;/p&gt;

&lt;figure&gt;
  &lt;img alt=&quot;iOS from 2007 to 2013&quot; src=&quot;/images/ios-2007-2013.png&quot; /&gt;&lt;br /&gt;
  &lt;figcaption&gt;iOS from 2007 to 2013 (source: &lt;a href=&quot;http://thetechblock.com/why-ios-7-is-important/&quot;&gt;thetechblock.com&lt;/a&gt;)&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;gradients&quot;&gt;Gradients&lt;/h2&gt;

&lt;p&gt;I’m more concerned about the &lt;strong&gt;gradients&lt;/strong&gt;. iOS 7 isn’t exactly “flat”. The icon gradients yield a subtle sense of depth. But they look clumsy. I once wrote:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Nowadays, I tend to avoid gradients because it’s so easy to mess it up. It’s not only about choosing 2 colors, it’s about eveything that happens &lt;strong&gt;in between&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You can obtain decent looking gradients with only &lt;strong&gt;2 color stops&lt;/strong&gt; (one on top, one on bottom), but designers usually mix &lt;em&gt;several&lt;/em&gt; gradients or create more complex ones to achieve a much better result.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/ios7-gradients.png&quot; alt=&quot;iOS 7 gradients&quot; /&gt;&lt;/p&gt;

&lt;p&gt;If I were to copy the Spotify icon, I’d start with a simple 2-stop gradient. But the result wouldn’t be as appealing, because there’s &lt;em&gt;more&lt;/em&gt; involved: a light glare on top, some inner shadow, and probably other subtle elements. Even the embedded shapes have gradients and inner shadows applied to them. That’s what it takes to make a good icon.&lt;/p&gt;

&lt;p&gt;Settling for simple (and probably easy) highly saturated gradients has seriously harmed the visual appeal of iOS 7.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Maybe going “full flat”, with just solid colors, would have been a better choice (as I said, it’s easy to mess up gradients).&lt;/li&gt;
  &lt;li&gt;Maybe if the white icons that cover these gradients had been incredibly designed, these gradients wouldn’t have mattered. But the icons as well look as first draft mockups. I know it because I’m very bad at designing icons and they usually end up like that.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;usability&quot;&gt;Usability&lt;/h2&gt;

&lt;p&gt;But who cares how it looks as long as it’s easy to use?&lt;/p&gt;

&lt;p&gt;Apart from these icon gradients, most of iOS 7 is completely &lt;strong&gt;flat&lt;/strong&gt;. There’s been much (rightful) criticism towards the flat design trend that’s spreading across the web, notably for its usability issues. iOS, like the web, is &lt;strong&gt;interactive&lt;/strong&gt;. So any hindrance to a user’s interaction is a usability issue. Flat elements are known to lack &lt;strong&gt;affordance&lt;/strong&gt;: they fail to imply any functionality. The problem is that &lt;strong&gt;all&lt;/strong&gt; elements only rely on solid colors and basic shapes to convey several (and usually not complementary) informations:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;importance (a title, a secondary element, a label, a paragraph)&lt;/li&gt;
  &lt;li&gt;state (on/off, active/disabled, in progress…)&lt;/li&gt;
  &lt;li&gt;capability (is it a button? a notification? an ornament?)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you restrict yourself to only 3 simple elements (color, size, shape) to convey all information for &lt;em&gt;each&lt;/em&gt; element of your interface, you’ll face many &lt;strong&gt;graphic crossovers&lt;/strong&gt; and lack differenciation.&lt;/p&gt;

&lt;p&gt;There’s also been some concern about the use of a thin font (Helvetica Neue Light) and its readibility. I think there isn’t much to discuss about right now because it will greatly depend on the screen’s resolution.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/ios7-weather-app.png&quot; alt=&quot;iOS 7 Weather app&quot; /&gt;&lt;/p&gt;

&lt;p&gt;But what people are most concerned about in terms of usability is the &lt;strong&gt;Control Center&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/ios7-control-center.png&quot; alt=&quot;iOS 7 Control Center&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Many lines, no gradients, light shadows on the slider handles. What is interactive? What’s not?&lt;/p&gt;

&lt;p&gt;The 5 top buttons remind me of my post about &lt;a href=&quot;/the-2-options-toggle-button.html&quot;&gt;the 2 options toggle button&lt;/a&gt;: it’s either on or off. But does the button actually display the &lt;strong&gt;current state&lt;/strong&gt; (on or off) or the &lt;strong&gt;possible action&lt;/strong&gt; (&lt;em&gt;turn&lt;/em&gt; on or &lt;em&gt;turn&lt;/em&gt; off)? Well, the answer is within the sliders: the white part shows the &lt;strong&gt;current&lt;/strong&gt; level of the lightness or volume. So I guess a top button being white means it’s on because it’s its &lt;strong&gt;current&lt;/strong&gt; state.&lt;/p&gt;

&lt;p&gt;There also may be concerns about the heavy use of thin lines to represent both progess bars, area dividers and icon borders. But I guess such a heavily used feature as the Control Center will only require a few minutes to get accustomed to.&lt;/p&gt;

&lt;h2 id=&quot;you-know-good-design-when-you-use-it&quot;&gt;You know good design when you use it&lt;/h2&gt;

&lt;p&gt;There’ll be many posts like mine, discussing a not yet available OS, criticizing its aspect and speculating on its usability, only to end up uttering some rapid conclusions about a software a multi-billion dollar company developed. But Apple says it best on its iOS 7 page: &lt;a href=&quot;http://www.apple.com/ios/ios7/design/#functional&quot;&gt;&lt;em&gt;“You know good design when you use it”&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Oh well, it’s just a phone.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Target blank is for laptop and Mac users</title>
   <link href="http://jgthms.com/target-blank-is-for-laptop-and-mac-users.html"/>
   <updated>2013-06-04T00:00:00+01:00</updated>
   <id>http://jgthms.com/target-blank-is-for-laptop-and-mac-users</id>
   <content type="html">&lt;p&gt;For more than a decade, my main computer has been a regular PC tower. Alongside Windows XP as my default OS, I’ve become well acquainted with the 3-buttons mouse. Whether for gaming, text editing, or just browsing, the middle click has supplanted the right one as my second most used button.&lt;/p&gt;

&lt;p&gt;Due to my job as a web designer, I spent most of my time switching between Photoshop, Notepad++ and Firefox. For the latter (as for any browser), the middle-click became such a natural habit in my browsing process that I feel impaired by its lack.&lt;/p&gt;

&lt;p&gt;When I purchased an iMac for my music production needs, I decided to hang on to its unusual Magic mouse. Although clumsy with it at first, I considered it required some adaptation that would eventually lessen my frustration over time. I felt using this mouse validated my decision to follow the “Apple way of things”, but I still enabled the quite uncanny right-click.&lt;/p&gt;

&lt;p&gt;The lack of middle-click was hard to get accustomed to. Opening a link in a new tab required either Cmd + click or Right click + navigating the menu. I couldn’t browse the web like I used to: solely with my right hand, leaving my left one free for drinking, eating, or smoking.&lt;/p&gt;

&lt;p&gt;Browsing Hacker News or any link-filled aggregator required some more involvement from my side. It’s not exactly a burden, but rather a small inconvenience. The only website that actually became &lt;em&gt;easier&lt;/em&gt; to browse is &lt;a href=&quot;https://news.layervault.com/&quot;&gt;&lt;strong&gt;Designer News&lt;/strong&gt;&lt;/a&gt;. As a front-end developer and heavy web user, I loathe the target blank feature. I’ve always been an advocate of a tolerant user experience by avoiding any unwanted disruption, no matter how small.&lt;/p&gt;

&lt;p&gt;But with a Magic mouse, or with any regular laptop trackpad really, the target blank feature becomes less an annoyance and more a satisfaction. And considering how, &lt;em&gt;allegedly&lt;/em&gt;, most designers use a Mac (and especially a MBP), I wonder if that’s the reason why a site like Designer News has implemented the target blank.&lt;/p&gt;

&lt;p&gt;Although I tend to use my Mac more, and have started to make some web design work with it, I still wouldn’t impose any kind of browsing interference on my users.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Adobe Kuler's analytics make it unusable</title>
   <link href="http://jgthms.com/adobe-kuler-analytics-make-it-unusable.html"/>
   <updated>2013-05-30T00:00:00+01:00</updated>
   <id>http://jgthms.com/adobe-kuler-analytics-make-it-unusable</id>
   <content type="html">&lt;p&gt;Adobe just released a new version of their color tool &lt;a href=&quot;https://kuler.adobe.com&quot;&gt;Kuler&lt;/a&gt;. I was surprised though to stumble upon an empty page:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/adobe-kuler-unusable.png&quot; alt=&quot;Adobe Kuler&apos;s homepage&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I tried to disable Adblock Plus, but what finally did the trick was to enable &lt;strong&gt;Omniture&lt;/strong&gt;, which is basically Adobe’s own analytics. Ghostery rightfully blocked this script because it’s nothing more than yet another useless plugin.&lt;/p&gt;

&lt;p&gt;It’s the first time I visit a website that becomes unusable because of a blocked analytics script. Well, I guess I won’t be visiting Kuler anytime soon.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>I just want to visit your website</title>
   <link href="http://jgthms.com/i-just-want-to-visit-your-website.html"/>
   <updated>2013-05-20T00:00:00+01:00</updated>
   <id>http://jgthms.com/i-just-want-to-visit-your-website</id>
   <content type="html">&lt;p&gt;Alongside Adblock Plus, I used to run the &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/noscript/&quot;&gt;NoScript&lt;/a&gt; Firefox add-on to prevent malicious sites from messing with my browser but mostly to prevent any useless social or analytics script to load. It was until I found out about &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/ghostery/&quot;&gt;Ghostery&lt;/a&gt; which is less restrictive (and maybe less secure) but gets the job done: maintain some kind of privacy while browsing the web.&lt;/p&gt;

&lt;p&gt;For any website visited, Ghostery displays a temporary window that lists the different trackers blocked. I’m amazed by the number of scripts some sites try to load.&lt;/p&gt;

&lt;p&gt;Here’s &lt;a href=&quot;http://www.theverge.com/&quot;&gt;The Verge&lt;/a&gt; tracking results:&lt;/p&gt;

&lt;figure&gt;
&lt;img alt=&quot;Ghostery results for The Verge&quot; src=&quot;/images/ghostery-the-verge.png&quot; /&gt;&lt;br /&gt;
&lt;figcaption&gt;Ghostery results for The Verge&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Apart from SoundCloud and Typekit, I block all external sites. I’ve always considered the web to be about &lt;strong&gt;content&lt;/strong&gt;: read articles, look at images, watch videos, etc. Nothing else.&lt;/p&gt;

&lt;p&gt;If I’m browsing your website, any sharing feature or analytics script might seem useful to you, but it won’t make me visit you more often, or even less either. I’ll come back if your content is worth it. Ultimately, what I want is just to load &lt;em&gt;your&lt;/em&gt; website because that’s all I’m interested in.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Path is destined to grow slowly</title>
   <link href="http://jgthms.com/path-is-destined-to-grow-slowly.html"/>
   <updated>2013-05-03T00:00:00+01:00</updated>
   <id>http://jgthms.com/path-is-destined-to-grow-slowly</id>
   <content type="html">&lt;p&gt;Like millions of people, I’ve had a Facebook account for years. I don’t remember how many “Friends” I have, but it’s obviously many more than its true state. In the last year and a half, I’ve only logged in twice to my account (once to post my &lt;a href=&quot;http://reachthethrone.com/&quot;&gt;album&lt;/a&gt;, once to post a &lt;a href=&quot;https://soundcloud.com/jgthms/daft-punk-random-access-memories-jthomas-remix&quot;&gt;Daft Punk remix&lt;/a&gt;). But apart from that, I haven’t had any activity or even read &lt;em&gt;any&lt;/em&gt; story from my news feed. I also deleted hundreds of pictures, dozens of “Liked” pages, and unnecessary profile informations (including my birthday). I eventually changed my password to a 100 characters-long random string to prevent myself from logging in back too easily.&lt;/p&gt;

&lt;p&gt;Why such apparently drastic measures?&lt;/p&gt;

&lt;p&gt;For one thing, I browsed Facebook far too often. I used to always keep it open in a tab and checked it regularly on both my iPod and iPad. Logging myself off only kept me away for a few hours. It felt, as it probably does for a significant percentage of its users as well, as a fierce and resilient addiction, a giant sucking hole destined to waste my somewhat precious time and ravage my already fainting productivity.&lt;/p&gt;

&lt;p&gt;But on a more substantial note, I wasn’t eager to remain stuck in the persistent circle jerk, fueled by self-centered and shallow interactions, to which I heavily contributed and for which I have myself to blame as well.&lt;/p&gt;

&lt;p&gt;It may seem like an overkill to completely shut myself out of a popular social experience that I could have approached differently and kept in my control. But this digital lockdown has easily succeeded in its single goal: keep me away from Facebook.&lt;/p&gt;

&lt;h2 id=&quot;facebook-the-ultimate-gathering&quot;&gt;Facebook: the ultimate gathering&lt;/h2&gt;

&lt;p&gt;Apart from my close friends, my Facebook contacts also included my extended family, former work colleagues, long lost schoolmates, various encounters from foreign countries, short-lived relationships, as well as a wide network of mutual friends.&lt;/p&gt;

&lt;p&gt;This diversity of &lt;strong&gt;channels&lt;/strong&gt; is mainly due to Facebook having become the &lt;em&gt;de facto&lt;/em&gt; corner stone of a web-based identity and ultimately the personal v-card commonly held by any 13-40 years-old connected being, and especially anyone I’ve been familiar with.&lt;/p&gt;

&lt;h2 id=&quot;a-new-facebook-account&quot;&gt;A new Facebook account?&lt;/h2&gt;

&lt;p&gt;Creating a secondary Facebook account, to selectively include a few “designated” friends and family members whom I’m keen to be informed about, has crossed my mind but I’ve dismissed this decision as an unworkable option. It would have led to some confusion, displeasure, and probably questions from “excluded” friends about why they’re not part of my newly-created network. Plus, a Facebook account is nowadays part of a whole “social” package that is sometimes hard to avoid misusing.&lt;/p&gt;

&lt;p&gt;It would have eventually resulted in a &lt;strong&gt;one-sided&lt;/strong&gt; experience, where I’d read everyone’s stories but not contribute any or to any. Not a dreadful option, but not what I was looking for.&lt;/p&gt;

&lt;h2 id=&quot;path-a-potential-alternative&quot;&gt;Path: a potential alternative&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://path.com/&quot;&gt;Path&lt;/a&gt; has been on my radar for quite a while. An almost private social network, for just friends and family? A well-branded iOS app with a clean intuitive interface? Sounds good.&lt;/p&gt;

&lt;p&gt;The UI element was an important factor because I’d have to convince my mostly non tech-savvy friends and family members to use Path alongside their usual Facebook account.&lt;/p&gt;

&lt;p&gt;Path embodied exactly what I envisioned in a post-Facebook social experience, focused on quality and intimacy. I personified the perfect target market, as I was probably in a similar state of mind as Path’s founders when they imagined their product, looking to fill the following need: “A Facebook-like experience without its inconveniences”.&lt;/p&gt;

&lt;p&gt;Why I never actually subscribed to Path isn’t related to the multiple privacy concerns it spawned among its users (because I was unaware of them) but to the “internet socialization” needs I lacked since I quit Facebook.&lt;/p&gt;

&lt;h2 id=&quot;path-and-its-users-2-conflicting-objectives&quot;&gt;Path and its users: 2 conflicting objectives&lt;/h2&gt;

&lt;p&gt;I’m convinced that those who ultimately choose Path as their primary social network consider it as a &lt;strong&gt;reboot&lt;/strong&gt; of their digital interactions. They wish to escape the Facebook tangle they’ve generated and rejoice in a brand-new healthy network they could control.&lt;/p&gt;

&lt;p&gt;The best (and maybe only) method to fulfill that goal is to &lt;strong&gt;limit&lt;/strong&gt; yourself to a small number of contacts. Path itself provides a 150 contacts limit but I’d argue that 30 is well enough for such a network. I myself intended to have only 10 contacts.&lt;/p&gt;

&lt;p&gt;But how would Path grow if every user followed such a behavior? It’s not really a chicken and egg problem: people (like me) wouldn’t wait for a significant amount of users to have subscribed before subscribing themselves because you don’t care about how many users Path has. You’re not here to meet new people. Quite the opposite really: you’re here to interact with people you already know and are especially close to. You only need a few of your friends and family members to join, and you can tell them &lt;em&gt;directly&lt;/em&gt;. A quick email, a phone call, or just while chatting in person. &lt;em&gt;“Hey, there’s this cool service, for just you and me. We should join.”&lt;/em&gt; I know I would have used Path intensively even with 2 or 3 friends only.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Path is meant to grow very slowly&lt;/strong&gt;. It’s like trying to fill a pool by filling it up with drops of water, but that’s how Path is &lt;em&gt;designed&lt;/em&gt; to grow. If you position yourself as &lt;strong&gt;the&lt;/strong&gt; private social network for family and close friends, you can’t expect people to gather new users by the dozen because it’s the exact opposite that led them to join your service in the first place.&lt;/p&gt;

</content>
 </entry>
 
 <entry>
   <title>Why HN doesn't need a redesign</title>
   <link href="http://jgthms.com/why-hn-doesnt-need-a-redesign.html"/>
   <updated>2013-03-07T00:00:00+00:00</updated>
   <id>http://jgthms.com/why-hn-doesnt-need-a-redesign</id>
   <content type="html">&lt;p&gt;I don’t exactly remember how I discovered Hacker News. &lt;a href=&quot;http://news.ycombinator.com/user?id=bbx&quot;&gt;My account&lt;/a&gt; is 1295 days old, which means I subscribed on August 20, 2009. HN’s homepage on &lt;a href=&quot;http://web.archive.org/web/20090820010834/http://news.ycombinator.com/&quot;&gt;that particular date&lt;/a&gt; was filled with stories about _why’s disappearance which, in retrospect, is probably the event that led me to HN in the first place, considering I was learning Ruby at that time.&lt;/p&gt;

&lt;p&gt;Anyway, I eventually created an account and stuck around. I first wondered why it was called &lt;em&gt;Hacker&lt;/em&gt; News because at that time, the word still wrongly carried a negative connotation for me. Reading through pg’s articles, I understood what &lt;em&gt;Hacker&lt;/em&gt; actually meant.&lt;/p&gt;

&lt;p&gt;Visually, the site’s design felt slightly austere but it didn’t bother me. I loved its straightforward approach: only links and text. That’s hypertext at its core. No avatars, no background-image, no rich color palette, no custom font, no &lt;em&gt;stylish&lt;/em&gt; elements. But most of all: a &lt;strong&gt;high density of information&lt;/strong&gt;. I’ve always been more comfortable with having everything layed down before me, whether it’s a digital interface or objects on my desk.&lt;/p&gt;

&lt;h2 id=&quot;a-functional-focus&quot;&gt;A functional focus&lt;/h2&gt;

&lt;p&gt;Two days ago, the &lt;a href=&quot;http://hnwishlist.com/&quot;&gt;HN Wishlist&lt;/a&gt; appeared on HN’s front page. It unsurprisingly spawned some discussion about HN’s design. The 3rd most upvoted wish is &lt;a href=&quot;http://hnwishlist.com/posts/87d7524a-a2c5-47c1-8d5b-91cd0dca882b&quot;&gt;&lt;em&gt;Refresh the visual design&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As a designer, I can understand such a desire. But it misses the point: the web is about content, and HN is one of the few websites that has remained entirely focused on this notion.&lt;/p&gt;

&lt;p&gt;A user browsing a news aggregator is here for 2 things: clicking links and reading/writing comments. Skimming through dozens of news on HN proves to be very efficient considering the links density and the lack of futile elements.&lt;/p&gt;

&lt;h2 id=&quot;a-community-filter&quot;&gt;A community filter&lt;/h2&gt;

&lt;p&gt;Maintaining what most people consider an &lt;em&gt;antique&lt;/em&gt; layout actually prevents newcomers who can’t see past the surface from deciding to join the community. The design also de-emphasizes the value of a user’s profile. I believe both features have indirectly helped HN’s community develop what it is often praised for: &lt;strong&gt;high quality discussions&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;On a related note, the ability to collapse/expand comment threads is something some people wish for. But I fear it would give too much weight to top-level comments, and diminish the core of a thread: the discussion it generates, in which counterarguments and additional details prove to be equally or more important than the comment they’re replying to.&lt;/p&gt;

&lt;p&gt;As a side effect, whenever I decide to contribute to an HN thread, I find myself wondering for a few minutes if what I’m about to write is adding any value to the discussion. If so, I mull over the idea I’m about to develop, carefully construct my sentences (looking through dictionaries and French/English translation sites) and avoid posting too radical statements.&lt;/p&gt;

&lt;h2 id=&quot;the-big-picture&quot;&gt;The big picture&lt;/h2&gt;

&lt;p&gt;It may sound far-fetched to say that HN’s design &lt;em&gt;directly&lt;/em&gt; impacts how users will contribute to the site but it’s actually all related. The orange header, the light yellow-grey background, the small font-size, the lack of graphics… They all amount to a bigger scheme that reflects both the mind of the site’s author and the profile of its community members.&lt;/p&gt;

&lt;p&gt;A design is more than a visual signature: it carries the &lt;em&gt;raison d’être&lt;/em&gt; of a website. And I’d be sceptical if HN’s design suddenly changed because it’d necessarily imply a deeper mutation.&lt;/p&gt;

</content>
 </entry>
 
 <entry>
   <title>The 3-states follow button</title>
   <link href="http://jgthms.com/the-3-states-follow-button.html"/>
   <updated>2013-02-27T00:00:00+00:00</updated>
   <id>http://jgthms.com/the-3-states-follow-button</id>
   <content type="html">&lt;p&gt;After having discussed the &lt;a href=&quot;/the-2-options-toggle-button.html&quot;&gt;2-options toggle button&lt;/a&gt;, I started thinking about another multiple options button: the follow button.&lt;/p&gt;

&lt;p&gt;One of the most famous ones is the Twitter one:&lt;/p&gt;

&lt;figure&gt;
  &lt;img alt=&quot;Twitter follow button states&quot; src=&quot;/images/twitter-follow-button.png&quot; /&gt;&lt;br /&gt;
  &lt;figcaption&gt;From left to right: not following, following, following:hover&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;What’s interesting is that, by default, when you’re &lt;em&gt;not&lt;/em&gt; following the person, the button shows the &lt;strong&gt;possible action&lt;/strong&gt;: ‘Follow’. But becoming a follower will subsequently cause the &lt;em&gt;same&lt;/em&gt; button to hold the &lt;strong&gt;current state&lt;/strong&gt; (‘Following’), and only unveil the new possible action (‘Unfollow’) if you hover it.&lt;/p&gt;

&lt;p&gt;GitHub makes use of a similar button to watch repositories:&lt;/p&gt;

&lt;figure&gt;
  &lt;img alt=&quot;GitHub follow watch states&quot; src=&quot;/images/github-watch-button.png&quot; /&gt;&lt;br /&gt;
  &lt;figcaption&gt;From left to right: not watching, watching, watching:hover&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;The implementation is different because the button &lt;em&gt;always&lt;/em&gt; displays the possible action, never the current state. It’s both:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;less obvious: you need to understand that seeing ‘Unwatch’ means you &lt;em&gt;are&lt;/em&gt; watching the repo.&lt;/li&gt;
  &lt;li&gt;less visually communicative and appealing: the same grey layout is used for both watched and unwatched states, defining no distinction between the two.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I think Twitter’s execution, by mixing both action &lt;em&gt;and&lt;/em&gt; state, is more intelligible.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>The 2-options toggle button</title>
   <link href="http://jgthms.com/the-2-options-toggle-button.html"/>
   <updated>2013-02-25T00:00:00+00:00</updated>
   <id>http://jgthms.com/the-2-options-toggle-button</id>
   <content type="html">&lt;p&gt;I’m always confused by these kinds of switch buttons:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/toggle-button.png&quot; alt=&quot;2-options toggle button&quot; /&gt;&lt;/p&gt;

&lt;p&gt;It takes me a couple of seconds to figure out if the button is displaying the &lt;strong&gt;current state&lt;/strong&gt; (‘On’) or the &lt;strong&gt;possible action&lt;/strong&gt; (&lt;em&gt;switching to&lt;/em&gt; ‘On’). In this case, it’s meant to show the current state.&lt;/p&gt;

&lt;p&gt;The use of such a toggle button requires:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;having 2 options only&lt;/li&gt;
  &lt;li&gt;the 2 options to be mutually exclusive&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The best known implementation of this button is actually the Play/Pause button:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/play-pause-button.png&quot; alt=&quot;Play/Pause button&quot; /&gt;&lt;/p&gt;

&lt;p&gt;It actually works in the exact opposite way: the button displays the &lt;strong&gt;possible action&lt;/strong&gt;. Because we’re so well acquainted with this play/pause action, we’re always aware of its implied current state.&lt;/p&gt;

&lt;p&gt;As a matter of fact, it makes sense because Play/Pause are &lt;strong&gt;actions&lt;/strong&gt;, not states. The triangle and two-bars icons are read as ‘Play’ and ‘Pause’, not ‘Playing’ and ‘Pausing’.&lt;/p&gt;

&lt;p&gt;That’s why the On/Off toggle switches display the current state: they are &lt;em&gt;meant&lt;/em&gt; to be read as ‘It’s currently On’ and ‘It’s currently Off’, not ‘Switch to On’ and ‘Switch to Off’.&lt;/p&gt;

&lt;p&gt;But it’s still unclear and not obvious. If you’re designing a web app, just use checkboxes. Or even better: Yes/No radio buttons.&lt;/p&gt;

</content>
 </entry>
 
 <entry>
   <title>Don't use dropdowns for a few items only</title>
   <link href="http://jgthms.com/dont-use-dropdowns-for-a-few-items-only.html"/>
   <updated>2013-02-23T00:00:00+00:00</updated>
   <id>http://jgthms.com/dont-use-dropdowns-for-a-few-items-only</id>
   <content type="html">&lt;p&gt;Dropdowns (or select boxes) are an easy way to implement a considerable list of options in a small amount of space. A typical use would be a list of countries, or a list of years.&lt;/p&gt;

&lt;p&gt;But using a dropdown for fewer than 5 items seems an &lt;strong&gt;overkill&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Consider this interface element in iTunes:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/itunes-dropdown.png&quot; alt=&quot;iTunes dropdown&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Using a dropdown requires clicking the dropdown &lt;em&gt;and&lt;/em&gt; navigating in a defined (and sometimes narrow) area. It also &lt;strong&gt;hides&lt;/strong&gt; the options from the user until he actually clicks it.&lt;/p&gt;

&lt;p&gt;Considering the amount of space surrounding the dropdown, and the few number of options available, I’d suggest using that space to display the 3 options directly.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/itunes-dropdown-space.png&quot; alt=&quot;iTunes dropdown space&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Firefox also makes use of a dropdown in a 2-options context:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/firefox-dropdown.png&quot; alt=&quot;Firefox dropdown&quot; /&gt;&lt;/p&gt;

&lt;p&gt;This implementation is actually more prone to errors: you can accidentally restart your browser while trying not to. Some Windows security or antivirus updates often make the same mistake (and unwillingly restarting your computer is much more infuriating than just your browser).&lt;/p&gt;

&lt;p&gt;I guess Firefox could have used the dialog box space to display the &lt;em&gt;‘Not now’&lt;/em&gt; option:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/firefox-dropdown-space.png&quot; alt=&quot;Firefox dropdown space&quot; /&gt;&lt;/p&gt;

&lt;p&gt;It doesn’t look like a big issue after all, but it’s the kind of small details of UX that tend to be overlooked (or overthought) and could be easily fixed for the sake of clarity (in terms of information and usability).&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>SoundCloud's UX is confusing</title>
   <link href="http://jgthms.com/soundcloud-ux-is-confusing.html"/>
   <updated>2013-02-17T00:00:00+00:00</updated>
   <id>http://jgthms.com/soundcloud-ux-is-confusing</id>
   <content type="html">&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: it looks like SoundCloud finally delivered.&lt;/p&gt;

&lt;p&gt;I’m going to copy/paste what I’ve said about SoundCloud in a &lt;a href=&quot;http://news.ycombinator.com/item?id=4871076&quot;&gt;previous comment&lt;/a&gt;:&lt;br /&gt;
I love SoundCloud.&lt;/p&gt;

&lt;p&gt;I remember how it was difficult for people like me to upload their music on the web in order to share it. The only viable option was the MySpace music section (which required a different MySpace account). Even renowned artists used it. But the music player was just a single feature among the whole MySpace package, and the resulting experience for both the uploader and the viewer was unconvincing.&lt;/p&gt;

&lt;p&gt;SoundCloud filled a need: upload your music easily, and doing just that. The uploading experience is fluid. The player is great, easy to share, with a nice sound quality.&lt;/p&gt;

&lt;p&gt;But their UI is confusing. Here’s a simple question: what is this?&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/soundcloud-ui.png&quot; alt=&quot;SoundCloud UI&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Hard to tell isn’t it? It’s actually the waveform of the track currently playing in SoundCloud. And although waveforms are prominent in SoundCloud’s interface, this tiny version makes little sense until it starts to fill itself up and you notice a progress in time. But it’s still hard to understand it’s clickable and brings you back to the currently playing track.&lt;/p&gt;

&lt;h2 id=&quot;lost-in-context&quot;&gt;Lost in context&lt;/h2&gt;

&lt;p&gt;Ever since SoundCloud launched its latest version, it acts like some kind of &lt;strong&gt;radio&lt;/strong&gt;: tracks will play endlessly. The choice of tracks though, is defined by &lt;em&gt;where&lt;/em&gt; you launched the first track from. It can be the home stream, a set, the dedicated track page… You need to remember where you began because the &lt;strong&gt;context&lt;/strong&gt; will define your &lt;strong&gt;playlist&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I usually navigate through 4 contexts:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;the Home (it’s the main Stream which aggregates tracks from people you follow)&lt;/li&gt;
  &lt;li&gt;a Profile (a user’s page)&lt;/li&gt;
  &lt;li&gt;a Set (a user-defined collection of tracks)&lt;/li&gt;
  &lt;li&gt;the Dedicated page (which also lists related tracks)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Depending on the context in which you’re launching your first track, your playlist will be different. What isn’t obvious though, is what happens after you’ve listened to the &lt;em&gt;last&lt;/em&gt; track. Because SoundCloud wants you to listen endlessly to their tracks, it will continue to play &lt;em&gt;something&lt;/em&gt; even after having reached the last track of a set for example. But that &lt;em&gt;something&lt;/em&gt; is hard to guess. I’ve told them about it: when I send people a set of mine to listen to, I don’t want them to hear anything &lt;em&gt;but&lt;/em&gt; that set. But after having reached the end of my set, SoundCloud will play a track I’ve liked, or a related track, or something else, which might confuse people into thinking it’s part of my set and thus a track I’ve made as well (although it’s not).&lt;/p&gt;

&lt;p&gt;What I’m trying to explain might sound confusing, but that’s because it &lt;em&gt;is&lt;/em&gt; confusing. Even I, with some knowledge of how the site works, don’t know for sure what my current playlist looks like, and why this particular track is currently playing.&lt;/p&gt;

&lt;p&gt;Because you can navigate through the website without interrupting the track currently playing (thanks to the HTML5 History API), you can end up on a page where you see your track playing but in a different &lt;strong&gt;context&lt;/strong&gt;. For example, you can start a track on the homepage, navigate through a set containing that track, and still see it playing. It’s totally normal: it’s the &lt;em&gt;same&lt;/em&gt; track, but in a different context. But this can misguide you into thinking the next track will be the one right below in the set, whereas it will actually be the following one in the homepage where you launched your first track.&lt;/p&gt;

&lt;p&gt;The only way to know in which context your track is playing is to click the waveform icon in the top right corner. But it won’t necessarily tell you what’s coming up next.&lt;/p&gt;

&lt;h2 id=&quot;theres-a-track-playing&quot;&gt;‘There’s a track playing??’&lt;/h2&gt;

&lt;p&gt;The main problem with SoundCloud comes down to this fact: &lt;strong&gt;people don’t know that a track is currently playing in their browser&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I’ve had a couple of friends complain about not figuring out how to stop the music coming from their browser because they didn’t understand that tracks kept playing endlessly in SoundCloud. I had actually sent them a link to a track of mine, and they rightfully thought that pushing the Play button would only play the track once, and &lt;em&gt;only&lt;/em&gt; this track. So they switched back to another tab and were confused as to hear &lt;em&gt;something&lt;/em&gt; coming out of their speaker after a few minutes, without knowing where it came from. It’s reminiscent of Flash-powered websites which auto-start music upon visiting their page. Clearly: it’s a bad thing.&lt;/p&gt;

&lt;p&gt;I understand it’s hard to ask SoundCloud to stop them from playing tracks indefinitely (although it shouldn’t be the expected behavior of a Set or a Dedicated track page). But they should at least notify the visitor about it.&lt;/p&gt;

&lt;p&gt;When navigating back to your SoundCloud tab, unless you clearly see a “Pause” button displayed prominently, it’s impossible to know that the sound is coming from this tab. The tiny waveform in the header is clearly not helping, and finding the “Pause” button among the other numerous orange buttons of the page can be tricky (and requires that you’re currently on a page where the track is displayed!).&lt;/p&gt;

&lt;p&gt;Yes, there’s a “Play” icon in the title bar, but being not interactive and not obvious either, it’s quite helpless.&lt;/p&gt;

&lt;figure&gt;
  &lt;a href=&quot;https://soundcloud.com/jgthms/see-you-at-the-lights&quot;&gt;&lt;img alt=&quot;SoundCloud Title UI&quot; src=&quot;/images/soundcloud-title-ui.png&quot; /&gt;&lt;/a&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;lack-of-controls&quot;&gt;Lack of controls&lt;/h2&gt;

&lt;p&gt;Because SoundCloud acts like a radio (or a media player), it should display the regular controls you’d expect from such a setup: Play/Pause, Forward, Backward, list of tracks.&lt;/p&gt;

&lt;p&gt;The Play/Pause is visually only available by navigating to a page where you can &lt;em&gt;see&lt;/em&gt; the track playing. Of course, the little waveform in the header is the quickest way to reach such a page, but as I said, it’s not an obvious control. You can also use the spacebar, but playing/pausing a track is not a spacebar’s expected behavior in the context of a browser.&lt;/p&gt;

&lt;p&gt;Forward/Backward controls are the ones I miss the most.&lt;br /&gt;
The Backward button can be useful to navigate back to a track you want to play again, or to know which one you’ve just listened to. There is currently no way to know this.&lt;br /&gt;
If you’re listening to a track, the only way to skip it is to manually choose another one. Sometimes, I just want to hear the following track but it requires navigating back to the context and launching the next track. It’s not much of a trouble, but could be easily avoided by displaying a forward button in the header. As a matter of fact, a playlist exists &lt;em&gt;somewhere&lt;/em&gt; in memory. Why not displaying it and/or making it interactive by implementing Forward/Backward buttons?&lt;/p&gt;

&lt;p&gt;SoundCloud acts like a media player but doesn’t provide the interface that should come with it, and this gap leaves me, and probably many visitors, confused.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Mega should have a confirm password field</title>
   <link href="http://jgthms.com/mega-should-have-a-confirm-password-field.html"/>
   <updated>2013-01-20T00:00:00+00:00</updated>
   <id>http://jgthms.com/mega-should-have-a-confirm-password-field</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;https://mega.co.nz&quot;&gt;Mega&lt;/a&gt; launched yesterday. I actually had to send a 30Mb file to a friend, but he told me that Dropbox was slow for him. Plus, my Dropbox was still uploading 25Gb of pictures that I had added the day before.&lt;/p&gt;

&lt;p&gt;Anyway, it was the opportunity to try out Mega’s cloud storage system. So I decided to sign up:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/mega-sign-up.png&quot; alt=&quot;Mega&apos;s sign up page&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I filled the fields quickly, but then realized 2 things:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Is the “&lt;em&gt;Your name&lt;/em&gt;” field actually your username as well? Just in case, I changed it.&lt;/li&gt;
  &lt;li&gt;There was no “&lt;em&gt;Confirm password&lt;/em&gt;” field. So I cleared that field, and retyped my password &lt;em&gt;carefully&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Upon receiving my confirmation email (establishing the fact that I had typed it correctly), I tried to login, but was prompted with the message “&lt;em&gt;Invalid password&lt;/em&gt;”.&lt;/p&gt;

&lt;p&gt;I looked for the usually available “&lt;em&gt;Forgot password?&lt;/em&gt;” link but it wasn’t present. So I went to the help section and found the paragraph “&lt;em&gt;I have forgotten my password. Can I reset it?&lt;/em&gt;”:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Unfortunately, your MEGA password is not just a password - it is the master encryption key to all of your data. If you lose it, you lose access to all of your files that are not in a shared folder and that you have no previously exported file or folder key for.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I learned 2 things:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;It’s not a password, it’s an &lt;em&gt;encryption key&lt;/em&gt; (which may have led me to choose a different pass)&lt;/li&gt;
  &lt;li&gt;It can’t be changed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The rule here is that, if a password isn’t modifiable (or resettable), &lt;strong&gt;make the user confirm it&lt;/strong&gt;. I’m now left with an account (linked to a specific username and email) that I can’t use.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>I18N and keyboard shortcuts</title>
   <link href="http://jgthms.com/i18N-and-keyboard-shortcuts.html"/>
   <updated>2013-01-05T00:00:00+00:00</updated>
   <id>http://jgthms.com/i18N-and-keyboard-shortcuts</id>
   <content type="html">&lt;p&gt;Although I’m French, I usually install the English version of every software I use, the main reason being that it’s almost always the latest version available, which includes the latest features and bug fixes. Plus, looking for help online usually results in answers in English.&lt;/p&gt;

&lt;p&gt;The only issue I have is with keyboard shortcuts. I use an AZERTY keyboard. The differences with a QWERTY one aren’t exclusively about keys position. For example, all numbers require using the Shift button to type them. It’s not much if I’m editing a text, but it becomes an issue with keyboard shortcuts.&lt;/p&gt;

&lt;p&gt;To zoom in with Firefox, you need to type ‘Command +’. It’s probably easy on a QWERTY but it’s impossible with an AZERTY: the ‘+’ sign requires pressing the Shift button. So if I try typing ‘Command Shift +’ or ‘Command =’ (which is the sign below the ‘+’ one), it doesn’t work (and might even trigger another event).&lt;/p&gt;

&lt;p&gt;I haven’t tried the French version of Firefox, and I guess it’s more suited for AZERTY keyboards. But I believe that choosing a software’s language shouldn’t be related to one’s keyboard layout.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>There are 3 levels of administration</title>
   <link href="http://jgthms.com/there-are-3-levels-of-administration.html"/>
   <updated>2013-01-04T00:00:00+00:00</updated>
   <id>http://jgthms.com/there-are-3-levels-of-administration</id>
   <content type="html">&lt;p&gt;For every web application, there is an administration to design. Its complexity and ease of use depends on who is meant to interact with it.&lt;/p&gt;

&lt;h2 id=&quot;the-creators-administration&quot;&gt;The creator’s administration&lt;/h2&gt;

&lt;p&gt;If you’re a developer running your own blog, chances are you have thought about creating your own little engine to publish articles. It may not be easy or convenient way to use, but as &lt;em&gt;you&lt;/em&gt; are the engine’s creator, you’ve established a system that suits &lt;em&gt;you&lt;/em&gt; and nobody else. James Hague’s &lt;a href=&quot;http://prog21.dadgum.com/77.html&quot;&gt;6838 bytes Perl script&lt;/a&gt; is probably not suitable for anything else than his website, but it’s not an issue because that’s the script’s sole purpose. I myself have developed a static website generator in PHP. The code is terrible but it does exactly what I intend to, and any issue I’d encounter with it would be my own fault.&lt;/p&gt;

&lt;h2 id=&quot;the-insiders-administration&quot;&gt;The insider’s administration&lt;/h2&gt;

&lt;p&gt;There’s a learning curve with those kinds of admin. It can either be an admin developed by someone you know, or one that is not exactly user friendly.&lt;/p&gt;

&lt;p&gt;For example, let’s imagine I own a clothes store and ask you to develop my shopping website. The admin can be anything you want, as long as I know how to use it. The key here is that I’m in contact with you, so even if the admin isn’t obvious to interact with, you can teach me. Plus, you can adjust some design elements for my convenience. Anyone else trying to use my admin would feel slightly lost, but that’s not a problem because the admin was meant for me and I was taught how to use it.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/mojombo/jekyll&quot;&gt;Jekyll&lt;/a&gt;’s administraion can also be considered an insider’s one. It’s not used by non-developers because it requires some computer knowledge. You either need to know Ruby if you host your blog on your own server, or know Git if you’re using the GitHub pages. Designing your own layout isn’t easy either. But if you take some time to go through the docs and learn how to achieve what you want, you’ll end up with a system that suits you well.&lt;/p&gt;

&lt;h2 id=&quot;the-public-administration&quot;&gt;The public administration&lt;/h2&gt;

&lt;p&gt;It’s everybody else’s admin, for the non tech-savvy users.&lt;/p&gt;

&lt;p&gt;The best example is &lt;a href=&quot;http://wordpress.com&quot;&gt;WordPress.com&lt;/a&gt; which hosts around 60 million sites. Most of its users are probably non-technical people who chose to subscribe to WordPress.com because it offered an easy and free way to host their blog, and they wouldn’t know how to do it otherwise.&lt;/p&gt;

&lt;p&gt;For a long time, WordPress.com provided the same admin as WordPress.org, but they’ve updated it for the general public.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/wordpress-easy-admin.png&quot; alt=&quot;WordPress.com easy admin&quot; /&gt;&lt;/p&gt;

&lt;p&gt;It’s the most difficult administration to design, because it is used by millions of people who have to figure it out on their own. The publishing experience needs to be seamless, and you have to take into account your users’ unexpected behaviour and the common mistakes they can make.&lt;/p&gt;

&lt;p&gt;The real key is to test profusely and receive feedback from common users. But in the end, you’ll still have to cut short and take some design decisions on your own.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Update bookmark</title>
   <link href="http://jgthms.com/update-bookmark.html"/>
   <updated>2012-12-31T00:00:00+00:00</updated>
   <id>http://jgthms.com/update-bookmark</id>
   <content type="html">&lt;p&gt;A web bookmark is a kind of skeuomorphic element where a physical object is used in a digital context to elumate the same function. But whereas a web bookmark saves a &lt;em&gt;location&lt;/em&gt;, a physical bookmark saves a &lt;em&gt;progress&lt;/em&gt;. Both aren’t exactly used the same way, because you rarely change the URI of a web bookmark, whereas you constantly update the location of your thin marker while reading a book, only to remove it when you’ve reached the end.&lt;/p&gt;

&lt;p&gt;I wish there was a way to update your web bookmarks. For example, I’ve started watching online the &lt;a href=&quot;http://www.1channel.ch/watch-5207-Seinfeld&quot;&gt;Seinfeld episodes&lt;/a&gt; from the start, and to keep track of my progress, I need to write a note about which episode I’ve watched last. I’ve also been reading &lt;a href=&quot;http://learnpythonthehardway.org/book/&quot;&gt;Learn Python The Hard Way&lt;/a&gt;, and I need to write down which lesson I’m at. I could keep track of my progress by relying on the color of visited links, but most websites don’t implement the &lt;code&gt;a:visited&lt;/code&gt; CSS feature. And although I could use Firebug or the WebInspector to set a color for those links, it’s still a debious way to save a progress.&lt;/p&gt;

&lt;p&gt;There is a &lt;a href=&quot;https://addons.mozilla.org/en-us/firefox/addon/update-bookmark/&quot;&gt;Firefox add-on&lt;/a&gt; called &lt;em&gt;Update Bookmark&lt;/em&gt; which seems to implement that feature, but it hasn’t been updated since 2008 and doesn’t work with the latest Firefox.&lt;/p&gt;

&lt;p&gt;It wouldn’t be hard to develop such a feature (as an add-on or natively in the browser) but I wonder if I’m the only one considering updating my bookmarks from time to time.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Quick Bootstrap Design</title>
   <link href="http://jgthms.com/quick-bootstrap-design.html"/>
   <updated>2012-12-21T00:00:00+00:00</updated>
   <id>http://jgthms.com/quick-bootstrap-design</id>
   <content type="html">&lt;figure&gt;
  &lt;a href=&quot;/html/solarized.html&quot;&gt;&lt;img alt=&quot;Bootstrap Solarized&quot; src=&quot;/images/bootstrap-solarized.png&quot; /&gt;&lt;/a&gt;
&lt;/figure&gt;

&lt;p&gt;There was a recent post on 24ways.org that explained &lt;a href=&quot;http://24ways.org/2012/how-to-make-your-site-look-half-decent/&quot;&gt;How to Make Your Site Look Half-Decent in Half an Hour&lt;/a&gt;. It was made by a programmer and aimed towards programmers. The final result wasn’t universally well received because it probably didn’t meet most programmer’s expectations. I’m a designer, and the final result didn’t appeal much to me. But still: the article wasn’t about the end result, it was about the &lt;strong&gt;process&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I used to work with a very talented programmer. He was comfortable with numerous languages, could build both web and desktop applications, automate tasks across different types of databases, manage our homemade servers, work on AI algorithms… It probably wasn’t that difficult for him, but he did things my mind couldn’t grasp. One day, he had to design a small interface for a tiny web app that monitored our servers. The whole point of the app was to be usable, not even good-looking. But still: he didn’t know how to design it. He asked for my help and so I threw up a quick web interface. He liked it and thanked me. I told him that it really wasn’t much and that he probably could have figured it out himself. But then he said to me: “I don’t understand graphic design. I don’t understand how you designers can come up with something so quickly. I could spend days on designing an interface and not even come close to what you did. I just don’t get your craft.” That’s when I understood how honest he was, and that he really couldn’t envision an interface, even a simple one. And that’s probably what most programmers go through.&lt;/p&gt;

&lt;p&gt;Anyway, here’s my take on designing a site, and it’s aimed at programmers.&lt;/p&gt;

&lt;h2 id=&quot;bootstrap-of-course&quot;&gt;Bootstrap of course&lt;/h2&gt;

&lt;p&gt;It’s not a surprise that Anna Powell-Smith used Bootstrap as a foundation for her design. It’s solid, and provides interesting examples to begin with. But the real key is that &lt;strong&gt;it’s just code&lt;/strong&gt;. As I’ve &lt;a href=&quot;/bootstrap-is-for-programmers.html&quot;&gt;said before&lt;/a&gt;, Bootstrap defines much of its design in the HTML code. And though it doesn’t keep the dichotomy clear between HTML and CSS (one for content, one for layout), it’s easier for programmers to play around with HTML code than CSS code.&lt;/p&gt;

&lt;p&gt;So let’s use &lt;a href=&quot;http://twitter.github.com/bootstrap/examples/hero.html&quot;&gt;this example&lt;/a&gt; as a start and tweak it.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/bootstrap-hero.png&quot; alt=&quot;Boostrap Hero&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;colors-be-consistent&quot;&gt;Colors: be consistent&lt;/h2&gt;

&lt;p&gt;Probably the hardest part for programmers in designing a website is to choose colors. Although they don’t &lt;em&gt;choose&lt;/em&gt; colors, they use them on a daily basis in their IDE, and some color schemes are &lt;a href=&quot;https://github.com/daylerees/colour-schemes&quot;&gt;really gorgeous&lt;/a&gt;. Actually, it’s a good resource to choose colors from because IDE colors schemes provide consistent palettes with different tints that go well together. And because programmers probably don’t use Photoshop, we’d better choose a color palette and try to stick to it.&lt;/p&gt;

&lt;p&gt;You could browse the thousands of palettes on &lt;a href=&quot;http://www.colourlovers.com/&quot;&gt;ColourLovers&lt;/a&gt; or &lt;a href=&quot;https://kuler.adobe.com/&quot;&gt;Adobe’s Kuler&lt;/a&gt; but even I get overwhelmed by the quantity available. So I often stick to one of them: &lt;a href=&quot;http://ethanschoonover.com/solarized&quot;&gt;Solarized&lt;/a&gt;. This blog uses its colors, and I’ve really learned to like it because it prevents me from looking to long for decent colors. Solarized is like a designer’s Bootstrap: it’s a solid base you can use as start, and modify along the way if you want (I rarely do).&lt;/p&gt;

&lt;p&gt;If you don’t like Solarized, try to use your favorite IDE color scheme. Or steal a color palette from a website or app you like. For example, 53’s app &lt;a href=&quot;http://www.fiftythree.com/paper&quot;&gt;Paper&lt;/a&gt; has 4 default palettes to play around with. I particularly like the first one:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/paper-colors.png&quot; alt=&quot;Paper colors&quot; /&gt;&lt;/p&gt;

&lt;p&gt;2 dark colors, 2 light colors, 2 ‘fresh’ colors, and black. Add white to it and you have 8 colors to use for different purposes.&lt;/p&gt;

&lt;p&gt;Here, apart from the white background, I’ll use the Solarized color palette &lt;em&gt;only&lt;/em&gt;. What’s especially useful are the 6 different tints of grey, which aren’t &lt;em&gt;exactly&lt;/em&gt; grey but slightly blue. It’s a common design trick to use these blueish grey tints, because they’re not as boring as grey without being to prominent.&lt;/p&gt;

&lt;h2 id=&quot;positioning-the-holy-grid&quot;&gt;Positioning: the Holy grid&lt;/h2&gt;

&lt;p&gt;The &lt;a href=&quot;http://960.gs/&quot;&gt;960 grid system&lt;/a&gt; is well-known among web designers. It’s supposed to provide a framework for quick prototyping, by establishing some dimension rules in a 960 pixels-wide layout. Although there now also is a &lt;a href=&quot;http://cssgrid.net/&quot;&gt;1140 grid system&lt;/a&gt;, the 960 one is still very relevant. And for a programmer, it can be really easy to use because it’s based around &lt;strong&gt;numbers&lt;/strong&gt;. You can divide the 960 width into 12 or 16 columns, with a 20 pixels gutter. Furthermore, Bootstrap provides HTML code for a &lt;a href=&quot;http://twitter.github.com/bootstrap/scaffolding.html#gridSystem&quot;&gt;12-columns grid system&lt;/a&gt;. You just need to add some classes to your divs.&lt;/p&gt;

&lt;p&gt;For the sake of this article, I’ll leave out the responsive 1170px-wide container and stick to the 940px-wide one. One reason for that is that making your site extensible to 1170px requires to adjust some elements along the way (spacing, background images, font size) because the content will stretch out horizontally instead of vertically, and this will disturb the balance of your layout.&lt;/p&gt;

&lt;h2 id=&quot;size-its-hierarchy&quot;&gt;Size: it’s hierarchy&lt;/h2&gt;

&lt;p&gt;I like Jason Fried’s way of saying it: &lt;a href=&quot;http://37signals.com/svn/posts/3047-the-obvious-the-easy-and-the-possible&quot;&gt;The Obvious, the Easy, and the Possible&lt;/a&gt;. Some elements should be ‘Obvious’ and stand out: the titles. They provide a quick map of the page, by defining the part they’re the heading of. Then there’s the ‘Easy’, like subtitles, navigation, forms or call-to-actions. It’s things people will read or use, but not always. Finally, there’s the ‘Possible’: all the rest, like reading the full description of a feature, or using the footer links.&lt;/p&gt;

&lt;p&gt;For example, the logo shouldn’t be ‘Obvious’, but ‘Easy’ or even ‘Possible’ because it’s present on all pages and people know how to use it. It’s a common mistake to make the logo too big.&lt;/p&gt;

&lt;p&gt;Colors are also meant to provide visual hierarchy, but getting the size right is 3/4 of the job. Boostrap offers 6 heading levels, plus a Hero unit for showcasing key content, and a Page header for extra emphasis.&lt;/p&gt;

&lt;p&gt;The Hero unit used as example is already well furnished in terms of hierarchy. I’ll just tweak some font-sizes.&lt;/p&gt;

&lt;h2 id=&quot;fonts-not-that-important&quot;&gt;Fonts: not that important&lt;/h2&gt;

&lt;p&gt;I love Arial and Georgia. A sans-serif and a serif font, both considered ‘web-safe’. A programmer trying to find a nice font would be as helpless as when trying to find nice colors. Even designers like me often spend too much time in Photoshop scrolling through the hundreds of fonts they’ve installed, just to end up less certain than before.&lt;/p&gt;

&lt;p&gt;But like with colors, you can stick to a font you’ve already seen somewhere and particularly like. If you really want a different font for your headings (and only for your headings), try &lt;a href=&quot;http://www.google.com/webfonts&quot;&gt;Google Web Fonts’&lt;/a&gt; most popular: Open Sans or Droid Sans, which are different but not outstanding.&lt;/p&gt;

&lt;p&gt;Here I’ll just Arial. If you get it right with Arial, it’ll be easier to use a different font in the future.&lt;/p&gt;

&lt;h2 id=&quot;images-a-great-feature&quot;&gt;Images: a great feature&lt;/h2&gt;

&lt;p&gt;If you’re building a website for your app, try to include images. Even screenshots provide a nice touch. They disrupt the ordinary visual flow that a full-text website has. For example, if you’ve hired a designer to design your logo, take the opportunity to make it stand out. Or if you’re selling an iPhone app, just use an iPhone with a screenshot.&lt;/p&gt;

&lt;p&gt;I’ll use the Firefox logo as an example. It’s big, colorful and highly detailed. It’ll add depth to the page.&lt;/p&gt;

&lt;h2 id=&quot;gradients-and-shadows-avoid-them&quot;&gt;Gradients and shadows: avoid them&lt;/h2&gt;

&lt;p&gt;Gradients are very hard to handle. A designer can spend hours messing around with colors just to get a gradient right. The thing is, a 2-color gradient isn’t about choosing 2 colors, it’s also about &lt;em&gt;everything in between&lt;/em&gt;. If you add the fact that there are millions colors to choose from, the possibilities of a gradient are endless and a programmer would probably not be able to settle for one.&lt;/p&gt;

&lt;p&gt;Shadows are quite similar. It’s mostly a 1-color gradient from opaque to transparent. The common error is to make shadows too prominent. They should provide depth without being noticable, and that’s not an easy task. It’s like adding reverb to a mix: add some until you notice it, and then lower it down.&lt;/p&gt;

&lt;p&gt;Anyway, that’s why I don’t have gradients or shadows on this blog. I’m tired of spending hours in Photoshop just to come up with something half-decent.&lt;/p&gt;

&lt;p&gt;In my example, I stripped out the shadows and gradients of Boostrap’s default design by overriding some background and box-shadow proprerties.&lt;/p&gt;

&lt;h2 id=&quot;secret-be-subtle&quot;&gt;Secret: be subtle&lt;/h2&gt;

&lt;p&gt;So, if you don’t use gradients, shadows or original fonts, what’s left? Here are some details you can work on:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Rounded corners: the border-radius CSS property is well adopted and it provides seperation between elements. It also increases the affordance on buttons (that’s why I don’t like Metro’s buttons).&lt;/li&gt;
  &lt;li&gt;Line-height: it’s one of the details that can quickly make your website look cheap if used wrong, especially too small line-heights. But slightly too big isn’t much better. That’s why I don’t like readings Posterous blogs: the line-height is 20px for 12px size text, so the ratio is 1.66. For content, just use 1.5. For headings, 1.1 is fine. It’s easy to forget setting the heading’s line-height because they oftent have only one line of text.&lt;/li&gt;
  &lt;li&gt;Text-shadow: this might be the only kind of shadow that can be used without too much difficulty. But still, use it scarcely. Every browser which supports text-shadow also supports rgba. So instead of putting a full white text-shadow, try to use 0 1px 0 rgba(255, 255, 255, 0.5). For dark shadows, 0 1px 2px rgba(0, 0, 0, 0.25) looks decent. Also, don’t use a dark shadow if the text it’s set upon is darker than the background. Use a light one instead (and vice-versa when the text is lighter than its background). It’s you’re not sure, don’t use it. In my example, I actually removed them.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;iterate&quot;&gt;Iterate&lt;/h2&gt;

&lt;p&gt;Even a designer won’t come up with a perfect design the first time. I’ve readjusted the design of this blog multiple times, going from a rough layout to a more consistent one. Just finish your website and consider it ‘Version 1.0’ and get some sleep. The next day you’ll notice some subtle adjustments you can make: that title is slightly too big, the spacing here isn’t right, that button lacks contrast…&lt;/p&gt;

&lt;h2 id=&quot;examples&quot;&gt;Examples&lt;/h2&gt;

&lt;p&gt;I played with &lt;a href=&quot;http://twitter.github.com/bootstrap/examples/hero.html&quot;&gt;Bootstrap’s Hero example&lt;/a&gt; and added my custom CSS. The only image used is the Firefox logo. All colors were taken from Solarized’s color palette. You can click the image to see the live demo.&lt;/p&gt;

&lt;figure&gt;
&lt;a href=&quot;/html/solarized.html&quot;&gt;&lt;img alt=&quot;Bootstrap Solarized&quot; src=&quot;/images/bootstrap-solarized.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;figcaption&gt;Bootstrap Solarized&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;The same Solarized colors can be used to design a dark layout. Programmers are mostly familiar with this kind of color use in their IDE. It’s also a nice way to make your website stand out.&lt;/p&gt;

&lt;figure&gt;
&lt;a href=&quot;/html/solarized-dark.html&quot;&gt;&lt;img alt=&quot;Bootstrap Solarized Dark&quot; src=&quot;/images/bootstrap-solarized-dark.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;figcaption&gt;Bootstrap Solarized Dark&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;I talked about the app Paper and how it provided lovely color palettes too. The app is meant to draw sketches so the colors aren’t exactly supposed to fit together in terms of contrast and text readibility but still, it’s fun to play around with. I used the red color as the main background. It’s a bold decision, especially for a programmer, to use such a saturated color as the dominant color, but I like &lt;a href=&quot;/the-grey-period.html&quot;&gt;websites with a well-defined identity&lt;/a&gt;.&lt;/p&gt;

&lt;figure&gt;
&lt;a href=&quot;/html/paper.html&quot;&gt;&lt;img alt=&quot;Bootstrap Paper&quot; src=&quot;/images/bootstrap-paper.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;figcaption&gt;Bootstrap Paper&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;As I said earlier, if there’s a color palette you like, try to use it. There was this &lt;a href=&quot;/images/nike-ad.jpg&quot;&gt;Nike ad&lt;/a&gt; that I really liked. It’s full of different colors and gradients, but I just picked a few of them and created a 8-color palette out of it.&lt;/p&gt;

&lt;figure&gt;
&lt;a href=&quot;/html/nike.html&quot;&gt;&lt;img alt=&quot;Bootstrap Nike&quot; src=&quot;/images/bootstrap-nike.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;figcaption&gt;Bootstrap Nike&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;a-designers-take-at-a-programmers-problem&quot;&gt;A designer’s take at a programmer’s problem&lt;/h2&gt;

&lt;p&gt;I’m not a programmer but I tried to think like one in writing this article. I wanted to point out how easy it was to come up with a decent website just by quickly tweaking a Bootstrap template. I’ve often come across articles about programming that were aimed at designers, so I tried to do the opposite. If you have any question or remark, feel free to contact me. Any kind of feedback is appreciated.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Organized Gmail Inbox</title>
   <link href="http://jgthms.com/organized-gmail-inbox.html"/>
   <updated>2012-12-10T00:00:00+00:00</updated>
   <id>http://jgthms.com/organized-gmail-inbox</id>
   <content type="html">&lt;p&gt;I’ve often read about how email was broken. Maybe it’s because I only receive about 10 mails per day or because GMail’s interface with some plugins suits me well, but I’m actually very happy with it. But when Google forced me to switch to their latest interface, my labels’ colors became a bit messed up and I decided to use the opportunity to reorganize my inbox flow.&lt;/p&gt;

&lt;p&gt;I set up a simple rule to follow:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Every incoming mail must hold one of the predefined labels.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The first part of this rule states that &lt;em&gt;each&lt;/em&gt; mail should hold one label, and only one. It’s the least organization an inbox should provide, without cluttering it too much.&lt;/p&gt;

&lt;p&gt;The second part enforces a &lt;em&gt;fixed&lt;/em&gt; number of labels in order to avoid creating ones on the fly for each new mail. You can still create new ones, but not without making sure it’ll be heavily used in the future. Here’s my list:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/gmail-labels-organization.png&quot; alt=&quot;GMail labels organization&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Apart from the &lt;em&gt;Notes&lt;/em&gt; label (which synchronizes with iOS’ Notes app), the 7 other labels, along with sub-labels, should be able to organize &lt;strong&gt;every&lt;/strong&gt; incoming email.&lt;/p&gt;

&lt;h2 id=&quot;2do&quot;&gt;2do&lt;/h2&gt;

&lt;p&gt;The &lt;em&gt;2do&lt;/em&gt; label is a meta one. I use it to tag mails that are currently important and require further actions. I use the GMail ‘Multiple Inboxes’ feature to have a second inbox above the regular one, filtered with only &lt;em&gt;2do&lt;/em&gt; mails. These are for example mails I need to respond to, a shipping process to keep track off, a due payment…&lt;/p&gt;

&lt;p&gt;Using keyboard shortcuts, it only takes a few strokes to make a mail show up in that special inbox: j/k-o-l-2 and ‘Enter’.&lt;/p&gt;

&lt;h2 id=&quot;admin&quot;&gt;Admin&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;/images/label-admin.png&quot; alt=&quot;Admin label&quot; /&gt;&lt;/p&gt;

&lt;p&gt;This one is for administration stuff: bank, health insurance, taxes, (un)employment processes, various subscriptions… Actually, there is a sub-label called &lt;em&gt;Inscription&lt;/em&gt; (Subscription) with which I tag every new membership mail, the ones where they send you a welcome message along with your login information (and sometimes even with your password in plain text…). Anyway, it helps me keeping track of any service, real or online, to which I’ve subscribed. Sometimes, I wonder &lt;em&gt;“What was that website I’ve subscribed to again?”&lt;/em&gt; or &lt;em&gt;“What’s my login again?”&lt;/em&gt;, and this sub-label helps me answering these questions.&lt;/p&gt;

&lt;h2 id=&quot;e-commerce&quot;&gt;E-commerce&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;/images/label-e-commerce.png&quot; alt=&quot;E-commerce label&quot; /&gt;&lt;/p&gt;

&lt;p&gt;This label is for anything &lt;strong&gt;shopping&lt;/strong&gt;-related. The 3 most important sub-labels here are:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;em&gt;Commande&lt;/em&gt; (Order): whenever I order something online, the mail goes here. It’s usually a mail stating that my order was successfully processed.&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Livraison&lt;/em&gt; (Shipping): right after receiving an order confirmation mail, I often get a second one dealing with the shipping details. I then apply a &lt;em&gt;2do&lt;/em&gt; label to it until the product has arrived at home.&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Facture&lt;/em&gt; (Receipt): this sub-label holds all transaction receipts. It is different from the &lt;em&gt;Commande&lt;/em&gt; one as it’s usually receipts of digital purchases: Steam games, phone bills, domain renewals…&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;em&gt;Apple&lt;/em&gt; and &lt;em&gt;Voyages&lt;/em&gt; (Trips) sub-labels are more specific: iOS purchases and trip reservations.&lt;/p&gt;

&lt;h2 id=&quot;contact--friends&quot;&gt;Contact &amp;amp; Friends&lt;/h2&gt;

&lt;p&gt;These two go along as they work pretty much the same way. The way I use them depends on the sender’s &lt;strong&gt;identity&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;em&gt;Friends&lt;/em&gt;: it’s someone I know. I have sub-labels for specific friends or group of friends.&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Contact&lt;/em&gt;: it’s someone I don’t know who contacted me via a webform. I also organize its sub-labels for clients of each of my web design projects.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;newsletter--notifications&quot;&gt;Newsletter &amp;amp; Notifications&lt;/h2&gt;

&lt;p&gt;These labels are used for mails sent from &lt;strong&gt;companies&lt;/strong&gt;.&lt;/p&gt;

&lt;table&gt;
  &lt;tr&gt;
    &lt;td class=&quot;empty&quot;&gt;&lt;/td&gt;
    &lt;th&gt;To me only (private)&lt;/th&gt;
    &lt;th&gt;To me among others (public)&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;th&gt;From a company&lt;/th&gt;
    &lt;td&gt;Notification&lt;/td&gt;
    &lt;td&gt;Newsletter&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;Newsletters are just what they are: informations mails to which I have subscribed and are sent to many people.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/label-notifications.png&quot; alt=&quot;Notifications label&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Notifications are &lt;em&gt;everything else&lt;/em&gt; sent by a company. It’s usually just a small mail telling me that I have received a private message, or that a credit card or domain is about to expire, or that someone responded to one of my comments.&lt;/p&gt;

&lt;p&gt;I keep seperate sub-labels for notifications from Dribbble, Facebook, Twitter…&lt;/p&gt;

&lt;h2 id=&quot;reminder&quot;&gt;Reminder&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;/images/label-reminder.png&quot; alt=&quot;Reminder label&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I have 2 kinds of reminders:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;em&gt;Calendar&lt;/em&gt;: these are notifications sent by Google Calendar. I use them for events, deadlines, and birthdays. For example, 3 days before each birthday I receive a mail about it, along with a ‘pop-up’ the day itself.&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Self&lt;/em&gt;: these are the mails I send to myself. It’s a quick way to notify myself of something when I don’t have access to some other tool, or when I need to send myself a small file. I heavily use this feature on my iPad when I encounter a website I like.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;wrap-up&quot;&gt;Wrap-up&lt;/h2&gt;

&lt;p&gt;With this setup, and with the use of GMail filters, every email in my inbox holds a single label (except when I also add the &lt;em&gt;2do&lt;/em&gt; label but it’s just temporary).&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/gmail-organized-inbox.png&quot; alt=&quot;GMail Organized Inbox&quot; /&gt;&lt;/p&gt;

&lt;p&gt;For the several months during which I have used this organization, I haven’t felt the need to create new labels, nor to think too long about which one to apply. And I don’t know how it would scale up with much more mails to deal with, but I don’t think it’d be too difficult to handle.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>The Grey Period</title>
   <link href="http://jgthms.com/the-grey-period.html"/>
   <updated>2012-12-08T00:00:00+00:00</updated>
   <id>http://jgthms.com/the-grey-period</id>
   <content type="html">&lt;p&gt;Ever since Google launched its redesign, I’ve been wanting to point out a design direction that many websites seem to take: killing colors.&lt;/p&gt;

&lt;h2 id=&quot;amazon&quot;&gt;Amazon&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;/images/amazon-color.png&quot; alt=&quot;Amazon Color&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/amazon-grey.png&quot; alt=&quot;Amazon Grey&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;gmail&quot;&gt;GMail&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;/images/gmail-color.png&quot; alt=&quot;GMail Color&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/gmail-grey.png&quot; alt=&quot;GMail Grey&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;gcalendar&quot;&gt;GCalendar&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;/images/gcalendar-color.png&quot; alt=&quot;GCalendar Color&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/gcalendar-grey.png&quot; alt=&quot;GCalendar Grey&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;greader&quot;&gt;GReader&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;/images/greader-color.png&quot; alt=&quot;GReader Color&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/greader-grey.png&quot; alt=&quot;GReader Grey&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;wordpress&quot;&gt;WordPress&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;/images/wordpress-color.png&quot; alt=&quot;WordPress Color&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/wordpress-grey.png&quot; alt=&quot;WordPress Grey&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;digg&quot;&gt;Digg&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;/images/digg-color.png&quot; alt=&quot;Digg Color&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/digg-grey.png&quot; alt=&quot;Digg Grey&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Are the newer versions prettier? That’s for you to decide. But overall, they seem to lack depth and hierarchy.&lt;/p&gt;

&lt;p&gt;I actually loved the Digg V3 design and it inspired some of my work. Many colors were involved but they were complementary and appealing, and the spacing was perfect. And I was able to recognize the website right away, and not take a second to wonder ‘Is this the good one?’.&lt;/p&gt;

&lt;p&gt;Concerning GMail, I don’t know if it’s the cheap-looking buttons (that really look like a web designer’s first encounter with CSS3 border-radius and gradients) or the lack of depth the page holds, but it really doesn’t captivate me much. I remember Doug Bowman’s work on &lt;a href=&quot;http://stopdesign.com/archive/2009/02/04/recreating-the-button.html&quot;&gt;recreating the GMail buttons&lt;/a&gt; in 2009. A lot of thought went in the process, and it showed. The buttons &lt;em&gt;felt&lt;/em&gt; like buttons. They were easy to read and easy to spot. (By the way, I loved &lt;a href=&quot;http://v3.stopdesign.com/&quot;&gt;Stop Design’s previous layout&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;A lot of the websites mentioned are actually apps. Maybe avoiding colors is a design’s &lt;a href=&quot;http://en.wikipedia.org/wiki/Silent_protagonist&quot;&gt;silent protagonist&lt;/a&gt;: it helps the user identify itself with the website. No color, no obvious identity, just you and the app.&lt;/p&gt;

&lt;p&gt;But even Apple seems to be heading towards that direction.&lt;/p&gt;

&lt;figure&gt;
  &lt;img alt=&quot;Apple from color to grey&quot; src=&quot;/images/apple-from-color-to-grey.png&quot; /&gt;&lt;br /&gt;
  &lt;figcaption&gt;Left: Mac OS 10.6 Snow Leopard. Right: Mac OS 10.7 Lion&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Like gradients and shadows, it’s easier to mess up a color palette than sticking to greyscale. Compared to the 16,777,216 hexadecimal codes available, 256 shades of grey is quite fewer parameters to handle but you &lt;a href=&quot;http://gmailblog.blogspot.fr/2012/12/the-gmail-app-for-iphone-and-ipad.html&quot;&gt;can’t really do much with them&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Choosing grey is actually &lt;strong&gt;not&lt;/strong&gt; choosing.&lt;br /&gt;
Maybe it’s a fear of committing your design to a real identity.&lt;br /&gt;
Maybe it’s a well-thought decision to offer a clean layout.&lt;br /&gt;
Maybe it’s just easier.&lt;br /&gt;
Or maybe it’s just a trend. I honestly hope it is.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Firefox and the perfect address bar</title>
   <link href="http://jgthms.com/firefox-perfect-address-bar.html"/>
   <updated>2012-10-25T00:00:00+01:00</updated>
   <id>http://jgthms.com/firefox-perfect-address-bar</id>
   <content type="html">&lt;p&gt;Google Chrome has spread the concept of the &lt;em&gt;Omnibox&lt;/em&gt;: merging a browser’s URL bar with the search bar. Type anything, and it’ll access one of these 5 sources:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Search Engine&lt;/li&gt;
  &lt;li&gt;Bookmarks&lt;/li&gt;
  &lt;li&gt;History&lt;/li&gt;
  &lt;li&gt;Apps&lt;/li&gt;
  &lt;li&gt;Related sites&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It works as most address bars nowadays, and even adds 2 features:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;being a Google product, Chrome has the exclusivity of holding the Google Suggest feature directly in the address bar&lt;/li&gt;
  &lt;li&gt;Chrome “learns” new search engines. Repeatdly using a search field on a website gives it easy access by pressing Tab.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But I still prefer the Firefox address bar. It already works as a search engine: any query will end up as a Google search.&lt;/p&gt;

&lt;p&gt;What about other search engines?
Firefox is shipped with a default search bar with Google, Yahoo, Amazon… But the address bar can work as a substitute considering the well-known feature “Add a Keyword for this Search”: right-click any search field and add a keyword for it to make it available in the address bar by typing &lt;code&gt;&amp;lt;keyword&amp;gt;&lt;/code&gt; &lt;code&gt;&amp;lt;query&amp;gt;&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Whereas Chrome’s search engines add themselves automatically after a few uses, it has to be done manually in Firefox. It can help defining really short keywords for any search engine. I’ve got &lt;code&gt;g&lt;/code&gt; for Google, &lt;code&gt;i&lt;/code&gt; for Google Images, &lt;code&gt;w&lt;/code&gt; for WikiPedia, &lt;code&gt;d&lt;/code&gt; for the Free Dictionary, &lt;code&gt;fr&lt;/code&gt; and &lt;code&gt;en&lt;/code&gt; to translate from/to French to/from English… It just takes some organization and memory to make full use of this feature.&lt;/p&gt;

&lt;p&gt;But what I love most about Firefox’s address bar is its &lt;strong&gt;incremental search&lt;/strong&gt;. It looks through the history and bookmarks (and bookmark tags) by using keywords separated by spaces:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code&gt;local&lt;/code&gt; + project name = access a project on the localhost&lt;/li&gt;
  &lt;li&gt;blog name + &lt;code&gt;admin&lt;/code&gt; = access the admin area of a remote website&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;tw&lt;/code&gt; + username = access a previously visited twitter profile&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;ny&lt;/code&gt; + &lt;code&gt;wri&lt;/code&gt; = access a NY Times article about writing you’ve already read but don’t remember the exact tile&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;iph&lt;/code&gt; + &lt;code&gt;desi&lt;/code&gt; = access all bookmarks tagged ‘iphone’ and ‘design’&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It really comes in handy when trying to find a page you’ve visited but only remember part of the title or the url. Type a few keywords (or even partial keywords) and the result list will narrow down rapidly.&lt;/p&gt;

&lt;p&gt;Chrome works slightly that way too but provides a maximum of 6 results, and favors the search too much over the bookmarks and history. But it shouldn’t be a surprise considering the identity of its author.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>When a designer programs</title>
   <link href="http://jgthms.com/when-a-designer-programs.html"/>
   <updated>2012-10-07T00:00:00+01:00</updated>
   <id>http://jgthms.com/when-a-designer-programs</id>
   <content type="html">&lt;p&gt;Launching a website requires mainly 3 parts:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Graphic mockups&lt;/li&gt;
  &lt;li&gt;HTML/CSS static templates&lt;/li&gt;
  &lt;li&gt;Development&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My work consisted of the first 2 parts exclusively. How did I call it? &lt;em&gt;Web Design&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;But how do you call someone who does &lt;em&gt;only&lt;/em&gt; HTML/CSS?&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;In English, it seems to be mostly called &lt;em&gt;Front-End Developer&lt;/em&gt;, though it doesn’t involve any programming skill.&lt;/li&gt;
  &lt;li&gt;In French, we have a word for that though: &lt;em&gt;Intégrateur&lt;/em&gt;. It’s precisely the process of turning graphic mockups (PSD’s mainly) into HTML/CSS static templates, &lt;em&gt;nothing else&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So, can I consider myself a &lt;em&gt;Developer&lt;/em&gt;? Absolutely not.&lt;/p&gt;

&lt;p&gt;What I love about CSS, and what made me good at it, is that my mind can encompass all the properties and values possible. There isn’t much theory to learn, so you’re left with only a small set of tools. It’s the multiplicity of their interactions that is powerful.&lt;/p&gt;

&lt;p&gt;But when looking at a programming language, I’m overwhelmed by the vast amount of documentation one has to acquire. All the functions, parameters, obligations, special cases, syntax considerations, possible errors, alternative directions…&lt;/p&gt;

&lt;p&gt;A designer’s first encounter of some &lt;em&gt;kind&lt;/em&gt; of programming is often jQuery plugins or PHP WordPress themes. How’s that for a bad start? It’s mainly just looking at unintelligible code and trying to figure out why it doesn’t act exactly as you wish and how you’d like to tweak it a little bit, only to end up breaking the whole thing.&lt;/p&gt;

&lt;p&gt;That’s how you end up with online forums bloated with unanswered questions following the pattern:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;“I just downloaded X plugin but it doesn’t work and I don’t know why. Please provide me the full functioning code to copy/paste, without me having to actually understand the process.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I’ve seen it, and I may have done it, but I wasn’t eager to stay in the fog forever. So I picked up some programming tutorials, about Ruby and Rails. I held a &lt;a href=&quot;http://29minparjour.bbxdesign.com/&quot;&gt;daily blog about my progress&lt;/a&gt;. Though it lasted for some months, I never got serious about it, probably because I never used it.&lt;/p&gt;

&lt;p&gt;Lately though, inspired by many readings about programming, I still wanted to build &lt;em&gt;stuff&lt;/em&gt;. Anything, for the sake of having crafted something. So I took up the programming language I’ve encountered most, PHP, and built:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;a html scraper that backups the pages I’ve liked with Instapaper (because I have doubts about their permanence)&lt;/li&gt;
  &lt;li&gt;a static site generator (inspired by James Hague’s &lt;a href=&quot;http://prog21.dadgum.com/77.html&quot;&gt;6838 bytes Perl script&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;a script to download all the images of an online presentation (that weren’t actually allowed to be downloaded)&lt;/li&gt;
  &lt;li&gt;a contact form for my personal page (easily spammable actually)&lt;/li&gt;
  &lt;li&gt;a filterable events viewer for the LondonOlympics, parsing a json I found at NBC.com&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My code is terrible. It’s mysterious variables entangled with non-DRY functions, waiting for an error to show up, and probably causing memory leaks everywhere. I often have trouble reading back my code and decide to restart from scratch. Still, it works(!) and I feel a sense of achievement that probably every programmer has encountered.&lt;/p&gt;

&lt;p&gt;But, I &lt;strong&gt;know&lt;/strong&gt; it’s &lt;strong&gt;terrible&lt;/strong&gt; code, and I know that making it work doesn’t make it good. I personally wouldn’t share any of my code (considering &lt;a href=&quot;http://thedailywtf.com/Articles/Code-Refuse.aspx&quot;&gt;&lt;em&gt;“The first rule of code reuse is that the code needs to be worth re-using.”&lt;/em&gt;&lt;/a&gt;) and wouldn’t charge any client for it either.&lt;/p&gt;

&lt;p&gt;And I believe the mere existence of bad programmers spawns from the lack of self-criticism concerning this kind of projects. As a result, I’ll remain publicly &lt;em&gt;not&lt;/em&gt; a programmer until I become a decent one.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>iA Writer's new document</title>
   <link href="http://jgthms.com/ia-writer-new-document.html"/>
   <updated>2012-03-16T00:00:00+00:00</updated>
   <id>http://jgthms.com/ia-writer-new-document</id>
   <content type="html">&lt;p&gt;iA Writer for iPhone &lt;a href=&quot;http://www.iawriter.com/&quot;&gt;just came out&lt;/a&gt;. 0,79€ for both iPhone &lt;em&gt;and&lt;/em&gt; iPad (that I plan on upgrading to iOS 5) apps? Instant download!&lt;/p&gt;

&lt;p&gt;I haven’t used it intensively yet but one thing that &lt;em&gt;really&lt;/em&gt; bothered me (or at least surprised me for its lack of common sense) is that taping the “+” icon to create new document does &lt;strong&gt;just&lt;/strong&gt; that. And I mean &lt;em&gt;only&lt;/em&gt; that: it adds a new .txt file called “Document” &lt;em&gt;but doesn’t open it&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;In what context would you want to create a document without the intent to actually begin writing in it ??&lt;/p&gt;

&lt;p&gt;I personaly don’t plan on filling my iCloud space with empty 0.1kb-sized documents.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CopyPasteCharacter is unusable</title>
   <link href="http://jgthms.com/copypastecharacter-unusable.html"/>
   <updated>2012-03-12T00:00:00+00:00</updated>
   <id>http://jgthms.com/copypastecharacter-unusable</id>
   <content type="html">&lt;p&gt;I used to love &lt;a href=&quot;http://copypastecharacter.com/&quot;&gt;CopyPasteCharacter&lt;/a&gt; because it provided me special but useful characters that are hard to generate (especially since I mainly work on Windows).&lt;/p&gt;

&lt;p&gt;The ones I sometimes used were:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;→ right arrow&lt;/li&gt;
  &lt;li&gt;“ double quotes&lt;/li&gt;
  &lt;li&gt;♥ heart&lt;/li&gt;
  &lt;li&gt;♫ notes&lt;/li&gt;
  &lt;li&gt;≠ different&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;among others. But because I primarily write in French, my text contains a fair amount of accents: è, à, û, ô, î, and also ç, which are very common. My issue was with the capitalized version of these characters, even though a French keyboard (AZERTY), through its different layout (which modifies a dozen of keys) gives access to more &lt;em&gt;popular&lt;/em&gt; French characters.&lt;/p&gt;

&lt;p&gt;So, whenever I needed a À, Ç or É, I navigated to CopyPasteCharacter where these 3 characters (among others) were directly provided on the home page.&lt;/p&gt;

&lt;p&gt;The website’s new disposition has killed this workflow because the characters are now divided in sets. The problem is that the default set (called &lt;em&gt;Our favorite set&lt;/em&gt;), although nice-looking, consists of a lot of unnecessary characters. A pencil? A doubled male sign? A conical taper? An asterism???&lt;/p&gt;

&lt;p&gt;Anyway, I’ve got 3 options now:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;browse&lt;/strong&gt; for a character, but the “Alphabetical order” is &lt;em&gt;full&lt;/em&gt; of noise.
&lt;img src=&quot;/images/copypastecharacter-noise.png&quot; alt=&quot;CopyPasteCharacter noise&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;search&lt;/strong&gt; for a character, but it’s a slow process and usually results in the same amount of noise.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;create a set&lt;/strong&gt;. &lt;em&gt;Oh dear…&lt;/em&gt; &lt;a href=&quot;/remember-login-not-password.html&quot;&gt;Another login&lt;/a&gt;… And I often need those special characters when I’m &lt;em&gt;not&lt;/em&gt; at home.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Maybe I’m the only one annoyed by this new setup. It’s just that I used to be only two clicks away from copying the character I needed, while now it has become a dreadful process.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Remember login, not password</title>
   <link href="http://jgthms.com/remember-login-not-password.html"/>
   <updated>2012-03-06T00:00:00+00:00</updated>
   <id>http://jgthms.com/remember-login-not-password</id>
   <content type="html">&lt;p&gt;I wish browsers would prompt me, not only to remember my password (which actually remember &lt;em&gt;both&lt;/em&gt; login and password), but also my login &lt;em&gt;only&lt;/em&gt;. The thing is, I don’t mind having my login stored in my browser (and consequentially giving other users potential access to) because it can be (and sometimes is) publically known.&lt;/p&gt;

&lt;p&gt;The problem I encounter is due to my quite common name: Jeremy Thomas. I’m French, but this name is not only common in France but in English-speaking countries too, which are more prone to hold early users of web apps, and thus early &lt;em&gt;subscribers&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;So I have to fall back on one of my nicknames, based upon my first: boomshanka (which is also widely-adopted). These are boomy, boomybx, bbx…&lt;/p&gt;

&lt;p&gt;But again, username choice is often constrained by:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;availability (jthomas, jeremythomas, jeremyt… always taken)&lt;/li&gt;
  &lt;li&gt;character count (boomy, bbx or jt, is almost always too short)&lt;/li&gt;
  &lt;li&gt;special characters (spaces, underscores)&lt;/li&gt;
  &lt;li&gt;required characters (like numbers, rare though)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So, among dozens of websites, I end up with a dozen of different logins which I would like my browser to remember, without compromising the security of having &lt;em&gt;also&lt;/em&gt; my passwords stored.&lt;/p&gt;

&lt;p&gt;Even the solution of forcing users to use their email as login isn’t viable because it’s terribly long to write.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Twitter OAuth 'See your password'</title>
   <link href="http://jgthms.com/twitter-oauth-see-your-password.html"/>
   <updated>2012-03-01T00:00:00+00:00</updated>
   <id>http://jgthms.com/twitter-oauth-see-your-password</id>
   <content type="html">&lt;p&gt;I love OAuth. I love it because I tend to register with many different usernames, many different passwords (and variations of them), many different emails (with GMail’s dot trick), so I end up spending more time logging in than actually signing up.&lt;/p&gt;

&lt;p&gt;To efficiently use OAuth, you need a service to which you’re constantly logged in. Twitter is one of them. And because it’s widely adopted among users, it’s widely adopted among developers setting up an authentification system for their web app.&lt;/p&gt;

&lt;p&gt;OAuth not only provides access to your account, but &lt;em&gt;different&lt;/em&gt; levels of access. And although OAuth seems more secure and rapid than an old-school sign up, I still read &lt;em&gt;what&lt;/em&gt; the application I’m granting access to can do with my Twitter account.&lt;/p&gt;

&lt;p&gt;What often strikes me when I authenticate via Twitter is what the third-party application &lt;em&gt;can’t&lt;/em&gt; do:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/twitter-see-your-password.png&quot; alt=&quot;Twitter OAuth &apos;See your Twitter password&apos;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I read these bullet points as:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;things this application (bitly) can do&lt;/li&gt;
  &lt;li&gt;things this application can’t do &lt;em&gt;but could have asked permission to&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So, is this ‘&lt;em&gt;See your Twitter password&lt;/em&gt;’ a global confirmation that no application could &lt;em&gt;ever&lt;/em&gt; see your Twitter password, or is it only this application’s authorization setting? The latter would feel terribly unsecure.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Tumblr and the source problem</title>
   <link href="http://jgthms.com/tumblr-source-problem.html"/>
   <updated>2012-02-28T00:00:00+00:00</updated>
   <id>http://jgthms.com/tumblr-source-problem</id>
   <content type="html">&lt;p&gt;Tumblr is more a community than a blogging engine.&lt;/p&gt;

&lt;p&gt;If you’re registered on WordPress.com, chances are you &lt;em&gt;write&lt;/em&gt; a blog. Whether you’re a literature fan, a passionate photographer or a technology enthousiast, you &lt;strong&gt;produce&lt;/strong&gt; content for others to read. And those readers aren’t necessarily (and probably aren’t) registered to WordPress.com because consuming this content doesn’t require to be. You either subscribe to the RSS feed or visit the blog daily. You’re a visitor.&lt;/p&gt;

&lt;p&gt;Tumblr holds the same features, but adds two new ones:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;the Dashboard&lt;/li&gt;
  &lt;li&gt;the Reblog&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Dashboard is like a homemade RSS reader: you follow Tumblr blogs and find them aggregated on your Tumblr home page. It’s a &lt;strong&gt;consumer&lt;/strong&gt; feature. The only difference with a regular RSS reader is that you’re limited to Tumblr blogs. But because there is that second feature, users don’t feel the lack.&lt;/p&gt;

&lt;p&gt;The Reblog is quite particular: you produce content on your blog without producing &lt;em&gt;any&lt;/em&gt;. I considerer it a product because although your blog will publish it as a duplicate, any visitor of yours will probably only see this version and will consume it as though you were its creator. So Reblogging is &lt;em&gt;production after consumption&lt;/em&gt;: you’ve seen something on a Tumblr blog, you republish it on your own. It’s not a simple link: it’s a complete new post.&lt;/p&gt;

&lt;p&gt;The only difference with a &lt;em&gt;normal&lt;/em&gt; post is the presence of a source link (usually preceded by the word “Via”). This source link is the Tumblr post from which this Reblog comes from, but it’s not necessarily the &lt;strong&gt;original&lt;/strong&gt; post. And when, after having clicked half a dozen of “via” links you finally end up on the original post, you still don’t know the &lt;strong&gt;source&lt;/strong&gt;. Why? Because posting on Tumblr doesn’t require to. This attitude is emphasized by the use of the bookmarklet, which grabs any image of the current page and uploads it anonymously on Tumblr’s servers.&lt;/p&gt;

&lt;p&gt;So when I find a beautiful picture of which I want to find similar ones, and I finally reach the source, I still don’t know where it comes from, because the source according to Tumblr is the original post, not the content’s origin.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Solarized Jekyll Theme</title>
   <link href="http://jgthms.com/solarized-jekyll-theme.html"/>
   <updated>2012-02-24T00:00:00+00:00</updated>
   <id>http://jgthms.com/solarized-jekyll-theme</id>
   <content type="html">&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: as I’ve modified my design since, this post isn’t as relevant as before. But you can check the design in the repo.&lt;/p&gt;

&lt;p&gt;As I’ve decided to design this blog without any image nor CSS 3 fancy feature (gradients &amp;amp; shadows particularly), I had to come up with a perfect color scheme, pleasing to read and visually balanced.&lt;/p&gt;

&lt;p&gt;There are &lt;em&gt;millions&lt;/em&gt; of predefined color &lt;a href=&quot;http://kuler.adobe.com/&quot;&gt;palettes&lt;/a&gt; &lt;a href=&quot;http://www.colourlovers.com/palettes&quot;&gt;available&lt;/a&gt; to download. And I’m bad at browsing and taking a quick decision with a whole world of options ahead of me.&lt;/p&gt;

&lt;p&gt;So I had to find that &lt;em&gt;one&lt;/em&gt; particular color theme that makes you forget all the others and regret not having found it before.&lt;/p&gt;

&lt;p&gt;When looking for a performant JavaScript syntax highlighter, I discovered the exceptional &lt;a href=&quot;http://softwaremaniacs.org/soft/highlight/en/&quot;&gt;highlight.js&lt;/a&gt; (auto-detects the language, needs only 2 files) which provides a handfull of color styles. And one of them instantly caught my eye: &lt;strong&gt;&lt;a href=&quot;http://ethanschoonover.com/solarized&quot;&gt;Solarized&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Its tagline reads as:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Precision colors for machines and people&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Precise, it is. Balanced, too. And gorgeous, hell yeah!
It’s a color palette meant for terminal and gui applications, and works incredibly well as a theme for IDEs &amp;amp; text editors.&lt;/p&gt;

&lt;p&gt;Why not make use for it in a &lt;em&gt;blog&lt;/em&gt; theme?&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Bootstrap is for programmers</title>
   <link href="http://jgthms.com/bootstrap-is-for-programmers.html"/>
   <updated>2012-02-21T00:00:00+00:00</updated>
   <id>http://jgthms.com/bootstrap-is-for-programmers</id>
   <content type="html">&lt;p&gt;I am no programmer.&lt;/p&gt;

&lt;p&gt;My work as a web designer consisted of graphic design and HTML / CSS templates. I never used any framework or IDE: I wrote every line using Notepad++. This light setup forced me to be very efficient in my HTML markup and CSS syntax.&lt;/p&gt;

&lt;p&gt;In HTML, I used the fewest tags possible, or should I say, &lt;em&gt;necessary&lt;/em&gt;. Classes were used with parcimony, but provided enough flexibility for the programmer who would use my code. Names used for classes described the content, not the style applied.&lt;/p&gt;

&lt;p&gt;I was committed to follow the golden rule:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;HTML is for content&lt;/li&gt;
  &lt;li&gt;CSS is for layout&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Frameworks such as &lt;a href=&quot;http://twitter.github.com/bootstrap/&quot;&gt;Bootstrap&lt;/a&gt; fail at keeping this dichotomy clear. Some examples:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code&gt;.span4&lt;/code&gt; and &lt;code&gt;.offset4&lt;/code&gt; to define column widths and column margins&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;.navbar-fixed-top&lt;/code&gt; to apply an alternate style for the top bar&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;.table-bordered&lt;/code&gt; for a table with borders&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;.form-horizontal&lt;/code&gt; for a float left with right-alined labels&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;.tabs-left&lt;/code&gt; &lt;code&gt;.tabs-right&lt;/code&gt; &lt;code&gt;.tabs-below&lt;/code&gt; classes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All Bootstrap’s classes aren’t weighted with style instead of content description. Buttons are quite well implemented. Variations use function, not color:
&lt;code&gt;.btn-primary&lt;/code&gt; &lt;code&gt;.btn-info&lt;/code&gt; &lt;code&gt;.btn-warning&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Anyway, let’s not overlook the purpose of Bootstrap: quickly build a website, through HTML blocks and classes, &lt;em&gt;without&lt;/em&gt; having to write one line of CSS. &lt;strong&gt;Everything&lt;/strong&gt; is defined in the HTML. If you think about it, programmers merely generate HTML code, and never touch the CSS file. So providing full control, from content to style, through HTML &lt;em&gt;only&lt;/em&gt;, seems evident.&lt;/p&gt;

&lt;p&gt;If I had to launch a website rapidly, I could set it up quite quickly. But I’d still have to take some layout decisions: font, color, positioning, spacing, dimensions… And though I’ve done it more than a hundred times, it wouldn’t be straightforward.&lt;/p&gt;

&lt;p&gt;So I’d set aside my wish to keep content apart from layout and use Bootstrap, because it’s incredibly well designed.&lt;/p&gt;
</content>
 </entry>
 
 
</feed>