Shared posts

01 Apr 05:13

Multi-Mode Traveler Alert

by Ken Ohrn

TransLink has some good news for multimodal travelers in Metro Vancouver about the Metrotown station.

Exciting news for our multi-modal commuters—bikes are now allowed at Metrotown Station! {Ed:  plus a new bike parkade coming soon].

Recently, the rebuilt east stationhouse at Metrotown Station opened with four new escalators, further improving passenger flow and access at the station. With all three stationhouses now open (west opened in July 2017 and centre opened in March 2017), we have more capacity than ever before at the station!

As a reminder, customers with bikes will need to enter and exit through the centre stationhouse where elevators are available for use. The east and west stationhouses have escalators only and bikes are not permitted due to safety concerns. Please be mindful of the bicycle restrictions in place that affect when and how many bikes are allowed on SkyTrain during varying times of day.

01 Apr 05:13

“Gobsmackingly uninformed.”

by Andrea

Washington Post: ‘Mr. Santorum, CPR doesn’t work if all the blood is on the ground.’.

““How about kids, instead of looking to someone else to solve their problem, do something about maybe taking CPR classes or trying to deal with situations where there is a violent shooter and you can actually respond to that?” Santorum said. […]
The comments drew ridicule from physicians, among others, who assured Santorum that learning CPR wouldn’t save victims of a mass shooting. […]

Heather Sher, a Florida-based radiologist who examined the gunshot wounds of at least one Parkland, Fla., shooting victim on the day of the shooting, called Santorum’s comments “gobsmackingly uninformed.”

“CPR is not effective with catastrophic bleeding,” she said on Twitter. “Speechless! Learn CPR! Everyone should for cardiopulmonary arrest. But for gunshot wounds, a) attend stop the bleeding course by trauma surgeons or b) pass #gunreform (helpful hint: option b is the better option.)””

Link via MetaFilter.

01 Apr 05:13

Annoying Graphs: Did the Facebook Container Add-on Result in More New Firefox Profiles?

by chuttenc

Yesterday, Mozilla was in the news again for releasing a Firefox add-on called Facebook Container. The work of (amongst others) :groovecoder, :pdol, :pdehaan, :rfeeley, :tanvi, and :jkt, Facebook Container puts Facebook in a little box and doesn’t let it see what else you do on the web.

You can try it out right now if you’d like. It’s really just as simple as going to the Facebook Container page on addons.mozilla.org and clicking on the “+ Add to Firefox” button. From then on Facebook will only be able to track you with their cookies while you are actually visiting Facebook.

It’s easy-to-use, open source, and incredibly timely. So it quickly hit the usual nerdy corners of the web… but then it spread. Even Forbes picked it up. We started seeing incredible numbers of hits on the blogpost (I don’t have plots for that, sorry).

With all this positive press did we see any additional new Firefox users because of it?

Normally this is where I trot out the usual gimmick “Well, it depends on how you word the question.” “Additional” compared to what, exactly? Compared to the day before? The same day a week ago? A month ago?

In this case it really doesn’t depend. I can’t tell, no matter how I word the question. And this annoys me.

I mean, look at these graphs:

Here’s one showing the new-profile pings we receive each minute of some interesting days:c52dd445-e624-47aa-a44d-d5e758b56b04

Summer Time lining up with Daylight Saving Time means that different parts of the world were installing Firefox at different times of the day. The shapes of the curves don’t line up, making it impossible to compare between days.

So here’s one showing the number of new-profile pings we received each day this month:ebce02bb-1c78-4c52-9878-9a9e8d78e459

Yesterday’s numbers are low comparing to other Tuesdays these past four weeks, but look at how low Monday’s numbers are! Clearly this is some weird kinda week, making it impossible to compare between weeks.

So here’s one showing approximate Firefox client counts of last April:1d44c744-0267-4216-9371-5bf042ba47e7

This highlights a seasonal depression starting the week of April 10 similar to the one shown in the previous plot. This is expected since we’re in the weeks surrounding Easter… but why did I look at last April instead of last March? Easter changes its position relative to the civil calendar, making it impossible to compare between years.

So, did we see any additional new Firefox users thanks to all of the hard work put into Facebook Container?

¯\_(-.-)_/¯

:chutten

01 Apr 05:13

Resistance Is Futile

An interesting little article in The New York Times: Resistance Is Futile. To Change Habits, Try Replacement Instead.

"It turns out this experience has a name. It’s called the ironic process theory, and it almost guarantees that your efforts to change bad habits by resisting those habits will fail. Research shows that 'thought suppression has counterproductive effects on behaviors.' If you’ve ever desperately told yourself not to scratch that mosquito bite or buy another cactus on Amazon, I’m sure this comes as no surprise."

01 Apr 05:12

Comparing the 2018 iPad and iPad Pro

by Federico Viticci

In the wake of Apple's spring iPad and education event, I've received a lot of questions about how the base-model 2018 iPad fits in next to the 10.5-inch and second-generation 12.9-inch iPad Pro line — does giving Pencil support to the base-model iPad eliminate the need for a Pro-level iPad?

In short, no. But why? Here's how the two models compare, and why you'll probably want to stick with a Pro for more high-level work.

Great guide by iMore's Serenity Caldwell that covers all the key differences between the new 9.7" iPad and the iPad Pro line (including the first-generation models). I should call out two of them specifically: the first-gen Touch ID (it's worse than the second-gen not only because it's slightly slower, but because it fails more often), and the lack of three interactive apps at once when using Slide Over and Split View together.

As I noted yesterday, I think the new iPad, thanks to the A10 chip and Pencil, is a fantastic choice for users who want a solid iPad experience without the extra power of the Pro models. Arguably, True Tone, the Smart Connector, ProMotion, and a four-speaker system aren't absolute must-haves for someone who doesn't need the most powerful iPad experience; the Pencil is a natural complement to the iPad with a broader consumer appeal than other Pro-only features. It makes sense for the Pencil to trickle down into the iPad line.

→ Source: m.imore.com

01 Apr 05:12

Unlocking the Science of How Kids Think

files/images/ednext_XVIII_3_willingham_img01.jpg

Daniel Willingham, Education Next, Mar 31, 2018


Icon

I thought this was a pretty good article. I don't think that we've yet "unlocked the science of how kids think" but the way the article is set up allows us to set the overstatement aside and focus on how we think about some principles of learning in our day-to-day work. The context is set by looking at how we approach teacher training. For example, "teachers report that their education is overly theoretical and not of great utility." Willingham says "they are required to learn some basic principles of psychology as part of that education, but it is not clear that practicing teachers remember what they were taught." May or maybe not, but I would say that the key factor here is whether they believe what they were taught. They won't if someone simply tells them things (I certainly wouldn't). So the way to look at psychological principles is to look at their application, first in the training of teachers themselves, then in the wider classroom. 

Web: [Direct Link] [This Post]
01 Apr 05:12

Microsoft Education and Open Up Resources announce partnership to deliver top rated math curriculum

files/images/msed.JPG

Microsoft Education Blog, Mar 31, 2018


Icon

I don't whether the the curriculum is actually "top rated" or whether that's just marketing bile (I suspect the latter) but what's important here is that Microsoft is integrating "full-course OER curricula, standards-aligned, and provided for free to promote instructional equity" into its OneNote application. You have to use a custom OneNote Class Notebook to access and deliver the resources, which I was able to download for free. This is something that the smaller companies wrapping OER in proprietary technologies maybe didn't consider when they embarked on this business model: OER just becomes another product offered by Microsoft or Apple or Google (and when nobody else is offering them, they turn on the subscription wall).

Web: [Direct Link] [This Post]
01 Apr 05:12

Leaving Mozilla

Today is my last day at Mozilla as a paid employee. Seven and a half years at Mozilla has been a heck of ride. I feel lucky and honoured to have had such an awesome opportunity.

In terms projects I've gone from AMO, through the Firefox OS Marketplace, through Marketplace Payments, then back to AMO and WebExtensions. Those last couple of years, as we rebooted the add-ons, ecosystem was probably my proudest moment professionally.

But more importantly I've met so many great people here. I was so pleasantly surprised to find my journey at Mozilla produce so many good friends. These are smart, caring, dedicated professionals who make a difference to Mozilla, Firefox and the open web. I think Mozilla is in great hands and I'll miss every single one of them.

What's next? GitHub.

01 Apr 05:10

New VO Luggage Has Landed!

by noreply@blogger.com (VeloOrange)
by Igor

We are very pleased to announce that after over a year of designing, testing, physical submerging, re-designing, more testing, and finally production, our USA made luggage line has arrived.

The collaboration efforts between VO and Road Runner Bags of LA has been an absolute blast and we couldn't be happier with the quality and workmanship of these new offerings. We're also thrilled that each item is 100% vegan-friendly and available in four colors: Black, Burgundy, Navy Blue, and Teal.

So without further ado, let's jump right in.

Randonneur Handlebar Bag
This is our take on a traditional handlebar bag, but with lots of modern materials, modularity, and easy fitment. Jump over to the product page for the long copy, but here are the finer details:
  • Super abrasion resistant Cordura
  • Waterproof, truck-tarp liner in safety orange (so that you aren't rummaging through a black hole).
  • Clear map pocket with a waterproof zipper, perfect for your map, queue sheet, control card, energy bars, keys, wallet, etc...
  • Pleated front pocket with reflective strip
  • Velcro molle straps for accessories such as the Snapper Sack and Cell Phone Pocket
  • Pre-installed grommets to fit and work perfectly with our Randonneur Racks with Integrated Decaleurs and Campeur Front Rack. No need to drill holes or heat up a soldering iron.
  • Height: 22cm, Width: 27cm, Depth: 19.5cm, Weight: 736g
Snapper Sack and Cell Phone Pocket Accessories

Whether you take a compact camera or an SLR plus two lenses out on rides, it's nice to have your photo equipment quickly accessible for that "decisive moment". The Snapper Sack features a padded Cordura enclosure to keep your camera safe from jarring, while the combination snow collar and dust shield keeps debris out. 
The Cell Phone Pocket is sized to fit modern smart phones. It gobbles up the plus-sized cell phones with ease. It's also useful for snacks, a power brick, or anything else you may need to access quickly that's generally in the shape of a rectangle.
Both pouches connect to the Randonneur Handlebar Bag's molle straps via heavy-duty velcro straps, but can also be connected to the mesh of a basket or your backpack's straps. The Snapper Sack weighs 79g and the Cell Phone Pocket weighs 84g.


Sometimes the best bags are the simplest. Here is a ~29L, non-structured, durable, waterproof, roll top bag for your Porteur Rack. In addition to being great for commuting, it's also the perfect companion for touring. The bag also features a pleated front pocket with a reflective safety strip.
While it's designed for our Porteur Rack, it fits well within a Wald 1372 Basket, and will probably work with other large-platform'd racks. Weight is roughly 513g.


The Day Tripper Saddle Bag is the perfect mate for cyclo-tourists, randonneurs, roadies, and mountain bikers alike looking for a bit more capacity during an all-day ride. It's a great size for packing an extra layer, tools, wallet, keys, camera, film, and even a mini-pump.

The bag uses a combination of Cordura and rip-stop nylon for durability, simplicity, and expandability. Mega-Grip is featured on the touch points to keep the bag in place, while the rear has a molle strap for a blinkie and a reflective panel to keep you seen when sunlight is fading. Weight is 223g.

We're excited to offer this new line and are already working on some new designs. Happy riding!
01 Apr 05:10

Podcast: Cambie Report 2

by Ken Ohrn

Check this out on iTunes or Anchor.  Second in, hopefully, a long series on the Metro Vancouver political scene.  These podcasters are enjoying themselves, and are not totally serious, except that they pretty much are. You’ll enjoy it too.

My précis:

Cambie Reports 2 (42:40)

Mayoral Elections

Vision emerges, Lefty coalition may be out?, or is it posturing, since it’s early days and no nomination dates announced. Precedent exists for a lefty coalition. Might depend on a star candidate arriving on the scene. Who: Shauna Sylvester?

Greens: very popular, note School board success; hard to balance reach between high ambition (Mayor) & lower (council); but Greens are pulling no ugly baggage here; Pete Fry for council

NPA win is in the bag. Or is it. Coupar — great press on announcement, represents old guard of the NPA, has Affleck backing, plus other NPA establishment members; Chernen — knee-jerk reactionary, viaducts forever, with a terrible web site; and then Bremner (supply-side on housing). Note Adrian Crook’s taunt to “car bros”, the NPA’s bastion of supposed support (in a losing cause) for the last 10 years.

Metro Vancouver Region Board

Pension decision — $ 1100 per year for each year served
Pols need to be remunerated; we should pay for quality and diversity
Where is the CTF rage-baiting?
How do you become a member (appointed, not popular with panel)
Helps to avoid regional amalgamation (ref: Toronto)

Another Mayor Bites the Dust

Richard Walton — District of N Van
Note small town Mayors tend to stay in Mayor’s chair for a long time
To what extent did transit referendum damage Liberal & Mayors relationships? (great story)
Greg Moore (Port Coquitlam) — big sharp break with Prov Liberals
Lois Jackson — Delta (new mayor may help enable regional growth strategy, reduced car-dependency)

01 Apr 05:09

Income mobility for different groups

by Nathan Yau

Building on their previous visualization work on black boys dropping income levels in adulthood, The Upshot adds the option to change demographic groups. See income mobility for different races, genders, and income starting points.

Tags: demographics, income, Upshot

01 Apr 05:09

Riverside

by Rui Carmo
A different lunch break (tinged with some blue and a cold)
01 Apr 05:09

A Theory of Functional Programming 0003

by Eric Normand

Transcript

Eric Normand:  All right, this is my attempt at writing a book. If you haven’t joined me before, my name is Eric Normand. I’m writing a book called “A Theory of Functional Programming.” The industry needs a good definition of functional programming. No one has provided that yet, and so I’m trying to provide it.

You’re listening to me develop this idea. I’m going to try to turn this, what I say, into a transcript and use that transcript to put into a book that I’m writing. Welcome and here we go. Last time, I talked a lot about data. Remember there are three domains. There’s data, calculations, and actions.

The data tradition goes back to the early days of writing, and functional programming largely tries to learn lessons from those instead of doing what object-oriented programming tries to do, which is attach code to the data, so the data is inert. It just is what it is.

The other domain is calculations. If you come from a more academic background, or you’re thinking more in terms of features, you might call these functions, or pure functions if you want to be very specific. They’re the mathematical notion of functions, which is a relationship between the domain and the range.

Now, as functions they are timeless. Calculations are timeless. Meaning that it doesn’t matter when you run them. You’re going to get the same answer. No one else cares that you ran them. No one will know because it won’t have any effect on the world. It also doesn’t matter how many times you run them, you’ll always get the same answer.

These are mathematical functions. If you were going to implement calculations, most languages would provide you with first class functions, and that’s what you would prefer. Now, some languages don’t have those, namely Java or…I don’t know if C# does, but the object-oriented languages often don’t have a notion of a function that’s detached from a class or from an object.

You’d have to use whatever facilities they give to you because it needs to be first class. Remember that. You might have a singleton instance or something that represents that calculation and some protocol, you have an invoke method on that instance.

Why do we care so much about calculations? This fact that they are code, they run so they can do work, but they’re timeless. That gives us a lot of flexibility. The fact that we can run them zero, one, or more times and always get the same answer is great. I’m just going to go down my list. One thing that you can do is align them with mathematics.

They’re already mathematical notions of functions, but you could have a really complex function that no mathematician would ever write. You could just write a big function that’s got multiple nested if statements — and we’ve all written functions like that — and it’s very hard to analyze. Very hard as a mathematician to look at this and discover interesting properties about it.

What functional programmers tend to do is air on the side of smaller functions that do have known properties. These are your standard algebraic properties, stuff like associativity, commutativity, idempotents, whether it has a zero or an identity, all of these standard algebraic properties, many of which you learned in high school algebra.

These are very important for being able to compose your functions up in regular ways. We’re going to talk way more about algebraic properties. Basically, this is functional programmers leaning a little bit on mathematics. Of course mathematics goes back thousands of years.

The study of not the numbers but the study of the algebras and these properties of the entities that mathematicians call functions. Another thing is that, once you’ve got something with known algebraic properties, you can do algebraic analysis. You can define equalities, identities.

You can say mapping a function over a list is the same as writing that list with the function called on each of its elements. Those two things now become interchangeable. If you wanted to, you can swap them out because they’re equivalents. You can swap them out. The compiler could generate the same code for them or, if it’s going to generate different code, it could choose the code that’s best.

As a programmer, you can do the same thing. You can say, “Right here I think it’s clearer to use this version of this expression because it’s equivalent to this other one and I can swap them out freely.” The fact that you can do that at different levels is also good because that means that the programmer can choose the one that is the clearer expression.

The compiler can choose the one that will execute quickly, or with less memory, or whatever the constraint is. That really helps flexibility. Compilers are easier to write. Programmers can reason more freely with the code and be able to write the code that makes the most sense to them. Another thing about functions is that they are calculations, is that they are opaque.

In general, we’re talking about Turing complete languages. You can basically do arbitrary stuff inside of your function. That means they’re opaque. The only way to know what a function does, in the general case, is simply to invoke the function, to run it and see. You actually call it and you just wait for its answer. You don’t know how long it’s going to run. You have to wait.

That is one of the principal limitations of the function, is that you can’t know what it’s going to do until you run it. This is the general case. In many cases you can tell very quickly because, as an intelligent person, you can read the source code and reason about what the code is going to do.

There are going to be cases that even a person can’t tell what it’s going to do and whether it’s going to terminate. Also, a lot of functions don’t have source code because they are generated by composing other functions together or by doing a partial for instance, that there was never any code written for that particular value that is a function. That’s a limitation of it.

We can talk more about the patterns and what we do with that later. What are the benefits of functions? I talked a lot about static analysis. One of them is that…Since functions have this property that…It’s called referential transparency. What that really means is that you can replace a function invocation with the return value that it would get.

In a function invocation, it’s going to have certain arguments. In place, instead of calling the function, you can just put its value because that’s all it does is it’s a calculation from inputs to outputs. Did I define calculation before? I should do that. A calculation is a computation from inputs to outputs. Those inputs are the only thing that vary, and the output is some computation.

It defines a relationship between those inputs and outputs. It’s referentially transparent. This is an important concept. It’s a silly name, but what it means is that return value is what you’re looking for. When you call that function, all you care about is the return value.

If you can calculate that return value without calling the function, you can just replace it in there. That function does nothing except calculate this return value. In what cases would you do that? Let’s say you have a compiler. You build into the compiler some special knowledge like, “Hey, all these mathematical operations, why don’t you optimize those away?”

If you see two plus two, you just replace it with four. You don’t have to put the code to calculate two plus two. Just put four because the compiler is smart enough to do that. If you have 10 times 10, just replace it with a hundred, you don’t need to actually generate the code to calculate that at run time.

If you do enough of these optimizations, you could see this whole expression is now just replaced by this one value. It just recursively can take this bigger and bigger expression and turn it into smaller and smaller until it’s one value.

Your compiler is taking advantage of this property of addition, multiplication, subtraction, and division, but this is referentially transparent. Because functions are timeless — plus and times are functions — it doesn’t matter how many times it runs. It could run zero times and that’s fine. What you’re really after is the answer. The return value.

The other thing is, you can run it when you want. You can run it later. You can defer calculating the answer because maybe you won’t even need it. You could say, “I’m going to invoke this function, but don’t do it until I ask for the answer, until I look. Then, once I look, then you can calculate it for me.”

This is actually called lazy evaluation and we’ll get to that shortly, it’s very close on the list. Another benefit of this run as many times as you want and whenever you want is that you can do testing. You can run this function and see if it does what you expect it to as many times as you want, and in any environment that you want, whenever you want.

This is very important for doing regression tests. Before you deploy to production, let’s run all of our tests in this other server that’s not going to hurt anything. You can run those calculations as many times as you want, on however many servers you want, with as many different test cases as you want, and it’s not going to change anything.

You could have a bug and it’ll notify you obviously, but it’s not going to launch a million missiles. That’s the nature of calculations, and you can do that because they are timeless. It doesn’t matter how many times you run them or when you run them, they’re the same all the time.

You can run them on your local machine, while you’re developing, test them out. You can run them on your build server to test them out. Then you run them in production with actual data. Those are the benefits of using calculations.

The patterns that we use calculations for, one very common pattern is the data transformation pipeline. You can imagine you have some data. Let’s say it’s in the wrong shape. You got data from somewhere, and you want to put data over here, send it to some service. You need to transform it. That transformation is from inputs to outputs.

You could write one function that just takes that input, does some work on it, and then generates an output value that is what is needed for the next step, but because functions can compose easily — which we didn’t talk about that, that’s another benefit — you can actually make it a pipeline, meaning this function does, let’s say, 10 different functions that do each a small change to the input.

They return a new thing which gets sent to the next stage of the pipeline, which gets sent to the next stage, until you have done all the transformations necessary to send it on to the final service. You can imagine having an action which, say, reads from a database — it’s an action because it depends on when you read it — that generates some data. This data is timeless.

Then that data goes through this pipeline of 10 functions, data comes out the other end, and it gets sent to a service. This whole pipeline is a single…It’s a composed-up calculation. We’ve composed 10 calculations into one big calculation.

This is a very common pattern of action to calculation, calculation, calculation down to other action. The action does as little as possible, just reads one thing or reads a collection of data from the database. Then the action on the other end just sends whatever you give it to the service. Then all the work is done in this big calculation. It’s a data transformation pipeline.

That pipeline can be tested, made super robust, and can be made out of smaller parts that are composed up. Let’s talk about that benefit of composing functions. We already talked about, last time, how you can take two functions and compose them. There’s different ways to compose them. One way is we’re taking two calculations, we compose them in what is, in mathematics…

This is going to get confusing. In mathematics it’s called function composition. Function composition means I take a function that takes an argument and returns a value. When I’m going to make a new function that, when I pass it to argument, it goes to that function. Then that return value gets passed to a second function as the argument.

Then the return value of that becomes the return value of the bigger function. It’s very easy to write this in code. What this lets you do is the compose function takes two functions and returns one function that will pipeline through the two functions. This is one way to compose calculations, is by making this pipeline, a chain of functions that data goes in one end.

Then, when it leaves that calculation, it goes to the next calculation as an argument. Then the return value of that gets passed to the next one, gets passed to the next one. Turn around and now it gets passed to the next one. Then the final one becomes the return value of the whole chain. You can package that up in a new function that [makes whoosh sound] will just go through all of them.

There are a number of well-known ways to combine functions in this way. Because they don’t have effects, calculations are timeless. You can also — this is another benefit — use them a lot in higher-order functions and be…Oh, what is the word. Confident?

You can be confident that whatever you’re passing it to it doesn’t matter if it calls it, or how it calls it, or when it calls it, how many times it calls it. You don’t care. It gives things a little bit more safety and more flexibility on the implementer of the thing, the higher-order function, of how it can work its magic.

An example of that is map. Map is a function that takes a function and a list. You don’t care how Map is implemented. You don’t care how many times the function that you pass it gets called or if it gets called at all. Maybe a better example is something like sort by. Sort by takes a function which generates the sorting key.

You could sort a list of lists by the third element of the list. Your function would be third. It will be called on each of the lists in your list, and that generates a key. Now, does it generate those keys one time and then sort it as an optimization, or does it willy-nilly call that key function many times just out of lazy implementation? It doesn’t matter. You don’t have to worry about it.

That function is pure. It’s a calculation. It’s timeless. It can be called any number of times. This is the mindset that functional programmers get into. “It’s a pure function. I’m not going to concern myself with how many times it gets called.” Now, if stuff starts getting slow, we’re going to talk about that in a little bit.

In general, this is the line we draw. “Eh, I don’t care. It can call it zero times. I don’t care.” All right, so that’s higher-order operations. This is a pattern that higher-order operations are calculations that take other calculations and use those calculations to make decisions, do work, and stuff like that. Also, you can have higher-order operations that return.

You can have a calculation that returns another calculation. Maybe it’s building up a calculation from smaller calculations, like we talked about before. We talked about laziness just a second ago. Because we’re dealing with calculations, they’re timeless. Another benefit we get from this is that we don’t care if it even gets called because what if we never use the value?

If you have an if statement, maybe the value got used in the then, but not in the else. Maybe it matters what…You can do this manually. You can push calculations around. If you’re writing some code and you’re not in a lazy language, you can push the calculations into the if statement so that it only happens when it’s important.

In a lazy language, you can put it all up at the top and just say, “Well, I’ll define this. This name means this calculation. This means the…” Then you don’t even have to worry because the laziness of the language will take care of it. That’s just a convenience, but it’s something that calculations let you do.

Now, there is a very important benefit of laziness that is more than just a convenience. It is actually a useful way to decouple things. You can have a function generate a list, and a very large list it could be. The consumer of that list can decide how many items it needs to read. You’ve decoupled the production of the list from the consumption of the list.

The producer, because it’s producing a lazy list, can just produce the whole list. It is simply saying, “Here’s the whole list,” but the language or the run time is making it lazy. It’s not actually calculating anything. Then the consumer can decide, “Well, I only really need 10, so I’m just going to cut this list after 10.

“Those are the ones that I’m going to realize, to make real, to actually calculate.” You’ve separated out the decision of how to generate the list from how big of a list you’re going to generate. With laziness, what happens is all this gets so decoupled that it’s even like little sub-pieces of the lists aren’t getting generated, that aren’t being used.

This is actually pretty neat. It saves a lot of calculation. That’s a benefit if you’ve got laziness in your language, which some languages do. Some testing patterns. Unit tests are very easy to write with calculations. Basically, you just give it example arguments, and you check the return value.

You can check it for the return value is equal to a specific value or has some other properties like number of elements in the lists or whatever properties you want to test on it. When you get into property testing, you can actually generate random inputs and check the return value for certain properties.

The reason you can generate random inputs is because you understand that this calculation has certain valid arguments and that the return values are going to have certain properties that you are interested in. If you align your calculations with mathematical functions with known mathematical properties, you can get a lot of your testing done for free.

Not free, I’m not going to say it’s free. It is very cheap. Because it’s timeless and you can run the function as many times you want, you can generate millions of test cases and cover a much larger set of inputs than you would normally be able to. I’m right at 29 minutes right now. I usually go 30, so I’m going to end here. The next time we’re going to talk about actions, the final domain.

Awesome. Subscribe. Like. Do what you have to. Mash some buttons on your interface. Make people know how awesome this is. All right, see you soon. Bye.

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

01 Apr 05:08

Budget Coverage

by Stephen Downes
Responding to: Wynne's ploy to buy Ontarians' votes is admirably shameless: Robyn Urback

The author writes, "Few politicians would dare campaign on a platform so estranged from the principles of sound fiscal policy."

First of all, this is transparently false. Everyone is familiar with the pattern of 'election goodies' prior to a vote. There's utterly nothing unique about this.

More to the point, however, it is not unsound fiscal policy. We all borrow money and pay interest. I did it when I bought a house and a car and paid for my education. Interest payments cost me a lot too. But I did this in order to increase my earning power and reduce other expenses. I am much better off now as a university graduate in a nice house than I was as a busboy in a restaurant, even though my interest payments today are larger than my entire salary back then.

It's pretty hard to find in media reports, but the budget is based on revenues of $150 billion. Against that, paying $12 billion in interest costs is pretty good. Considering the investment and development we can leverage for that $12 billion, not spending the money would seem pretty foolish.

If borrowing money and paying interest were unsound fiscal policy, we would not see corporations engaged in the practice. But corporations borrow even more money than the government. The do research, they build infrastructure, they acquire smaller companies - all this on money they have not yet earned. They do it because they think (correctly) that they will make back the cost of borrowing plus the interest, and then some.

On the flip side, we've seen from examples that you can't cut your way to prosperity. When a company starts cutting expenses and laying off staff, its earnings drop more rapidly than its expenses. When countries engage in an austerity program, like Greece did, the economy collapses and the government still cannot pay its debts. If I sell my house then I have to pay rent and lose any equity I could be otherwise earning.

It's irresponsible to write a column and decry a common financial practice, one that lies at the root of our economy, as this column does. It is irresponsible to wave around one big number without giving us any other numbers for comparison. It's find to publish opinion, but opinion should be well-argued and reasonable, not just a political hit piece.

01 Apr 05:07

“Großbritannien macht Russland für den Anschlag verantwortlich”

by Andrea

Deutsche Welle: Ex-Spion Skripal zu Hause vergiftet. “An der Haustür des Ex-Doppelagenten in England fand die Polizei “die bislang höchste Konzentration” des Nervengifts. Als Reaktion auf den Anschlag haben 26 Staaten mehr als 140 russische Diplomaten ausgewiesen.”

Deutsche Welle: Russian spy Skripal may have been poisoned at home: UK police. “Police have said the former Russian spy and his daughter came into contact with a nerve agent at their home in Britain. London holds Russia responsible for the poisoning that has raised tensions between the two nations.”

01 Apr 05:07

Dual Boot: Ubuntu and Windows 10 + Bitlocker

by Martin

When I recently got a new notebook on which I had to have a Windows 10 partition I had a bit of a fun time to make an Ubuntu / Windows 10 Dual Boot system out of it because Bitlocker wasn’t really happy about the change in the boot sequence. As I took quite some precautions before installing Ubuntu alongside Windows, I was able to wiggle out of the situation. Read on for a fun story how how to get dual boot right.

Backup, Backup, Backup

I got this new notebook with Windows 10 Pro pre-installed with the system partition encrypted with Bitlocker by default. Fine, I like security but I smelled trouble. So the first thing I did before proceeding was to use Clonezilla to make a backup of the 256 GB SSD. As the Windows partition is encrypted, the whole 256 GB had to be backed up which took a bit of time. During the backup I had a look if there is any trouble with Bitlocker and Linux dual boot and found the good advice to generate a ‘recovery key’, just in case. Also I created a Windows 10 recovery USB stick, just in case…

Bitlocker and Secure Boot

One more thing I wanted to do after the backup was complete was to disable secure boot in the BIOS. Bitlocker wouldn’t let me do it, however, as the notebook then refused to boot into Windows with Bitlocker enabled. O.k. so I left Secureboot enabled for the time being. In the next step I reduced the size of the Windows Bitlocker encrypted partition by 60 GB with the Windows on-board disk tool so I could install Ubuntu alongside. This worked well, took just a few seconds (to my surprise) and Windows kept booting normally.

Dual Boot Installation

And finally I ran Ubuntu 16.04.4 LTE from a USB stick to create a dual boot system. I also ran Ubuntu 17.10 on the notebook from a USB stick but Firefox kept crashing for some strange reasons while 16.04.4 was stable and, due to its 4.13 kernel, supported the notebook’s rather up to date hardware (Kaby Lake CPU and corresponding Intel Wifi).

As is normal with an Ubuntu installation, things are done in just a few minutes. The setup even informed me that due to secure boot being enabled I would not be able to install kernel drivers that are not in the repository. Fine, one thing at a time…

Bitlocker Is Not Happy With Dual Boot

Once the Ubuntu installation was done I rebooted into Ubuntu a few times just to make sure things are all right, which they were. When booting into Windows, however, Bitlocker complained that the boot process was changed and that I had to type in the recovery key. Imagine how glad I was that I created the recovery key before I started. While I was hoping that this was a one time thing and that this was the end of the story, that wasn’t quite so. Unfortunately, Bitlooker kept asking for the recovery key whenever I rebooted As the key is quite long that was not really an option. So as secure boot would have gotten in the way anyway at some point and there doesn’t seem to be a GUI option to run Bitlocker without Secure Boot and a TPM (Trusted Platform Module), I decided to disable Bitlocker and de-crypt the system partition. Perhaps I should try to change the local group policy to enable Bitlocker with a password instead of TPM and secure boot use as described here but that’s for another day. Once the partition was decrypted, dual booting both operating systems worked fine.

Summary

To make a long story short, I didn’t find a cool and straight forward way to run Ubuntu and Windows alongside each other with Bitlocker enabled. Ubuntu runs fine with Secure Boot enabled which is a good thing to know. But since every now and then I install kernel modules I disabled secure boot and both Ubuntu and Windows (without Bitlocker) were fine with that.

01 Apr 05:07

Mozilla marks 20th anniversary with commitment to better human experiences online

by Mitchell Baker

This coming Saturday — March 31 — is Mozilla’s 20th anniversary. We’ve accomplished a fair amount in the first 20 years. We aim to accomplish even more in the next 20 years. To do this, we’ve modernized nearly every aspect of Mozilla, from Firefox to the many ways we connect people and technology.

We’re making our first major addition to the key principles that form the foundation for Mozilla’s work. These principles are set out in the Mozilla Manifesto, which was launched in 2007. The Mozilla Manifesto identifies ten principles that we work to build into Firefox and online life generally. The internet should be a global public resource, open and accessible to all. Individuals should have control of their experience. Safety is critical. Private commercial profit and social benefit should coexist in a healthy fashion. We use these principles regularly to describe Mozilla’s identity and inform our decision-making. You can see the Manifesto here.

Today we add four topics to the Mozilla Manifesto. We do this to explicitly address the quality of people’s experiences online.

  • We are committed to an internet that includes all the peoples of the earth — where a person’s demographic characteristics do not determine their online access, opportunities, or quality of experience.
  • We are committed to an internet that promotes civil discourse, human dignity, and individual expression.
  • We are committed to an internet that elevates critical thinking, reasoned argument, shared knowledge, and verifiable facts.
  • We are committed to an internet that catalyzes collaboration among diverse communities working together for the common good.

The full addendum is available on our website, where you are invited to share your support for these new principles via Twitter.

The Manifesto and the addendum will continue to guide our work everyday — how we design products, build technology, build communities and work with others. We hope to encourage, create, lead and support many experiments in bringing these goals to life, and we hope to join with many others pursuing similar ideas.

The post Mozilla marks 20th anniversary with commitment to better human experiences online appeared first on The Mozilla Blog.

01 Apr 05:06

Quote: “Data is the new bacon”

by pricetags

From David Graham, deputy chief operating officer in San Diego, in Futurestructure:

“‘Data is the new bacon,’ I love that statement,” said Graham, borrowing an expression from some of his coworkers in San Diego. “Delicious, fantastic — I apologize if you’re vegan — but both amazing good, tasty, but also dangerous, cholesterol filled. It could kill you. And that’s the big struggle that we’re in the middle of right now. What do we do with it (data)? Who owns it? Do you monetize? Do you not monetize? Nobody has the answer to that.”

01 Apr 05:06

Why schools should not teach general critical-thinking skills

files/images/air_approach_radar_console_in_the_amphibious_air_traffic_con.jpg

Carl Hendrick, Aeon, Apr 01, 2018


Icon

Carl Hendrick restates the tired and wrong argument that critical thinking cannot be taught as a general skill. But from where I sit, if a person says critical thinking cannot be detached from context, then this tells me that the person does not understand what critical thinking is. Critical thinking is not factual recall or provision of implicit premises. It's based on form, not content. I offer more argumentation here (and I guess I'll just have to write an article or something to dispel this wrongheaded notion).

 

Web: [Direct Link] [This Post]
01 Apr 05:06

R⁶ — Capturing [YouTube] Captions

by hrbrmstr

(R⁶ == brief, low-expository posts)

@yoniceedee suggested I look at the Cambridge Analytics “whistleblower” testimony proceedings:

I value the resources @yoniceedee tosses my way (they often end me down twisted paths like this one, though :-) but I really dislike spending any amount of time on youtube and can consume text context much faster than even accelerated video playback.

Google auto-generated captions for that video and you can display them by clicking below the video on the right and enabling the transcript which slowly (well, in my frame of reference) loads into the upper-right. That’s still sub-optimal since we need to be on the youtube page to read/scroll. There’s no “export” option and my initial instinct was to go to Developer Tools and look for the https://www.youtube.com/service_ajax?name=getTranscriptEndpoint URL and “Copy the Response” to the clipboard and save it to a file then do some JSON/list wrangling (the transcript JSON URL is in the snippet below):

library(tidyverse)

trscrpt <- jsonlite::fromJSON("https://rud.is/dl/ca-transcript.json")

runs <- trscrpt$data$actions$openTranscriptAction$transcriptRenderer$transcriptRenderer$body$transcriptBodyRenderer$cueGroups[[1]]$transcriptCueGroupRenderer$formattedStartOffset$runs
cues <- trscrpt$data$actions$openTranscriptAction$transcriptRenderer$transcriptRenderer$body$transcriptBodyRenderer$cueGroups[[1]]$transcriptCueGroupRenderer$cues

data_frame(
  mark = map_chr(runs, ~.x$text),
  text = map_chr(cues, ~.x$transcriptCueRenderer$cue$runs[[1]]$text)  
) %>% 
  separate(mark, c("minute", "second"), sep=":", remove = FALSE, convert = TRUE) 
## # A tibble: 3,247 x 4
##    mark  minute second text                                    
##    <chr>  <int>  <int> <chr>                                   
##  1 00:00      0      0 all sort of yeah web of things if it's a
##  2 00:02      0      2 franchise then there's a kind of        
##  3 00:03      0      3 ultimately there's a there's a there's a
##  4 00:05      0      5 coordinator of that franchise or someone
##  5 00:07      0      7 who's a you got a that franchise is well
##  6 00:09      0      9 well when I was there that was Alexander
##  7 00:13      0     13 Nixon Steve banning but that's that's a 
##  8 00:16      0     16 question you should be asking aiq yeah  
##  9 00:18      0     18 yeah and just got to a IQ and the GSR   
## 10 00:24      0     24 state from gts-r that's other Hogan data
## # ... with 3,237 more rows

But, then I remembered YouTube has an API for this and threw together a quick script to grab them that way as well:

# the API needs these scopes

c(
  "https://www.googleapis.com/auth/youtube.force-ssl",
  "https://www.googleapis.com/auth/youtubepartner"
) -> scope_list

# oauth dance

httr::oauth_app(
  appname = "google",
  key = Sys.getenv("GOOGLE_APP_SECRET"),
  secret = Sys.getenv("GOOGLE_APP_KEY")
) -> captions_app

httr::oauth2.0_token(
  endpoint = httr::oauth_endpoints("google"),
  app = captions_app,
  scope = scope_list,
  cache = TRUE
) -> google_token

# list the available captions for this video
# (captions can be in one or more languages)

httr::GET(
  url = "https://www.googleapis.com/youtube/v3/captions",
  query = list(
    part = "snippet",
    videoId = "f2Sxob3fl0k" # the v=string in the YouTube URL
  ),
  httr::config(token = google_token)
) -> caps_list

# I'm cheating since I know there's only one but you'd want
# to introspect `caps_list` before blindly doing this for 
# other videos.

httr::GET(
  url = sprintf(
    "https://www.googleapis.com/youtube/v3/captions/%s",
    httr::content(caps_list)$items[[1]]$id
  ),
  httr::config(token = google_token)
) -> caps

# strangely enough, the JSON response "feels" better than this
# one, though this is a standard format that's parseable quite well.

cat(rawToChar(httr::content(caps)))
## 0:00:00.000,0:00:03.659
## all sort of yeah web of things if it's a
## 
## 0:00:02.490,0:00:05.819
## franchise then there's a kind of
## 
## 0:00:03.659,0:00:07.589
## ultimately there's a there's a there's a
## 
## 0:00:05.819,0:00:09.660
## coordinator of that franchise or someone
## 
## 0:00:07.589,0:00:13.139
## who's a you got a that franchise is well
## 
## 0:00:09.660,0:00:16.230
## well when I was there that was Alexander
## ...

Neither a reflection on active memory nor a quick Duck Duck Go search (I try not to use Google Search anymore) seemed to point to an existing R resource for this, hence the quick post in the event the snippet is helpful to anyone else.

If you do know of an R package/snippet that does this already, please shoot a note into the comments so others can find it.

01 Apr 05:06

The Best Action Camera

by Ben Keough
The Best Action Camera

After nearly 60 hours spent hiking through the Cascade Mountains, biking in Brooklyn’s Prospect Park, and playing with dogs—all in the name of putting action cameras to the test—we’re convinced that the tiny, powerful, and rugged GoPro Hero7 Black is the best action camera we’ve ever used. It also represents a major leap over past GoPros thanks to beefed up stabilization and a host of smaller tweaks.

01 Apr 05:06

Thanks to the Drupal Security Team for keeping us safe

by Dries

We released new versions of Drupal 7 and Drupal 8 yesterday that fixed a highly critical security bug. All software has security bugs, and fortunately for Drupal, critical security bugs are rare. What matters is how you deal with security releases.

I have the utmost respect for how the Drupal Security Team manages a security release like this — from fixing the bug, testing the solution, providing advance notice, coordinating the release, to being available for press inquiries and more.

The amount of effort, care and dedication that the Drupal Security Team invests to keep Drupal secure is unparalleled, and makes Drupal's security best-in-class. Thank you!

01 Apr 05:02

Ideas, Not Taxes – Solutions for Affordable Housing in BC

by pricetags

Regular PT commenter Thomas asked to have this analysis he wrote of the ‘speculation tax’ posted on Price Tags, to provide a more complete overview of his thinking, with some specific examples.

So here it is.

TWO IDEAS FOR MORE AFFORDABLE BC HOUSING – RATHER THAN A NEW TAX

by Thomas Beyer

There is much debate these days about the new so called “speculation tax” in BC which levies 1% onto Canadians and 2% on foreigners who own houses or condos in BC that are not rented 6+ months. It also levies a 20% foreign buyer tax and expands the taxable region from MetroVancouver to 4 others regions (Victoria area, Nanaimo, Kelowna including West Kelowna and Fraser Valley).

The purpose is to allegedly improve affordability in BC – by reducing demand. To me, it is really an #EnvyTax to buy votes that will do little, if any, to increase affordability. Who really benefits if a home in West Vancouver drops from $4 million to $3.5 million due to these new taxes, or if a golf course condo on Bear Mountain that is vacant for eight months of the year is now sold in the market and drops from $800,000 to $725,000?

The predicable result: These new taxes merely cause many Albertans (and some foreigners) to sell, causing a short-term sell off in markets like Kelowna or Victoria, with a result of much less supply in the coming years and a negative impact on local retailers, restaurants and the construction industry. Add enforcement costs and the much envisioned additional several hundred million in taxes will likely not appear, as investors are not dumb. How ? Rentals are easy to fake to family members or friends, and it is easy to create local income taxes paid for a Canadian spouse of a non-resident foreign investor that owns multi-million dollar properties in the Lower Mainland.

Also keep in mind many immigrants [me included] come here because they can buy property, including land and many love large lots or large houses, not just tiny condos. It is part of the appeal to immigrate to Canada. Have a drive through Richmond, Surrey, Vancouver Island, Sunshine Coast or Fraser Valley for ample proof of that theory.Not everyone wants a small shoebox in the sky. Many want land. That puts an upwards price on land. Many immigrants come with money, and many more have connections from back home to friends, family and business associates with money.

Not one politician has mentioned immigration in their speeches about well-meant but poorly thought through legislation. Not one. Immigration is the number one driver of high house prices. Canada might even increase immigration. That will make homes more affordable?Totally exempt has been the agricultural sector in BC thus far, so money now will move into that space and drive up agricultural land prices, endangering our local food supply even. Look no further than to spiraling vineyard and orchard prices in the South Okanagan or to farmland prices in the Fraser Valley.

To create affordability we need more supply. Not just more, but also inexpensive supply. The only way to make new supply more affordable is by lowering all-in build costs and speeding up approval cycles, as time is money.Rather than taxing existing homes more, in an attempt to reduce demand somewhat, in an immigration society like Canada, and especially BC, the warmest part of Canada and closest to Asia, the BC Government should focus primarily on cost reduction and new land supply – the true source of our unaffordable housing in BC today.

So, let’s look a little closer at these two aspects: build costs and land availability.

Costs have several sub-components, such as:

  • physical material costs (concrete, wood, fridges, wires, windows, doors, siding ..)
  • labour & shipping costs to get those physical materials on site
  • labour costs to install those materials
  • design costs
  • planning & approval costs
  • finance costs incl upfront fees and ongoing interest
  • fees paid to various municipal or provincial (and sometimes federal) entities
  • land costs [with its own design, planning, financing, fees, labour and material costs]
  • sales costs
  • marketing costs
  • risk costs [such as this new EnvyTax, also referred to as speculation tax, that now has substantially increased risk of sales for condos to Albertans in Victoria, Kelowna or Nanaimo]

Since time is money, delays cost money. Often planning and getting approvals is a multi-month to often multi-year process with often unknown timelines or outcomes even. It is here where a lot of emphasis has to be placed to increase affordability: fees and timelines. If land could be used for 17, 22 or 25 units, it will make a big impact on home prices down the road, for example. If a serviced road approval can be shortened to six month from 18, that is a huge win. If density and associated CACs (community amenity contributions) are known upfront – rather than being negotiated over a 2-3 year period of time – that is a huge win.

A few specific examples:

On a recent large condo project in Vancouver [where I was involved in a few years ago, in the early conceptual stage as a member of the steering committee] now called the Butterfly, as part of the re-zoning approval the City of Vancouver levied almost $90M in CACs onto the 300 unit tower, well over $290,000 per condo just in CACs alone. No wonder prices are through the roof in Vancouver. The idea was born five to six years ago, with conceptual plans three to four years ago. The construction will start at best next year with estimated occupancy in 2022. A ten-year planning-to-occupancy timeline. No wonder condo prices without views start at a mere $1500/sq ft. This is affordability these days in Vancouver?

For another example, I am currently involved in a land development project in Oliver, BC where we have to slightly widen a curved road by cutting across a very small (say 3 to 5 sq meter or 35 to 55 sq feet) plot behind some sheds to connect to a new road with new underground services on non-ALR land. This 3 to 5 sq m however is on ALR land (agricultural land reserve). Usually the ALR provincial planning department gives such permission but it is a four-to-six month process with substantial paperwork, with unknown outcome, that substantially increases project risk and thus, serviced land costs, thus housing price. [For those interested here are the allowed ALR uses in BC  .. ours would be section 3 (permitted uses in ALR) item (4) d.1 ]

In a second project I am involved in the building inspector outright refuses new building material as he is not familiar with it, also causing massive delays, thus costs. One can appeal it to the BC ombudsman, which is a delay of two months or more, or one can hold one’s nose and switch to more expensive but known materials.

A fourth example is the building code that restricts or disallows certain common-sense approaches such as spiral staircases to create cheap attic space for use. I have written about this example here a while ago here.

So, plenty of options to streamline building code, timelines and fees. Let’s talk about land, the other major cost driver in cities.

ALR is a big issue in BC and touching ALR for housing is essentially taboo, even in high-density regions like Richmond or Surrey where 10-storey buildings routinely stand besides blueberry farms. A earnest debate about opening up select sub-par ALR land near cities, or land swaps, especially in Metro Vancouver or the Fraser Valley is in order.

Also a discussion how to create more land from ocean or river flats would be very useful. We did that in BC 80+ years ago as much of a then small muddy island in the tidal plains of the Fraser River delta was wrought from the Fraser River via dykes. This island is now called Richmond. Massive housing developments, industrial land and massive newly created fertile land has been created.

But we could do even more today, for example, we could expand further west by easily one km into the Salish Sea (formerly Georgia Straight) where the ocean is very shallow, as could Surrey by going south into Boundary Bay or Tsawwassen by going east. Plenty of new land could be created in the Lower Mainland, in the Fraser River or along its shoreline, with rapid transit, very walkable, with beaches and scenic shorelines, with a mix of retail, recreation, subsidized and high-end housing. Venice did that. Holland did that. San Francisco Bay Area did that. Singapore is doing it. But not in BC ?

City-owned Langara golf course in the heart of Vancouver is another example where valuable land worth billions sits within blocks of a subway, the Canada Line. Why is there not affordable housing on it ? Where are the plans, almost ten years after Canada Line opened? Do we have a golfing crisis, or a housing crisis ?

As such, rather than taxing existing homes driving away investment capital, why not look at sensible cost reductions in the planning process or building code, and more land creation where it makes sense ?

01 Apr 05:01

Apple Releases iOS 11.3 with iPhone Battery Settings, ARKit 1.5, New Animoji, and More

by Ryan Christoffel

Today Apple released the latest update to iOS, version 11.3, which adds the previously promised iPhone battery health settings, along with four new Animoji, ARKit 1.5, a new Music Videos section in Apple Music, and more.

ARKit 1.5

The ARKit developer framework has been upgraded in iOS 11.3, and improvements are impressive, especially considering how recently version 1.0 launched. One of the most notable improvements is that apps can now use ARKit to place objects on vertical surfaces, the potential of which is on display in several demos developers shared on Twitter. That's not all though – ARKit also now offers the ability to map irregularly shaped surfaces, it boasts 50 percent greater resolution, and supports auto-focus. A mere six months after ARKit first launched to the public, nearly all of the technology's drawbacks have been addressed with this update. Expect to see ARKit's upgrades put to use in third-party apps very soon.

iPhone Battery Settings

Enough has already been written about the iPhone's battery throttling saga from late last year, but iOS 11.3 brings the topic back up in that it fulfills Apple's previous promise of providing users with more information on the health of their iPhone's battery, as well as offering the ability to disable throttling altogether. By visiting Settings ⇾ Battery ⇾ Battery Health (Beta), users can now see a percentage representing the health of their battery. If your iPhone's performance is being throttled to prevent unexpected shutdowns, this screen will communicate that and provide the option to disable that throttling. Once throttling is disabled, you won't have the chance to re-engage it until after your iPhone has had an unexpected shutdown, at which time the option will present itself again.

Music Videos

Apple Music has always been home to music videos, but with iOS 11.31 Apple is beefing up its video game with an increased presence of videos in the Music app, featuring the addition of music video playlists so you can easily watch multiple videos back-to-back.

Inside Apple Music's Browse screen there's a new section: Music Videos. Here you'll see a sampling of featured and new videos, along with curated video playlists put together by Apple's team. Currently, playlists exist for a wide array of genres and time periods, like R&B Now Videos, The A-List: K-Pop Videos, and Y2K Pop Videos. There are also playlists meant to fit a certain mood or setting, like Today's Chill Videos and Party-Starter Videos.

Playback of videos works just like it always has, modeling the card interface of standard music playback. Your Up Next queue can contain both music videos and standard audio tracks, showing you what's next as you scroll up the playback card and enabling you to rearrange videos and songs to your preferred order. If you want to make your own video playlist, that works just like making an audio playlist – the two mediums can even be intermixed in the same playlists. Also, both curated and user-made video playlists can be downloaded to your device for offline playback.

All the Rest

New Animoji

Four new Animoji for iPhone X users join the existing roster of twelve: lion, dragon, skull, and bear. The lion's a new favorite of mine thanks to its awesome mane.

Business Chat. First announced nearly a year ago at WWDC 2017, Business Chat is a new way for iMessage users to communicate with businesses in the familiar, easy-to-use environment of the Messages app. It is launching in iOS 11.3 as a public beta in the U.S. only, with a limited number of launch partners like Lowe's, Wells Fargo, Discover, and Hilton. If done well, Business Chat sounds likely to offer a greatly improved customer support avenue over standard web chat interfaces.

Podcasts Improvements. Apple Podcasts received an Apple Music-style redesign in iOS 11, which overall I think works well, but there have been a couple nagging annoyances following the update that I'm delighted to find Apple's fixed now. In iOS 11.3, you can get a podcast playing simply by tapping on it; previously, you would need to tap once to load the episode's detail view, then tap the play button from there. Also, if you want to access the detail view before playing, you can tap the purple-highlighted link at the bottom, which will either display the podcast's name (if you only have a single episode), or the number of episodes you have available (if more than one).

Health Records. A new feature of the Health app, patients treated at certain partnering medical institutions will be able to access their records from those institutions directly within Health. Thanks to Health Records, information regarding immunizations, medications, procedures, allergies, and more will be stored in one location. Patients will even receive notifications whenever their records are updated. Apple has already added to the list of medical partners initially announced. In the Health app, go to Health Data ⇾ Health Records ⇾ Get Started to see if your local institutions support the program.

Face ID and Family Sharing. One oddity discovered upon the iPhone X's launch is that you couldn't use Face ID to authenticate for approval of Family Sharing purchases, which Touch ID has always allowed. Some speculated this was due to concern around facial similarities between family members, but it seems that it was merely an oversight, as that problem has been fixed now.

Safari AutoFill. For privacy reasons, Safari AutoFill now requires user interaction before usernames and passwords will be filled in on web forms. I would have preferred being given an option for this rather than having the behavior change forced, but over the beta period I quickly got used to needing to hit the suggested login info in the QuickType suggestions.


If recent history was any indication, iOS 11.3 would likely be the last major update to the operating system before iOS 12's debut. iOS 9 and 10 never made it to x.4 versions. However, following Apple's recent education event, the company's website revealed that the newly-announced ClassKit framework for developers would be available as part of a forthcoming iOS 11.4.

Previously announced features like Messages in iCloud and AirPlay 2 were available in the iOS 11.3 betas for a time, then were removed before today's public release, so perhaps we'll see their reappearance in 11.4. Now that 11.3 is officially out in the world, we should expect to see the first 11.4 beta release very soon.


  1. And apparently, for now at least, iOS 11.2.6 users too. ↩︎

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
01 Apr 05:01

Apple Releases watchOS 4.3 with iPhone Music Controls, Portrait Nightstand Mode, and More

by Federico Viticci

Following iOS 11.3, Apple also released watchOS 4.3 to the public today. The updated Apple Watch software, first released as a developer beta in January, brings a variety of improvements for music playback, a smarter Siri watch face, and bug fixes.

In watchOS 4.3, Apple has restored the ability to browse the entire iPhone music library and control iPhone music playback from the Watch. The lack of full iPhone playback control was one of the most criticized aspects of the Music app refresh on watchOS 4, and it's nice to see Apple rectify this feature with today's update.

Also on the music front, watchOS 4.3 allows HomePod owners to control playback and adjust volume of the speaker directly from the Watch. In the Now Playing screen, you can tap on the AirPlay icon (in the bottom left corner) to instantly connect to a HomePod on the same WiFi network, after which you'll be able to spin the Digital Crown to adjust its volume – all without having to connect to the HomePod through the iPhone first. As someone who routinely listens to Music via the kitchen HomePod while doing something else around the house, I've greatly enjoyed the ability to connect and change volume from my wrist.

There are a couple of noteworthy additions to the Siri watch face in watchOS 4.3. First, a new Activity card provides you with a handy summary of the progress you're making toward closing your rings. The card is updated in real-time during the day, so you can glance at it without opening the main Activity app. Furthermore, on days when one of your Apple Music mixes gets an update, the Siri watch face will bring up a card with a thumbnail preview of the playlist and a message that tells you an updated version of the mix is available.

Lastly, in addition to various bug fixes, watchOS 4.3 brings support for portrait orientation in Nightstand mode (likely in preparation for the company's AirPower charging mat) along with a refreshed charging animation. I've long charged my Watch using a portrait-oriented Belkin Valet charger that sits on my desk, and I like how Nightstand mode is now an option for me.

As I wrote earlier this month, the changes introduced in watchOS 4.3 have helped me enjoy the benefits of Apple's ecosystem as they integrate the Watch more deeply with my iPhone and HomePods. The update is available now, and you can read our original review of watchOS 4 here.


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
01 Apr 05:00

Apple to Offer Customers Greater Access to Their Personal Data Online

by Ryan Christoffel

Mark Gurman and Stephanie Bodoni report for Bloomberg on an upcoming change that will make it easier for some users to access the personal data Apple stores on them:

The iPhone maker said it will update its web page for managing Apple IDs in coming months to let users download a copy of all their data stored with the company. The site will also let customers correct personal information, temporarily deactivate their account, and completely delete it. The new privacy controls are designed to comply with the European Union’s General Data Protection Regulation, which kicks in May 25, the Cupertino, California-based company said.
...
Apple’s new web-based privacy options will be released for users in Europe in early May, while the features will come to other countries later.

The report also notes that you could previously receive copies of your data, delete your account, and more by contacting Apple directly. So these options will not be entirely new, they'll just be available on the web for the first time.

It's unclear which countries outside Europe will receive these features. Hopefully in light of the recent Facebook data debacle, Apple will find it important to make these options available to all its users, regardless of where those users reside.

→ Source: bloomberg.com

31 Mar 15:19

Samsung Galaxy Note 9 Could Launch in July or August

by Rajesh Pandey
The lukewarm response to the Galaxy S9 has forced Samsung to consider launching the Galaxy Note 9 earlier than usual. The news reports are basing this information on the fact that Samsung will start producing OLED panels for use in the Galaxy Note 9 from April itself — two months earlier than the usual timeframe. Continue reading →
31 Mar 15:18

laughingsquid:Oasis’ ‘Wonderwall’ Music Video Remade With LEGO

31 Mar 15:15

Telus and Koodo to introduce $30 connection fee, eliminate SIM card fee

by Rose Behar

Telus and its flanker brand Koodo will do away with $20 SIM card fees but replace that charge with a $30 connection fee on April 12th, 2018, the company has confirmed to MobileSyrup.

Customers activating accounts online will be able to avoid the fees altogether, however.

Additionally, internal document from a third-party seller state that Telus’ connection fees for Drive+, wireless home phone, internet hubs and keys will be only $20 (though the same does not apply to wireless home phone activations through Koodo).

In a statement to MobileSyrup, a Telus spokesperson wrote: “As the way we provide service to our customers continues to evolve, so too does the way we charge for our services.”

By way of explaining the price difference for online and in-store customers, Telus indicated that customers who activate in-store or over-the-phone receive more assistance with their device and services.

It’s easy to see the change as a response to the ban of unlocking fees instated by the CRTC with the December 1st Wireless Code revision. Telus and the rest of Canada’s wireless operators were forced to do away with unlocking fees (generally $50 per unlock) and sell all devices unlocked as of late last year.

While consumer advocates applauded the CRTC’s decision, wireless carriers expressed concern about the potential for increased device theft and fraud.

It’s unclear whether Rogers and Bell will follow Telus’s lead and up the cost of their respective fees.

Rogers currently provides free SIM cards with phone activations, but charges a $25 connection fee that is only waived when activating or renewing online. The carrier also charges $10 for a replacement SIM card.

Bell also charges a $25 activation fee. A customer service agent reported that the carrier charges $10 for a SIM card through the Bell store, but $4.95 if a customer activates online.

Update 30/1/2018: MobileSyrup received internal documents from a third-party reseller that shed further light on the pricing model. The article has been updated accordingly.

The post Telus and Koodo to introduce $30 connection fee, eliminate SIM card fee appeared first on MobileSyrup.

28 Mar 17:36

SotD: Pork Pie Hat

Goodbye Pork Pie Hat is a Charles Mingus jazz standard, first recorded by his band in 1959, and since then performed by many others, with voice and without. The version closest to my heart is a Jeff Beck electric-guitar instrumental. [Wait, didn’t you have one of those yesterday!? -Ed.] [You say that like it’s a bad thing. -T] The song was originally conceived of as a tribute to Lester Young, a saxophonist, recently deceased back then, who had worn one.

I’ve loved Mingus’ music since I first heard it. He always had a big band and their big showpieces always involved playing really loud and really fast; as close as jazz ever gets to head-bangin’ metal music. I wrote a blog piece about Better Get Hit In Your Soul, one of those loud/fast numbers, and generally about the album it’s on, Mingus at Antibes, which I’ve always thought to be his masterpiece (but Pork Pie Hat is on Mingus Ah Um from 1959, another totally excellent recording.)

Mingus Ah Um Wired by Jeff Beck

Jeff Beck’s version is on Wired from 1976, which might just be the best all-guitar-instrumentals collection ever recorded by anyone, with the possible exception of Blow by Blow, his previous album, which we visited yesterday. Pork Pie Hat is one of the highlights on Wired.

It’s not hard to start a food fight about “greatest guitarist ever” — I mean, what’s the best flavor of ice cream anyway? — but Beck’s name is always going to be in that conversation. And this record will be offered as evidence evidence.

The recording has some irritating tape hiss, but get past that and it’s the kind of thing you want to dim the lights for, lean back and turn the stereo up as loud as you can get away with.

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

Links

Spotify playlist. For the original Mingus version: Spotify, Amazon, iTunes. For the Beck version: Spotify, Amazon, iTunes. Video links; Mingus in 1975, Part 1 (after a couple of minutes of getting organized), Part 2; the band includes Dannie Richmond and Gerry Mulligan. And here’s a muscular version by Jeff in 2002. Finally, here’s Joni Mitchell with her all-star band notably including Pastorius, putting words to the music.