A comparison of the two most common forms of discussions and comments on the web. Flat ones win in every respect. Jeff Atwood will even tell you how to keep the ability to reply to specific posts in them.
A great podcast by Marco Arment and Dan Benjamin that I’m going to miss. The last half hour of this episode in particular I’d rank among the best in the history of podcasting.
Today’s tweet by Venca Novotný provoked me into a morning conversation on Jabber. We sorted out the pros and cons of using pure DI and a service locator in controllers and presenters.
Sparrow was a highly capable e-mail client for iOS and Mac (where I still use it). Four months ago we collectively mourned the acquisition of its team by Google. Everyone assumed this was a classic „aquihire“ and that we’d never hear from the talented team again.
Fortunately, we were wrong, and Google let the talent work on what they do best. A few moments ago a new Gmail app for iOS was released, and the Sparrow tradition can be felt in its every gesture. It’s the first usable and, above all, native Gmail client for iOS. The basic controls are the same as in Sparrow, and the user interface is full of the classic gestures and animations borrowed from the most popular apps on this platform.
But Gmail 2.0 excels at what the preinstalled Mail.app lacks. Push notifications (which Sparrow already promised us, though we never got them), proper support for labels, stars and priority inbox, sending from multiple addresses (the app loads them from your account settings), lightning-fast syncing, and direct support for automatic replies and confirming calendar invitations.
It can do so much that only now do I realize just how much the preinstalled client is missing.
The iPad interface (also promised) hasn’t been polished as well as the iPhone one yet. It isn’t as smooth and I’ve found a few bugs, but even so it’s an enormous step up from Mail.app.
Searching for „Gmail“ in the Czech App Store doesn’t bring it up in the results yet, but you can use this direct link. Unlike Sparrow, it’s free.
The Verge came up with an idea for how to get around the long life cycle of today’s gaming consoles and treat yourself to high-end graphics in the living room right now. They used the Steam Big Picture feature, which is made precisely for this purpose. And most games on Windows reportedly support the Xbox 360 controller.
I absolutely love this idea, especially because on the Mac I can only play games from Valve and Blizzard, and most of my Steam collection sits idle.
A new calendar app, Fantastical for iPhone, came out today. Its minimalist counterpart on the Mac, with event entry using natural-language text, is one of my favorite apps.
And as if that weren’t enough, today we also got the new iTunes 11.
This is an automatically generated e-mail, so please do not reply to it!
Does this phrase — and e-mails from the obligatory address with „noreply“ before the @ sign — get on your nerves too?
E-mail is an absolutely fundamental user interface. Your customers will appreciate that they can intuitively click Reply and have a living being read their message on the other end.
The only reason you can have for a no-reply address is the fear of spam and bounce messages from undelivered e-mails. But that’s your problem, not your customers’. Just set up a few filters in Gmail for it.
…but mine fucking works.
When should you choose a quick but botched solution, and when a clean and elegant but more expensive one? An objective assessment of both sides of the barricade.
Spoiler alert: it always depends on the circumstances, the conditions, and the return on investment. Technical debt comes up for discussion too.
A new project by Marco Arment, the author of Instapaper, for iOS devices with a very simple and traditional business model — for two dollars a month you get access to all past and future issues. Each one contains 4–6 articles from personalities of the global blogosphere, and so far it has always been very readable material.
There’s also a weekly trial version, which likewise gives you access to everything I mentioned here.
The end of Microsoft may be closer than we thought. A great article analyzing the current situation of this giant.
Microsoft is in deep trouble, their two main product lines are failing, and the blame game is intensifying. Steve Sinofsky gets the blame this time for the failure of Windows 8, but the real problem is the patterns that are so clearly illustrated by these actions.
I was recently thinking about what’s worth skimping on. I couldn’t come up with a single product category. Quality things last longer and serve you better.
Dustin Curtis:
The time it takes to find the best of something is completely worth it. It’s better to have a few fantastic things designed for you than to have many untrustworthy things poorly designed to please everyone. The result–being able to blindly trust the things you own–is intensely liberating.
This post was written by Jakub Straka.
When I got the chance last week to attend the Google Analytics training with Honza Tichý from Medio Academy, I didn’t hesitate for a moment. I made the right call, and I’d like to share a few short observations.
The most pleasant surprise for me was Honza’s healthily critical view of Analytics itself. A self-taught beginner is easily tempted — and that was my case too — into the boundless worship of every number in the reports. Imagine his astonishment when he discovers that the data on which he based more than one report is either misleading or completely useless. During the training we went through the principles of measurement in detail and demolished several entrenched myths. The lively presentation didn’t let anyone doze off and was complemented by plenty of demonstrations on live data.
Honza is without a doubt an analytics guru. Not only did he answer every question with ease, he never forgot to throw in some interesting tidbit about the topic at hand (do you know, for instance, how IE handles storing cookies for short domain names?). There was a great deal of time for questions, and everyone really got their turn.
The attendees’ comfort was excellently taken care of as well. The training took place in a pleasant setting and was interspersed with a tasty lunch at a nearby restaurant.
I definitely don’t regret attending, and I’m planning to go to more of Medio’s workshops soon.
A fascinating conversation with Loren Brichter, the star iOS developer — author of the Twitter clients Tweetie for iPhone, iPad and Mac, which Twitter later bought and rebranded as its official clients.
Loren invented the pull-to-refresh gesture, which has become the de facto standard on mobile platforms.
His approach to building apps is utterly perfectionist. In the interview he also talks about Letterpress, his new game. Its popularity is so high that Apple’s Game Center can’t handle the flood of requests.
David Thorne aka 27bslash6, author of the legendary email exchanges about a drawing of a spider and designing a missing cat poster, is back! In his latest piece he recounts what he argues about at home with his wife. I had to try really hard on the subway not to burst out laughing :)
On top of that, he released his second book in April 2012, which I completely missed at the time.
People quite often ask us whether we would want to be able to see. To that question I answer — and most of my friends feel the same way — almost unequivocally: no. Eyesight really isn’t all that irreplaceable. You can live perfectly fine without it. To tell the truth, for most blind people the idea of suddenly being able to see is just as „crazy“ as it is unimaginable for a sighted person to lose their sight.
If you ever feel unsure or simply don’t know what to do when meeting a blind person, read this article.
Juozas Kaziukėnas is a very interesting person. A web developer and entrepreneur who is constantly trying new things (e.g. living homeless) and blogging about it.
His latest article carries a simple message — if you want something, do it.
So when a person asks me why did I got rid of most of my hair to get a Mohawk, I feel sad for him. Why not? It’s the easiest thing one can do to try something new - at the end of a day, if you won’t like it, it will grow back. I did it because I wanted to. Done. I was DJing at an event back in Edinburgh for a crowd of students because I wanted to. I got my neck tattooed recently because why not? Actually that bit about a tattoo is not true. Yet.
Yesterday marked a year since Steve Jobs died.
Here is my tweet.
The most packed article on unit testing I’ve ever read. It contains a crushing amount of facts per paragraph, and there’s nothing in it you couldn’t agree with.
If this doesn’t convince the doubting Thomases, then nothing will.
You know what your code needs to do. Then you make it do it. Even if you don’t have a working system, you can see your code actually run and actually work. You get that great “I’ve done it!” feeling. Now repeat every minute or so. Just try test-first if you want to be high on endorphins, proud about your work, and motivated to do more.
Jeff Atwood on how PC hardware has been stagnating for the last four years, while all the interesting stuff is happening in the mobile industry.
Unless you’re a developer, you can probably already handle everything you do on a smartphone or tablet.
An excellent article on how to write and structure tests so that they help you rather than becoming a burden you have to maintain and that eats up your time.
I really love these behind-the-scenes looks at companies. Joel Spolsky wrote a similar one six years ago.
iOS 6 and OS X 10.8.2 fix the iMessage problems I mentioned three weeks ago. Once you install these updates, messages sent to your phone number will start arriving on your iPad and Mac as well.
As a nice bonus, all of your devices will stop ringing constantly when you’re in the middle of a conversation on just one of them.
WebExpo is the event of the year for me, and I always look forward to it accordingly. Last year’s edition saw a change of venue, moving from the CZU in Suchdol to the VE in Žižkov, and it was definitely a step forward. So I figured that this year the conference would iron out a few more wrinkles and thus give attendees an even better experience.
That didn’t happen.
Even though it was in a better venue, in terms of organization quality WebExpo moved a few years backwards. A cold lunch, packed halls, a fight for refreshments during the coffee break, and the traditionally disastrous buffet, where they even ran out of soft drinks. At the ticket price, which cost me two thousand, I don’t consider these things all that crucial, but people who paid six thousand will already have a different opinion.
But there’s certainly plenty to praise too. The lineup of Thursday workshops was top-notch and I wanted to be at about three of them at once. In the end the choice fell on Honza Řezáč, who was excellent and over a couple of hours initiated us into personal branding, with a broad reach extending almost all the way to the meaning of life.
I also thoroughly enjoyed all the opportunities for networking - the hour-long Thursday workshop with Jeanne Trojan, the warm-up party and the Saturday after party. I met lots of familiar faces and new people, and it was great.
The quality and value of the talks fluctuated. Going to John Vanhara, David Grudl and Jirka Knesl is always a safe bet. I was also pleased by the joke-packed talk about node.js with Lukáš Linhart and the chat about the redesign of Annonce by Štěpán Doubrava. I was dreading the block of talks about Windows 8 (Microsoft’s sponsorship could be felt all the way from Sherwood), but Honza Cibulka talked about mobile applications so generally that a lot of the principles could be applied to iOS and Android as well.
Sebastian Bergmann, whom I’d been really looking forward to, disappointed me. He’s evidently touring conferences with a single talk; his PHPUnit Best Practices are for absolute beginners, and judging by the reactions on Twitter I wasn’t the only one who found it so boring. From such an icon of the PHP world I expected a show.
The next WebExpo is supposed to be international and entirely in English. I don’t know whether that means that Czech speakers will also be forced to speak English and we’ll thus have to listen to czenglish, or whether only international guests will be invited. It doesn’t automatically mean better quality.
And the vote during the closing presentation on whether we’d go to WebExpo in Dresden or in Brno was, in my view, meant to hint that it doesn’t have to be held in Prague at all. I’ll definitely go for the community, but I’d rather not expect quite so much from the talks anymore.
What’s skeuomorphism? If you’ve ever used an Apple product, you’ve experienced digital skeuomorphic design: calendars with faux leather-stitching, bookshelves with wood veneers, fake glass and paper and brushed chrome. Skeuomorphism is a catch-all term for when objects retain ornamental elements of past, derivative iterations–elements that are no longer necessary to the current objects’ functions.
Is it worth devoting the first 750 or so words of this piece to the iPhone 5’s surface appeal? I don’t know how else to convey the niceness of this thing. This iPhone 5 review unit is the single nicest object in my possession. I own things that cost and remain worth more (e.g. my car). But I own nothing this nice. It sounds hyperbolic to put it that way, but I offer this observation with no exaggeration.
If you’re going to read just one iPhone 5 review, it should be this one.
The Mac does come with PHP preinstalled, but it’s awkward to work with - for instance, it’s hard to add further extensions to it (such as gettext). It’s therefore more convenient to manage your own PHP installation. We’ll use the Homebrew package manager for that, which also lets you install a whole range of other CLI tools.
If you’re just getting started with the Mac, I also recommend reading through a few tips and tricks for Mac OS X.
Homebrew
# install Homebrew
ruby <(curl -fsSkL raw.github.com/mxcl/homebrew/go)
# Before continuing, resolve all the problems that the following command prints out.
# Above all, you'll need to install Xcode from the Mac App Store and add Command Line Tools inside it.
#
# In the /etc/paths file, also move/add the path '/usr/local/bin' to the first line,
# so that tools installed via Homebrew take precedence over the ones already built into the system.
brew doctor
Git
The Xcode Command Line Tools already include Git for the command line. But if you always want the latest version, you can download it from the „official website“:http://git-scm.org/ or use Homebrew:
brew install git
To generate an SSH public/private key, use ssh-keygen, which will ask you a few questions and then generate the pair into the .ssh directory:
ssh-keygen
I also recommend using my .gitconfig (inspired by the one from Vašek Purchart) with plenty of handy settings and aliases.
PHP
# Let Homebrew know about the repository with PHP packages.
brew tap homebrew/dupes
brew tap josegonzalez/homebrew-php
# And install PHP.
# Make note of the instructions from the result of this command, you'll need them when integrating PHP into Apache!
brew install php54 --with-pgsql --with-intl --with-imap
# Extensions can also be installed via Homebrew. You can list the available ones like this:
brew search php54
php.ini is located in /usr/local/etc/php/5.4/php.ini.
PEAR
PEAR always needs to be called with sudo, otherwise it won’t work.
# If the following command doesn't print '/usr/local/bin/pear',
# you haven't edited the /etc/paths file according to the instructions in the section on installing Homebrew!
which pear
# Installing PHPUnit
sudo pear channel-discover pear.phpunit.de
sudo pear channel-discover pear.symfony-project.com
sudo pear channel-discover components.ez.no
sudo pear install phpunit/PHPUnit
For tools installed via PEAR to work, you need to add the path /usr/local/Cellar/php53/5.3.16/bin to /etc/paths (adjust it according to your PHP version).
Newly opened Terminal windows can now find the tools installed via PEAR:
phpunit --version
Apache
The system already has Apache built in, which doesn’t suffer from the problems of the built-in PHP, so we can use it for our purposes.
Its configuration file is located in /etc/apache2/httpd.conf.
We need to add loading of the PHP module to it. So next to the other LoadModule directives we add (the correct path was printed out for you by the brew install php53 command at the beginning of the guide):
LoadModule php5_module /usr/local/Cellar/php53/5.3.16/libexec/apache2/libphp5.so
Next you need to choose a more convenient DocumentRoot. I place my projects in /Users/www.
In httpd.conf, find the line DocumentRoot "/Library/WebServer/Documents" and replace it with:
DocumentRoot "/Users/www"
Then find the section <Directory "/Library/WebServer/Documents"> and again rewrite the path to /Users/www.
In that same section, also replace AllowOverride None (so that .htaccess works) with AllowOverride All.
Restart the server:
sudo apachectl restart
Selenium
# Installing wget, which we'll use to download the Selenium server binary
brew install wget
Copy the URL to the downloaded selenium-server-standalone-*.jar file from this list and use it in the wget command:
sudo mkdir /usr/lib/selenium/
sudo wget http://selenium.googlecode.com/files/selenium-server-standalone-2.25.0.jar /usr/lib/selenium/
sudo mkdir -p /var/log/selenium/
sudo chmod a+w /var/log/selenium/
Save the following file to:
~/Library/LaunchAgents/org.nhabit.Selenium.plist
And of course replace it with the correct path to your version of the Selenium server:
<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
<dict>
<key>Label</key>
<string>org.nhabit.Selenium</string>
<key>OnDemand</key>
<true/>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/java</string>
<string>-jar</string>
<string>/usr/lib/selenium/selenium-server-standalone-2.25.0.jar</string>
<string>-port</string>
<string>4443</string>
</array>
<key>ServiceDescription</key>
<string>Selenium Server</string>
<key>StandardErrorPath</key>
<string>/var/log/selenium/selenium-error.log</string>
<key>StandardOutPath</key>
<string>/var/log/selenium/selenium-output.log</string>
</dict>
</plist>
And in the terminal, start the service:
launchctl load ~/Library/LaunchAgents/org.nhabit.Selenium.plist
launchctl start org.nhabit.Selenium
If you still don’t know anything about Valve, this is the article you should read.
We often try to fight problems by yelling at them instead of accepting the reality of what people do, from controversial national legislation to passive-aggressive office signs. Such efforts usually fail, often with a lot of collateral damage, much like Prohibition and the ongoing „war“ on „drugs“.
If people are breaking the rules, it’s better to think about why they’re doing it and adapt to it than to just blindly enforce them.
Harsh and honest.
Which company came out best? Valve, of course.
How many times has it happened that you had to interrupt your reading to click „more“ so you could continue? How many times have you had to leave your RSS reader and get your bearings in an unfamiliar environment just to finish an article? How many times were you offline and couldn’t get to the rest of the text?
These teasers do nothing but annoy everyone. Most decent blogs already put their full texts into the RSS feed. Start doing it that way too.
The only ones who’ll have a problem with it are the pageview chasers. And they don’t care about readers’ convenience anyway.
Besides RSS, you can also follow all posts through a special Twitter account - @OndrejMirtesRSS.
And the most hardcore among you can add that Twitter account’s RSS feed to your reader - rssception!
Do your messages sometimes arrive only on your iPhone and sometimes on all your devices? Would you like to make this behavior consistent? The linked article explains exactly what’s happening behind the scenes and why this confusion arises.
TL;DR - set your iPhone’s Caller ID to your Apple ID email and most of the problems will go away. A reliable, hundred-percent fix can only be expected from Apple.
Update: iOS 6 and OS X 10.8.2 solve these problems for the user.
A great summary of the security measures you need for logins in web applications. Every developer should know them inside out.
The best way to avoid problems with clients is to be picky and think the collaboration through carefully first.
The second best way is to have a bulletproof contract and a good lawyer. And that’s exactly what Mike Monteiro talks about in this excellent talk.
Obviously you can see it’s not optimized for a touch experience.
Great video. Are Microsoft and Samsung serious about this?
I like GitHub more and more all the time.
And those of you who object to these generalizations — those of you shaking your heads and saying to yourselves, No, I very much do want to specify by hand the file name and location in the hierarchical directory structure for every bit of data on my system — are almost certainly, I would wager, computer programmers. To argue that users should embrace manual file system management for every bit of data they wish to store is to argue against human nature.
John Gruber at his best. A three-year-old, timeless article that confirms the latest trends.
I don’t think it’s an exaggeration to say that Windows 8 is the worst computing experience I’ve ever had. As a desktop operating system, it’s annoying, frustrating, irritating, and baffling to use. I’ve tried on many occasions to explain exactly why it’s so awful to use day-to-day, and most of the time, smoke starts pouring out of my ears. I thought it would be better to get down exactly what the issues are and why you should avoid it.
When Google released its browser for iOS at the end of June, I came close to writing a glowing article after a quick test. A user interface that refreshed the iOS browsing experience dominated by the very conservative Safari. Bookmark synchronization across all devices (I was using Chrome on the Mac as well), the ability to access tabs open elsewhere, a unified address and search bar. It looked like a clear win.
I’m glad I put that article off.
Unlike Pixy, I found that even though I tried to use Chrome as my main browser, I quite often ended up in Safari. Whether because iOS doesn’t support alternative browsers, or because something in Chrome didn’t work for me.
Google isn’t to blame for the first problem — Apple is the one that should be repenting — but as a user I don’t enjoy it when apps send me to a browser I’ve decided not to use. That schizophrenia, where half my tabs are open in Safari and half in Chrome, really managed to get on my nerves.
But sometimes I came to Safari almost voluntarily. Chrome inherited one bad habit from its desktop version — it stubbornly remembers redirects, which has already cost me more than a few nerves during app development. With the mobile version, this got me into dead-end situations on hotel Wi-Fi networks.
Some of them implement login in such a way that, when you try to reach the page you want, they redirect the browser to a login page. Chrome caches this redirect and keeps performing it relentlessly even after a successful login. So I can no longer get to the page I originally wanted to see. And once again, I have to switch to Safari.
This and other small things gradually put me off Chrome on iOS entirely. But I didn’t want to give up bookmark synchronization between iOS and the desktop. I solved it by taking the path of least resistance — I abandoned Google Chrome on the Mac as well and started using Safari. iCloud handles bookmarks and open tabs too.
There’s an aura of IE hanging over Safari on the Mac (the idea that a browser built into the operating system is evil), but I have to defend it — in this case that’s not true. It’s a very capable browser with polished system integration — whether through support for touchpad gestures or its ties to OS X. For example, when I logged into Twitter on the web, it offered to add the account to the system’s integrated Twitter.
The only extension I can’t do without is AdBlock, and it exists for Safari in several implementations. So far I have no complaints about this switch.
That is the question.
Two-factor authentication prevents access to your account in case your password is exposed. It adds another layer of security - you have to prove not only that you know something (the password), but also that you have something. The implementation of this second factor differs from service to service.
Gmail
Email is the center of your internet identity. Anyone with access to your email can also take over any of your other accounts by requesting a forgotten password. I therefore strongly recommend two-factor authentication to everyone.
Google lets you turn it on for all of its services. Google Apps users first have to have it enabled by their domain administrator.
When you log in for the first time on an unverified computer, you receive a six-digit numeric code by SMS, which you type into the login form. You can then authorize a trusted computer for up to 30 days, during which Google won’t require SMS verification from you.
For applications that don’t support two-factor authentication (e.g. native mobile apps and email clients), Google can generate an „application-specific password“. It always comes in the form of four groups of four letters, shown to you only once so that you can copy it into the given application. You can later revoke these specific passwords. It worried me that there wouldn’t be a single password for my account but several, which increases the chance of a breach. Fortunately Google doesn’t allow these specific passwords to be used to log in where SMS authorization is supported, so there’s no risk of some destructive misuse.
The same applies to Facebook as to email - misuse of your account can have catastrophic consequences.
Two-factor authentication is implemented on it the same way as at Google - when you log in from an unknown device, you receive an SMS with a six-digit numeric code. In addition, it can send verification by email, which contains a login link.
You can turn it on in the security settings.
Internet banking
My bank, ČSOB, doesn’t require SMS verification when logging in to online banking, but it does when carrying out any operation with the accounts. These days that’s probably already standard at every bank.
Recently, however, it additionally introduced two-factor authorization when using a payment card on the internet. In the Czech Republic all payment gateways already support it, but it’s starting to spread abroad too. It’s awkward that this service is opt-in for merchants, so an attacker can still use the card where this verification isn’t required, but even so it’s a step in the right direction.
Steam
Keeping my game library and my current Steam Wallet balance secure I consider no less important. Valve grandly unveiled support for two-factor authentication in March of last year - during which Gabe Newell revealed his password.
When you log in, you receive an email with a five-character alphanumeric code, which you type into the login form, whether on the web or in the Steam client.
Battle.net
Blizzard accounts are a very frequent target for hackers. Gold sellers in World of Warcraft plunder characters, auction off the collected items, and resell the gold to players who pay real money for it.
Two-factor authorization here is carried out via an app for smartphones, which you download from your platform’s app store. On first launch it generates codes that you enter into the account administration on Battle.net, linking it to your account. When logging in to games, you then fill in a time-limited numeric code that the authenticator on your phone shows you.
Account management on the Battle.net website asks me to enter it every time; in the game clients it’s rather sporadic - I haven’t been able to figure out a specific time interval. Blizzard writes about it:
The authenticator system will now intelligently track your login locations. If you are logging in consistently from the same location, you may not be asked for an authenticator code. This process is designed to make logging in faster when you’re at a secure location.
And others?
I hope this practice will spread among service providers. The obvious candidates that haven’t implemented it yet are Apple, Twitter, Dropbox, Amazon, and others.
PayPal is supposed to support two-factor authentication via VeriSign Identity Protection, but when I tried to pair the authenticator it reported an error. It probably doesn’t support it for Czech accounts yet.
Ever since Gmail, Dropbox, GitHub and other cloud services took off, a disk failure isn’t such a scary prospect for me anymore. But for true peace of mind, it’s definitely worth setting up remote backups for the rest of my local data as well — photos above all.
Shawn Blanc shares how he approaches it.
“Our goal isn’t to make money. Our goal absolutely at Apple is not to make money. This may sound a little flippant but it’s the truth,” said the British designer.
Companies are founded to turn a profit, but chasing it is not the most effective way to achieve it.
Valve once more. In their latest, extremely long blog post (split into chapters!) they dissect the meaning of firms and corporations from both a historical and a present-day perspective, and offer the views of several prominent thinkers on the subject.
Valve is known for its flat structure with no managers and with teams that organically group and reshape themselves. Through their successes they prove that their system is extremely effective even with their current 400 employees.
The current system of corporate governance is bunk. Capitalist corporations are on the way to certain extinction. Replete with hierarchies that are exceedingly wasteful of human talent and energies, intertwined with toxic finance, co-dependent with political structures that are losing democratic legitimacy fast, a form of post-capitalist, decentralised corporation will, sooner or later, emerge. The eradication of distribution and marginal costs, the capacity of producers to have direct access to billions of customers instantaneously, the advances of open source communities and mentalities, all these fascinating developments are bound to turn the autocratic Soviet-like megaliths of today into curiosities that students of political economy, business studies et al will marvel at in the future, just like school children marvel at dinosaur skeletons at the Natural History museum.
Valve is up to some amazing things. Right now they’re working on porting their games to Linux. While optimizing Left 4 Dead 2, they squeezed it from an initial 6 FPS all the way up to 315 FPS.
And thanks to what they learned along the way, they backported some of the OpenGL changes to Windows, where they boosted performance from the original 270 to 303 FPS.
Wow.
If you don’t want to lose your data and you don’t have an external drive with Time Machine (or some equivalent) connected to your computer, this service is a must.
30 tweets from 2006.
A public alpha is available for download. I can finally get rid of both the buggy Osfoora and the ugly Twitterrific.
Only 17 days to go.
The first thing that strikes you about India is how dirty it is. In a word, the place is disgusting. All of it. The entire country. Never before have I seen mountains of garbage the size of a small house stacked on the side of a road, in broad daylight, in the middle of a city, repeatedly. Dumpsters tipped over and overflowing. Mounds of trash — wrappers, cups, papers, napkins, strewn all about, mixed with sludge from the soda and urine and spit coagulated from thousands of daily passersby.
I can confirm.
The best computer is the one you always have with you.
For its 20th anniversary, Blizzard published a timeline of the defining moments in its history.
Every game it has released since WarCraft II became the best-selling PC game ever and broke the previous record (held by Blizzard). Stunning.
The record is currently held by Diablo III.
The biggest problem of these rants is that they come from people stuck in the old days of PHP. They either don’t care or they don’t want to admit that PHP actually evolves at a very fast pace, both at the language level but also at the community level. In fact, it evolves much faster than any other language or web platform. It has not always been the case, but the last 5 years have been an amazing journey for PHP.
I agree. Most of the people who write hate posts about PHP still picture it as unmaintainable spaghetti code, and have no idea that in certain circles people are writing serious, high-quality applications in it today.
Even though it does have certain drawbacks and I myself would rather code in Java, there’s no point swimming against the current. PHP is definitely not about to leave us, and instead of denying that I’d rather make use of it.
Since dummyimage.com has been pretty unstable lately, I spent a few hours building my own service for generating placeholder (dummy) images.
Jeff Atwood had his readers blindly rate the quality of five audio files with different bitrates.
The result? Above 192kbps VBR nobody could tell the difference between a compressed MP3 and a direct rip from an audio CD.
So with lossless FLAC you’re just wasting bandwidth and disk space.
My only professional encounter with creating graphics happened in Draw Something. Even so, I signed up for Antonín Pospíšil’s workshop held under the Medio Akademie banner, where I also teach. I like broadening my horizons and letting myself be surprised by where my professional path takes me as a result.
How did Tonda handle the role of instructor?
Over the course of the whole day he touched on just about every topic related to producing web graphics on commission. From communicating with the client and clarifying the brief (how to ensure both sides are happy), through the psychology of color, accessibility, UX, the technical specifics of building websites such as optimizing exported images and choosing the right format for a given situation, all the way to practical tips for working efficiently in Photoshop and collaborating with a coder. Tonda also mentioned responsive web design and pointed out that while today it may be enough to prepare a design in a single (desktop) layout, in the near future that will definitely no longer be sufficient given the growing share of mobile devices.
The whole workshop was interspersed with links to plenty of additional web-based and book resources for further study. Anyone who doesn’t keep educating themselves and trying to improve is not a good choice for their client. And that holds true in every field.
Tonda is a very quick-witted instructor and, beyond his prepared links, he was able to back up every question he answered by finding a relevant article or tool. He devoted part of the workshop to the topic of web fonts as well.
The workshop helped me clarify that graphic design isn’t random but a fairly exact process. For one specific brief there definitely aren’t infinitely many solutions, but rather a few variants that differ in small details. I can recommend it to any beginning graphic designer, but also to people switching over from a similar yet still distant field. In this session most people came from a DTP background.
Unfortunately I don’t possess even a shred of artistic creativity, but yesterday finally tempted me to start reading Design for Hackers, a book I had picked up some time ago.
With a 70° angle they subliminally nudge customers into touching the device and adjusting it to their own needs. What other company in the world would even think of that?
To measure the angle they use an iPhone app.
Over its life cycle, a website’s design goes through these phases in the eyes of its owners:
- Excitement
- Sobering up
- Hatred
I reached phase 3 with my own (now old) website the moment I learned from Honza Korbel at Webexpo 2009 that boxed-in little boxes are out. So, quite a long time ago. What finished me off was when I started getting interested in usability (that early!) and minimalism and realized that most of the features I had put on it were actually completely pointless. I threw them all out.
To give you an idea of everything my old website could do:
- Fetch and display, in the right-hand column, the latest songs I’d scrobbled on last.fm (!!!)
- Fetch and display my latest tweets
- A contact form
- A poll that I never once changed, and in which the first option had the most votes only because submissions were sent via GET, so every bot that came to the site voted for it
- Article categories, where I had to create a new one for nearly every newly published article
- Splitting an article into a teaser and the body, so the user had to click through to it from the article list; same in the RSS
- Comments
When designing the new website, I drew inspiration from my favorite blogs (you’ll find them in About me in the Subscribed section). They all follow a format of two types of posts - external links and full-fledged articles. I enjoy consuming this format and figure it could be sustainable for me in the long run. I want to make this place into my own kind of Twitlonger.
I scrapped comments because they annoyed me. Even when the seed of an interesting discussion sprouted in them, it quickly rotted away, because who’s going to remember to revisit every site they recently commented on…
Responses can always be written on Twitter, and if someone replies in the form of an article, I’ll be happy to link to it.
I’m curious when Ondřej Hrabal will tip over into phase 3, and whether he’ll like the new design as much as the old one. I’d be more than glad!
I’m the president of a videogame company (www.valvesoftware.com).
Who wouldn’t want to get an e-mail like that?
In the computer and gaming industry, companies can be divided into two groups - those that operate the old, „corporate“ way, and those that operate differently, flexibly, and celebrate enormous success because of it.
The first group focuses primarily on meeting fiscal targets and ships a project to the factory/pressing plant while it’s still in a „good enough“ state, just to get it onto store shelves as fast as possible. Every year they release sequels to their franchises in order to squeeze more money out of their customers for minimal added value.
„New“ companies operate differently. They look at things from a long-term perspective. If they shipped something „good enough“, they might make money in the short term, but they would fall in the eyes of their customers, who would then approach their future products with greater distrust.
They’re able to calculate that an investment in perfectionism and the user experience across every aspect of their products will pay off many times over. You can spot such companies very easily - they don’t announce release dates far in advance, and when they do, they push them back several times. After all, it’s hard to estimate how much time polishing every last detail will take over several years of development. In the end, though, the buyer gets the best thing on the market for their money. When reviewers deliver their verdicts, they can’t come up with any meaningful negatives, and the bar is raised to a new level for the competition.
You can surely guess which group Blizzard (and Valve) belongs to. Games from the WarCraft, StarCraft and Diablo series have always represented the gold standard in their genres and were still being played many years after release. We waited a long 11 years for the successor to the last of those. It’s been almost 4 years since Diablo 3 was announced.
Was the wait worth it? After reading the previous paragraphs, you already know the answer. Blizzard wouldn’t release anything that didn’t chain players to their monitors for hundreds of hours. The gameplay of its titles is fine-tuned to perfection by an army of developers and verified by an even larger army of testers. Blizzard can afford this thanks to the hoard of money flowing in from running WoW and selling its other titles.
Diablo 3 takes the best from its predecessor and changes the principles that had grown stale over 11 years. Slaughtering monsters will be a very pleasant and addictive activity, and once again we can look forward to the „just one more quest and then I’ll go to bed…“ effect that keeps players at their monitors into the late night hours. We’re also driven forward by character development, wanting to turn our character into a superman with powerful unique gear as soon as possible. This concept hasn’t aged, and Blizzard knows very well how to target a player’s most basic instincts.
Run and get it. It’ll be worth it.
The way applications are currently written in PHP closely resembles Java. We program fully object-orientedly and rely on knowing the type of every variable. Including items in arrays. The problem is that, because of its procedural and scripting past, PHP can’t guarantee this for us and it can’t be relied upon. The principles of OOP were gradually bolted onto it. And there’s still dynamic typing, which doesn’t work very well with OOP.
When I call some method on an object, I rely on knowing the type of the variable in which that object is stored. But in dynamic languages that type is only determined on the fly and can be different on every run. We do have type hinting, but nothing stops the programmer from passing the wrong type into a method, and the program then crashes just the same, only one step earlier in the stack trace.
Programmers in Python and Ruby often complain about the verbosity of Java and related languages. But every character I save during the initial implementation comes back to bite me during the subsequent maintenance of the code. When refactoring, we rename, move, and delete chunks of code. With every such step, though, we have to check everywhere that code is used so we don’t break the application. Java does this for us automatically. Whenever you reference a nonexistent class or method, or call a method with invalid parameters, the IDE underlines that line and the compiler won’t let you go any further.
When developing in PHP, most of the fixes concern this kind of error, and likewise during testing the most energy is wasted on them. By contrast, in Java what gets tested is primarily the application’s business logic itself, that is, whether the code really does what it should. Because the compiler takes care of typos and references to nonexistent code for us, and we don’t discover it only thanks to tests or when clicking through to the third step in an order form.
The fact that we can reliably determine the type of a variable reflects positively on the IDE’s capabilities. Flawless autocompletion, unheard-of options for automatic refactoring. If you want to rename a namespace, a class, or heaven forbid a method in PHP, a lot of manual work with an uncertain outcome awaits you, or writing an ingenious script. In Java, every IDE handles it in a few clicks.
Java natively supports annotations and can enforce their correct use just like ordinary code. In PHP, communities had to invent their concept and parsing for each project themselves. They’re written into documentation comments. Comments that, in every language, have always been discarded during compilation and couldn’t affect the running of the application in any way. In PHP they’re heavily relied upon.
Java, although it’s the target of jokes about its speed, is many times faster than PHP. No wonder - on every request PHP has to load and process source code from up to hundreds of files (depending on the size of the application and the libraries used), whereas Java gets this work done once, at compile time. It’s also helped by static typing, which makes the compiler’s and the processor’s job easier.
Why am I writing about Java and not C#? Categorically they’re the same languages, with C# being more innovative and having a few interesting extra features, e.g. properties or anonymous functions. In my eyes, though, it’s buried by the necessity of running Windows on both the developer’s machine and the production server.
I believe any present-day PHP programmer would quickly get their bearings in Java and would be surprised by its capabilities, which PHP tries to approach with every version. So why isn’t it far more widespread? Setting aside the small number of hosts and their prices, it’s the frameworks. I haven’t managed to come across a single one I’d enjoy working with. If I run into a problem and manage to find a thread where the same thing is being solved, I still haven’t won, because it often depends on the minor point-release versions of the libraries and server used, and the presented solution may not work for me. It’s often nerve-racking.
PHP also owes its spread to the fact that it’s basically a simple templating language accessible to beginners - it’s easy to generate HTML with it. Most programmers, though, stay with it even at the moment when they see the light and realize that the application’s logic should be separated from outputting information, and that there’s something called OOP that makes the code clearer when applied correctly. So we have a language on which it’s easiest to build a business, because lots of programmers know it, but at the same time it throws sticks under their feet when they start doing something more complex in it. A vicious circle.
When I read an article like this one, (I don’t agree with everything, but with most points I do), I don’t feel like writing a single line of code in PHP anymore. PHP suffers from a host of problems that can’t be easily gotten rid of, among other things because of backward compatibility.
But in order to be able to develop in Java, there would have to exist a framework for it that PHP folks could learn quickly and that would be easy to work with and debug. Where am I going with this? Java needs Nette. Just as PHP got a copy of Hibernate, it’s time for Java to take the best from the PHP world so that we can firsthand make use of a language we’ve been vainly trying to imitate in PHP for years. Will someone help me with that?