On this page:

October 02, 2015

Mobile Web Programming

iOS 9, Safari and the Web: 3D Touch, new Responsive Web Design, Native integration and HTML5 APIs

ios9I can’t believe it’s been a year since my last post in this blog; in the meantime, I’ve written articles at different magazines, while working on a new book and delivering several trainings around the world, including my next live training with O’Reilly Media.

But it’s time again to come back here and explain what I’ve found with iOS 9, the new devices (6S series and iPad Pro) and also the new OSs from Apple (watch OS 2 and tvOS 9 –yes, it’s version 9-) from a web developer’s point of view.

In a nutshell

If you don’t want to read the full article, here you have a summary:

New Devices

  • iPhone 6S and 6S plus have “3D touch”, a new hardware feature to detect pressure; a new API lets you work with the force.
  • iPad Pro changes iPads viewport to 1024px
  • No API seems to be there to support the new Apple Pen for iPad Pro on websites

New OS features for websites

  • Safari on iPad now can work in split mode with other apps at the same time, meaning that new viewports will become common
  • Safari View Controller will let native apps create an in-app browsing experience while keeping a consistent UI.
  • Safari now supports Content Blockers, so be careful! You might start receiving visits that will not appear at Google Analytics
  • Universal Links will let app owners to “own” their own domain inside iOS. Therefore, links to yourdomain.com can open your native app is installed (similar to Android Intents)
  • App Search: your web content –available also on native apps- now can be crawled by Apple for search and Siri results. Is your markup compatible?
  • Your website can now access iCloud’s user data through a JavaScript API

API Support

  • Performance Timing API is back on iOS 9
  • For HTML5 video playing you can support Picture in Picture on some iPad devices; your video can continue playing even if Safari was closed.
  • ECMAScript 6 better support: classes, computed properties, template literals and more
  • Backdrop CSS filters available
  • @supports and CSS Supports JavaScript API available
  • New CSS4 pseudo-selectors available
  • CSS Scroll Snapping supported for paginated content
  • WKWebView can now access local files
  • We still need to wait for Push Notification, camera access, Service Workers and other modern web-based APIs.

New OSs

  • tvOS for the new Apple TV: no browser, no web view available. JavaScript, XHR and DOM is available with TVML as the markup
  • watchOS for Apple Watch doesn’t have any browser or web view available.

New iOS Devices

iPhones 6S and 3D Touch

The new iPhone 6S and 6S are pretty much the same as the previous versions from a web design and development point of view. However, there is one feature that should take our attention: 3D Touch.

I’m not sure if Apple has just renamed “Force Touch” (available on Apple Watch and the latest MacBook) or if it’s just something similar but different for iPhone only. 3D Touch allows the OS and apps to detect pressure on the screen for each finger touching it. From a UX point of view the most important action is now a touch or drag with more pressure that will activate different mechanisms in the OS, such as peek and pop. The next question is: do we have access to these new ideas for websites? The answer is unclear today.

Safari for iOS 9 includes a new API for “Force Touch” but I’m not sure yet if this is the API to use the iPhone 6S 3D Touch or if it’s just the same API that is available on Safari for the MacBook with Force Touch that is inside iOS for no reason.

On the Force Touch API we have two additions

  1. The click event handler will receive new properties inside the MouseEvent argument: webkitForce.
  2. four new events are available on the DOM: (webkit)mouseforcewillbegin, mouseforcedown, mouseforceup and mouseforcechange. The next diagram gives you an idea on when these events are triggered.

Force Events

Now, as you might realize from the name, these event are mouse-based and not touch-based. These events are officially there for the MacBook (therefore, clicks). Also, TouchEvent is not including the webkitForce value; it’s only on MouseEvent. Will it work on iPhone 6S and 6S+ with one finger? What will happen with more fingers? We’ll need to wait a few days for the final release for these devices. I’ll update this post at that point (follow me to get updates).

UPDATE: 9/28: 3D Touch is available on iPhone 6S and 6S+ thanks to the force property that was added to TouchEvent following the Touch Events v2 draft spec. While I’m not completely sure yet if the previous Force Touch API is working or not, Marcel Freinbichler has found a force property and he has it working on Github (see next embedded video and try it on an 6S/6S+ at http://freinbichler.me/apps/3dtouch)


iPad Pro

The new iPad Pro (12.9”) has changed how iPads render websites. Until today, every iPad in the world (from the original iPad, to the iPad Air 4, to the iPad Mini) exposes a viewport with a width of 768px.

The iPad Pro with its bigger screen is different: it’s exposing 1024px for the viewport, so it can fit more content by default. Several sources have said (I thought it also) that the iPad Pro is a copy of the Microsoft Surface Pro. Well, IE/Edge on the Surface Pro also exposes 1024px as the viewport’s width J.

In terms of interaction, the iPad Pro doesn’t have 3D touch but it can be used with a Smart Keyboard and/or Apple Pen (with pressure detection). For the keyboard, there is nothing especial to talk about; if your website works well on desktop with keyboards, it should work the same on iPad Pro. For the Apple Pen, there is no API available to get pen’s pressure and angle from a website.

New iOS features for web sites

(Real?) Multitasking on iPad

On iOS 9, iPads allow two side-by-side apps to run at the same time simultaneously with three different techniques: Slide Over, Split View and Picture-in-Picture. Not every technique will be available to every iPad, based on hardware requirements. For example, for Slide Over you need iPad Air, iPad Mini 2 or newer.

Slide Over

Slide Over is supported by Safari, meaning that our website can be rendered in this mode. When our website is on Slide Over it’s being rendered in the right quarter of the screen on top of other native app.

This mode makes a new point for Responsive Web Design: a website that is optimized for iPad only can be rendered for a smaller screen on the same device without refreshing. Therefore, if you are doing server-side detection, the iPad version should somehow include the phone version or reload it after that.


Slide Over on iPad iOS 9

In this mode, your website is being rendered as if it is a very large iPhone 5 offering a 320px-width viewport on all iPads (including the Pro) and all orientations. You can detect this mode in CSS through the media query:

/* iPad Air or iPad Mini */
(device-width: 768px) and (width: 320px)
/* iPad Pro */
(device-width: 1024px) and (width: 320px)

Split View

On newer iPads, you can upgrade Side View to Split View where two apps share the screen working simultaneously.

On this mode, our website can be rendered…

  • as 1/3 of the screen, exposing a viewport’s width of an iPhone 5 on iPad Air/mini: 320px and a viewport similar to iPhone 6 for iPad Pro: 375px
  • as 1/2 of the screen, exposing a viewport’s width of 507px on iPad Air/mini and 678px on iPad Pro (landscape)
  • as 2/3 of the screen, exposing a viewport’s width of 694px on iPad Air/mini and 981px on iPad Pro (landscape)



Picture in Picture

On some newer iPads, a website with an HTML5 video tag can expose it to the new Picture in Picture mechanism. Through an API –later in this article- or automatically managed by the user, the video can continue playing even on top of other apps without your website being focused.



Responsive Web Design on iOS 9

The next diagram explains all the viewports available on iOS 9. Check your Responsive Web Design breakpoints to see if you are covering all of them



Safari View Controller

If you are a Twitter or Facebook user you’ve already seen how some native apps on iOS don’t open links in Safari by default. They try to keep you inside their app offering you an in-app browsing experience using the web view. The problem is that this web view doesn’t share cookies, sessions, autofill and bookmarks with the browser, so Safari View Controller comes to solve the problem.


Now, native apps can open websites in Safari View Controller that will offer the same Safari privacy, local storage, cookies and sessions while keeping the user under that app with “Done” button that will go back to the previous controller in the native app. This new controller also let us add custom actions in the Share button while the user is checking the web content that won’t be available inside Safari. The native app is also in control of blocking some content that we don’t want to be rendered inside that custom Safari’s instance.

Safari Web Controller is also a good idea when we need a web-based authentication, such as OAuth, instead of opening the browser that will redirect back to your app. Be careful, Safari Web Controller is only suitable for online, public web content. If you are serving web content that is private or local in your app, WKWebView is still the recommended way.

Safari Content Blockers

Safari on iOS 9 now supports a new kind of App Extensions: Content Blockers. These extensions that are being served with a native app from the AppStore can block any content inside safari, including: trackers, advertisement, custom fonts, big images, JavaScript files and more.

While we can’t disable content blockers as web developers, we should be aware of them. Some blockers such as Crystal are advertising that they can improve your navigation performance by installing it. Crystal claims to load websites 3.9x faster using 53% less bandwidth. The question is: what is the blocker blocking? This article covers some of the problems we might find in the future.


After iOS 9 launch, Peace -a content blocker- was ranked in the top 10 at App Store.
From a users’ perspective, if a website is not working properly because the active Content Blocker has block some important resource, you can now long press the reload button and reload the website without it (see next image from MacWorld.com


Content Blockers have the power of hiding an element and block loading a file using filters by CSS selector, domain, type or URL filter. For example, Purify Blocker offers the user advanced settings to block certain kind of contents, such as Web Fonts.



WKWebView enhancements

UIWebView is officially deprecated. While it’s still there, it’s not getting any of the new stuff and WKWebView on the other hand is taking its place. One of the most awaited features is now here: loading local files into WKWebView. Therefore, now Apache Cordova apps and other web content can use local files inside the iOS bundle without weird hacks.

Some other additions are now there too, such as the ability to query and manage the local storage of the web view (such as local storage or IndexedDB) from Swift or Objective-C through WKWebsiteDataStore. It allow us to also override the original data store and replacing it with something new, such as non-persistent one (Chrome for iOS was expecting this for their Incognito Mode).

Universal Links

If you own a website and a native app, now you can enhance user’s experience through Universal Links. It allows you to “own” your own domain inside the OS so any links to your website will be redirected to your own app.

Today, the way apps are doing this is through custom URIs, such as comgooglemaps:// for opening Google Maps from websites or other native iOS apps.

To offer this feature, you first need to have deep linking inside your native app, so every URL in Safari matches content inside your app. Then, you need to associate your domain at Apple’s website, acquire a SSL certificate for that domain and host a signed JSON file on it. This is to avoid third-party apps to “own” your domain when they don’t have it, such as owning twitter.com not being the original Twitter app.

The only drawback is that the user doesn’t seem to be in charge of choosing how to open the content (web-based or app-based), but let’s see how this evolves with time. In the near future, you might finding yourself clicking a link on a website or a Google’s search result and opening a native app without prior warning.

App Search

Apple has just entered the search market with its own web spider that we need to support to increase our visibility inside the new Spotlight iOS search and Siri. It’s also important when we have both a website and an app, because now Apple will index the content on our website but it might lead the user to the app instead.

While this will open a new chapter in SEO, it’s quite simple. You need to use markup standards, such as Web Schemas, AppLinks, OpenGraph or Twitter Cards with an App Banner with an app-argument if you have your own native app.

Apple has just released an App Search Validation Tool that will help you understand what do you need to add in your own website to support Apple Search



CloudKit JS

If you have a native app, you are probably saving user’s data on iCloud, but for now only iOS and Mac apps were allowed to get into that. Now, through CloudKit JS you can connect your website to iCloud data.

Back Button

When you link to a native app (through a custom URI or a Universal Link), now Safari will ask the user if she wants to open the link within the native app (see next image). If the user agrees, then the app will have a back button (top left) to go back to Safari to your website.



API Support

Navigation Timing API

Navigation Timing API is back on iOS 9. Just as a reminder, it was added in 8.0 and removed a week after with 8.1. This is good news for web performance. With this API we can measure with better precision timing, as well as receiving lots of timestamps about the loading process of the page that will be useful for tracking and for make decision in real time to improve the user experience.

Picture in Picture

For iOS only for now, the PiP API (known as Presentation Mode API) allow us to manually enter or exit the PiP mode for a <video> element if video. webkitSupportsPresentationMode is available.

For example, to swap between inline and PiP, we can use

video.webkitSetPresentationMode(video.webkitPresentationMode === "picture-in-picture" ? "inline" : "picture-in-picture");

We can also detect when Presentation Mode has changed using the new onwebkitpresentationmodechanged event.

Backdrop CSS

iOS 7 and latest versions of Mac OS are using Backdrop filters to blur backdrops and doing it on websites was not easy.

Safari on iOS 9 supports backdrop-filter from the Filter Effect v2 spec. For example, we can use semi-transparent backgrounds that will apply a filter to the content behind them:

header {
   background-color: rgba(255, 255, 255, 0.4);
   backdrop-filter: blur(5px)



CSS Scroll Snapping

Paginating content –such as a photo gallery- was always complicated on the web; using JavaScript frameworks, touch events, hacking scrollbars, etc. Apple is adding a nice CSS feature known as CSS Scroll Snapping. This feature adds a couple of CSS attributes to define snap zones (regular or irregular) so the scroll position will snap to these areas instead of stop at any position.

For example, we can use:

#photogallery {
   width: 100%;
   overflow-x: scroll;
   -webkit-scroll-snap-points-x: repeat(100%);
   -webkit-scroll-snap-type: mandatory;

In this case, the horizontal scroll will do it by 100% of the width, so if we have different photos, we will never end seeing partial photos. It will paginate them. More interesting demos and examples in this article.

CSS Supports

CSS Supports has landed into iOS with both CSS @supports declaration and the JavaScript CSS Supports API from the CSS Conditional Rules Module Level 3 spec. Now, we can do something if we know that a CSS property with one specific value will be supported. For example:

@supports(-webkit-scroll-snap-type: mandatory) {
/* we use it */

From JavaScript, we can use:

if (CSS.supports("-webkit-scroll-snap-type", "mandatory")) {}

Minor improvements

  • ECMAScript 6 better support: classes, computed properties, template literals and weak sets
  • New CSS4 pseudo-selectors available: :not, :matches, :any-link, :placeholder-shown, :read-write, :read-only
  • A native app now can inject information to Safari’s Shared Links window through an extension
  • Lot of CSS unprefixed properties (finally), such as transition, animation, @keyframes, flex and columns.
  • Safari 9 for Mac OS El Capitán has a new redesigned Web Inspector. Fortunately, iOS 9 remote debugging is still working propertly with Safari 8 on Mac OS, so you don’t need to hurry and upgrade your Mac OS too.
  • Not sure who is really using this, but iOS 9 added some Dynamic Fonts used through -apple-font and they now use the San Francisco new font by Apple.
  • scrollingElement is now available
  • UPDATE: 20/9: <input type=file> now lets you select files from iCloud Drive and third-party apps if installed, such as Google Drive (next figure)
  • UPDATE: 20/9: You can’t mix HTTP and HTTPS resources when loading the page from HTTPS



Bugs will appear over the few weeks and I’ll update this post as soon as I get more. For now, I’ve found:

  • a bug on Home Screen webapps where the apple-mobile-web-app-status-bar-style meta tag is being ignored. So you can’t now render your webapp behind the status bar as it was before using the value “black-translucent”.
  • UPDATE 20/9: Speech Synthesis API doesn’t work anymore


Did you find a bug? Besides posting it at Apple, you can report it here in the comments area or send it to @firt on Twitter. I’ll check it and post it here.

Still waiting for…

While Safari on Mac and Chrome on desktop and Android already support Push Notifications for websites, Safari on iOS is still missing the feature. In terms of APIs, we still not have: WebRTC, getUserMedia, Service Workers, FileSystem API, Network Information API, Battery Status API, Vibration API and more. What else are you waiting for on iOS?

watchOS and tvOS


watchOS 2.0 and tvOS 9.0 are coming too as iOS-based releases targeting specific devices (Apple Watches and new Apple TVs). From a user’s point of view, there is no browser. From a developer’s point of view, there is no Web View available.

While there are many people complaining (mostly about the lack of Web View), I’m still not sure if it’s a bad idea. But that is for another blog post. My guess is that Apple will try to bring “the web” to TV, watch and probably CarPlay users through Siri. So, if you follow the steps we saw before on “Apple Search” your content might be available from these devices through Siri as widgets or quick answers.

For Apple TV we have some kind of client-server webapp support through JavaScript, the DOM API and XMLHttpRequest. What’s the trick? No HTML or CSS support. It supports TVML, an XML-based markup optimized for specific content that can be rendered on the TV screen. This markup can be rendered from a native app that was distributed through the store, but the TVML can be generated server-side.


by firt at October 02, 2015 09:06 PM

September 30, 2015

Martin's Mobile Technology Page

Will Free Have Been The Last 4th Operator In Europe?

Already back in August there have been reports that mobile network consolidation has also reached Italy with the proposed merger of Wind and 3-Italy. This would, like in many other countries in Europe over the last few years, reduce the number of independent networks from four down to three. It is a regrettable trend as there are many signs that three network operators with physical infrastructure competing with each other is too little competition. An interesting example of this is France, where the emergence of Free as a fourth mobile network operator back in 2011/12 has significantly heated up competition and reduced prices that were at a very high base compared to most other countries in Europe. Which makes me muse if Free was the last 4th mobile network operator to start operation in a European country in the wake of a wave of consolidation moves in other parts of Europe!?

by mobilesociety at September 30, 2015 05:44 AM

September 29, 2015

Brad Frost » Brad Frost | Web Design, Speaking, Consulting, Music, and Art

This Idea Must Die

Recently Dave and Chris from Shop Talk Show reached out to me to be a part of an episode called “This Idea Must Die.” They wanted to know the following:

We’d like to hear about what idea or thing in Web Design/Web Development you think our Industry must let go of in order to achieve progress.

I think it’s an excellent question, so here’s my answer.

I think the idea that must die is the notion that the Web is this singular, definable, quantifiable thing. I often hear a lot of dogmatic language around what the Web is and that’s often used to justify that person’s One Right Way of doing things.

In truth the Web is very much like the elephant in the Blind Men and the Elephant story. You know what I’m talking about? Each blind man touches a different part of the elephant and comes to a different conclusion about what an elephant is. The guy who feels the elephant’s leg says the elephant is like a pillar; the one who feels the elephant’s tail says the elephant is like a rope; the one who feels the elephant’s trunk says the elephant is like a tree branch, and so on. Of course, none of their definitions is correct because non of them have the full picture.

We come at the task of creating things for the Web with our own perspectives on what the Web is, and that influences how we approach our work. We have tons of people working on the Web and they’re all coming from a ton of different backgrounds using tons of different technologies and tools to make things happen. That’s fantastic, but of course that also means there are a lot of different perspectives that naturally end up conflicting with each other.

Some peoples’ perspective of the Web treats the Web as just another runtime, just like Flash or Java or whatever. And developers use that as an excuse to put on the horse blinders, focus on the latest and greatest technology, and resultantly exclude a lot of people from their experience. I love how Jeremy Keith rails against the phrase “The Web Platform” because that phrase sort of reinforces this notion that the Web is just another runtime. But it’s not. Rather, as Jeremy puts it, the Web is this continuum of features, contexts, and environments, and it’s up to us to recognize that and act accordingly.

Tim Kadlec recently had a great post called Thriving in Unpredictability. In it, he talks about a lot of the things he can’t control:

I have no control over the network. It could be fast, it could be slow, it could be down entirely.

I have no control over the end device. It could be a phone, a laptop, an e-reader, a watch, a tv. It could be top-of-the line or it could be budget device with low specs. It could be a device released the other day, or a device released 5 years ago.

I have no control over the client running on that device. It could be the latest and greatest of modern browsers. It could be one of those browsers we developers love to hate. It could be a proxy browser. It could be an in-app browser.

I have no control over the visitor or their context. They could be sitting down. They could be taking a train somewhere. They could be multitasking while walking down the street. They could be driving (I know). They could be color-blind.

I love Tim’s post. I think it’s great. The more we embrace the fact that there are so many variables and unknowns in our world, the more likely we are to build better, more resilient, more future-friendly experiences for the Web.

As the edge of the horizon of the Web universe grows beyond the sight of any one person, it’s becoming increasingly important to embrace that unpredictability of the Web, embrace that unknown, embrace the things we can’t see or haven’t experienced first-hand, and really recognize that the Web is a diverse, amazing medium.

So those are my thoughts. I like Dave’s one-sentence synopsis of the idea that I think must die: “The Web is X, therefore my thing.” We’re shaped by our own perspectives and biases, and we need to overcome those biases in order to build better experiences for everybody.

by Brad Frost at September 29, 2015 06:45 PM

September 25, 2015

MobileMonday London

The Mobile Academy and Mobile Monday London return to Apps World 18 and 19 November 2015!

The excitement has already started for Apps World 2015 http://europe.apps-world.net/ as we officially announce that we (that is The Mobile Academy along with Mobile Monday London) will be returning to host a Startup Village on 18th and 19th November. We will also host a pop up tea party at 3.30pm on the 18th, bringing more people along for you to meet.

It’s an amazing opportunity for companies and products less than 2 years old to get feedback, make connections and grab some attention. 

If you’re in any doubt as to whether to apply for a free stand have a look at the stories below from folks who won stands last year. Then do one or more of the following things: 

1. Pitch for a free stand at Apps World

If you are a product or company less than 2 years old; have something demo-able and want to use the 18th and 19th November to the full, make your pitch for a free stand here:  http://bit.ly/1Pjvmtv

2. Register for Apps World – Free or 25% Discount

If you only want to go to the free part of Apps World at ExCel and hopefully join us for our “POP UP TEA” at 3.30pm on Wednesday 18th. you can register here http://momolo-and-moblacad-atappsworld.eventbrite.co.uk and we will pass your information across to Apps World to get your entry passes ready. 

We also have a 25% discount for those of you that want to attend the paid bits. For this, you need to enter the code I8RTYMOMO25 at registration here: http://bit.ly/1VN5cmI no need to register for tea, but we’d love to see you there anyway!

Stories from Last Year

There are some great stories from last year: 

Gary from Double, with Nana and Cathleen
Chris Michael joined The (first) Mobile Academy in 2012 and has been an active member of the community ever since - giving advice to later cohorts and taking the stage at Mobile Monday Demo Nights. We are really excited to let you know that he has now secured funding for Swytch from Neil Hutchinson (Neon Adventures), Yannick Roux (EC1 Capital), James Hilton (CEO of M&C Saatchi Mobile) amongst others with the service launching in October 2015.

He recounts his experience from winning a stand in our Village at Apps World last year: 
“…Over the two days at Apps World we were able to showcase a very early version of the Swytch app to hundreds of people and get their feedback on the service. This was invaluable to us as we were getting first hand contact with potential users at a time where we could take action and build a service that users really wanted. We did get some press exposure too as an interesting upcoming service…”

Scramboo, told us about two of their favourite conversations: "I met a major English football club that are very interested in the product and someone on the first day refused to tell us their identity but later I later received a LinkedIn invite from them - turns out they were very senior in a large corporate...it was very worthwhile"

Gary McDonagh came to The Mobile Academy in 2014 and has told us what a great experience it was for him too and his Startup “Double” http://www.joindouble.com/. He met journalist Eric Auchard, chief tech correspondent for EMEA at Reuters who wrote about them here:  http://reut.rs/1isIykW. He also met the Incubus London team and got on to their pre-accelerator programme as well as Microsoft Ventures where they got to the final.

by Julia Shalet (noreply@blogger.com) at September 25, 2015 10:19 AM

September 24, 2015

Brad Frost » Brad Frost | Web Design, Speaking, Consulting, Music, and Art


I feel like an idiot while doing my job. A lot.

Now there’s a damn good chance I’m actually an idiot, but the self-respecting part of me wants to challenge that notion.

When I get stuck on a task or am looking for recommendations for tools/resources/strategies/solutions/whatever, I often take to Twitter to ask for help.

Seconds after posting my quandary, my stream gets flooded with a host of advice, links, insights, and opinions. This “crowd-sourcing my knowledgesphere” is a wonderful thing. But one word in all those proffered solutions tends to stick out in my mind like a jagged, rusty nail ready to figuratively jam itself into my eye socket.


As in “Just update your ruby gems, generate a new SSH key, and run a git rebase…“

Just clone the dev branch, add those three grunt tasks, and recompile…”

Just use this software/platform/toolkit/methodology…”

“Just” makes me feel like an idiot. “Just” presumes I come from a specific background, studied certain courses in university, am fluent in certain technologies, and have read all the right books, articles, and resources. “Just” is a dangerous word.

We approach problems equipped with our own set of experiences, perspective, and skills. It’s extremely challenging to step outside of our own perspective when communicating with others, but it’s increasingly essential to do so.

The amount of available knowledge in our field (or any field really) is growing larger, more complex, and more segmented all the time. That everyone has downloaded the same fundamental knowledge on any topic is becoming less and less probable. Because of this, we have to be careful not to make too many assumptions in our documentation, blog posts, tutorials, wikis, and communications.

Imagine yourself explaining a particular task to an earlier version of yourself. Once upon a time, you didn’t know what you know now. Provide context. The beauty of hypertext is that we’re able to quickly add much-needed context helpful for n00bs but easy enough for those already in-the-know to scan over. And making documentation more human-readable benefits everyone.

I don’t envy those just entering the field of web development. In addition to learning the fundamentals, there’s an expectation to be proficient in an increasingly exhausting laundry list of buzzwords and technologies. I’m seven years into my career and still feel like I’m still on Chapter 1 of the Big Book of Web Design.

So think twice before suggesting someone “just” [insert any task here]. You just might make them feel like an idiot.

Note: I originally wrote this post as part of The Pastry Box Project, but wanted to have a record of it on my own site.

by Brad Frost at September 24, 2015 09:14 PM

Martin's Mobile Technology Page

In The Aftermath Of The Global Skype Outage...

A couple of days ago, Skype suffered a global outage which made it to a couple of tech news websites and thus caught the attention of the nerd community for about a millisecond or so. Once service was restored, however, it wasn't even newsworthy to report. Global outage and nobody cares?

I use Skype quite regularly so I also noticed that the service was down and in the process trying to get it working again I managed that the Skype app threw away my super long super secure Skype password and I had to spend at least 5 minutes to get it back up working again. Couldn't have happened with a SIM card approach I thought.

But how come nobody really complained about an almost day-long global outage? That doesn't necessarily speak for Skype's popularity. I think the reaction would have been quite different if Facebook or WhatsApp would have been globally down for the same amount of time. That doesn't bode well for Skype's owner Microsoft...

The other thought I had was that in the 'good old days' the worst that could have happened and actually did happen very seldom were local outages of the communication system when a local exchange or the long distance link to it went down for some reason. But that was pretty much it, everything was distributed and even a failure of a long haul transport exchange wouldn't have brought down the network in a whole country, let alone cause a global outage. But these days are long gone, today systems are built for global service and despite of redundancy and fail-safe mechanisms occasionally fail massively on a global level.

Something is wrong with that approach, the Internet was build with survivability in mind, not for centralized services, control or management that cause global outages. But while a couple of decades ago, a whole building was necessary to house a local exchange, a couple of rows of server racks are now sufficient for central control of a nation's telephony system. Sure, that's a lot cheaper than owning, maintaining and powering buildings and equipment in each town to keep the telephone system running but in terms of reliability it is a nightmare. It's time to find a middle ground!

by mobilesociety at September 24, 2015 06:29 AM

September 21, 2015

Martin's Mobile Technology Page

State Of The Art In Live LTE Networks And Things For The Near Future

R&D and marketing are usually a couple of steps ahead of what's really deployed in live LTE networks so I thought I'd write a post today and the state of the art I can currently see in live networks and relate that to a number of recent press releases about new features and what I think we will realistically see next in networks.

From what I can see, the state of the art in live LTE networks is a maximum theoretical downlink speed of 300 Mbit/s. In some countries like Germany, this is achieved by bundling two 20 MHz downlink carriers for a combined 40 MHz channel. According to this post over at Gigaohm a network operator in Korea achieves similar speeds by combining 3 carriers, one with 20 MHz and two with 10 MHz. So while that requires more sophisticated devices the end result is the same. Network operators in the US probably do carrier aggregation as well these days but since they mostly use 10 MHz channels, with some exceptions, they are not quite reaching those theoretical speeds yet.

So, what are the next steps? Like in Korea, network operators in other parts of the world also have spectrum in more than two frequency bands so it is likely that 3 carrier aggregation (3CA) will be used in other parts of the world to go beyond the theoretical 300 MBit/s, soon. In Europe for example, some network operators could bundle resources in the 800, 900, 1800, 2100 and 2600 MHz band as recent spectrum auctions have left them with ample resources for now to expand their services in the frequency domain. Bundling 3 carriers with 10, 20 and 20 MHz would result in a theoretical top speed of 375 Mbit/s and should somebody be lucky enough to have three 20 MHz carriers, it would result in 450 Mbit/s.

On the mobile device side, most devices sold today are not carrier aggregation capable. This is still the domain of the high end devices such as the Galaxy S6. This is likely to change, however, and I expect that in 18 months from now, 2CA will be the status quo.

In the meantime, high end devices will have gone to 3CA. Qualcomm has recently announced an LTE Category 12 downlink modem that can bundle 3 carriers in downlink which also supports 256QAM modulation for an additional speed boost to the 64QAM currently used close to the base station. Instead of 450 Mbit/s, a theoretical top speed of 600 Mbit/s is thus possible when combining three 20 MHz carriers. Few network operators, however, are likely to have three carriers with such a bandwidth available. Also, 256QAM is only reachable very very close to the base station so I wouldn't count on it making a lot of a difference in real live. For me the most interesting part of the announcement is that the chipset will also support LTE Carrier Aggregation in the Uplink direction. So far, Uplink speeds even in networks using 20 MHz carriers are limited to 16QAM and a single carrier which results in a theoretical peak of 50 Mbit/s. The new Qualcomm modem will support 64QAM in uplink direction and bundling two 20 MHz carriers for a theoretical uplink speed of 150 Mbit/s, which makes it a LTE category 13 uplink device.

While the numbers are certainly impressive, I don't think I need 600 Mbit/s in the downlink on a mobile device anytime soon. As usage of networks increases, however, the main benefit I see of the various advances in LTE carrier aggregation is that more advanced devices will be able to send and receive data over a broader channel, which is important as networks are filling up. It would of course also be possible to make non-carrier aggregation devices hand-over to other frequency bands if a carrier is already highly loaded. However, measuring the availability of other carriers is a non trivial task as well so going the full mile isn't much of an additional trouble.

by mobilesociety at September 21, 2015 07:30 AM

September 18, 2015

Martin's Mobile Technology Page

On The Way To Free Roaming In The EU In 2017

Before everybody in the EU went on summer vacation this year, legislation was finalized to work towards abolishing roaming charges mid-2017. A number of news organizations took bits and pieces out of EU press releases and made a nice story out of it but the details were not widely discussed. I recently came across the detailed proposed legislation that can be found here. From my point of view it says the following:

From the press release:

"Under today's agreement roaming charges will cease to exist in the EU as of 15 June 2017."

That part is pretty clear. The press release goes on and says:

"[...] from April 2016, roaming will become even cheaper: operators will only be able to charge a small additional amount to domestic prices up to €0.05 per minute of call made, €0.02 per SMS sent, and €0.05 per MB of data (excl. VAT)."

The legislative proposal that can be found here goes into the details of what these statements actually mean in detail. Concerning the second statement about the 2016/17 interim-timeframe it is made clear that network operators have to inform their customers that their home tariff also applies while roaming in the EU but that they are levying a surcharge for the time being. In other words they have to spread the message that their standard (home) tariff now also applies abroad (but with a surcharge for the time being). On 15 June 2017 they can then announce to their customers that the surcharge has been lifted.

Concerning the full abolition of roaming charges, things are a bit more difficult. Here are some excerpts that shed some light on how this part is going to be implemented:

Article 6a - Abolition of retail roaming surcharges:

"With effect from 15 June 2017, provided that the legislative act referred to in Article 19(2) is applicable on this date, roaming providers shall not levy any surcharge in comparison to the domestic retail price on roaming customers in any Member State for any regulated roaming call made or received, for any regulated roaming SMS/MMS message sent and for any regulated data roaming services used, nor any general charge to enable the terminal equipment or service to be used abroad, subject to Article 6b and 6b bis."

Article 6b - Fair Usage

"Roaming providers may apply [...] a “fair use policy” [...] to prevent abusive or anomalous usage of regulated retail roaming services [...] for purposes other than periodic travel."

The fair usage clause is the part that is not widely discussed in public but it raises a number of interesting points. First, according to the proposed legislation, fair use policies must be approved by national telecom regulators. Regulators have to come up with a set of rules by 15 December 2016 when a FUP can be applied based on factors such as the imbalance of incoming and outgoing data traffic over roaming interfaces, pricing levels in different member states, traveling patterns in the EU (read - some countries have more people visiting compared to the local population than others).

The way I interpret the text is that the fair usage policy, which has yet to be defined by the telecom regulators will govern payments between network operators if there is an imbalance of incoming and outgoing traffic in some parts of the EU or if there is an over proportional roaming traffic. It does NOT mean, as far as I understand it, that end users have to pay extra in some circumstances if they use more voice minutes, SMS or data volume over a certain threshold.

The proposed legislation also makes it clear that network operators can take measures to ensure the system is only used by customers for occasional travel to other EU countries and not to buy a SIM card with a cheap data subscription from an operator in one country to be permanently used in another country in another operator's network that is more expensive. It's going to be interesting where the line is drawn between occasional use and misuse and which steps can be taken by network operators to prevent misuse.

by mobilesociety at September 18, 2015 06:00 AM

September 17, 2015

Martin's Mobile Technology Page

Configuring Prosody and Conversations For Pictures in Group Chats

Supported-xmpp-featuresWhile most features of Prosody and Conversations for XMPP messaging are straight forward there is one feature that is very popular in other IM systems that requires a bit of manual tweaking to set-up: Pictures in Group Chats.

To be able to post pictures that are shown automatically in a group chat in Conversations, the server needs to support XMPP extension XEP-363, "HTTP File Upload". If you have a Prosdoy server at home a corresponding module can be added without too much difficulty. I haven't seen widespread support on public servers yet, with Jabber.at being a notable exception. If you know of others supporting the feature, please consider leaving a comment below. If you are with a public server you can check in Conversations if it is supported by going to "Manage Accounts", clicking on the account that is active at the moment, go to the "..." in the top right corner menu and select "Server Info". That brings up a list that shows which XMPP features are supported by the server. The screenshot on the left shows the features supported by my server, with XEP-363 being the important one for pictures in group chats.

To install the http_upload module in Prosody, have a look here. Once done and Prosody is restarted, support will be indicated in Prosody in the "Server Info" overview. After that there is one more hurdle to be overcome. As it could be potentially dangerous to automatically load in a message stream, Conversations restricts this to pictures that are sent via HTTP links from known contacts. For pictures received from other contacts, only the URL from which they can be downloaded is shown. A long-press on the URL will then download the picture on demand. By default, chat groups created in Conversations are anonymous so even if you know others communicating in a group, Conversations can't identify them and hence only the link shows up. So to see pictures in a chat group instead of links, the group needs to be set into "non-anonymous" mode before participants are added. In this regard, security is a bit in the way of usability I'm afraid.

One other thing is important to remember: As group chats are not end-to-end encrypted (yet), pictures are uploaded to the XMPP server and are stored there in the clear. TLS still protects the conversation so nobody can eavesdrop in a public and open Wi-Fi hotspot. That's probably enough for most people but one should be aware of the fact and always remember that an unencrypted copy is stored for a while on the server. But from what I hear a solution is already in the works.

by mobilesociety at September 17, 2015 03:24 PM

September 16, 2015

Martin's Mobile Technology Page

Upgrading My Prosody Server for Advanced Mobile Messaging Features

I've been running Prosdody, an XMPP messaging server on one of my Raspberry Pi's for ages now, mostly for desktop instant messaging and testing mobile messaging clients every now and then. Yes, I could use a public XMPP server but why should I if I can host it myself, too? It's easy to install from the Debian package archive and easy to configure. Now that I've found 'Conversations' a fantastic mobile messaging app, I wanted to upgrade Prosody to take advantage off a number of new features such as for example handling of temporary absence of clients due to network coverage holes which are not part of the version contained in the Debian archive. It turned out that the upgrade process is rather simple.

Instead of first de-installing the Debian archive version (0.8) and using Prosody's package repository to install the latest Prosody version (currently 0.9.8) from scratch one can go ahead and directly configure to use the external repository and install the latest version over the existing one. It only takes a few commands which are described here generically. For Debian on a Raspberry Pi they look like this:

sudo apt-get install software-properties-common python-software-properties
sudo add-apt-repository "deb http://packages.prosody.im/debian wheezy main"

wget https://prosody.im/files/prosody-debian-packages.key -O- | sudo apt-key add -
sudo apt-get update
sudo apt-get install prosody

Before doing so, I saved the configuration file from /etc/prosody to be able to restore it later. There are only few changes between the old and new configuration file so once the upgrade process was finished I renamed the new configuration file, put my old one back in place, added the new parameters to my own configuration file and restarted the server with 'sudo service prosody restart'. The whole process takes 10 minutes at most so it's not much trouble at all.

If you are installing Prosody for the first time you can of course skip copying the configuration file and instead configure it from scratch. Only a few parameters need to be filled in and the configuration file is well documented. Once done, the only other thing that needs to be done for a new installation is to create user accounts as documented here.

by mobilesociety at September 16, 2015 09:20 AM

September 14, 2015

Brad Frost » Brad Frost | Web Design, Speaking, Consulting, Music, and Art

Interview with Brad Frost on Atomic Design & Crafting Modern Websites

I used to read Web Design Ledger frequently when I was first starting out as a designer. As time went by they dropped off the radar, but it’s good to see they’re back with new leadership. I gave a lengthy interview with them talking about a whole range of topics, from getting started to atomic design to a bunch of other stuff.

by Brad Frost at September 14, 2015 10:52 PM

Best Of Nine Smashing Years

I wrote a chapter all about responsive design patterns for Smashing Magazine‘s The Mobile Book a few years ago. Now my chapter is rounded up with chapters from other great authors from other Smashing books. And the best news, you can download it for free!

by Brad Frost at September 14, 2015 07:20 PM

MobileMonday London

MoMoLo goes to Apps World, November 2014

Firstly, a massive thanks to Apps World 2014 who gave us twenty-four stands to offer out to startups from the community over the two day conference - 12th and 13th November at ExCeL London. Around half of these were in the current intake or alumni of The Mobile Academy (the course we host with UCL).

Armed with my dictaphone, I interviewed our startups and they all talked about the diverse range of people that they met over the two days including web developers, investors, universities, corporates, press and bloggers. There was also mention of lots of different sectors; such as music and fashion.

Douglas Robb of Scramboo, talked about two of his favourite conversations: "I met a major English football club that are very interested in the product and someone yesterday refused to tell me their identity but this morning I received a LinkedIn invite from them - turns out they were very senior in a large corporate...it was very worthwhile"

Of course, it was also a great opportunity for some of the startups to engage with end customers too: 5 Tiles (Jose and Michal pictured here), were testing out the usability of their new keyboard for small devices on a Samsung smartwatch. They were delighted how quickly people were able to grasp their new interface. They also found a whole new target group where their product was providing a great solution for those with reduced dexterity.

Frederick of Adsy (love their branding!) also said that he had met quite a few of their 23,000 users and it was great to get feedback, confirmation of customer need and find out about ways they were using the product.

Albert at Quiztix added how useful it was to meet other startups and celebrate how far the word of Apps have come along. His team members enjoyed the opportunity to meet customers face to face.

From our side, we had many of our friends from international Mobile Monday chapters pop along to see us - here we have (left to right) London, London, Singapore, Tel Aviv and Singapore!

We also had a great opportunity to take a ride on the new cable car over from ExCeL to the after party at the 02. For me, the whole experience reinforced how lucky we are to live in such a diverse and vibrant city - a hot bed of innovation that pulls people from all over the world. 

Well done to the startups and thanks to those of you that came down over the two days to support them. 

Julia Shalet, Co-Organiser, Mobile Monday London

by Julia Shalet (noreply@blogger.com) at September 14, 2015 03:46 PM

Martin's Mobile Technology Page

Configuring Prosody For Mobile: XEP-198 Stream Management

When the XMPP protocol for instant messaging was first created one and a half decades ago the protocol could rightly assume stable Internet connectivity on the client side. Few if any people at the time thought about mobile networks and users moving around, loosing network coverage every now and then or suddenly changing IP addresses. As a result, XMPP in its original flavor doesn't deal with such scenarios very gracefully and drops messages that are in flight during such events.  Fortunately, XMPP did not stand still and there's a fix for this.

The fix is called "stream management" and has been specified in XMPP extension XEP-198. What stream management basically does is message buffering on the server side and requiring an acknowledgement of the client before the message is discarded. In practice, the stream management implementation on my Prosody server at home can easily correct for client side "coverage holes" of well beyond 5 minutes. Works like a charm. Out of the box, stream management is deactivated in Prosody, but it can easily be switched on by downloading and copying "mod_smacks" to Prosody's module directory and then activating it in the config file. The Prosody website has all the necessary details here. A must have feature for mobile clients, no doubt.

by mobilesociety at September 14, 2015 05:58 AM

Why I Prefer XMPP Federation Over WhatsApp and Co.

Xmpp-logoAfter my previous glowing review of the 'Conversations' XMPP Client App for Android I thought it would be a good idea to write a couple of follow up posts to talk about some of the technical topics I could only quickly mention in the review. So this first follow up post is about XMPP federation and why that is a good thing.

Let's have a look at the mainstream: Services like WhatsApp and others use a centralized server system. That makes it easy for users to register to the service initially and to find each other later-on. Unfortunately centralization also means that messages can be intercepted and stored in this central place, usage behaviors can be analyzed and unwanted adds and other things can be injected into the message stream. Also, the centralized server is aware of the IP addresses of all clients connected to it so location profiling is also possible.

Conversations on the other hand is an XMPP client. XMPP is a federated system of many independent servers on the Internet that can communicate with each other. Users are registered with individual servers and there is no central instance, which is why it is called a 'federated' system. If a user who has an account on server A wants to send a message to a user with an account on server B, server A and B communicate with each other to exchange the user's message. To make user IDs unique it looks like an email address, i.e. there's a username, an '@' sign and a server name.

In practice there's two ways to use the system. The simpler case is to create an XMPP account, sometimes also called a 'Jabber' account, on one of the community operated and open XMPP servers. And there are quite many of them. Its no problem if one wants to communicate with a user with an account somewhere else as servers communicate with each other. The other way to use the XMPP system is to run an XMPP server at home, e.g. on a Raspberry Pi. That's obviously a bit more work but if one has previously installed other servers at home such as Owncloud it's not too difficult to do. If the server at home should be part of the overall XMPP federation rather than just serving its own users, it has to be reachable via an official domain name. A dynamic DNS address suffices.

Just like email, really, just instant :-)

by mobilesociety at September 14, 2015 05:41 AM

September 11, 2015

Martin's Mobile Technology Page

A Vintage Amiga 500 And A Simulated Floppy Drive For Exploring The Past

Amiga-usbEarlier this year I had a post about how a simulated floppy drive that reads SD cards helped me to experience long gone times on a real Commodore C64 rather than on a simulator. The C64 wasn't the only computer I had during my teenage years, it was followed by an Amiga 500 before PC clones and Microsoft Windows started to dominate home and office computing. Like with the C64, my Amiga vintage adventures are made difficult by software I once had but long lost and aging floppy drives and disks. But like for the C64 there are floppy drive hardware simulators available that plug right into the floppy cable and power supply of the original Amigas.

Instead of 3.5 inch floppy disks, the simulator is fed with USB Flash sticks that can contain an almost infinite number of floppy disk files. Switching from one floppy to another is done by pressing buttons at the front of the drive. The replacement drive I got for me even simulates the sound of the drive head motor of a real floppy drive for a more realistic feeling. The only difficulty I had was that the hardware doesn't fit into the Amgia 500 case as the USB port and the keys are at the wrong location and would be covered by the external case if assembled as intended.

While most people seem to use a longer ribbon cable and extend the power cable to use the floppy simulator outside the case or modify the case to get access to the USB port and the keys I came up with a slightly different approach which is to use a USB extension cable to drag out the USB port through the opening for the drive in the case and put the floppy simulator into the case itself. The disadvantage is that the drive can't be fixed in the case and a pen has to be used to reach the keys to simulate a change of the floppy disks. Not ideal, but to me that's much better than modifying the original case or have an "ugly" ribbon cable and a grey box outside the case.

P.S.: This is a good opportunity to link to my previous post about Amiga 30th anniversary events as the event in Neuss Germany is still outstanding and scheduled for the 10th of October 2015.

by mobilesociety at September 11, 2015 05:52 AM

September 10, 2015

Cloud Four Blog

The web’s lost opportunity to be on TV

Apple announced the new Apple TV yesterday. As many expected, it didn’t come with Safari. What was unexpected is that it doesn’t appear to have WebKit at all.

The utility of WebKit for app developers seems straightforward. Apps often use embedded web views to display information that it doesn’t make sense to duplicate in native code or for rendering links that people share.


But without webkit available for tvOS, there will be no embedded web views and no third party browsers.

We now have both Apple TV and Android TV without the web, and it’s a bloody shame.

I’m well aware of the argument that people don’t want to browse the web on TVs. I believe the jury is still out on that one, but even if I concede that point, there is still tremendous utility in using web technology for building apps for TVs.

The reason I started researching the web on TVs dates back to the original Google TV Showcase. There was a Vimeo app in that showcase that I loved.

Vimeo couch mode screenshot

I used that app for several months before I accidentally hit a button that converted it from the TV app that I knew into the standard Vimeo web page.

I had inadvertently discovered that the Vimeo app was just a different view of Vimeo’s normal web page. Vimeo calls this couch mode.

Nintendo, Samsung, LG, and others have all built app platforms on top of HTML. For years, Netflix built all of their TV apps on HTML5 before recently going native.

Web apps on TVs can be great experiences. Maybe it is because we don’t notice the lag as much when we’re using remote controls instead of touching the interface directly. Maybe it is because the interfaces for most non-game, TV apps are fairly simple.

Whatever the reason, building TV apps using web technology just seemed to work. Bridging the gap between native and web apps on TVs was easier than it was on mobile.

But year after year at Google I/O when I’d try to talk to people about Chrome on TVs, I wouldn’t get anywhere. Google TV shipped with Chrome, but it was a forked version that the Chrome team wasn’t responsible for and grumbled about.

I remember trying desperately to figure out who to talk to about the browser on Google TV. I was repeatedly and humorously pointed to Chris Wilson. Chris hadn’t working on Google TV in months. It became a running joke between the two of us.

I found this photo of Android TV on the Android TV site. The name of the file was lessbrowsing.jpg.

A couple years later, Google announced that their TV product would be called Android TV. Google touted how the TV would finally be running the same version of Android as phones and tablets. It would be kept up to date.

Except it would no longer have a browser.

At the time, Microsoft showed more interest in the web on TVs than Google. That may still be the case. I haven’t checked in awhile. Firefox OS has recently moved to TVs and Opera still has a TV browser. So all hope isn’t lost.

Back in 2012, I was trying to muster enthusiasm in browser makers for working on the web on TVs. It seemed likely that TVs were going to be the next platform and instead of playing catch up like the web did on phones, we could be ready for the web on TVs from the beginning.

I feared playing catch up again. In retrospect, I should have feared much worse.

The two biggest mobile operating systems are now on TVs. One started with a browser, but no longer has one. The other just shipped without even an embedded web view.

From what I’ve seen, the web on TV could have been a star. What a missed opportunity.

by Jason Grigsby at September 10, 2015 05:17 PM

September 09, 2015

Cloud Four Blog

What I’m watching for in the new Apple TV

We’re about an hour away from the Apple event where they will announce the new Apple TV. Here are the things I’m going to be watching for based on my time researching Smart TVs, game consoles, and set top boxes.

How does the remote control work?

Input remains the biggest challenge for all attempts to bring computer smarts to the screens on our walls. While the software and content options for the new Apple TV will matter, if Apple truly revolutionizes TVs, I suspect if will come from an improvement in input.

Historically, improved input has accompanied Apple innovation. The Mac’s mouse. The iPod’s scroll wheel. The iPhone’s touch screen.

The other lesson here is that none of these inputs were wholly Apple inventions. In each case, the input technology had been used by other companies in the past. The iPhone’s touch screen seemed ho-hum until people actually used it and realized how much attention to detail Apple had put into perfecting the input.

So I’ll be surprised if the remote control has some feature that we haven’t seen on remote controls in the past, but I also suspect that if Apple TV is a game changer, it will be because of the remote control.

Is there a pointer? And where is it used?

The current Apple TV is limited to d-pad interactions—up, down, left, right. There are a lot of interactions that need the ability to select an arbitrary point on the screen instead of navigating to that point by successive d-pad button presses.

The most obvious need is in games. The rumors are strong that the new Apple TV will focus on games. The remote control has been described as Wii-like in its ability to detect motion.

The question is whether or not there will be any interfaces where you may see a pointer on the screen. I highly suspect app developers will build apps that include pointers, but do any of the Apple apps themselves include a pointer. And if so, where is it used and how does it work?

Where is web technology used? Is there a browser?

I have little doubt that the new TV operating system will support embedded web views. Web views are critical for many apps.

So the big question is whether or not Apple will include a browser as well. I’ve explored some of the arguments for and against a browser in the past.

And whatever other surprises Apple has in store.

I’ve been looking forward to today’s announcement since I started researching the web on TVs in 2012. I can’t wait to see what it looks like when Apple is no longer treating TVs as a hobby.

by Jason Grigsby at September 09, 2015 04:09 PM

September 07, 2015

Brad Frost » Brad Frost | Web Design, Speaking, Consulting, Music, and Art

Living with Bullshit

Last week I launched Death to Bullshit, a site and blog that explore the themes of information, bullshit, and craft. On the site, I argue that people are bombarded by more information–and bullshit–than ever. People understandably want to minimize the amount of bullshit they’re exposed to, so we as creators should take heed and make experiences that respect people and their time.

Overall, reactions to the site have been quite positive, but naturally there have been a few comments (which I know, I know I shouldn’t read)  that latch onto one minor point (“But I like 24-hour news networks!”) and use it to write off the entirety of the message.

One of the dismissive comments that deserves discussion goes a little something like “lol this guy obviously doesn’t understand that businesses need to make money”. This is on par with other nonsense positions like “some people enjoy hunting, so therefore mentally-ill, convicted felons should be allowed to purchase assault rifles” and “if we let the gays marry I should be allowed to marry my refrigerator!”

Take any issue or cause, point out a contrarian-yet-possibly-legit exception, take it to its illogical extreme, and use it to shut down any attempt of reform or conversation. Normally I shrug these comments off, after all in my case it’s just dumb comments about a website, but because this is the current depressing state of discourse and politics in this country, I had a relatively severe allergic reaction to it.

The Intersection of Bullshit and Business

But let’s come back to intersection of bullshit and business. Here’s a genuine, non-dismissive framing of the question from Mark Boulton:

This is a fantastic question, and deserves to be answered. The short answer is: everything in moderation, friends.

There is a massive difference between this:

Daring Fireball

And this:

Daily Mail mobile advertising assault

Both of these sites use display advertising to generate money for their businesses. One of these sites is doing this in an unobtrusive manner, and the other is actively punching its users in the face. I’ll let you decide which site is the former and which is the latter.

No doubt there’s some legit intention behind each category of bullshit, but what I’m fighting for is for folks to use their judgement and strike a healthy balance between solving business problems and respecting their users and their time. For example:

  • Advertising is a necessary evil, however there’s a difference between paying the bills and straight-up assaulting your users.
  • Tracking scripts provide useful insights (I use Google Analytics on nearly all my sites to better understand how people are using my sites), but maybe you don’t need to include 22 of them.
  • Email marketing can be an effective way to connect with your audience and generate sales, but maybe you don’t need to flood their inboxes with 17 emails a week.
  • Popups and interstitials might be an effective way to get people to sign up for something (or not), but maybe there are alternative patterns that would be equally effective and less annoying to your users?
  • And so on and so on

The invisible cost of bullshit

One of my main issues with the whole “bullshit is necessary for business” comment is that it assumes the bottom line is the only thing that matters. This mentality, combined with a short-sighted, A/B test mentality, leads to an unhealthy tic where businesses constantly shout “DOES THIS GENERATE MORE PROFIT? YES OR NO? YES OR NO!?!?!” and this tic ends up trumping every other aspect of the experience.

But allowing only one metric to influence behavior can be disastrous. Let’s say a city cared about lowering crime rates, which is undoubtedly a nobel pursuit. The city notices only a handful of neighborhoods are responsible for the majority of the crime. There are a few ways to deal with this issue. One way to accomplish their goal is to simply level these parts of the city–just straight burn ’em all to the ground. Would this lower the crime rate? Most likely yes. But any non-psychopathic person should view this solution as absolutely abhorrent, for reasons I shouldn’t have to spell out.

Products and services need to recognize that adopting bullshitty practices may very well lead to concrete, short-term, quantifiable increases in profit. But at what cost? How many times will people x out of your popups before they stop following you on Twitter? How many e-commerce emails will users endure before they go desperately hunting for the tiny unsubscribe button at the footer of the email? How many scripts will you shove down your users’ throats before they seek the same content or functionality from a place that gives them what they want in a reasonable time?

How willing are you to piss off your users?

We must understand people are enduring bullshit in every aspect of their lives. Every time they try to pay their bills. Every time they have to fill out yet another form. Every time they try to read the news of the day. The result is death by a million paper cuts. I have no doubt that creators who break the mold and give people experiences that respect them and their time will be rewarded in the long run.

by Brad Frost at September 07, 2015 01:47 PM

September 05, 2015

Brad Frost » Brad Frost | Web Design, Speaking, Consulting, Music, and Art

Pattern Lab Exporter

Pam Griffith created a script to migrate patterns from inside of Pattern Lab into a CMS. She wrote a post explaining a bit more about the project:

So I’ve been playing with making a conversion script that takes the patterns from Pattern Lab and converts it for a couple of different content management systems I use. So far I have it working forDjango, Jekyll, and Statamic; I have tried but failed to get it working inPerch and Drupal because some of the things that need to be done in those environments is difficult to automate based on the Mustache templates that Pattern Lab uses.

So awesome to see people extending Pattern Lab and molding it to their needs. This is especially cool as Dave and I are working towards making Pattern Lab more flexible so more people can integrate it with their CMSes.

by Brad Frost at September 05, 2015 03:48 AM