Shared posts

13 Mar 03:19

Apple replies to recent privacy accusations

by Timmy Shen
Apple has caught fire from the public after an article written by an Apple customer went viral (in Chinese) this week in China, where he accused an Apple employee of allegedly hacking into his iCloud account and threatening to leak the data. Apple responded yesterday through local media Sina Tech with the following statement (our translation): “We […]
13 Mar 03:19

How to Ask Strangers What They Care About (Without Scaring Them Off)

by Dave Pollard

Why is it when we meet new people, our way of self-identifying, and our first question to them, is so often about what we do “for a living”? I suppose this is because it’s safe — most of us don’t see such questions as highly personal or invasive. But it also pretty much reduces the short-term likelihood of getting to know this new person well, or even at all in any meaningful way. Which in formal or obligatory settings is probably just what we often want. For those that enjoy it, small talk has its place.

Recently, there have been attempts by meeting and event organizers to craft some questions that are more informative, meaningful, and auspicious for establishing close and valuable relationships. They have to walk a line between being too innocuous to be engaging, and crossing personal boundaries too quickly and non-consensually. Unlike wild creatures, we can’t just sniff out someone we’ve just met and from that know, sensuously and intuitively, whether we want to hang around them or not. While it is to the point, my recent habit of asking new acquaintances “What are you doing that you really care about these days?” is too abrupt and awkward for most. And it often points out that many of us are living automatic lives, on hold for times that offer us the luxury of doing what we really (think we) want to do, and that there is little or no intersection between what we’re doing and what we really care about.

Event organizers call not-too-personal but relationship-opening questions “ice-breakers”. Many of them IMO are just as awkward as my “what do you care about” question — they inquire about personal preferences, happy memories, and to some extent aspirations. The answerer generally struggles with coming up with a response that’s not too personal, but doesn’t sound superficial or trite. As with most questions with people we’re not yet sure we want to associate with (or are pretty sure we don’t want to associate with), there is an enculturated tendency to provide an answer that is palatable to the questioner, whether or not it is true. This makes the whole process annoying, and less than transparent.

So I’ve been looking for some questions I could ask that avoid these problems. The criteria for these questions are, I think:

  1. They elicit honest answers rather than clever, safe or socially acceptable ones.
  2. They are not so personal that they make you hesitant to answer, but are personal enough they tell others something interesting and possibly ‘useful’ (to you both) about you.
  3. They are interesting (and perhaps even self-revelatory) to think about, but don’t (for most people) require an enormous amount of time and energy to ponder to come up with an answer.
  4. They encourage follow-up questions and deeper explorations into the answers and reasons for them.

Here are a few questions that, in the right circumstances, might meet these criteria:

  1. What do you wish you’d learned earlier in your life. Probably best to take turns describing one thing at a time you wish you’d learned, since most of us probably have multiple answers. In my experience this question almost always leads to a discussion of how you came to learn this (a brief story) and why you wish you’d learned it earlier. It’s fine if you never get past the first learning. You might introduce this question gently by saying something like “I’ve just been thinking about how I wish I’d learned earlier in life (eg ‘not to blame or judge people, since I think we’re all struggling to do our best’); ever wished you’d learned something earlier in your life?” It may help to provide your own answer first, to indicate a willingness to move beyond small talk.
  2. Of the people you’ve known in your life but fallen out of touch with, who would you most like to reconnect with, and why? This may require more thought, but again it will inevitably provoke a story and some understanding of what’s important to the answerer. An alternative for those who have no answer to this one might be: Of the people in your community, who would you most like to get to know better, and why?
  3. If you had to choose one written passage of no more than 500 words (a couple of pages) to read out loud that summarizes your worldview or philosophy of life, what would it be? Even better if it’s at hand and can be read our loud — it should only take 3-4 minutes. Now that’s a conversation starter!

If you’ve found other questions that meet the above criteria, I’d love to hear them, especially if you now use them when you meet and engage with new people.

There are probably more suitable questions to use in paid work settings, but since I’m retired (and use questions like those above in settings when those present are all volunteers) I’m not the best one to come up with them.

What I like about these questions, and these criteria, is that they can apply even when the people involved are poles apart socially, culturally or politically. Depending on the circumstances, I wouldn’t be averse to answering the above questions with reference to my current positions on complexity, civilizational collapse, nonduality, and/or whole plant food diets: I think it’s possible (though not easy) to broach these subjects in a non-confrontational, non-preachy way. And since I care so much about these subjects, I suspect that many others, though they may not share my particular views, also care about understanding how the world works, our future, the essence of human nature, and how to live well. The less time we take getting to talk about what we care about, and what we’ve learned, the better.

Image CC0 from the good folks at pixabay.

13 Mar 03:19

Apple Leads First-Ever Swift Playgrounds Course for Blind and Low-Vision Students in Austin

by John Voorhees

Earlier this week, Apple engineers visited the Texas School for the Blind and Visually Impaired where they led a programming course from the company’s Everyone Can Code curriculum. According to the Austin Statesman’s technology blog, Open Source, the class was the first such session led by Apple for blind and low-vision students.

With the assistance of VoiceOver, the students completed assignments in Apple’s Swift Playgrounds iPad app. The students also got a chance to go outside and fly Parrot drones using Swift Playgrounds. Viki Davidson, a technology teacher at the school, told Open Source:

“We see this as a way to get them interested in coding and realize this could open job opportunities,” said Vicki Davidson, a technology teacher at the Texas School for the Blind and Visually Impaired. “Apple has opened up a whole new world for kids by giving them instant access to information and research, and now coding.” 

Apple’s director of accessibility, Sarah Herrlinger, who will participate in a session on Innovations in Accessibility at South By Southwest on March 15th, said:

“When we said everyone should be able to code, we really meant everyone,” said Sarah Herrlinger, Apple’s director of accessibility. “Hopefully these kids will leave this session and continue coding for a long time. Maybe it can inspire where their careers can go.”

Swift Playgrounds and Apple’s Everyone Can Code curriculum have grown at a remarkable rate and are fantastic resources for students, teachers, and parents. However, it’s Apple’s long-standing commitment to accessibility across all of its products that helps ensure that those resources are available to as many students as possible.

→ Source:

13 Mar 03:19

HomePass Can Store All Your HomeKit Setup Codes

by Federico Viticci

Developed by Aaron Pearce (the creator of Homecam, one of my favorite iOS apps this year), HomePass is a handy utility for iPhone and iPad to store HomeKit setup codes.

If you've been playing around with home automation on iOS, you know that managing accessory pairing codes isn't exactly fun or convenient. While iOS 11 added support for QR codes and special NFC pairing tags, most accessory makers still stick basic alphanumeric codes on the back or at the bottom of accessories and essentially require you not to lose them. That's not ideal. HomePass aims to be a single repository where you can easily keep track of all your setup codes, sync them across devices with iCloud, and even protect them with Face ID. Instead of taking pictures of your codes and storing them in Apple Notes (which is what I've been doing), you can collect every HomeKit code in HomePass, where they'll be presented alongside device names, HomeKit rooms they belong to, and custom icons.

I've been testing HomePass for the past couple of weeks, and there are some nice touches I want to point out. First, if you grant the app access to your HomeKit data, it'll be able to see existing accessories and allow you to simply enter the code without choosing a device name or icon (you can also create new accessories from scratch). In addition, the code displayed in the Code field of a device's detail view is formatted with the same shape and font used on physical setup codes; this means you can open HomePass on your iPad and scan a code directly with the Home app on your iPhone. Lastly, you can add notes to your accessories and export everything as CSV if you prefer to have an additional backup of your accessory database.

One of the many shortcomings of Apple's native Home app is the lack of deeper organizational tools for users who own dozens of HomeKit accessories and need a better way to store their codes. Ideally, such a feature shouldn't be needed, but in my experience things sometimes go wrong and you may need to reset an accessory and add it to HomeKit again. When that happens, you don't want to go hunting for the setup code on the back of a thermostat. I highly recommend using HomePass instead, which is available at $2.99 on the App Store.

Support MacStories Directly

Club MacStories offers exclusive access to extra MacStories content, delivered every week; it's also a way to support us directly.

Club MacStories will help you discover the best apps for your devices and get the most out of your iPhone, iPad, and Mac. Plus, it's made in Italy.

Join Now
13 Mar 03:19

Moodling around with a Jetpack metaphor

by Doug Belshaw

I’m busy ideating, and talking to people around, Project MoodleNet. When you’re explaining something that doesn’t yet exist, you’ve got to use touchstones and metaphors, starting from where people are to help them understand where you want to go.

Project MoodleNet landscape

In these discussions I’ve been using three things to help me:

  1. A great ‘landscape’ image from Bryan Mathers (see above)
  2. The 3D printing social network Thingiverse (which I wrote about here)
  3. The Jetpack plugin for WordPress

It’s worth, I think, unpacking the third of these — if only so I’ve got a public URL to point people towards when I reference it elsewhere! It’s an imperfect metaphor, as it involves more technical understanding than we’ll require for Project MoodleNet.

Anyway, here goes…

WordPress and Moodle are similar

  • Free (as in freedom)
  • Open Source
  • Host your own version
  • Have it hosted for you
  • Partnership network

How Jetpack works

Jetpack is a meta-plugin, a ‘plugin of plugins’ that adds lots of functionality to self-hosted instances of WordPress. In fact, it’s pretty much a no-brainer to activate Jetpack if you’re self-hosting. It connects your instance to your account, giving you:

  • Faster page loading (via CDN)
  • Additional security
  • Detailed site stats
  • Faster logins
  • Payment integration

Install Jetpack

Where’s the value for the organisation behind WordPress?

So lots of value for users, but (you may think), what’s in it for Automattic, the organisation behind WordPress? Well…

  • Secure, fast WordPress sites maintain brand value
  • Better metrics around installation numbers
  • Ability to upsell to customers direct from dashboard

Jetpack dashboard

Why is this a good metaphor for what we’re doing?

Project MoodleNet will be a standalone social network for educators focused on professional development and open content. It can be supercharged, however, by using a similar model to what WordPress have done with Jetpack.

Imagine users logging into a institutionally-hosted Moodle instance using their Project MoodleNet credentials because the two are connected in a similar way to how Jetpack works for the WordPress ecosystem.

To be clear, I’m not proposing that Project MoodleNet offers the same services as Jetpack, I’m saying that it serves as an example where you can create value in two places and additional value by linking them together.

This would mean…

  • Teachers: professional social networking within their existing learning platform.
  • Instructional designers: faster access to curated open resources.
  • Sysadmins: better security and potentially reduced hosting costs.

(if you’re wondering about ‘reduced hosting costs’ it’s because we’re tentatively looking at how IPFS could be used in the wider Moodle ecosystem)


This isn’t a perfect metaphor by any means, and so I’m looking for other ways to explain what we’re trying to achieve. However, the combination of Bryan’s image, referencing Thingiverse, and explaining JetPack is helping those I’m talking with to understand the kind of thing we’re trying to build.

What kind of metaphor would you use?

Main image CC BY-NC Fir0002/Flagstaffotos

13 Mar 03:19

Outlier detection in R

by Nathan Yau

Speaking of outliers, it’s not always obvious when and why a data point is an outlier. The Overview of Outliers package in R by Antony Unwin lets you compare methods.

Articles on outlier methods use a mixture of theory and practice. Theory is all very well, but outliers are outliers because they don’t follow theory. Practice involves testing methods on data, sometimes with data simulated based on theory, better with `real’ datasets. A method can be considered successful if it finds the outliers we all agree on, but do we all agree on which cases are outliers?

See also Unwin’s talk from 2017 for more about the thinking behind the package.

Tags: outlier, R

13 Mar 03:19

Pogue reviews this week's No. 1 most downloaded app: Sky Guide AR

Welcome to David Pogue’s Rated:App series. Each week, I’ll install whatever is the No. 1 bestselling app on the iOS or Android store and review it, to save you the effort in case it’s a turkey. 

This week, the No. 1 bestselling app on the iPhone app store is an augmented-reality stargazing app called Sky Guide AR ($2.99). It’s a dazzling piece of software, with an amazing 4.8 rating on the app store.

As usual, I have no clue why this app suddenly popped up to the top of the list. It’s been around for years, and it’s very similar to other, even older apps, like StarWalk. But since Sky Guide AR did land at No. 1, it’s fair game to be this week’s Rated:App!

Sky Guide AR identifies the stars, planets, and constellations as you move your phone.

What it does

The moment you open this app, you understand it: Your phone is now a viewer for the sky above you. It depicts all the stars, planets, and even satellites that you’re pointing the phone at, and labels them, and draws the appropriate pictures for the constellations. You know — fish for Pisces, a scorpion for Scorpio, and so on.

Sky Guide is like a window onto the sky above you.

You match up what you’re seeing with what’s on the screen: that’s Andromeda, that’s Venus, that’s the International Space Station, and so on. It sure beats someone next to you pointing vaguely and going, “OK, it’s just to the right of those two little dots there below the big dot… do you see it?”

As you move the phone around in any direction, the app shifts what it’s showing you, smoothly and beautifully. A shimmery, pulsating musical soundtrack plays as you go (you can mute it if you like) —hotter stars make higher notes, and brighter ones make louder notes. You can zoom in with the usual two-finger pinch/spread gestures, and you can adjust the brightness by dragging two fingers up or down, to better match the actual color of the sky.

If you tap an object, a pop-up panel appears to describe it for you: Its distance, size, color, and so on.

Tap a celestial body to read more about it.

Of course, there’s nothing to stop you from using the app during the day, or even indoors; it still shows you what celestial bodies are in front of you or above you. In fact, one of the coolest things to do is to aim it downward; the app shows you what’s below the horizon. After the sun’s gone down, for example, you can see exactly where the sun is.

Also fun: At the top of the screen, there are VCR-type controls that let you speed up or rewind the movement of the stars overhead; you can also tap in a specific date. That’s cool if you want to see how the stars were aligned the day you were born, for example, or how a constellation’s path will shift over the seasons of the year.

You can fast-forward or rewind the sky.

You can install a Sky Guide widget on the iOS 11 Today screen (which hangs out to the left of your home screen) that shows you what cool astronomical events or satellite fly-bys are happening today.

At your option, Sky Guide can add a widget to your iOS “Today” screen.

Get it?

You really have to watch the video above to appreciate how lovely and magical this app is.

If you’re curious, scientific, or fascinated by the stars, $2.99 is well worth it; Sky Guide AR is either the best augmented reality stargazing app or among the best. If you’re only casually interested, on the other hand, you may find that the novelty wears off fairly quickly.

Sky Guide is perfect for space-station fly-by spotting.

But that’s quibbling only with the concept. The execution of this app is flawless, and it’s a spectacular example of augmented reality’s promise.

David Pogue, tech columnist for Yahoo Finance, welcomes non-toxic comments in the Comments below. On the Web, he’s On Twitter, he’s @pogue. On email, he’s You can sign up to get his stuff by email, here.  

Read more

The controversial Vero is this week’s David Pogue’s Rated:App

Bitmoji is this week’s David Pogue’s Rated:App

This week’s David Pogue’s Rated:App is on Facetune

13 Mar 03:18

Reclaiming Jekyll (Two Years Later)

by Reverend

Two years ago Tim wrote a great post detailing how you can get Jekyll up and running in shared hosting on Reclaim Hosting.* I’m late to this party, obviously, but playing with Grav recently led me back into Github thanks to the Github Sync plugin. I had explored Jekyll back in 2014 briefly (almost 4 years ago now, really?!), but I forgot most everything. I wanted to see if my Grav repository in Github (synced with my Grav install on Reclaim) would allow me to run the Grav files through Github pages (which is powered by Jekyll). Is this all crystal clear now? Good.

Turns out I was on a fool’s errand. Grav is a flat-file CMS, but it needs PHP to dynamically those pages as a site—which I should have understood. So it will not run on Github Pages.  Grav Sync is first and foremost for forking and collaborating on specific Grav instances (which I did understand), but I was trying to understand if those files could be seamlessly archived/translated into Jekyll given it was a repository, but I see my foolish ways now. Thank you, Tim 🙂 So while you can bring up individual pages from my Grav repository on Github, like the Welcome page:

But the site functionality of my Grav instance could not be reproduced. Lesson learned. But this did peak my interest in synching my locally installed Jekyll on Reclaim Hosting with my Jekyll on Github. So, I asked Tim and he suggested the following:

I’m not sure the exact steps but it would involve setting up the repo in Github and cloning it to your hosting account and > then you could use git commands like git pull to grab the latest from git (even setup a cron every 10-15 min to do that piece).

Turns out that was the exact approach—I wish I was that good. I took the Github repo I have at (which maps to and clone it into the jekyll folder on my Reclaim Hosting account. I made sure to run jekyll build in the folder so that it would build the site files in the _site directory. After that I pointed the DNS of the subdomain to the new directory, i.e. jekyll/ and the same site at on Github is cloned and also resolving through my shared hosting account at The two things needed to sync changes made on Github is running the following commands in the jekyll/ folder on my shared hosting (making sure you are logged into command line through your virtual Ruby environment):

git pull

and then

jekyll build

Pull in any changes and then rebuilds the site so those changes are published to _site. None of this is new by any means, I am just playing catch up. Adam Croom went down this road two years ago in order to stick a fork in the LMS using Github, and I can say from firsthand experience that wrapping your head around Github can be intense, but that’s no excuse for an ed-tech to give up:

“An Ed-Tech spends her life getting into tense situations!”
-A Github Repo Man

*This setup requires CloudLinux, which we have installed on all our shared hosting servers. 

13 Mar 03:17

Jobs Jar: An Editor for Price Tags

by pricetags


Price Tags started a decade ago and is now ready to take the next step in becoming the must-read forum for those with a special interest in how the Vancouver region is growing and developing, especially in the context of global urban trends.

We want to attract an expanding readership beyond the City of Vancouver and from a new generation interested in urban design, development and planning, with a special emphasis on transportation.  We also want to be a forum for moderated discussion on the upcoming civic election.

Price Tags needs an editor/production manager with responsibility for content and presentation.  We have funding for a three-month position, with these primary functions:

  • Edit posts, manage flow, assign work
  • Commission features and contributions from a diversity of writers, photographers, artists

We are looking for skills to:

  • Adopt and update latest in blog interfaces
  • Look for new opportunities in podcasting, Instagramming, Youtube, etc.
  • Explore possibilities for live events
  • Connect and partner with similar media

And we want to plan for the future:

  • Research and apply for new funding

The applicant should be receptive to editorial teamwork and feedback.  And it helps to have a good sense of humour.

This is a paid position for three months, with the possibility of extension if resources are found.

Send your submission to by March 31.

(To PT readers: please forward this to possible candidates, and to organizations for circulation.)

13 Mar 03:17

A Theory of Functional Programming 0001

by Eric Normand


OK. I’m trying this out. I’m writing a book. I’m going to move. I’m writing a book. I think I’m going to call it, “A Theory of Functional Programming.” Let me explain. Here is the reasoning. That’s bad lighting hold on. I’ll explain what I’m doing and I’ll explain the reasoning behind the book.

I want to write this book. Writing a book is hard. It takes a lot of time and energy. You have to develop the ideas and type all the words, and do everything. Any help that I can get to do that will be welcome. Someone suggested to me that I talk to someone or I record myself talking like in the car and then transcribe it.

It’s not going to be great text or anything. It’ll be something to work with that will alleviate a lot of the typing I’ll have to do because editing is always easier than typing.

We have a social part of our brain that helps us organize our ideas. We’re able to think about what the other person is experiencing in a way. Maybe when you’re writing a book, it’s good to do that. It’s often easy to slip out of that.

Just start writing very technical and abstract. Basically what I’m saying is, it’s easier to talk than it is to type. Somehow we can talk for hours and not really get tired of it but typing for hours is tiring.

Why the book? Functional programming has this very academic feel to it right now. When you do a Google search, all of the definitions, you search for something specific. You search for what is functional programming.

You get a lot of definitions that basically boil down to functional programming is programming using pure functions. Your whole program is a function from inputs to outputs. I’ve been doing functional programming, professionally since 2010. That’s when I first started getting paid to do it. I was doing it before that, just on the side.

That is not how functional programs work. We actually do side effects. Our program is not one big pure function, there are effects in there. That’s actually the reason we write our program, is to do all those effects.

There’s something missing in that definition. The definition is also bad, because when someone new to the field, someone in the industry, not in academia — my audience is more about people who are programming in the industry, meaning commercial software — when they come over, when they see that definition, they’re turned off.

What does this add that the whole thing is one function? What about emails, sending emails? What about talking to another computer on the network. It’s an important aspect, and to just say we don’t do that as functional programmers is turning them away.

It’s incorrect, but it’s also turning them away. It’s making it seem like it’s an impractical paradigm. I want to do something about that. I want to have a good definition that I would be happy to point people to, and hopefully other people would want to point people to as well.

I look at it a lot as helping functional programming escape the ivory tower. Meaning, it’s in the ivory tower. It’s trapped up. There’s always great knowledge. Now that it’s escaping into industry, we need to start talking more practical terms. Real software is not a function from inputs to outputs. It’s something much more than that.

There’s a ton of ideas here. If I’m hesitating, it’s because I don’t know exactly how to continue. Let me take a moment here.

Why don’t I just go right into the definition that I have? Functional programming is a paradigm. Meaning, it is a set of ideas, it’s a set of concepts, a set of practices and almost like a theory of programming itself. It is a framework, meaning a mental framework for how to approach a problem that you’re trying to solve with software.

It is a paradigm like object-oriented programming is a paradigm. Object-oriented programming is a paradigm made up of…I’ll just say three things. I’ll simplify it. There’s three things. It’s objects. Those objects have references to other objects. Objects can send messages to objects they have references to. That’s very simple version of object-oriented programming.

That is, I think a good nutshell summary of object-oriented programming. Functional programming is an orthogonal view. It is a totally different view of the same problem. You can look at a problem through a totally different angle using functional programming.

When you’re using object-oriented programming, what you can do is say, “Well, this object is going to do this thing and then it will solve this part of the problem, and then it will send a message to this object which will solve the next part of the problem, etc., and this one will talk to three other objects to solve the problem.”

The work is done through this messages traveling around the graph of objects. Finally the work done and you have the answer. When you look at a problem in object-oriented view, you try to see, “Where are my objects? What are their messages? Where do I do this work? Where do I do that work? What object is going to do that? What message do I need to send to it to do that work?”

“What collaborators is this object going to have?” When you are solving a problem like accounting, you might say, “Well, we’ll make an object as…the account will be an object. You can send it a message like deposit and it’ll deposit a certain amount of money.” That might be how you do it.

I’m not solving that problem right now, but that’s the approach you take if you start thinking, where do I cut this problem up into little objects that talk to each other. In functional programming, we have three different concept. Those three concepts are data, calculations, and actions. Let’s go over those three, and give more definition for each one.

Data is facts about events that have happened. The event might be, I measured, something on the scale, or I took a reading from the thermometer, or this is the data that the user submitted in the form. It’s a fact about an event that you can use for calculation or other uses, storage, record-keeping, that kind of thing.

That’s the easiest one to think about as a programmer. We use data all the time. You got your basic data like your numbers, characters, strings of characters, so you start talking about collections.

You’ve got any compound data like tuples of numbers or strings or letters or bytes. All this stuff is. Lists of those things. They can nest, so you can have hash maps, you can have whatever. Whatever data, all of that is data.

That’s pretty easy to understand. There’s more to say about data, but I want to touch on the three things first. The next thing is calculations. Calculations are…

I haven’t found a good dictionary definition. I looked in several dictionaries. They all talk about calculations is the result of calculating and calculating is the act of performing calculations. It’s a bad definition.

I’m just going to also do a bad definition and just say it’s all about computation from inputs to outputs. Those inputs…There’s actually a rule of thumb. It’s probably more than a rule of thumb. It’s probably a little bit stricter than that, but the idea behind the calculation is that it is timeless.

Given the same input, you will always get the same output. It doesn’t matter when you run it or even if you run it. This is what we often call in functional programming in the academic world, we call it a pure function.

It is the mathematical sense of function, which is a relation between the argument to its value. Or relationship between the domain and the range, if you wish. That’s a much more mathematical way of saying it.

The final one is the actions. These are often called effects or side effects, but I think that the term effect is a poor term because I’m not talking about the effect. I’m not talking about the email being sent.

I’m talking about an action, which is a representation of that email being sent, which you can then invoke that action and that causes the email to be sent. The effect is actually the cause.

If the action is the cause and the effect is what happened, action is the cause of the effect. It’s not the email being sent, it is a thing that represents the email being sent. When you invoke it, it will send it.

In that way, you can manipulate it in a way that you can’t manipulate an email being sent normally. You can manipulate, let’s say, a Java method that will send the email. You can talk about that more abstractly. The way you tell if something is an action is it matters when you invoke it or how many times or both.

A good example is sending an email. It’s a very good example. If I send zero emails, it’s different from sending one email. The effect on the world is very different. It’s also different if I send two emails or send three or a million emails.

All of those things are going to have much different effects on the world. It matters when I send it. If I send the email now, it’s different from sending it in two weeks. I can’t change that. That’s part of the way the action works.

We’ll get to this later, but some actions, doesn’t matter when you call it, but it matters how many times you call it. Some actions, it matters when you call it, but it doesn’t matter how many times you call it.

There’s ways to compartmentalize these actions. Those are the three things. Data, calculations, and actions. They are the principal domains, I’m calling them. I don’t know if that’s a good word, but for now, domains.

That’s the principle domains of functional programming and doing functional programming, programming in a functional way, means approaching a problem with these three domains in mind.

As an object-oriented programmer would look at the problem and say, “Where are my objects? What are my messages? What objects know about what other objects, etc.,” a functional programmer says, “Where’s the data? What data can I get from events happening in the world and how do I calculate those things? Then, what actions does the system need to take?”

There’s more. There’s a lot more. Hence, I’m writing a book. It’s not going to be as easy [laughs] as just listing this stuff like this. The other thing about functional programming is that everything is first class.

When I say everything, there’s only three types of things. There’s data, calculations, and actions. The reason I’m staying away from using the term function is because in industry, it’s a feature of languages.

I’m trying to avoid talking about features because functional programming is not about features, it’s about this mindset. If you start talking about features, like I need functions, then you think, “Does something like Java have real functions?”

I’m trying to avoid all things that are tied up in the notion of features. You do need certain features to be able to do functional programming.

The real feature you need is that everything has to be first class. By first class, I mean, you have to be able to pass all three types of things as arguments, or return them as return values to your functions, your subroutines, or whatever feature you have.

You have to be able to get a handle on them somehow, some kind of handle on them, first class, to be able to hold them, because the principal way we write programs in functional programming is by composing these things. We’ll talk about composition in a minute.

Without being able to have first-class actions and calculations…Usually, data is first class. I’m just going to ignore that. Without having to have them as first-class things in your language, you can’t do functional programming.

Often, you can get around limitations. If you’re doing JavaScript, your data…That’s easy. It’s your numbers. It’s your strings. It’s your objects and your rates. You don’t have much more than that. Your Booleans, that’s it.

That’s your data. How do you do calculations? In JavaScript, you have to write functions. You have to ensure that they are pure. “Ensure” meaning trust yourself that you’ll write them pure, because there is no type checker or anything to help you. There is no static analysis that does that.

You write a pure function. That can be a calculation. Your actions are your impure functions, all the other functions that do it. As a function, you can be first class.

There are things in JavaScript that are not first class that you need to be first class. For instance, the plus operator, addition, and all the mathematical operators like that, the times, divide, minus, those are not first class.

You cannot pass plus to another function. You can wrap up the plus in a function that takes two-hour units, however you want to do it. It now becomes a function called “plus,” P-L-U-S, spelled out, that you can use instead of the arithmetic operator plus that is not first class.

Similarly, in a language like Java, you can wrap something up as an object with a method. You can work around the parts of the language that are not first class. That lets you do functional programming in those languages.

Typically, in a functional language, all of that is taken care of for you. Everything is first class by default. You don’t have to worry about that. I say “everything.” All of the three types of things.

Some languages might provide something else. I’m thinking type systems. In Pascal, the types are not exactly first class. They are a different class and different level than all the values.

All your data are values. You have a bunch of types, different built-in types. You can write your own types. All that is data.

All your functions are pure by default. That really helps. You just say “functions” in Pascal. You don’t have to say “pure functions.”

You have your actions. That’s the I/O type. There’s a special type that is just for actions, which is really nice. Pascal provides just what you need for that triple separation there.

In Clojure, which is what I write in, you have the data. It provides a lot of data structures and types that you would want to use.

Just like in JavaScript, you have to separate out by hand, in your mind, what are the pure functions and what are the impure functions. The pure functions are the calculations. The impure functions are the actions.

Clojure programmers get quite good at doing that. Clojure programmers are comfortable with that lack of compiler help on that front. It’s entirely possible. My point is that it is entirely possible to not have help from the language separating out those actions from the calculations. It’s certainly helpful to have that.

Sometimes, I want it. I’ll tell you that.

I said I was going to talk about composition. We have these three domains. You might think at this point that it’s quite obvious, that these domains obviously make sense.

I would say that that’s not the case for other paradigms. People do not think in these terms in other paradigms.

In object-oriented programming, for instance, which we’ve already gone into, they’re not thinking about whether a message pass is an effect or if it’s pure or something like that. There’s no easy mapping between the three.

I’m not saying it’s incompatible. I’m saying that the way you cut things up…The two views cannot be reconciled with each other. If I do an object-oriented analysis, I cannot transform that into a functional programming analysis. I can’t. There’s no way to do that.

I can do both analyses of the same problem and have two perspectives, which will help. By having multiple perspectives, I can now see more about the problem and probably solve it better. I can’t do that isomorphism. I can’t do that simple transformation between the two.

They’re not incompatible in that I can do both on the same problem. Both will help me solve the problem and arrive at a better solution, but one might not inform the other, because they’re totally different perspectives on the same problem.

I hope that it being obvious is more a product of it being super clear. Also, I want to say, even if it is obvious and everyone already knows this, no one has written it down. I’m going to write it down in a book. That’s all I have to say about that.

The next thing I want to talk about is the three domains. I feel like when you do one of these theories like this, where you try to build a coherent model, it’s easy to draw some lines, some boxes, and say, “This is where everything goes.”

Have you really captured something by giving a couple of rules for what goes in which bucket? I feel like it would be justified to come up with some evidence that these things make sense, that each domain is coherent in itself.

What I want to say is that you can actually stay in a domain. There are operations that will take data, two pieces of data, compose them, and give you a third piece of data.

What those two data can’t do is give you an action. You could make up an action for those pieces of data, but you can stay in that domain. You can have data that turns into more data, that transforms into different data, that gets added to other data. You’re just always in data. Data, data, data.

You can do the same for calculations. I can take a function. I can compose it with another function. I can do the complement of that function. I can transform it into another function.

As long as I’m just doing functions, I can stay in this arena of functions, calculations. There is a coherency to this division. It’s borne out also by languages like Pascal that have this strong division. There’s the data and all the data types. There is the function types, all the different…It’s polymorphic, but these are functions. There is the I/O, which is the action. It’s a separate thing, Pascal rules.

The same goes with action. I can take two actions. I can compose them. I can reverse them. I can run them in parallel. I can add another action. You can just stay in this domain of actions.

One rule when doing functional programming that you’ll quickly learn is that you want to do as little work as possible in actions. This is the source of a lot of the bad definitions of functional program.

When I say bad, meaning, they’re technically correct if you already understand functional programming and you can squint and say “Yeah. I understand what you’re trying to say.” He or she understands what they’re trying to say. “I got it.”

Avoid side effects. “OK. I see what you mean.” If you can do it in a function instead of an I/O. That makes sense to a functional program but it’s not a good definition and it doesn’t help someone who doesn’t already know…learn it.

What a lot of these bad definitions say is avoid side effects or functional programming is doing your best to describe your problem in terms of pure functions. You notice there’s always this focus on the functions and they forget about the data, they forget about the actions.

Why is that? It turns out that when you diagram it, actions are the universal thing. Our machines are based on touring machine and the touring machine is actually…All it does is actions. It moves the tape back and forth. It reads and writes to the tape.

Everything is actions. The fact that you get a calculation out of the end is the mystery of computation. It’s what he was trying to get at — touring was trying to get at. It’s a cool thing that you can do some actions in the world and you’ve calculated it. You solved the problem.

It’s what allows us to think and solve problems through thinking, that our brains are sending signals. All these actions are happening, these timely things. It’s all timely. If the thing fired tomorrow — my brain fired tomorrow, I would have a different thought. It would be to late or it would be the wrong thought at the time and I wouldn’t solve the problem that I’m solving, etc.

It’s all timely so it’s actions. But we get an answer out at the end which is really cool. When a procedural programmers like, “I can’t program without side effects. I need it.” They’re right. You do need effect. We do need to send that email. We do need to write to the disc. We do need to send a message over the network. We need to do those things.

Actions are universal. We know we can represent functions in terms of actions. We also know to [inaudible 34:14] the calculus that we can represent data in terms of functions. I don’t want to go in to that but with pure functions — I don’t want to go [inaudible 34:25] the calculus part — you can represent any data value.

It’s totally feasible. Actually, data is a subset of functions — a subset of calculations — and calculations are a subset of…running out of battery. Calculations are subset of actions but functional programmers appreciate the value of moving as much of your code down that hierarchy as possible.

As much as possible into data. If you can’t get in to data try to get in to calculations and when it can’t be calculation, you leave it as actions. I’m going to stop now. It’s been 35 minutes. I’m getting tired. There’s more to talk about. I’m getting excited because there’s a cool stuff.

Subscribe because I’m going to keep talking about this. I’m going to be using this. I’m going to transcribe it and use it as part of my book. I’ll probably post it to my blog and everything. Keep listening. Subscribe, like, and check out the book when it comes out.

The post A Theory of Functional Programming 0001 appeared first on LispCast.

13 Mar 03:17

870 East 8th Avenue

by ChangingCity

This is an affordable rental building that’s already been rezoned, and is now submitted for its Development Permit.

Called ‘Mi Casa’, The Red Door Housing Society currently have a 22 unit 1986 building here, on three floors. This is a 51 unit replacement on seven floors, designed by DYS. Over half the units will be family sized – 2-bed or more (7 2-bed and 24 3-bed).

13 Mar 03:17

Writers: say these words before every interview you conduct

by Josh Bernoff

You’ve lined up some time with a smart person. You’re about to interview them on the phone or in person, and you’re eager to get started. So after the small talk is done, you ask the first question. You’ve made a mistake. There’s something you’d better say first. And based on the tears and rending … Continued

The post Writers: say these words before every interview you conduct appeared first on without bullshit.

13 Mar 03:17

The Best Gear for a Roadside Emergency

by Kit Dillon
The Best Gear for a Roadside Emergency

A breakdown or a flat tire can happen to anyone at any time, and what you have in your car can make the difference between getting back on the road quickly and enduring a long, trying, even dangerous ordeal by the side of the road. We spent more than 60 hours researching emergency gear and common roadside problems, and we talked with safety experts and mechanics to get their advice. The result is this guide to the best items to keep in your vehicle for a roadside emergency. Whether the problem is a flat tire, a dead battery, or something that you can temporarily patch with duct tape, here are the things you shouldn’t leave home without.

13 Mar 03:16

How did US cities become so segregated?

by michaelkluckner

Below are excerpts from a review-essay in the New York Review of Books about a very disturbing new book called The Color of Law: A Forgotten History of How Our Government Segregated America by Richard Rothstein (Liveright, 345 pp., $27.95). The article by Jason DeParle is behind a paywall. I have highlighted some key sentences.


‘In The Color of Law, Richard Rothstein writes: “Residential segregation was created by state action,” he writes, not merely by amorphous “societal” influences. While private discrimination also deserves some share of the blame, Rothstein shows that “racially explicit policies of federal, state, and local governments…segregated every metropolitan area in the United States.”

‘…Government agencies used public housing to clear mixed neighborhoods and create segregated ones. Governments built highways as buffers to keep the races apart. They used federal mortgage insurance to usher in an era of suburbanization on the condition that developers keep blacks out...

‘The demand for segregation was made plain in workaday documents like the Federal Housing Administration’s Underwriting Manual, which specified that loans should be made in neighborhoods that “continue to be occupied by the same social and racial classes” but not in those vulnerable to the influx of “inharmonious racial groups.” A New Deal agency, the Home Owners’ Loan Corporation, drew color-coded maps with neighborhoods occupied by whites shaded green and approved for loans and black areas marked red and denied credit—the original “redlining.”

‘…The FHA financed Levittown, the emblem of postwar suburbanization, on the condition that none of its 17,500 homes be sold to blacks. The policies on black and white were spelled out in black and white.

‘…De jure segregation is long gone from the books, but its significance is more than historical. The conditions it created endure. American cities remain highly segregated. Schools are highly unequal. Huge gaps in wealth persist between blacks and whites, largely driven by differences in home equity.

‘Among the government’s tools for imposing segregation, few were as powerful as public housing, which both reinforced color lines and drew them where they hadn’t existed. Public housing typically conjures high-rise black ghettos. But it started during the Depression mostly to help working-class whites. The first agency to build public housing was the Public Works Administration, which was launched in 1933…

‘Starting during the New Deal and accelerating in the postwar years, the government transformed American life with a campaign to promote homeownership and suburbanization. But the sale of the American Dream explicitly excluded blacks.
The FHA didn’t segregate America just one loan at a time. By underwriting mass developments, Rothstein writes, it created “entire subdivisions, in many cases entire suburbs, as racially exclusive white suburbs.” None was more celebrated than Levittown, an ingenious solution to the postwar housing shortage—thousands of affordable, mass-produced homes offered to veterans with no down payment. But only the government’s promise to insure the mortgages allowed William Levitt to secure the construction loans. “We are 100 percent dependent on Government,” he said. Among the FHA’s conditions, in Levittown and other mass projects, was that no homes be sold to blacks …

‘Blacks have about 60 percent of the family income of whites, but less than 10 percent of the wealth—a huge gap and one that impedes advancement. Nest eggs finance education; they tame emergencies…

‘The Color of Law ends at the Nixon administration. A lot has changed since then. The growth of the black middle class and better (if not great) fair housing enforcement has reduced segregation, although it remains high. A standard segregation measure, the “dissimilarity index,” peaked in 1970 at 79 (meaning that 79 percent of blacks in a typical metro area would need to move to achieve an even distribution). By 2010 the figure had fallen to 59. Cities are divided in new ethnic and economic ways. Latinos outnumber blacks, and segregation by income has soared—largely from rich families flocking to rich neighborhoods. The changing landscape affects access to opportunity in ways still not fully understood.’

13 Mar 03:16

It is funny or is it sad?

by Volker Weber

There is a single photo and nothing else. And this is what the usual suspects make of it:

I will stop right there. So, yes, this is sad. No information, zero research, just some added fluff. And that is where you get your news.

When people ask me about stuff that may or may not happen in the future, I just tell them I read the same rumors they read. I just don't talk about them.

All those sites can now update their story btw. Evan has posted again:

13 Mar 03:16

Why you're losing the battle for high-quality software

Every day you go to work and you have to fight. Your boss wants to deliver features as fast as possible, and so you have to either argue for best practice, or work extra hours to do things the right way.

You need to fight for readable and maintainable code. And you need to fight for reusable code. And you need to fight for tests.

And you fight and you fight and you fight, and you keep on losing.

It doesn’t have to be this way. Software development doesn’t have to be a fight. Strange as it may seem, in this game the only winning move is not to play.

Instead of playing “Let’s Write High-Quality Software”, there’s a different and better game you can play: “Let’s Solve The Problem”.

Avoid false dichotomies

The problem with the game of High-Quality Software is that it’s based on a dichotomy, with only two options: low-quality and high-quality. I started this article with another dichotomy: arguing with your boss vs. working longer. And a lot of technical discussions quickly devolves into dichotomies, e.g.:

  • Shipping features vs. fixing technical debt.
  • Testing your code vs. coding quickly.

Dichotomies are tempting, and perhaps even built-in to the way we understand the world: there’s a left hand and a right hand, a wrong way and a right way. But there’s nothing inherently superior in just having two choices. In fact, all it’s doing is making you a worse engineer, because you’re focusing on arguing instead of focusing on solving the problem.

To combat this tendency, Gerald Weinberg suggests the Rule of Three: always consider at least three solutions to any problem. Let’s start with our first dichotomy: arguing with your boss vs. working longer hours to do things the right way. If there’s a third choice, what might it be?

Stop arguing, start listening

When your boss or colleagues argue for a specific design, instead of telling them why they’re wrong, listen to their reasons. Behind every design proposal is a set of goals, motivations, presumed constraints: those are the things you need to address. If you criticize their proposal based on goals they don’t care about, you’re not going to get anywhere.

So first, listen.

Once you understand why they want what they want:

  1. Consider more than the initial two choices, their proposal and your initial reaction.
  2. Try to find a solution that addresses both your goals.
  3. Explain you thinking in ways that are relevant to their goals, not just yours.

Example scenario: testing

Your boss proposes writing code without unit tests. Why? Because they want customers to be happy. Since customers have been complaining about how long it takes for new features to be delivered, your boss believes this is one way to speed up delivery.

You want to write unit tests. Why? You want code to be maintainable over time.

Merely arguing for unit tests isn’t going to address your boss’ concerns. But if you look past the initial false dichotomy, there are other solutions to consider. For example:

  • Investigate why customers aren’t getting features quickly. Perhaps the bottleneck isn’t due to how fast you’re coding, but elsewhere in the delivery process (you don’t do frequent releases, customers need to upgrade manually… there could be many reasons). Fix that, and you will have time to write unit tests and ship quickly.
  • Figure out places where bugs would be costly to customers, explain those costs to your boss, and propose unit testing only that part of the code.
  • Investigate customer needs in more detail. Perhaps existing customers are complaining about feature delivery, but you’re also losing many customers due to bugs.
  • Suggest using tools that will speed up test writing enough that the additional time won’t bother your boss.
  • Suggest limiting unit test writing to a predetermined amount of time: “this will only add 4 hours to a one week project”.

No doubt there are many more potential solutions to the standoff.

There’s always another solution

There is almost never a single correct solution to any problem, nor a single best solution. You can solve problems by relaxing unnecessary constraints, by focusing on different levels of the situation (organization, process, code), by redefining the problem, and more. Worst comes to worst, you can address many problems by switching jobs; different people like different environments, after all.

So don’t try to win technical arguments, and in fact, don’t treat them as arguments at all. When you disagree with someone, take the time to listen, and then try to come up with a solution that address their concerns and yours. And if your first idea doesn’t do that… it’s time to come up with a third, and fourth, and fifth solution.

You shouldn't have to work evenings or weekends to succeed as a software engineer. Take control of your time and your career by reading The Programmer's Guide to a Sane Workweek.

13 Mar 03:15

Marketing Human

I’ve got some career-change news that might sound weird at first but that I promise will make sense in a minute: I’m quite happily still at Omni, but I’m switching from engineering over to marketing.

I am the new Marketing Human, a new member of the Design department.

If you think of me as an engineer, you’re not wrong — but the secret, hidden in plain sight, is that throughout my career I’ve done a whole bunch of design and things that could be called marketing.

Blogging could be called marketing, after all, and today I wrote my first post for the Omni blog.

(For whatever freakish reason, writing has never been a chore to me — I love it. Sometimes I think I only make apps just to have something to write about.)

But the new job isn’t just blogging — I’m also doing a podcast. I’ll help figure out the marketing points behind the release of OmniFocus 3. I’ll write some ads. I’ll create new websites. I don’t even know what all the different things are yet.

I’ll also help with defining future versions of our apps, which is super-exciting for me. This keeps me close to the process of app-making — at a different level, sure, but at a place where I’m quite happy, since I’ve done this kind of work with Frontier, NetNewsWire, MarsEdit, Glassboard, Vesper, and now with Evergreen and back to Frontier.

In other words, I’m using the skills I’ve learned as an indie and sort-of-indie over decades — just not the skills I write about here that often.

Make sense? Cool. :)

* * *

For now, until OmniFocus 3 ships, I’m splitting my time: doing this and continuing to work directly on the Mac app. After that I’ll be a full-time Marketing Human.

If you want to get in touch with me, you can email me at marketing at The Omni Group’s domain name.

* * *

One interesting part of this — at least for me — is that, for the first time in decades, I’ll be back to writing code purely for fun. I’ll continue to work on Evergreen and other apps on nights and weekends, for sure. And I’ll keep writing about code on this blog.

But engineering will just be my hobby. I love that.

13 Mar 03:14

“Mr Trump has given away the prize of a summit without getting anything in return”

by Andrea

The Economist: Proceed with caution: Donald Trump’s gift for Kim Jong Un.. “A premature summit will do more for the North Korean leader than for America’s president.”

“Mr Trump no doubt believes that it is his toughness alone that has brought Mr Kim to the negotiating table and that, once there, his unique force of personality and his genius for the deal will bully and coax Mr Kim into giving up his nukes.

In fact hell will freeze over before Mr Kim voluntarily surrenders a capability that his father and grandfather believed would be the ultimate guarantor of their dynasty’s survival and which has taken decades and huge sacrifices to construct.


The risk, however, is that an inadequately prepared summit between these leaders will fall into one of two traps. The first is that Mr Kim succeeds in charming the impetuous and inexperienced Mr Trump to such an extent that he makes foolish concessions that his opposite number has no intention of earning. The second is that, if it dawns on Mr Trump that he has been played by Mr Kim and made to look naive, he may react like a jilted, misled suitor. The motto for talks with North Korea should be “proceed with caution”. A premature summit, by contrast, is an ill-considered roll of the dice.”

13 Mar 03:14

The Best Multiport USB Wall Charger

by Nick Guy
The Best Multiport USB Wall Charger

After surveying more than 1,100 Wirecutter readers and using six iPads to test 19 top models, we can safely say that Anker’s PowerPort 4 is the best USB wall charger for most people. It costs a little more than Apple’s single-port 12W USB Power Adapter, but the Anker model can push out more than three times as much power and charge four devices at once. In fact, it can simultaneously charge three full-size iPads at full speed while also charging a smartphone. Surveyed readers said they preferred chargers that plug directly into an outlet, and this is the most powerful one we tested to do so. Additionally, Anker’s charger allows connected devices to draw the advertised amount of power; some of the competition doesn’t.

13 Mar 03:14

The Best Checked Luggage

by Kit Dillon
The Best Checked Luggage

After researching 26 pieces of checked luggage and testing five finalists, we can say that the Travelpro Platinum Magna 2 25-Inch Expandable Spinner Suiter is the best checked luggage for most travelers. We put it through its paces on a three-week trip to New Zealand and found that it easily packs two weeks’ worth of clothes into the maximum-allowed checked-bag dimensions for most airlines. It also looks and feels fantastic, and it comes with a lifetime warranty against defects and airline damage.

13 Mar 03:13

The West End Syndrome

by Ken Ohrn

Here are some practical, on-the-ground thoughts.

Yesterday, we dusted off the Toyota for a trip to White Rock on family business.  It wouldn’t start.  Dead as a doornail.  Called BCAA, who arrived within 15 minutes.

Dead battery. No surprise.  But now comes the surprise.

“How often do you drive it ?”, asks the BCAA tech.

“Not much”, I say, “About 1,000 km a year.”

“OK, your battery died from low usage”, he says, “They self-discharge, and when they get low, this can alter battery chemistry too”.

“We see lots of this in the West End.  There’s so much within walking distance, and so many choices to get around.  Walk, transit, bike — car usage drops and dead batteries are common”.  “We’re seeing more of it all over Vancouver, too”, chimes in the BCAA tech’s co-worker.

“What you can do is this:  drive it 30-45 minutes a week, or put in a trickle-charger, or else dump it and join a car-share program.”  We chat for a few minutes.

Maybe the talk was a slick promo for BCAA’s EVO (I doubt it), but the techs had both clearly researched Car2Go as well.  They knew the ins and outs.

While we chatted, the BCAA techs checked the battery carefully and started the car with their booster; we idled it for 45 minutes, then made it out to White Rock and back without incident.

I think its’ time for us to consider a move away from car ownership and towards something else.  All because of the “West End Syndrome”.  All the transportation choices we use have reduced car dependency to the point that it’s detrimental to the car’s operation. Who knew?

Anyone interested in a Toyota Yaris? Very low mileage.

13 Mar 03:13

Design report #4: symbiotic applications

by François Téchené

Purism’s long-term goal has always been to make computers that are as convenient as they are respectful to the people that use them. The Librem products are an ethical platform and therefore should not be discriminating anyone; instead, they are meant to be inclusive of all human beings. In other words, everyone should find in their Librem a convenient and secure platform for their daily usage, and therefore accessibility should also be an important part of our ethical design roadmap.

We are aware that the road is long and that the Librem 5 is a challenging project, so we need some design foundations that favor convenience as much as it can lighten the development effort to get there.

Apps on existing platforms compete for your attention

With today’s smartphones, you usually get a minimal set of functionalities out of the box and go through installing diverse applications for your different needs. Usually those applications are proprietary and are designed around their own unethical business model; hence they compete against each other for your attention and have their own set of features to be used within the scope of the application only.

This can lead to a lot of redundancy and confusion in terms of functionality. A particularly blatant case is communication applications, where we see each application handling their own contacts logic, their own locked down and isolated protocol, and where a ton of applications will implement the same things for the same purpose (making calls and sending messages), with the focus typically being the flashiest application to attract and retain the most users. Let’s illustrate how ridiculous this is, conceptually:

Envisioning a harmonious app ecosystem

In the real, natural world, sustainable ecosystems are made of biological entities interacting together in harmony or symbiosis. This is what makes life possible over the long term.

The digital world of Free/Libre & open-source software, particularly in operating systems, is highly similar to the natural ecosystem. In this world, there is no such thing as isolating off or protecting a technology if you want to be part of the system. Business models and interests are completely different from the world of proprietary software. Best practices favor reuse and integration, improving user experience, reducing technical debt, increasing software quality and lowering development costs, with a “collaborative” system where different applications from different authors are made to work together.

The Purpose is the Feature

The idea behind the PureOS design guidelines is to replace the concept of standalone, independent and feature-competing applications with a concept of small, single-purpose, cross-integrated applications—that would interact between each other to provide a unified experience across the device (and beyond). Those small applications can be seen as “features” of the system. 1 purpose = 1 feature.

Therefore, the Human Interface Guidelines’ main principles regarding “features” development would be :

  • Don’t see applications as independent programs but as “features” that have a single purpose and that interact with each other.
  • One “feature” application is guarantor of the security of the data flow going through it. Only make your “feature” application share data with “trusted” features or networks and in a secure way.
  • Make a “feature” application focused on one single purpose (an email client is not an address book nor a calendar)
  • Make your “feature” application rely on existing features (an email client should rely on the existing address book and the existing calendar “features”)
  • Avoid redundancy. Don’t try to reinvent existing applications. Improve them instead.
  • Setup your “feature” application by default. Make it work out of the box.


On the user’s side, the features of the device are easy to spot as they are made available through single-purpose applications displaying an obvious name. For example, the “Call” application is made to make calls, no matter the technology used behind that (e.g. Matrix, phone, voip). The “Messaging” application is used to send instant messages, no matter the technology used behind that (e.g. Matrix, SMS, XMPP). The “Contacts” application is used to manipulate and store the contacts information to be used by the “Call” and “Messaging” applications.

On the developer’s side, applications are as simple as they can be, the use cases are limited, all the logic that is not related to the main purpose of the application is delegated to other programs, which makes the application easier to design, implement and maintain.

Data belongs to the user, not the application

In this collaborative application system, where applications can interact with each other in harmony, data is not limited to the application’s logic anymore. Applications are acting as services, or “data providers”, to each other. Data can flow from one application to the other, from one device to another, from one network to another.

This concept implies the separation between data and functionality where the data belongs to the user only. The application that manipulates it is guarantor of its integrity and security.

Please note: these are guidelines, representing an overall vision. Guidelines are there simply as a way to guide application design, and to suggest best practices for application developers in general. Given that a GNU+Linux distribution like PureOS is an open platform where thousands of applications are available independently (as long as they are freedom-respecting!), you are not obligated to conform to these design guidelines to be able to distribute your application through Debian and PureOS. Furthermore, these design plans represent a broad long-term plan, not necessarily a guarantee of what will be happening “immediately” in the first released version of the platform that ships, your mileage may vary, etc.

13 Mar 03:13

The New 10th Avenue — Taking Shape

by Ken Ohrn

The improvements for people on foot or on a bike are starting to take shape on 10th Avenue in Vancouver.  It’s going to be another good thing, it seems to me.

13 Mar 03:13

Apple HomePod vs Sonos :: Ein Erfahrungsbericht

by Volker Weber

turntable-2695220 640

Ein langjähriger Leser schreibt:

Dank Deiner Empfehlungen bin ich auch schon lange Sonos-Nutzer und Kunde bei Thomas Lang. Als solcher wollte ich Dir nur ganz kurz die Erfahrung schildern, die ich mit dem HomePod gemacht habe:

Wegen der „raving reviews“ rund um den Verkaufsstart hatte ich mir viel vom HomePod versprochen. Ich habe sowieso eine Apple Music-Subscription und die Unzulänglichkeiten von Siri waren mir ziemlich egal. Also auf einer Dienstreise nach London gleich in der ersten Woche den HomePod gekauft.

Schon nach 2 Tagen im Direktvergleich mit 2 Sonos Play:1 stand fest, dass der HomePod zurückgeht. Wie inzwischen schon vielfach geschrieben wurde, hat der HomePod einen ordentlichen Bass und die meisten Beats 1-Shows hören sich entsprechend gut an. Aber ansonsten klingt eigentlich nichts wirklich gut und definitiv schlechter als zwei Play:1s oder sogar nur ein vernünftig mit TruePlay getunter Play:1.

Als wirklich überzeugter Apple-Kunde mit sporadischen Einblicken in Apple-Projekte durch Bekannte, die in Cupertino arbeiten, bin ich tatsächlich völlig enttäuscht von diesem Produkt, das trotz verspätetem Launch noch lange nicht fertig ist. Am Ende haben sowohl der HomePod und die Play:1s das Haus verlassen und es sind 2 Ones eingezogen, weil ich durch Siri plötzlich doch Appetit auf Sprachsteuerung bekommen hatte.

Ich habe selbst noch keine Erfahrung, bin aber natürlich interessiert. Dauerhaft durchsetzen könnten sich die HomePods bei mir nicht. Sonos kann einfach viel mehr, auf was ich nicht verzichten will. Spotify, TuneIn Radio, Mixcloud, Soundcloud, 5+1 Surround Sound.

Die HomePods werden besser werden. So wie es die Sonos Player auch wurden. Und sie haben das Thema Klang wiederbelebt. Die Echos sind mir einfach zu schrottig.

13 Mar 03:13

Warum man so oft von Surface Pro liest

by Volker Weber

IMG 2535

Letztens hat mich ein Kommentator gefragt, warum ich so oft über Surface Pro schreibe. Die Antwort ist ganz einfach: Das ist der Computer, den ich am meisten benutze. Er ersetzt mir MacBook Pro und iPad Pro in einem Gerät. Ich kann damit sehr gut schreiben, mit Tastatur oder mit Stift. Das Surface Pro hat einen wunderbaren Bildschirm, ist leicht und klein, und es fasst sich gut an.

Was vielen gar nicht klar ist: Surface Pro ist billiger als ein völlig veraltetes MacBook Air, hat die vierfache Bildschirmauflösung, ist viel leichter und dünner. Selbst das viel teurere MacBook Pro kommt da nicht ran. Größe und Gewicht sind ohne (mit) Type Cover angegeben, das MacBook Air ist an der dicksten Stelle gemessen. Der Bildschirm des Surface Pro ist etwas kleiner (12.5 statt 13.3"), aber der Unterschied macht bei mir in der Praxis nichts aus.


Die Preise in dieser Tabelle sind beim Hersteller Microsoft und Apple abgeschrieben. Surface gibt es in der Regel deutlich günstiger und mit Type-Cover. Apple hat etwas stabilere Preise. Mein Surface Pro hat doppelt so viel Wupp wie hier angegeben: i7 Kaby Lake, 16 GB Memory, 512 GB Speicher. Ein MacBook Pro dieser Ausstattung kostet 2850 €.

13 Mar 03:11

How Canadian student newspapers are going digital


Audrey Carleton, J-Source, Mar 12, 2018


As a long-time former denizen of the student newspaper office I'm still interested in what they're up to, and these days (for the last few years, actually) they're moving to digital. It only makes sense. " Despite the historical legacy that comes with printing a newspaper, the fact remains that students, like most audiences, consume news differently than they did years ago, and it’s up to campus publications to meet these demands." Ah - but it was so exciting, and terrifying, to publish in print for the first time.

Web: [Direct Link] [This Post]
13 Mar 03:11

Who spreads fake news? On Twitter, humans are more likely culprits than bots, new study suggests


Matthew Braga, CBC News, Mar 12, 2018


Reports of this study on the spread of fake news are all over the media today. There are several major threads (and it's interesting to see which news outlet points to which). First, humans, rather than robots, are the ones that really spready fake news. Second, fake news spreads much more quickly than real news. Third, it reaches more people than real news. Why? " We found that false news was more novel than true news, which suggests that people were more likely to share novel information. Whereas false stories inspired fear, disgust, and surprise in replies, true stories inspired anticipation, sadness, joy, and trust." More: New Scientist, Vox, Gizmodo, The Atlantic, USA Today, BBC, Reuters.

Web: [Direct Link] [This Post]
13 Mar 03:11

Crazy Microsoft Is The Best Microsoft


Mark Wilson, Co.Design, Mar 13, 2018


Back in 2010 EA released a hockey game for the Nintendo Wii that featured an actual hockey stick as a controller. It was the greatest thing ever, and I spent hours - days! - standing in the dining room developing my career from Peewee to Pro. They didn't support it the following year and I lost interest. But it was a glimpse into the future, which may soon arrive with these Microsoft controllers. Because it's the U.S. they're really focused on guns, but the haptic musical instruments and the cane begin to show the true potential of modern interfaces, especially when combined with virtual reality. Maybe one day I'll be able to play haptic hockey again.

Web: [Direct Link] [This Post]
13 Mar 02:40

SotD: Atomic

Oh… your hair is beautiful  — well, that lyric divides people. I’ve read high-falutin’ rock critics slam its superficiality, embedded in a track that hardly has words anyhow, and certainly none that make sense. But you know, every time she sings that phrase, I melt. And love the whole song.

Back in the day when the band had hits on the radio I liked every one of them, and when they didn’t any more, I bought The Best of Blondie and man, I’m not sure there’s ever been a pop recording with more end-to-end concentrated excellence. I noticed when my kids were young, I’d put it on and every time, they’d both start dancing right away.

Atomic by Blondie

The songs are great, the arrangements are razor-sharp, and then Debbie Harry, on top of being a fine singer, has in certain periods been the hippest, coolest, most fashionable human being on the planet. I saw a show in the Nineties when she was touring under her own name; and got pretty close to the stage. She was wearing this dull-silver one-piece dress with a fine diamond pattern on it, neither tight nor loose, matching shoes, and when the spotlight caught her, there was just absolutely no looking away; I don’t know how that “star quality” thing works, but I’m pretty sure I’ve never been a room with anyone who had more. What’s remarkable about it is, she carries it off without even being much of a dancer.

Anyhow, I could have picked a half-dozen songs off the Best Of to be today’s song, and made a strong case for every one of them. My personal favorite is Call Me, but there’s a dark side; I read an interview with one of the band members, who was bitter: “You got to understand that Blondie wasn’t a band, it was Debbie and Chris Stein’s project, they went off in the studio and made Call Me for the American Gigolo sound-track, and none of us ever got to play a note, and then the band broke up, so I never played it in concert either.”

This is part of the Song of the Day series (background).


Spotify playlist. This tune on Amazon, Spotify, iTunes. Now, as for live video, here’s Blondie in 1979, super-young and in fine form. Now snap forward thirty-five years to Glastonbury 2014 - give Debbie a verse to warm up her pipes, then she’s great. But what’s wonderful is the this shot at 4:17 of the side of the stage where, watching sixty-something Debbie tear it up, are what look like a thirty-something mom and her pre-teen daughter, dancing hard together and smiling wide. Their hair is beautiful. Put another dime in the jukebox baby, I so love rock-n-roll.

13 Mar 02:39

Samsung Galaxy Note 9 Will Not Feature an Under-Display Fingerprint Scanner

by Rajesh Pandey
The lack of an under-display fingerprint scanner on the Galaxy S9 disappointed many, especially after Vivo partnered with Qualcomm to show off a phone with an under-display fingerprint scanner at CES 2018. Nonetheless, reports claimed that Samsung would be debuting the technology on the Galaxy Note 9 later in the year. Continue reading →