Shared posts

13 Sep 20:53

The dynamic medium community in London

I want to help foster the community of people in London who are interested in the dynamic medium / tools for thought / interactive simulations for creation or understanding.

Here is a hopelessly narrow set of example projects:

A possible first step. I’ll arrange a meetup. At the meetup, I’ll give a brief talk that provides an overview of some of the interesting projects that I know of. Around the room, there will be posters that give more information about each project. These posters could attract groups of people who might discuss the project, or even get out a laptop and work together on trying it out.

This is just a set of initial bad ideas. If you have thoughts about how I could make them better, I’d love you to email me at mary@maryrosecook.com or send me a reply on Twitter. Thanks!

20 Dec 05:45

Every Last Jedi

by Anil

This is a spoiler-filled first set of reactions to Star Wars: The Last Jedi.

The ultimate courage of what Rian Johnson has done here, is that he fully embraced what it is to be a director who obviously grew up as true fan of Star Wars, and retconned the whole universe into a new understanding of The Force. It’s the kind of revolutionary rethinking of the most successful pop culture franchise of all time that I would have thought would not be possible by anyone but George Lucas, and certainly not under the auspices of Disney. But here we are.

Though it’s well-grounded in the first definitions of The Force that we were introduced to in the original trilogy, The Last Jedi presents a radically inclusive new view of the Force that is bigger and broader than the Jedi religion which has thus-far colored our view of the entire Star Wars universe. (This is also why lost-cause diehards will likely always hate this film.)

On a personal level, it really makes me smile to know that in Carrie Fisher’s last film, in her most famous role, she’d get to know that the vision of what the franchise was about would be broadened to include everyone. Now, every kid who ever picked up a broomstick and pretended to be Luke Skywalker with a lightsaber is canonically one with the Force. It’s a wonderful summation of what Star Wars, at its best, represents in culture.

It’s also a brave film for its willingness to subvert the expectations of the most hardcore fans. In many ways, The Last Jedi is anti-fan service. Tonally, it’s totally different than the other films in the series. Flashbacks and editing sequences like when Rey first sees the Force feature a wildly different direction style than Lucas ever would have tried. Jokes like the initial Poe-Hux call are completely out of character for the voice of the other films (especially the prequels). And the Jedi are no longer an infallible inherited priesthood, but a religion of self-absorbed, usually short-sighted monks who neglect the beauty of the Force in favor of exploiting it for their own power. Any one of these would antagonize those who were overly invested in the old order; all of them together is rank heresy.

But for an open-minded viewer, there are wonderful touches throughout. Rey gets to be a whole person, who grounds the film and is brave and grows, without ever being reduced to a love interest or damsel in distress. Similarly, Rose gets to be not just the first Asian American woman to be featured in Star Wars, but the avatar of the theme of the entire film. The porgs porg it up. Lots of stuff is red. The sound design uses silence more effectively than any blockbuster film since Attack of the Clones. There’s not much Threepio. It’s all pretty great.

Most of all, it sets us up for a third film where, for the first time in 37 years, we don’t know what’s going to happen next with Star Wars. Restoring our sense of wonder or mystery or surprise about the most culturally dominant franchise of all time is one of the toughest challenges any mainstream director could pull off. Succeeding in that challenge makes The Last Jedi a wonderful gift to every kid who ever swung a broomstick lightsaber.

20 Dec 05:45

Programming in Jupyter Notebooks, via the Heavy Metal Umlaut

by Tony Hirst

Way back when, I used to take delight in following the creative tech output of Jon Udell, then at InfoWorld. One of the things I fondly remember is his Heavy Metal Umlaut screencast:

You can read about how he put it together via the archived link available from Heavy metal umlaut: the making of the movie.

At some point, I seem to remember a tool became available for replaying the history of a Wikipedia page that let you replay its edits in time (perhaps a Jon Udell production?) Or maybe that’s a false memory?

A bit later, the Memento project started providing tools to allow you to revisit the history of the web using archived pages from the Wayback Machine.Memento. You can find the latest incarnation here: Memento Demos.

(Around the time it first appeared, I think Chris Gutteridge built something related? As Time Goes By, It Makes a World of Diff?)

Anyway – the Heavy Metal Umlaut video came to mind this morning as I was pondering different ways of using Jupyter notebooks to write programmes.

Some of my notebooks have things of this form in them, with “finished” functions appearing in the code cells:

Other notebooks trace the history of the development of a function, from base elements, taking an extreme REPL approach to test each line of code, a line at a time, as I try to work out how to do something. Something a bit more like this:

This is a “very learning diary” approach, and one  way of using a notebook that keeps the history of all the steps – and possibly trial and error within a single line of code or across several lines of code  – as you work out what you want to do. The output of each state change is checked to make sure that the state is evolving as you expect it to.

I think this approach can be very powerful when you’re learning because you can check back on previous steps.

Another approach to using the notebooks is to work within a cell and build up a function there. Here’s an animated view of that approach:

This approach loses the history – loses your working – but gets to the same place, largely through the same process.

That said, in the notebook environment used in CoCalc, there is an option to relay a notebook’s history in much the same was as Memento lets you replay the history of a web page.

In practice, I tend to use both approaches: keeping a history of some of the working, whilst RPLing in particular cells to get things working.

I also dip out into other cells to try things out / check things, to incorporate in a cell, and then delete the scratchpad / working out cell.

I keep coming back to the idea that Jupyter notebooks are a really powerful environment for learning in, and think  there’s still a lot we can do to explore the different ways we might be able to use them to support teaching as well as learning…:-)

PS via Simon Willison, who also recalled a way of replaying Wikipedia pages, this old Greasemonkey script.

PPS Sort of related, and also linking this post with [A] Note On Web References and Broken URLs, an inkdroid post by Ed Summers on Web Histories that reviews a method by Prof Richard Rogers for Doing Web history with the Internet Archive: screencast documentaries.

20 Dec 05:44

When You Make a Member-Only Post Public, You Lose All the Comments and Applause

by Stowe Boyd

That’s not a great use case, is it?

20 Dec 05:44

What’s your money doing right now?

by William

I wrote a piece about Vancity’s business model and our support for Modo as an example of that.

Here in B.C., we think about how our actions affect our community. We watch how we consume and recycle, we shop locally, we compost, and we’re concerned about our effects on the planet.

I say “we” because we know from a recent poll that in B.C. 98% of us say we recycle all or some of the time; 89% of us read ingredients to make healthy food choices, and 52% of us commute in an environmentally responsible way. A third of us say that we research the ethics of companies we are considering purchasing from.

Check out the whole post

20 Dec 05:44

Magic work

by Lilia Efimova

MagicianAlexander has been into magician performances for a while now. So we didn’t want to miss an opportunity to see one just across the border in Muenster (and it was in Russian, which is always a bonus).

What I liked the most from the performances of Piter Bunt yesterday next to the pure magic and a glimpse of the science behind it, are the ethos of the work shared in the masterclass: the magic is for others to enjoy, you only need to know how a trick works if you are going to do it yourself and (a lot of) practice makes perfect.

Magician Piter Bunt

20 Dec 05:44

Arbiter update

by jnyyz

We’re into the tail end of exams, and so things have slowed down at the bike shop, but I thought I’d post a few pictures of the progress on our vehicle for ASME HPVC 2018. CM1-1

The fairing is well underway. The first thing was to do the aeromodelling on the design,

image 3

and then to check for rider fit.

Sharp eyed readers might notice that the pedal stroke looks odd, but this is something that we are testing. Pay attention to the path traced by the end of the secondary cranks.

Once the shell design is locked down, we start working on a plug. The first step is to carve foam sheets in sections on our CNC router table.

DSC01888

The complete plug glued together.

IMG_7178

The other side has been sanded.

20171127_221037

Then a couple of layers of fibreglass. Here is the first side done.

IMG_7190

and the second.

DSC01896

In the meantime, here is the BB assembly for the K drive

IMG_7219

Now putting durabond on the plug.

IMG_7276

Next steps will be to sand the plug, and then to lay up a fibreglass female mold from it.  If you compare where we are to last year, you’ll see that we are doing well. You can see a preview of some of the next steps by looking at this sequence of photos from the construction of last year’s bike.

Update (January 5): the team has posted some pictures of the finished plug.

IMG_7437
20 Dec 05:43

Bloggers' Perks - going to a fashion showcase

by Helen Keegan
Occasionally I get invited to interesting events on the back of having a blog. One of these instances happened almost a month ago when I was invited to the JD Williams and SimplyBe showcase of the upcoming fashion stories for Spring Summer 2018. It's not normally the kind of stuff I cover here on my blog but as I was in the West End that day anyway, I thought I'd pop over and see what they had on offer.

My first career was in fashion retail. I spent the best part of 10 years in a management role in both standalone stores in Worcester, Birmingham and London and in concessions within Selfridges and House of Fraser. An even before that, I has more than a healthy interest in fashion and clothing as I started making my own clothes at the tender age of 10. I still love textiles and the craft of making things, although I don't have as much time to devote to it these days as I'd like.

It's more than 20 years since I last worked on the shop floor but it's ingrained in me. One of those formative experiences that shapes who you are without you realising it. One of the assistants showed me around the different collections and explained how the pieces sat together and then left me to have a browse. And I was taken back to the early 1990s and working on the fashion floors of various London department stores. And just like I did back then, I spent quite a bit of my time people-watching. That was possibly the best bit. Oh and the gorgeous lavender lemonade.

I don't really go clothes shopping any more. I spent so long working in fashion that I accumulated a large wardrobe and stopped enjoying shopping for clothes as a pastime. It's fun to do occasionally, but it's certainly not how I want to spend my weekends any more. Plus, I still have way too many clothes due to a love of bargain hunting for interesting fashion pieces on eBay. So this made a welcome change.

For the ladies reading this, and those buying for the ladies in their lives, here's what's in for next season according to JD Williams and SimplyBe. 
  • Acid brights with denim and white. Lots of embroidery and folk styles. Hippy style blouses and tops. Embellished jeans with embroidery or chunky laces on the outer seams. Lace edges and braid trims.
  • Neutrals. Classic tones in beige, pale grey, cream and off white in silky fabrics. Simple, elegant styling that are easy to wear and easy to mix and match. Fantasy tweed in white with flecks is in and I spotted a lovely fantasy tweed handbag in a Chanel style but not at Chanel prices. Also I saw duster coats and long line jackets - the kind of which I haven't seen since the 1990s.
  • Florals of all kinds in blouses, dresses and the pyjama style unstructured suit is still a thing. 
  • Denim everything. Double denim, even triple denim. Pale and dark denim. I saw denim shirts, jeans, shirt dresses, jackets - jeans jacket style and also a quilted and embroidered bomber jacket in denim. My favourite denim piece was a trench style coat.
  • Cashmere and silk casual wear in grey, black and cream. My favourite was a cashmere mix two piece of knitted culottes and loose v-neck sweater. There were also some lovely ponchos and loose knits that looked both stylish and cosy to wear.
  • Summer sequins for day wear. Lots of them in both neutrals and acid brights. These were seen on tops and dresses in both the JD Williams and the SimplyBe collections. 
What I liked about the clothes I saw was that they were wearable, reasonably priced and didn't scream 'fashion trend' at you. What the fit or comfort levels are like, I don't know as these were all samples and not available to try on. The finish quality looked good though, especially for the price tags.

I didn't take many photos, but the few I did take are in the collection below. Click on the image to see them. The non-fashion images are of the art and lighting in the foyer of the building. Most impressive.

JD Williams SS2018 Fashion Showcase

Thank you to JD Williams and SimplyBe for having me.

Day 17/25 Blogmas
20 Dec 05:43

Movies Critics Loved, But Audiences Really Didn’t

by David McCandless

Star Wars: The Last Jedi is the biggest movie ever to create such a dramatic divide between critics & audience on Rotten Tomatoes. Currently, Jedi’s aggregate critical score is 93%. The audience score is just 56%. An 37% chasm.

In fact, by our count, only seven films over the last decade have suffered a wider split. And one of those, of course, was Hail Caesar!

» See those and the biggest, most divisive movies in our infographic
» See the data

20 Dec 05:37

High-Speed Transit: Vancouver-Seattle

by Ken Ohrn

Hi.Speed.RailIt looks to me like another stop along the slow ride towards high-speed rail in the Cascadia region.

But call this a trial balloon, a feasibility inquiry, a buncha baloney, a perfect dream, filling a hunger for options:  whatever, it’s a study by Washington State DoT (and many others, including BC’s MoTI) on tech options, routes and costs for a bullet-like train linking Vancouver, Seattle and Portland. It was presented Thursday, Dec 14, 2017 to the Washington State Joint Transportation Committee.  It includes a call for further investment to build a business case.

Video HERE.  Report PDF HERE.

Knutson (*) said the idea of rapid rail has high-level support from government in both countries — Prime Minister Justin Trudeau and B.C. Premier John Horgan have publicly endorsed the concept — as well as from business, labour and environmental leaders.

“This really is about investing in ourselves and in the broader Cascadia region,” he said, “and in these tough, troubled times we need more openness, more connectivity, more trade, not less, and this could really be a powerful symbol.”

In January, the state will receive the results of an economic analysis paid for by private sector money, the majority of which came from Microsoft.  “We think that’s going to be really important because in this type of system it can also provide a lot of economic development for our area,” said Ron Pate, director of rail, trade and ports for the Washington State Department of Transportation.

The next step, Pate said, is to conduct a business case study that will look closer at ridership, governance, funding and financial mechanisms. It’s a document that will be used when speaking with future investors.

“Every time we’ve asked the question, ‘Is there a compelling case for this?’ it comes back and says, ‘Yes, keep going,’” Knutson said. “That’s what we hope to do.”

With thanks to Jennifer Saltman in PostMedia outlet the Vancouver Sun

(*) Charles Knutson, executive policy adviser to Washington state Gov. Jay Inslee.


20 Dec 05:30

Earthlings, Unite: Let’s Go to Mars | Tim Kreider

Earthlings, Unite: Let’s Go to Mars | Tim Kreider: Tim Kreider suggests we need a project to help us...
20 Dec 05:30

What is Bitcoin Really Worth? Don’t Even Ask. | Robert...



What is Bitcoin Really Worth? Don’t Even Ask. | Robert Shiller

The academic literature tells us that volatility of an underlying asset often fallsafter the establishment of new futures markets for it. But the ability to short an asset more easily won’t necessarily overcome the power of investor excitement.

In 1936, John Maynard Keynes suggested why. He played down the role of quantitative analysis and probability estimates in human thinking of the assessment of ambiguous future events. People in such situations are vulnerable to a play of emotions and at times a “spontaneous urge to action” that he called “animal spirits.” He argued that much of what happens in financial markets has to do with people learning, from price movements, about each other’s animal spirits.

I believe that Mr. Keynes was correct about animal spirits in general and how they affect markets like the one for Bitcoin. George Akerlof and I expanded on his perspective in our 2009 book Animal Spirits, which argued that the driving force behind human enterprise cannot be reduced to the rational optimization emphasized by traditional economics. Darwinian evolution produced a human species whose behavior sometimes seems to be emotionally driven.

Neuroscientists, psychologists and economists are leading us toward new models of human decision-making. They may help to explain phenomena like the Bitcoin price rise.

Scott Huettel, a Duke neurologist, and other researchers showed in 2006, for example, that when making decisions involving ambiguity, people do not use the parts of the brain required for calculations of probabilities and expected values. And the economists Anat Bracha of the Boston Federal Reserve and Donald Brown of Yale have provided an alternative to conventional economic theory of human behavior under uncertainty. They define a different kind of rationality — one based on Mr. Keynes’ views, not on calculations of utility — in ambiguous situations.

Furthermore, a paper by neuroscientists including Benjamin Lu that was presented at the Society for Neuroeconomics annual convention in Toronto in October, showed that psychologically stressful experiences can result in changes in neurological processes when ambiguous situations arise.

In short, the Bitcoin market is a marvelous case study in ambiguity and animal spirits. It is providing invaluable information about how millions of human brains process stimuli coming, in this case, from public acceptance, imagination, and innovation surrounding cryptocurrencies.

It’s a mass hallucination.

(image Michael Waraksa)

18 Dec 16:00

mqtt Development Log : On DSLs, Rcpp Modules and Custom Formula Functions

by hrbrmstr

I know some folks had a bit of fun with the previous post since it exposed the fact that I left out unique MQTT client id generation from the initial 0.1.0 release of the in-development package (client ids need to be unique).

There have been some serious improvements since said post and I thought a (hopefully not-too-frequent) blog-journal of the development of this particular package might be interesting/useful to some folks, especially since I’m delving into some not-oft-blogged (anywhere) topics as I use some new tricks in this particular package.

Thank The Great Maker for C++

I’m comfortable and not-too-shabby at wrapping C/C++ things with an R bow and I felt quite daft seeing this after I had started banging on the mosquitto C interface. Yep, that’s right: it has a C++ interface. It’s waaaaay easier (in my experience) bridging C++ libraries since Dirk/Romain’s (et al, as I know there are many worker hands involved as well) Rcpp has so many tools available to do that very thing.

As an aside, if you do any work with Rcpp or want to start doing work in Rcpp, Masaki E. Tsuda’s Rcpp for Everyone is an excellent tome.

I hadn’t used Rcpp Modules before (that link goes to a succinct but very helpful post by James Curran) but they make exposing C++ library functionality even easier than I had experienced before. So easy, in fact, that it made it possible to whip out an alpha version of a “domain specific language” (or a pipe-able, customized API — however you want to frame these things in your head) for the package. But, I’m getting ahead of myself.

The mosquittopp class in the mosqpp namespace is much like the third bowl of porridge: just right. It’s neither too low-level nor too high-level and it was well thought out enough that it only required a bit of tweaking to use as an Rcpp Module.

First there are more than a few char * parameters that needed to be std::strings. So, something like:

int username_pw_set(const char *username, const char *password);

becomes:

int username_pw_set(std::string username, std::string password);

in our custom wrapper class.

Since the whole point of the mqtt package is to work in R vs C[++] or any other language, the callbacks — the functions that do the work when message, publish, subscribe, etc. events are triggered — need to be in R. I wanted to have some default callbacks during the testing phase and they’re really straightforward to setup in Rcpp:

Rcpp::Environment pkg_env = Rcpp::Environment::namespace_env("mqtt");

Rcpp::Function ccb = pkg_env[".mqtt_connect_cb"];
Rcpp::Function dcb = pkg_env[".mqtt_disconnect_cb"];
Rcpp::Function pcb = pkg_env[".mqtt_publish_cb"];
Rcpp::Function mcb = pkg_env[".mqtt_message_cb"];
Rcpp::Function scb = pkg_env[".mqtt_subscribe_cb"];
Rcpp::Function ucb = pkg_env[".mqtt_unsubscribe_cb"];
Rcpp::Function lcb = pkg_env[".mqtt_log_cb"];
Rcpp::Function ecb = pkg_env[".mqtt_error_cb"];

The handy thing about that approach is you don’t need to export the functions (it works like the ::: does).

But the kicker is the Rcpp Module syntactic sugar:

RCPP_MODULE(MQTT) {

  using namespace Rcpp;

  class_<mqtt_r>("mqtt_r")
    .constructor<std::string, std::string, int>("id/host/port constructor")
    .constructor<std::string, std::string, int, std::string, std::string>("id/host/port/user/pass constructor")
    .constructor<std::string, std::string, int, Rcpp::Function, Rcpp::Function, Rcpp::Function>("id/host/post/con/mess/discon constructor")
    .method("connect", &mqtt_r::connect)
    .method("disconnect", &mqtt_r::disconnect)
    .method("reconnect", &mqtt_r::reconnect)
    .method("username_pw_set", &mqtt_r::username_pw_set)
    .method("loop_start", &mqtt_r::loop_start)
    .method("loop_stop", &mqtt_r::loop_stop)
    .method("loop", &mqtt_r::loop)
    .method("publish_raw", &mqtt_r::publish_raw)
    .method("publish_chr", &mqtt_r::publish_chr)
    .method("subscribe", &mqtt_r::subscribe)
    .method("unsubscribe", &mqtt_r::unsubscribe)
    .method("set_connection_cb", &mqtt_r::set_connection_cb)
    .method("set_discconn_cb", &mqtt_r::set_discconn_cb)
    .method("set_publish_cb", &mqtt_r::set_publish_cb)
    .method("set_message_cb", &mqtt_r::set_message_cb)
    .method("set_subscribe_cb", &mqtt_r::set_subscribe_cb)
    .method("set_unsubscribe_cb", &mqtt_r::set_unsubscribe_cb)
    .method("set_log_cb", &mqtt_r::set_log_cb)
    .method("set_error_cb", &mqtt_r::set_error_cb)
   ;

}

That, combined with RcppModules: MQTT in the DESCRIPTION file and a MQTT <- Rcpp::Module("MQTT") just above where you’d put an .onLoad handler means you can do something like (internally, since it’s not exported):

mqtt_obj <- MQTT$mqtt_r

mqtt_conn_obj <- new(mqtt_obj, "unique_client_id", "test.mosquitto.org", 1883L)

and have access to each of those methods right from R (e.g. mqtt_conn_obj$subscribe(0, "topic", 0)).

If you’re careful with your C++ class code, you’ll be able to breeze through exposing functionality.

Because of the existence of Rcpp Modules, I was able to do what follows in the next section in near record time.

“The stump of a %>% he held tight in his teeth”

I felt compelled to get a Christmas reference in the post and it’s relevant to this section. I like %>%, recommend the use of %>% and use %>% in my own day-to-day R coding (it’s even creeping into internal package code, though I still try not to do that). I knew I wanted to expose a certain way of approaching MQTT workflows in this mqtt package and that meant coming up with an initial — but far from complete — mini-language or pipe-able API for it. Here’s the current thinking/implementation:

  • Setup connection parameters with mqtt_broker(). For now, it takes some parameters, but there is a URI scheme for MQTT so I want to be able to support that as well at some point.
  • Support authentication with mqtt_username_pw(). There will also be a function for dealing with certificates and other security-ish features which look similar to this.
  • Make it dead-easy to subscribe to topics and associate callbacks with mqtt_subscribe() (more on this below)
  • Support an “until you kill it” workflow with mqtt_run() that loops either forever or for a certain number of iterations
  • Support user-controlled iterations with mqtt_begin(), mqtt_loop() and mqtt_end(). An example (in a bit) should help explain this further, but this one is likely to be especially useful in a Shiny context.

Now, as hopefully came across in the previous post, the heart of MQTT message processing is the callback function. You write a function with a contractually defined set of parameters and operate on the values passed in. While we should all likely get into a better habit of using named function objects vs anonymous functions, anonymous functions are super handy, and short ones don’t cause code to get too gnarly. However, in this new DSL/API I’ve cooked up, each topic message callback has six parameters, so that means if you want to use an anonymous function (vs a named one) you have to do something like this in message_subscribe():

mqtt_subscribe("sometopic",  function(id, topic, payload, qos, retain, con) {})

That’s not very succinct, elegant or handy. Since those are three attributes I absolutely 💙 about most things related to R, I had to do something about it.

Since I’m highly attached to the ~{} syntax introduced with purrr and now expanding across the Tidyverse, I decided to make a custom version of it for message_subscribe(). As a result, the code above can be written as:

mqtt_subscribe("sometopic",  ~{})

and, you can reference id, topic, payload, etc inside those brackets without the verbose function declaration.

How is this accomplished? Via:

as_message_callback <- function(x, env = rlang::caller_env()) {
  rlang::coerce_type(
    x, rlang::friendly_type("function"),
    closure = { x },
    formula = {
      if (length(x) > 2) rlang::abort("Can't convert a two-sided formula to an mqtt message callback function")
      f <- function() { x }
      formals(f) <- alist(id=, topic=, payload=, qos=, retain=, con=)
      body(f) <- rlang::f_rhs(x)
      f
    }
  )
}

It’s a shortened version of some Tidyverse code that’s more generic in nature. That as_message_callback() function looks to see if you’ve passed in a ~{} or a named/anonymous function. If ~{} was used, that function builds a function with the contractually obligated/expected signature, otherwise it shoves in what you gave it.

A code example is worth a thousand words (which is, in fact, the precise number of “words” up until this snippet, at least insofar as the WordPress editor counts them):

library(mqtt)

# We're going to subscribe to *three* BBC subtitle feeds at the same time!
#
# We'll distinguish between them by coloring the topic and text differently.

# this is a named function object that displays BBC 2's subtitle feed when it get messages
moar_bbc <- function(id, topic, payload, qos, retain, con) {
  if (topic == "bbc/subtitles/bbc_two_england/raw") {
    cat(crayon::cyan(topic), crayon::blue(readBin(payload, "character")), "\n", sep=" ")
  }
}

mqtt_broker("makmeunique", "test.mosquitto.org", 1883L) %>% # connection info
  
  mqtt_silence(c("all")) %>% # silence all the development screen messages
  
  # subscribe to BBC 1's topic using a fully specified anonyous function
  
  mqtt_subscribe(
    "bbc/subtitles/bbc_one_london/raw",
    function(id, topic, payload, qos, retain, con) { # regular anonymous function
      if (topic == "bbc/subtitles/bbc_one_london/raw")
        cat(crayon::yellow(topic), crayon::green(readBin(payload, "character")), "\n", sep=" ")
    }) %>%
  
  # as you can see we can pipe-chain as many subscriptions as we like. the package 
  # handles the details of calling each of them. This makes it possible to have
  # very focused handlers vs lots of "if/then/case_when" impossible-to-read functions.
  
  # Ahh. A tidy, elegant, succinct ~{} function instead
  
  mqtt_subscribe("bbc/subtitles/bbc_news24/raw", ~{ # tilde shortcut function (passing in named, pre-known params)
    if (topic == "bbc/subtitles/bbc_news24/raw")
      cat(crayon::yellow(topic), crayon::red(readBin(payload, "character")), "\n", sep=" ")
  }) %>%
  
  # And, a boring, but -- in the long run, better (IMO) -- named function object
  
  mqtt_subscribe("bbc/subtitles/bbc_two_england/raw", moar_bbc) %>% # named function
  
  mqtt_run() -> res # this runs until you Ctrl-C

There’s in-code commentary, so I’ll refrain from blathering about it more here except for noting there are a staggering amount of depressing stories on BBC News and an equally staggering amount of un-hrbrmstr-like language use in BBC One and BBC Two shows. Apologies if any of the GH README.md snippets or animated screenshots ever cause offense, as it’s quite unintentional.

But you said something about begin/end/loop before?

Quite right! For that we’ll use a different example.

I came across a topic — “sfxrider/+/locations” — on broker.mqttdashboard.com. It looks like live data from folks who do transportation work for “Shadowfax Technologies” (which is a crowd-sourced transportation/logistics provider in India). It publishes the following in the payload:

| device:6170774037 | latitude:28.518363 | longitude:77.095753 | timestamp:1513539899000 |
| device:6170774037 | latitude:28.518075 | longitude:77.09555 | timestamp:1513539909000 |
| device:6170774037 | latitude:28.518015 | longitude:77.095488 | timestamp:1513539918000 |
| device:8690150597 | latitude:28.550963 | longitude:77.13432 | timestamp:1513539921000 |
| device:6170774037 | latitude:28.518018 | longitude:77.095492 | timestamp:1513539928000 |
| device:6170774037 | latitude:28.518022 | longitude:77.095495 | timestamp:1513539938000 |
| device:6170774037 | latitude:28.518025 | longitude:77.095505 | timestamp:1513539947000 |
| device:6170774037 | latitude:28.518048 | longitude:77.095527 | timestamp:1513539957000 |
| device:6170774037 | latitude:28.518075 | longitude:77.095573 | timestamp:1513539967000 |
| device:8690150597 | latitude:28.550963 | longitude:77.13432 | timestamp:1513539975000 |
| device:6170774037 | latitude:28.518205 | longitude:77.095603 | timestamp:1513539977000 |
| device:6170774037 | latitude:28.5182 | longitude:77.095587 | timestamp:1513539986000 |
| device:6170774037 | latitude:28.518202 | longitude:77.095578 | timestamp:1513539996000 |
| device:6170774037 | latitude:28.5182 | longitude:77.095578 | timestamp:1513540006000 |
| device:6170774037 | latitude:28.518203 | longitude:77.095577 | timestamp:1513540015000 |
| device:6170774037 | latitude:28.518208 | longitude:77.095577 | timestamp:1513540025000 |

Let’s turn that into proper, usable, JSON (we’ll just cat() it out for this post):

library(mqtt)
library(purrr)
library(stringi)

# turn the pipe-separated, colon-delimeted lines into a proper list
.decode_payload <- function(.x) {
  .x <- readBin(.x, "character")
  .x <- stri_match_all_regex(.x, "([[:alpha:]]+):([[:digit:]\\.]+)")[[1]][,2:3]
  .x <- as.list(setNames(as.numeric(.x[,2]), .x[,1]))
  .x$timestamp <- as.POSIXct(.x$timestamp/1000, origin="1970-01-01 00:00:00")
  .x
}

# do it safely as the payload in MQTT can be anything
decode_payload <- purrr::safely(.decode_payload)

# change the client id
mqtt_broker("makemeuique", "broker.mqttdashboard.com", 1883L) %>%
  mqtt_silence(c("all")) %>%
  mqtt_subscribe("sfxrider/+/locations", ~{
    x <- decode_payload(payload)$result
    if (!is.null(x)) {
      cat(crayon::yellow(jsonlite::toJSON(x, auto_unbox=TRUE), "\n", sep=""))
    }
  }) %>%
  mqtt_run(times = 10000) -> out

What if you wanted do that one-by-one so you could plot the data live in a Shiny map? Well, we won’t do that in this post, but the user-controlled loop version would look like this:

mqtt_broker("makemeuique", "broker.mqttdashboard.com", 1883L) %>%
  mqtt_silence(c("all")) %>%
  mqtt_subscribe("sfxrider/+/locations", ~{
    x <- decode_payload(payload)$result
    if (!is.null(x)) {
      cat(crayon::yellow(jsonlite::toJSON(x, auto_unbox=TRUE), "\n", sep=""))
    }
  }) %>%
  mqtt_begin() -> tracker # _begin!! not _run!!

# call this individually and have the callback update a
# larger scoped variable or Redis or a database. You
# can also just loop like this `for` setup.

for (i in 1:25) mqtt_loop(tracker, timeout = 1000)

mqtt_end(tracker) # this cleans up stuff!

FIN

Whew. 1,164 words later and I hope I’ve kept your interest through it all. I’ve updated the GH repo for the package and also updated the requirements for the package in the README. I’m also working on a configure script (mimicking @opencpu’s ‘anti-conf’ approach) and found Win32 library binaries that should make this easier to get up and running on Windows, so stay tuned for the next installment and don’t hesitate to jump on board with issues, questions, comments or PRs.

The goal for the next post is to cover reading from either that logistics feed or OwnTracks and dynamically display points on a map with Shiny. Stay tuned!

18 Dec 15:59

Vancouver’s bold new housing plan calls for massive rental construction — but the people who would build it say the city makes it almost impossible. Some are giving up

by Frances Bula

This story is an example of how following a trail of breadcrumbs on a story can lead to outcomes you never expected.

I started out planning to write something about yet another West End site selling for a crazy price — $79.5 million to newbie developer Vivagrand, with only one messy project so far on its resume in Vancouver — as the latest in what has turned into a boom in West End construction that even city planners can hardly believe. I think this is something like the 26th tower, making this take-up of new density as a result of the West End plan something no one had envisioned. It was supposed to take decades to get to the number of units projected. Instead, it’s taken a few years.

But as I was working on that story, along with some casual conversations as about the city’s plans to suppress speculation, people in the industry kept repeating the same story they had heard — that a number of developers had actually cancelled rental projects because of requirements from the city’s real-estate services department that they pay tens of millions in “community amenity contributions.” That’s something that has normally only been charged on condo projects, as part of the city’s model for development, which asks developers who are going through a rezoning to give back about 75 per cent of their “land lift” to the city to pay for the community services that will be needed as new residents move in.

My Globe story on this is here.

But, after years of Vancouver working to incentivize developers to build rentals — a form of housing that had almost stopped dead after everyone turned to condos in the 1980s — some were liking the rental thing so much that they started to plan projects that didn’t ask for city incentives. One example was the 43-storey Wall apartment tower at 1310 Richards, where the company paid almost $24-million in a CAC equivalent.

Then a demand for CACs became part of every rental project that came to the city.

At the same time, land prices were skyrocketing because condo prices were going up — especially downtown, where the Alberni/Georgia corridor seems to be transforming into some kind of luxury investor sculpture garden row of towers.

So landowners who had previously been attracted to rental now found that, not only were they being asked for millions in CACs, but the money on the other side of the equation had changed. Even after paying huge taxes on an outright sale or condo project, they’d still be further ahead than by building rental.

So they started backing out.

That’s only the beginning of the city’s problems when it comes to the ambitious plans to encourage the construction of 20,000 private-market purpose-built rentals. (i.e. permanent rental buildings, not condos that can be sold any time the investor thinks that would work out better.)

The companies with the most experience building rental, like, say, Cressey, are finding it nerve-wracking to go through the permitting process of building rental. A recent project that Cressey got approved near Olympic Village, something that the mayor touted this week as part of the city’s success in getting new kinds of lower-cost housing, almost didn’t make it.

After receiving assurances that the project wouldn’t have to pay a CAC and would qualify for a waiver of normal development-cost levies the city charges on all new construction (part of the incentive for rentals), Cressey got midway through the project and then was asked to provide its budget for the building to real-estate services — usually the opening move when real estate is going to ask for a CAC.

Cressey spent some time convincing real estate that there was no land lift. Once that was done, the company was told that it wasn’t going to qualify for the DCL waiver. Why? Because the city says that construction costs have to be under $250 a square foot for a company to qualify for Rental 100 incentives. That’s to prevent developers from building getting the waiver, then building expensive rentals that, after the first turnover, are rented out for top dollar.

But construction costs have been soaring. So the city decided Cressey likely couldn’t build for the required amount. (Presumably, that would mean no one could). Cressey then had to hire experts to testify that the company, in spite of the current rise, could still build for that amount.

But that’s only the tip of the iceberg, really, when it comes to rental problems. There were so many others that people ended up talking to me about.

One is the city’s plan for False Creek Flats, which many had thought would be an ideal location for rentals — close to downtown, likely to serve local populations working in the city’s booming tech businesses, easy to mix with the current industrial uses on the flats.

But the False Creek Flats plan has essentially made that a no go.

Then there is the rezoning in other areas, which limits heights no matter whether the building is rental or condos. That ends up forcing condo development on those sites, because the land prices make a rental building impossible unless extra density can be added.

David Taylor at Colliers said he had an ideal rental site for sale at 12th and Commercial, an area that is a natural gathering place for renters. But the city’s plan limits the site to six stories. He had a lot of buyers interested in building rental if they could get a couple more stories. But the answer was, Absolutely not. So the site was sold to a condo developer.

I’m sure some people will judge developers who spoke out for this story as just a bunch of privileged whiners who are unhappy they can’t make as much money as they’d like.

Whether they are or not, however, it’s doubtful whether the city is going to be able to meet its rental targets by hoping that developers will build rental as philanthropy. A few are doing it. But likely not enough to build 20,000 units in 10 years.

This whole exercise underscores a problem that I’ve been observing at the city for several years. That is: the people at the top are saying — and even trying to do — all the right things. The city’s housing plan, while not perfect, is a real effort to shape housing supply to better match the needs of people planning to live and work here.

But those goals are undercut when it gets down to the ground level — what happens when a project becomes the subject for negotiations with the real-estate services department, what happens when that project is in the hands of a mid-level planner who is trying to follow sometimes contradictory rules.

That’s why the city is going to succeed or fail, not on the basis of its much-covered policies, but on the basis of how the engine runs, or doesn’t, behind the scenes.

18 Dec 15:59

Shoveling up

by Justin

When I've shorn my garments in word and image, posting links and brief excerpts of recent recollections of old dreams seems so translucent by comparison. Anyhow - I was asked by Medium.com to write an essay about a word that defined 2017 for me, and I chose sovereignty.

They partnered me with a richly illustrated drawing of that word by Sunday Buro. From the American bunting, an eagle with its eyes bound, and my teaser bio reading: "An Unsettling Struggle for Sovereignty: Cannabis entrepreneur Justin Hall reflects on the sacrifices we make for the illusion of freedom." you would think my Sovereignty piece is about America's war on drugs. But it's much more about literally wrestling with my daughter.

It's the first time I've written an "Article" in a good long while and I was flattered to be asked and excited to have a chance to fire up my content production machine and share something again. I believe the article is behind a "paywall" which means the content is not visible unless you participate in the publication (Medium.com)'s efforts to sustain itself financially.

I have mixed feelings about the whole thing - I have become more ambivalent about public sharing. I dwelled in "public sharing" for 18 months up to 2016, before the shit got real weird. Of course at any moment we can look around and marvel at what humanity has made with what it has enabled; so why should we be surprised that social media might actually be a manipulative scourge? Let's find a newer mode of expression upon which we shall project our hopes for perpetual authenticity!

18 Dec 15:59

Links of the Quarter — December 2017

by Dave Pollard

New Yorker cover by R Kikuo Johnson

A dark time for me, finding myself absurdly triggered by completely ordinary events, and aware of the impossibility of letting go of my anxious, fear-driven, hypersensitive, reactive, stress-riddled self. Meanwhile, day to day events in the echelons of power get more and more surreal and alarming, and I can’t quite get myself to turn off the non-local ‘news’ completely; for no good reason, I just have to ‘know’. To know this is my biologically and culturally entrained self just doing the only thing it can do brings me no comfort. Not depressed about all of this; just drowning in the cognitive dissonance.

Feeling like a canary in the mineshaft, and something does not smell right.


PREPARING FOR CIVILIZATION’S COLLAPSE


Christmas card “José y Maria” by cartoonist Everett Patterson. Thanks to Dave Bonta for the link.

When There Is No Insurance Any More: The latest from td0s describes our investment in ‘stuff’ and what happens when we can no longer insure it against loss, because the risk of loss is now too great: “Is there a greater fear than being reset to zero after years and years of numb drudgery, all of it in the service of stacking up a bigger and bigger pile of things? The entire edifice of consumer society rests on the idea that we will work today and that the things we buy will still be ours tomorrow. No longer able to live in the world, to see the providence in the fields and streams, only the store shelves can keep us alive, and so we tithe the gods of chance praying that the future is long and uneventful.”

Listen for the Howl: If you didn’t read my short story that referenced td0s’ remarkable post Boldly Through the Darkness, take a moment to read it.


LIVING BETTER


Where you should live depending on your temperature preferences, from the inimitable xkcd. Before you move, you might want to consider how your new home will be affected by climate change

There Is No Jim Carrey: Thanks to his friend Jeff Foster, Jim embraces radical non-duality. And scientists continue to come up with findings that support this message; most recently comes the finding that the universe shouldn’t exist, and a biology book that asserts you have no free will.

Census Maps: Since a picture is often worth a thousand words, Census Mapper now allows Canadians to get a visual representation of census data by census division. The app breaks data down into deciles so you can see how your neighbourhood stacks up with others in income, home ownership, costs of living, demographics and other data. Thanks to Jens and Alejandro for developing it!

Best Science Books of 2017: The always-excellent BrainPickings (Maria Popova’s labour of love) lists her favourite new science books of the year; a tremendous list. Thanks to Tree Bressen for the link.


POLITICS & ECONOMICS AS USUAL


Taking a Knee at a Ravens Game — from Facebook, original source unknown

Enough is Enough: Satirist “Jonathan Pie” comments on the latest absurdities of 45. And here’s a very revealing interview with the man behind the satire.

Canada’s Doing Just Fine, Thanks: A writer humorously tells the US Ambassador to Canada that Canadians don’t need or want any help to be “as successful as Americans”.

Blaming the Victims: Millions of people turn to drugs or alcohol when there is no other way they can find to cope with their suffering. The cost of this is multifaceted: the health costs (money and misery) of and to the users, the misery they (mostly unintentionally) inflict on others as a consequence of their actions and inactions, the crimes some commit to pay for the drugs, and the massive cost of the absurd “war on drugs”. It is so easy to proffer simple solutions: mostly ban the drugs (this has never worked and actually increases the cost), and blame the victims. Thousands of people are now dying each year of fentanyl poisoning — toxins put into street drugs by uncaring dealers and pushers to reduce their cost and to increase the dose (to encourage ‘repeat customers’). Meanwhile millions of people suffering from chronic pain, who have been prescribed opiates for years for pain conditions that never let up and for which there is no known medical cure or effective alternative treatments, are now demonized and presumed to be addicts at a high risk for ‘abuse’, and deprived of essential pain relief under harsh hew prescribing rules in the latest blame-the-victim chapter of the endless “war on drugs”. What are they to do? If they can no longer get their prescriptions filled safely by their doctors (many of whom are being threatened by medical associations, insurers and political agencies to reduce opioid prescribing across-the-board), they are forced to turn to the streets, swelling the numbers exposed to fentanyl poisoning. Vicious cycle. We never learn.


FUN & INSPIRATION


Josephine Lake, Bowen Island (my own photo)

Hawk Raised By Eagles: The story of the tiny red-tailed hawk on Vancouver Island that muscled itself into a young eagle family in their nest, and ended up being raised as if it were an eagle.

Iconic Tree Replaced on Building Top: A condo in English Bay (Vancouver BC) has long been the home to a famous rooftop pine tree that the builder/owner insisted be there to recognize the average height (60m) of the temperate rainforest that had been felled to construct the English Bay community. When the tree died, it took two years to find a suitable replacement, and half a million dollars to get it up into place on the roof. Out on her balcony, Kelly Gavin snapped the shot at sunset just as it was being lowered into place, that the CBC used at the top of its coverage. Now waiting to see if the bald eagles return to nest there.

Fox and the Whale: Quirky, unsentimental animation from Robin Joseph.

Faster Growth Means Fewer Nutrients: Ironically, as the increased amount of CO2 in our atmosphere allows plants (which need it to live) to grow faster, they are producing food with fewer nutrients (less time for them to mature and metabolize). That means the food we eat is poorer too. Thanks to Tree Bressen for the link.

I Want My Bonus Years: The writer urges men to start dating women their own age, for everyone’s benefit. (NB: This is a NYT article, so if you’ve used up your “10 articles per month quota” you won’t be able to read it, or re-read it.)

The Case for Not Being Born: Philosopher David Benatar argues that life and death both entail enormous amounts of suffering, so it is better not to be born (or have children) in the first place.

Trump’s Slurred Speech Tied to Low Battery in Putin’s Remote: Humour from Andy Borowitz on 45’s recent addled speech patterns.

Giving Up Butter: The 5 Stages of Grief: A hilarious take on the naming of butter substitutes. Thanks to Ben Collver for the link.


THOUGHTS OF THE QUARTER


Land art, Pūliki (“the embrace” in Hawai’ian), created using non-toxic biodegrading chalk, across a whole series of trees, by Hula (Sean Yaro). Also check out his ‘Ōwena

From Rachel Carson: “If you write what you yourself sincerely think and feel and are interested in, the chances are very high that you will interest other people as well.” (thanks to BrainPickings for this quote and the two that follow)

From Seneca: “There are more things … likely to frighten us than there are to crush us; we suffer more often in imagination than in reality.”

From James Baldwin: “You have to go the way your blood beats. If you don’t live the only life you have, you won’t live some other life, you won’t live any life at all. That’s the only advice you can give anybody. And it’s not advice, it’s an observation.”

From Dave Snowden (thanks to Chris Corrigan for the link) on coping with complexity:

  • DO: Change the granularity (drill down or get up above the detail); Distributed cognition (get others to help you make sense of it); Disintermediated sensemaking (don’t rely on media/experts/leaders to make sense of things for you).
  • AVOID: Premature convergence (keep an open mind on what it all means); Retrospective coherence (rationalizing in hindsight); Pattern entrainment (getting into oversimplification and other bad sense-making habits learned from others).
  • ASK: What can I change? What can I monitor? What can I dampen and amplify? (provided you aren’t a non-dualist).
18 Dec 15:57

Efficiently encoding binary data in Tweets

Code » tl;dr: if you wish to efficiently encode binary data as Tweets, don't use Base64 (210 bytes per Tweet) normally use Base2048 (385 bytes per Tweet) unless you can circumvent the client-side check, in which case use Base65536 (560 bytes per Tweet) So anyway How much binary data can you fit into the text of a Tweet? For this piece of work I'll be ignoring the prospect of using automatically-minified URLs. Let's focus on the pure, unmodified text of the Tweet. This is a Unicode string. Note that this string is subject to normalization when in transit through the guts of Twitter. This means that we can't just use any character we like for this purpose — such normalization may alter the text of the Tweet, which for our purposes constitutes data corruption. We need to stick with characters which do not change when normalized. For a longer discussion of this topic, see What makes a Unicode code point safe? Additionally, the amount of data which will fit in a Tweet depends on the ...
18 Dec 15:56

We messed up. We’re sorry, and we’re not rolling out the fees change.

mkalus shared this story from The Patreon Blog:
Gee.

Creators and Patrons,

We’ve heard you loud and clear. We’re not going to rollout the changes to our payments system that we announced last week. We still have to fix the problems that those changes addressed, but we’re going to fix them in a different way, and we’re going to work with you to come up with the specifics, as we should have done the first time around. Many of you lost patrons, and you lost income. No apology will make up for that, but nevertheless, I’m sorry. It is our core belief that you should own the relationships with your fans. These are your businesses, and they are your fans.

I’ve spent hours and hours on the phone with creators, and so has the Patreon team. Your feedback has been crystal clear:

  • The new payments system disproportionately impacted $1 – $2 patrons. We have to build a better system for them.
  • Aggregation is highly-valued, and we underestimated that.
  • Fundamentally, creators should own the business decisions with their fans, not Patreon. We overstepped our bounds and injected ourselves into that relationship, against our core belief as a business.

We recognize that we need to be better at involving you more deeply and earlier in these kinds of decisions and product changes. Additionally, we need to give you a more flexible product and platform to allow you to own the way you run your memberships.

I know it will take a long time for us to earn back your trust. But we are utterly devoted to your success and to getting you sustainable, reliable income for being a creator. We will work harder than ever to build you tools, functionality, and income, and our team won’t rest until Patreon is making that happen.

If you haven’t sent us a note yet, or if you don’t see your concerns listed above, please leave us your feedback here.

Thanks for continuing to create. We are nothing without you, and we know that.

Jack

18 Dec 15:56

Eastern Europeans Tired of Inferior Products

mkalus shared this story from SPIEGEL ONLINE - Schlagzeilen.

It was a mid-July day in Bratislava when Slovakian Prime Minister Robert Fico gave vent to his fury, pulling off his jacket and threatening to hand down sanctions. But his anger wasn't directed at some tin-pot dictator. Rather, his tirade was focused on fish sticks from Iglo and fabric softener from Lenor. Those companies, Fico threatened, could find themselves boycotted if they continued to sell inferior products to the consumers of Eastern Europe.

His message could hardly have been clearer.

Fico, though, wasn't speaking just for people in his own country. Rather, he was giving voice to those across Central and Eastern Europe who have long wondered why Nutella doesn't taste as chocolatey at home as it does in Germany, for example, or why the cola isn't as full-bodied and the washing powder doesn't work as well.

He was speaking for 103 million EU citizens who for years have been forced to make due with second-rate versions of brand-name products. Not only that, but questionable studies have even claimed to show that Eastern European consumers prefer the mediocre goods to the real thing. The Polish newspaper Gazeta Prawna has referred to the phenomenon as "grocery racism."

Fico's mid-summer jeremiad was just the latest climax in an ongoing, potentially explosive conflict involving first- and second-class consumers. At issue is not just the question as to why large companies dump apparently inferior products onto the Eastern European market, thus "defrauding" millions of consumers, as Slovakian Agricultural Minister Gabriela Matecná puts it. It is also about the European Union's commitment to unity and whether that commitment should extend to the recipes used by Nutella.

The European Commission in Brussels has been repeatedly informed of the fact that products sold under the same brand name sometimes contain different ingredients depending on where in Europe they are sold. But the EU executive body only got involved once several leading Eastern European politicians began focusing on the issue. This spring, the chief of staff to Hungarian Prime Minister Viktor Orbán referred to the situation as "the biggest scandal of the recent past." The Czech agricultural minister said it made people feel as though they were "Europe's garbage can."

Justified Complaints

European Commission President Jean-Claude Juncker promised a bit of help in his September State of the Union address. And a first step was taken by European Justice and Consumers Commissioner Vera Jourová, who ordered an evaluation of tests that have been performed on products in various Eastern European countries. That evaluation found that Robert Fico may have been justified in the complaints he made back in July.

One test showed that a package of fish sticks sold in Slovakia contained just 58 percent fish whereas a package purchased across the border in Austria included 65 percent fish. When it came to the bottle of Lenor fabric softener provided by Fico, it cost 30 cents more than in Austria and contained 60 milliliters less. In other products, more expensive ingredients like butter have been replaced by cheaper palm oil for the Eastern European market while fruit flavors are augmented by aromas. In products like Coca-Cola, sugar is sometimes replaced with cheaper sweeteners like glucose syrup.

International Newsletter

Sign up for our newsletter -- and get the very best of SPIEGEL in English sent to your email inbox twice weekly.

In the first years following the collapse of communism, the use of cheaper ingredients could perhaps have been justifiable: Consumers had little purchasing power and delivery routes tended to be long, with most of the products being manufactured in Western Europe. Companies, though, have long since adjusted prices in Eastern Europe to match those elsewhere - but they have continued to use the inferior recipes. Armin Valet, an expert on grocery products for the consumer protection agency in Hamburg, estimates that selling inferior products saves companies millions.

Commissioner Jourová has now assembled an investigative committee which is to develop guidelines together with consumer protection groups and food manufacturers to address the issue. It's not a particularly powerful lever, but the companies do seem concerned about more radical steps. A steady stream of companies and lobbying groups have been approaching Jourová and her team.

Unfair Commercial Practice

Whether their solicitation efforts are successful will be seen in how willing the Commission ultimately proves to be in granting concessions. One specific area to watch is the EU's evaluation of industry studies pertaining to alleged regional preferences. In the future, companies that are unable to adequately explain why they use differing recipes could face proceedings for unfair commercial practices.

Past attempts by companies to explain the discrepancies have been prime examples of PR balderdash, including claims that they were simply trying to use local products or account for local tastes and preferences. In other words, skimping on premium ingredients was merely an expression of intercultural understanding. In the future, the Commission will demand convincing proof of the differences in taste between Eastern and Western Europe. To date, none has been provided.

        Graphic: Product discrepancies between the East and West.

DER SPIEGEL

Graphic: Product discrepancies between the East and West.

Instead, many companies prefer to hide behind formulaic statements and continue to reject all accusations of any wrongdoing. Industry lobbying groups have likewise sought to cast doubt on the studies that have found recipe discrepancies.

But Bahlsen, the manufacturer of the popular sweet biscuits under the Leibniz brand, has taken a different tack. Recently, the company fixed a discrepancy between the recipe it was using in Germany and the recipe it was using in Poland. Company spokesman Christian Bahlmann says that he began suspecting an approaching PR disaster for the company in summer 2016. "It began relatively quietly on social media channels," he says. Customers were asking why Leibniz biscuits baked in the company's Polish factory contained less butter and more palm oil than those produced in Germany. And the company did not have a satisfactory answer.

Bahlmann realized that it could become a problem for the brand. After all, the recipe for the sweet biscuits had been around since 1891. Suddenly diluting it with palm oil looked extremely suspicious. But in July, Bahlsen reversed course and has been using exclusively butter since then -- in its Polish factory as well.

Cheaper Production

Another company that has elected to buck the industry-wide trend of denial is Frosta, a Hamburg-based frozen food company. Felix Ahlers, whose family runs the company, has chosen not to try to use the "national preferences" excuse cited by Iglo, its main competitor. "There is only one reason to use less fish," Ahlers says. "To make production cheaper."

For years, Frosta fish sticks produced in Poland were wrapped in a much thicker layer of breading. But the company fixed the inconsistency a year and a half ago. In contrast to Germany and Austria, there are no laws in Poland that required Frosta to make the change, but Ahlers says it was an issue of credibility. "The argument about regional tastes is nonsense," he says. It isn't difficult, he says, to condition children to prefer more breading. "But really, everybody wants more fish in their product," he says. And tests undertaken by Frosta, he says, have shown that Polish consumers prefer the new recipe.

Still, many companies continue to insist that it makes sense to have different recipes for different countries. A spokeswoman for the SPAR supermarket chain in Austria made clear that the company doesn't believe products should contain exactly the same ingredients across Europe. The yoghurt sold by SPAR in Eastern Europe, for example, has less fruit in it than the same yoghurt -- packaged under a virtually identical label - sold in Austria, according to a test performed by the Slovenian consumer protection organization ZPS. Furthermore, the fish sticks sold under SPAR's own brand name are fattier and more expensive in Eastern Europe.

The spokeswoman justified the discrepancies by citing alleged differences in taste - and by reviving a few outmoded, postwar clichés. Hungarians, she claimed, demand "rather fatty meat." That, she continued, is something known by all industry experts. "It's not something you need a study for."

The company also seems rather flexible on other issues as well. In 2011, the company set a goal for itself of only using fish from sustainable sources and catch methods starting in 2013. But that doesn't seem to apply to Eastern Europe. Indeed, the Marine Stewardship Council certification seal is missing from many of the company's fish products in the region. In Slovenia, the spokeswoman said, most consumers aren't particularly concerned about sustainability.

Ripping Them Off?

The American consumer goods corporation Procter & Gamble -- which owns the brands Gillette, Lenor and Pampers, among many others -- is much more rigorous when it comes to determining the predilections of its customers, with a company spokeswoman claiming that it performs 20,000 studies each year. One finding she mentioned as an example is that Poles prefer squirting dishwashing liquid directly onto the sponge rather than using a sink filled with soapy water, as the Germans prefer.

So is the company giving Poles what they want by using a more diluted mixture than that sold in Germany? Or is it simply ripping them off?

Tests that are pointed to as proof of alleged national differences are often commissioned from the Appliance Technology department at the University of Bonn. One of the studies undertaken by the department is called "Washing-up Behaviour and Techniques in Europe," and as part of the study, 11 test subjects from Poland and the Czech Republic were questioned, apparently by telephone. Hardly a representative study.

Chocolate multinational Ferrero likewise serves up some rather strange answers when questioned about the different recipes for its famous hazelnut-chocolate spread Nutella. Tests have determined that Ferrero uses less cocoa powder in Hungary than it does in Germany and the company has sought to justify the discrepancy with "the availability of resources." The explanation makes it sound like cocoa is first delivered to Germany and then Hungary has to make due with whatever is left over. But Ferrero also points to "national regulations," even though there is no regulation anywhere in Eastern Europe that requires the company to use less cocoa in Nutella sold there.

Ferrero executives have presented an additional curious explanation to European commissioner Jourová. The amount of cocoa used in Germany, they said, is slightly higher to make the consistency of the Nutella sold there thicker because Germans tend to use denser, whole-grain breads. Ferrero has yet to submit a study to back up the claim.

Destroying Brands

It is enough to make one wonder what such companies are thinking. They are, it would seem, putting the reputation of their most important brand names at stake.

"It is astounding how amateurishly these multinationals are acting," says Achim Feige from BrandTrust, a brand consultancy. At a time when brand loyalty is eroding and store brands are on the rise, Feige says, a product must be extremely reliable, like a good friend, and guarantee transparency and verifiable sustainability. "These executives are doing the opposite: They are destroying a brand from the inside out by using inferior, cheaper versions for other countries and by relying on even less convincing excuses. They are allowing for fraud. And they are sacrificing the idea of a united Europe to the greed for profits."

Nowhere is the problem more visible than at Danone, the Paris-based food-products corporation (sold as Dannon in the United States). For years, the company has been severely criticized for high sugar content in its products, among other shortcomings. Recently though, the company has sought to demonstrate responsiveness to such concerns and in June, CEO Emmanuel Faber called for a "food revolution" at an industry conference.

Faber failed to clarify exactly what role his company planned to play in this revolution. He did, however, mention "social responsibility" and unveiled the company's new logo: "One Planet. One Health."

But his company's commitment to social responsibility doesn't seem to extend into Eastern Europe. Danone's bestselling Activia brand, sold in the same packaging worldwide since 2016, tastes quite a bit different in the region when compared to the same product sold further to the west. And a test conducted in Lithuania shows why that is: The amount of fruit used in the product was quite a bit lower than in Western Europe. And the strawberry yogurt also contained a thickener.

18 Dec 15:54

2013 French Armed Forces Emergency Food Ration Survival MRE Review Meal Ready to Eat Taste Test

by Steve1989MREInfo
mkalus shared this story from Steve1989MREInfo's YouTube Videos.

From: Steve1989MREInfo
Duration: 11:07

Check out this modern French Emergency Food Ration - it has some pretty unique and interesting contents including spearmint isotonic beverage base and something called Biogel - a malted energy gel that I will certainly look for again!
Huge thanks to Gballz off Ebay for this ration (Shop name is Rations & More)
https://www.ebay.com/usr/gballz
http://stores.ebay.com/RATIONs-and-MoRE?_trksid=p2047675.l2563

For correspondence, or to send a Military Ration for review, my mailing information is:
Steve1989
3616 Harden Blvd
#360
Lakeland, FL 33803

http://www.mremarketplace.com/

http://www.mreinfo.com/

https://www.patreon.com/user?u=2821334&ty=h

And thank you everyone for watching & subscribing - hope
you enjoyed this one, as I certainly did making it!
-Steve
** All Music By: Steve1989 MREinfo **

Check out the other awesome YT reviewers:

Oldsmokey:
https://www.youtube.com/channel/UCL1wSC0Ntw8KWgTM-TRHFOQ

RC Gusto:
https://www.youtube.com/channel/UCfBEYgWflPKsDI_i6AmD5sA

gschultz9:
https://www.youtube.com/user/gschultz9

stickyfingaz745:
https://www.youtube.com/channel/UChEqR37txqYozXbbitVDd7A

gundog4314:
https://www.youtube.com/channel/UC7dAKknI_zWUNcz36T0Lp6w

emmymadeinjapan: https://www.youtube.com/channel/UCzqbfYjQmf9nLQPMxVgPhiA

Kiwi Dude:
https://www.youtube.com/channel/UCIUTBxBxmMMY2bUJqYITJxw

Paul Buikema:
https://www.youtube.com/channel/UCQ51mn3lFHIyMYxX74ViCPg

Elandil:
https://www.youtube.com/channel/UCspVo4xdz9JPpPV6d6jp9wQ

MrBrowningm1911
https://www.youtube.com/channel/UCVoA8_rDsAcMF2UkfCO4n4A

dingo7055:
https://www.youtube.com/channel/UCU8dvHS5J4Kqn79p6ScmWqw

SparrowMedicine:
https://www.youtube.com/channel/UC8TnFxqRz-PTS-yowf6S5kw

18 Dec 15:54

The Most Advanced Online Community On The Web (A breakdown Of StackOverflow’s Online Community)

by Richard Millington

In the past two weeks we’ve tackled Apple’s Support Community and Airbnb’s Host Community. This week we’re going to breakdown StackOverflow.

You can even watch the slideshare below (click here if it doesn’t appear), or read the breakdown below.

CONCEPT

StackOverflow was launched in 2008 as a Q&A site for programmers. It has since grown to 50 million monthly visitors and is the crown jewel of the expansive StackExchange network.

StackOverflow enforces extremely strict moderation policies designed to get great answers to great questions. It does not allow casual chatter on the main community platform. This is unique amongst most organizations.

Unlike other branded communities, StackOverflow earns direct revenue from the community via recruitment (talent), advertising (ads), and helping companies create their own private instance of StackOverflow within their organization.

OVERVIEW

The community consists of several core areas:

1) Questions. The community is entirely orientated around ‘questions’ which also appear on the landing page of the community.

2) Developer Jobs. Programmers can search and find jobs published by paying advertisers on the community.

3) Tags. These are keywords or labels that members can browse through to find relevant information.

4) Users. Members can browse through the list of users and search by keywords.

5) Developer Stories. This is where members can create their ‘online resumes’.

6) Business Solutions. For businesses who want to hire, advertise, or use StackOverflow in their work.

HOMEPAGE DESIGN

  • The community has a different homepage for visitors compared with logged in members. This is really smart to do. Visitors have different needs than logged in, returning, members. The focus is more upon registration.

  • The community is entirely focused on the latest activity. Members are expected to scroll through and find questions to answer. This is a fixed list rather than infinite scroll.
  • The search box is slightly hidden, but not too hard to find at the top.
  • There is a good selection of tabs. But it’s not clear what the difference between interesting and featured is. Can probably remove a few of these.
  • Clear gamification features and notifications on previous posts in the top right.
  • The ‘Ask Question’ button is a little hard to see.
  • This is a good use of showing the popularity of questions by votes, answers, and views. People know how popular a question is without having to click the link.
  • Most of the questions here seem very unpopular. This is due to the sheer ferocity of questions StackOverflow receives. Might be worthwhile showing questions which are popular but not answered yet.
  • The display of tags beneath the question is excellent.
  • Look out for the blog integration in the top right to show the latest news about the community here. This doesn’t intrude on the main activity, but lets people know the broader community news
  • The add/edit favorite tags on the right hand side is useful.
  • This advertising works. It’s not too intrusive or hurtful to the user experience.
  • The ‘latest activity’ metrics show a clearly active site. This is good to show before clicking the question.

Mobile Site

  • The mobile version of the visitor homepage removes the registration form and tags. It focuses purely on showing the latest questions.
  • The ‘ask question’ option has also curiously vanished.
  • The slimmed down nature of the site makes it ideal for visitors looking to scroll through questions – possibly without participating.

USER EXPERIENCE AND PARTICIPATION

  • StackOverflow is hosted on a custom-built site. While most main platforms have auto-complete search, StackOverflow does not. The search bar expands, but does not display the relevant questions and discussions in drop down mode.

  • Search works well. It shows not just relevant questions, but also the specific and highest voted answers to those questions.
  • The speed of search is also faster than any other community visited.

  • Next to the search results are also ‘advanced search tips’. This is an incredibly useful and interesting addition to programmers. It helps people find the answer to their question even faster.

  • StackOverflow tackles the ‘repeat question’ problem by forcing you to thoroughly research the answer first. This is the screen you see when you select ‘ask question’.
  • The tips are good and include relevant links. Although many members probably skim right past this.
  • I love this ‘tick box’ along with the ‘open mind’ text to confirm that this has been read.
  • The ‘adapted from Google’ section in the top right is something other communities can easily use.
  • Related links to ask a good question are also a nice touch. It might be a good idea to guide newcomers to read this before asking a question, otherwise I suspect most people will ignore this.

  • StackOverflow continues its maniacal focus on good questions by providing prompts at each stage of asking a question. Here there is a prompt in default, the title itself to be specific along with advice on the right hand side to provide details, share research, and ask unrelated questions about the community in the meta area.
  • StackOverflow also provides a relevant link to the help center. This ensures people begin questions with the right mindset and a good, specific, title.

  • When you click on the box to enter your question, formatting help appears on the right-hand side. These small prompts are incredibly useful. Each of the main tabs (links, images etc…) also drops down to reveal further advice as part of advanced help.
  • As you begin typing the question, it appears in preview mode below so you can see exactly how the question will appear. Similar questions will also appear on the right-hand side.

  • This appears complicated as you begin typing the question. However, if StackOverflow detects something which is incorrect, you receive a bright red notification. You cannot post the question until you’ve resolved this problem. This is another very neat touch.
  • You can also see the advanced help above the question, the preview below, and the similar questions on the right hand side.

 

  • The community shows suggested tags from those mentioned in the question or using AI from previous questions.
  • If you begin to type your own tag, a drop-down box of relevant tags appears below along with a description. This makes tagging really easy (and enforced).

RESPONDING TO QUESTIONS

  • Questions are clearly displayed with regard to the audience’s expectations. Here the coding is properly formatted and shown within the questions with simple tags.
  • Members can do one of a few things. They can either vote, favourite, comment, or answer the question. However, newcomers are not allowed to vote on questions until they have a 15-point reputation score.

  • Commenting on a question is a novel feature of StackOverflow. It’s designed to improve the quality of the question and provide feedback to the original poster as well as providing more information for people to create good answers.
  • This would be distracting in most online communities, but works well when good quality answers is the overriding part of the community concept.

  • As we can begin to expect now, answering questions contains further prompts about what to do to provide a really good answer.
  • The link to further tips on writing great answers is also a great practice to observe and easy to replicate.

  • One of the truly unique aspects of StackOverflow’s community is the ability of members to edit the questions and answers of other members. Everyone has the ability to do this, although the process is peer-reviewed.
  • Edits are used to fix grammatical errors, clarify meaning, correct minor mistakes, and add related resources. Aside from Wikipedia, I haven’t seen any other community successfully implement this feature.

  • Unlike most organisations where empathy in responses is a critical part of the response, StackOverflow is designed for an audience that only wants good, quick, answers to questions.
  • Almost all questions receive a quick response. The responses are usually detailed and specific to help the person. In this case, it’s code that the programmer might like to use to resolve the problem they are facing.

REGISTRATION AND ONBOARDING

  • StackOverflow doesn’t have a separate registration page, visitors are encouraged to register with the fields shown within the header at the top of the page. This also allows Google and Facebook sign on.
  • Allowing people to register without having a separate registration page is a really clever feature.

  • StackOverflow has the easiest email confirmation page you will ever see. They have reduced the amount of copy to just 9 words. You can consider doing something similar with your email confirmations.

  • This is really simple copy at the top to get people started. Not sure on the logo mind.
  • I like the phrasing of ‘what should we call you?’
  • Profile photo is easy to drag and drop into place.
  • Picking a few topics of interest should be a standard feature of all players. It enables members to receive updates on topics which are relevant to them. It encourages a good use of tagging.
  • Not sure why this section is relevant, possibly the only area here I’d remove.
  • Most importantly here you don’t have to write detailed ‘about me’ paragraphs. You can select the key things that matter.
  • Great way to merge in advertising opportunities.
  • Notice the ‘all fields are optional’ – I’d move this to the top of the page.

  • This welcome email is triggered by participation in the community. The quick summary, learning how to write great answers, and custom views are pretty effective ways to help newcomers get started.
  • I suspect there might be an opportunity for improvement here based upon tags people have selected and what the latest activity of the community is.

  • Once you join the community you receive a notification with a link to the tutorials page.
  • This tutorial page is detailed and explains each of the steps required to become a great participant of the community. The visual element is especially useful.

DEVELOPER JOBS AND STORIES

  • The jobs section revolves around developer stories which members are prompted to complete in the community if they want to be open to new job offers. The forms are relatively simple to complete and all fields are required.

  • The developer stories are presented really well, with tags at the top (not shown), and then a detailed timeline of previous jobs and experiences below.
  • Most communities could adapt this idea to immediately upgrade their member profiles.

  • This is a relatively standard and simple list of job adverts. With a search function and location at the top and list of ads displayed below.
  • Showing the salary, tags, and ‘be one of the first applicants’ is incredibly smart.
  • Letting applicants create job alerts is also extremely clever.
  • Showing the previous searches and job preferences is a nice touch. Easy to edit from the front page.

  • This section is a relatively simple and clean way of showing the job adverts. This might be the least innovative page of the community.

  • A major innovation of the community is to enable members to apply for the job directly within the platform. This includes using their current reputation score to apply for the positions.

MEMBER PROFILES

  • The member profiles is one of the most advanced areas of the community.
  • Showing users where they rank comparatively is a smart way to drive more participation and reward the top members.
  • Number of badges and reputation points are clearly displayed.
  • Other communities where the member participates in. Not relevant for most communities (or here, really)
  • The ‘impact score’ in the top right is genius. A great way of showing a member’s total contribution.
  • The breakdown on the right hand side of a member’s vital statistics is also useful. Not sure what ‘4 hats’ are though.
  • In the bottom right is a further good breakdown of where their expertise lies. You can clearly see where this member’s real expertise is.

  • Mid-way down the profile is a list of a member’s top posts. This is a great way of letting the member ‘show off their best work’ without looking like an ass.

  • Each member’s badges gained are displayed at the bottom, listed by date and the reason they earned the badge. This is a simple way of displaying the badges. There might be better ways of doing this.

GAMIFICATION AND REWARD SYSTEMS

  • StackOverflow also has one of the most advanced gamification systems on the web. This begins at earning privileges for taking simple actions ‘such as creating a post’ all the way up to getting access to analytics with 25,000 points.
  • The ticks next to the scores is an especially nice touch.

  • This the ‘Tom Sawyer’ effect in action. The more privileges you earn, the more likely you are to take on doing work for the community for free. Full privileges board encourages members to take on more work for free.
  • A good menu in the top right explains what’s required to progress to the next level.
  • Showing the next privilege and what’s needed to get there is also a smart idea.
  • There are multiple types of privileges members can earn, as broken down here.

  • There are a near-infinite number of badges members can earn in the StackOverflow community. These range from question, answer, participation, moderation, documentation, and ‘other’ badges.
  • The diversity of badges means everyone can and almost certainly will begin collecting badges from the very early days of the community.

  • All of the systems are fully documented and explained in detailed guides. This limits confusion and potential anger from members when they don’t get the rewards or privileges they expected. It’s usually a smart move to fully document your reward systems.

  • Interestingly, StackOverflow also operates chat rooms which members with a reputation score of at least 20 are allowed to participate in. This type of interaction allows for more general discussion which would be an ill-fit for the quality-information focus of the community.
  • This is a good balance between ephemeral and serious discussions which many organisations struggle with. However, they are hard to find on the community.

CONCLUSION – THE MOST ADVANCED ONLINE COMMUNITY ON THE WEB

StackOverflow, with the possible exception of Facebook, has the most advanced and sophisticated community platform on the planet. There are hundreds of tiny details which are all designed to support its core concept of getting great answers to great questions.

To support this mission, StackOverflow deliberately limits engagement in favour of quality contributions. This has the desired impact of attracting the highest quality programmers to share their best advice on the community, but it’s a tough path for others to follow.

However, platform vendors and organisations can learn plenty from StackOverflow’s homepage setup, gamification systems, onboarding systems, and job pages.

There is also plenty to learn here about creating tutorials and nudges throughout the platform to ensure that members make great contributions to the community.

Many organisations would benefit from focusing less on driving as much activity as possible and instead focusing on driving the right kind of activity within their community. This is the real frontier of our work today.

You can visit for yourself at: www.stackoverflow.com.

18 Dec 15:51

Twitter Favorites: [tinysubversions] @mattlaschneider In conclusion, Star Wars is a land of contrasts.

Darius Kazemi @tinysubversions
@mattlaschneider In conclusion, Star Wars is a land of contrasts.
18 Dec 15:51

Twitter Favorites: [hondanhon] I am still using an RSS reader. Every day. https://t.co/ym9BkR1nUA

DAN “EVIDENCE-BASED” HON @hondanhon
I am still using an RSS reader. Every day. theverge.com/2017/12/16/167…
18 Dec 15:51

Twitter Favorites: [sonyaellenmann] why hasn't Twitter copied On This Day, I would enjoy that

Sonya 🌐 Mann @sonyaellenmann
why hasn't Twitter copied On This Day, I would enjoy that
18 Dec 15:50

Twitter Favorites: [shawnmicallef] I bought one of those winter jackets 95% of the population has that makes you look like a colourful stuffed condom. https://t.co/MZUY3EOBL3

🎄Stanley Kubrick🎄 @shawnmicallef
I bought one of those winter jackets 95% of the population has that makes you look like a colourful stuffed condom. pic.twitter.com/MZUY3EOBL3
18 Dec 15:43

A feast of Kapampangan food | Inquirer News - Inquirer.net


Inquirer.net

A feast of Kapampangan food | Inquirer News
Inquirer.net
CITY OF SAN FERNANDO — Kapampangan food — or what evolved from the time of precolonial Kapampangan society leader Malangsik — took center stage in the celebration of the 446th Foundation Day of Pampanga province.

and more »
18 Dec 15:41

Moocs can still bring higher education to those who really need it

files/images/9546_mouse_and_mortar_board.jpg

Diana Laurillard, Eileen Kennedy, Times Higher Education, Dec 19, 2017


Icon

For something that's supposed to be dead, MOOCs are still very much alive. And according to this articlee, they have more potential for the future. "Moocs are still multiplying and branching out into new forms of accredited learning experiences," write the authors. Millions of people "are capable of studying online but live too far from affordable campus education. For them, online learning might be their only chance to study. Given that the digital world now enables remote employment as well as remote learning, online learning could be a lifeline to a level of prosperity that has never before been possible.But they have yet to reach their goal of offering access to learning to children. "We need tens of millions of as-yet untrained teachers to educate school-age children. Moocs cannot directly teach those children, but they can train non-professional adults to become those teachers."

[Link] [Comment]
18 Dec 15:41

Inside China's Vast New Experiment in Social Ranking

files/images/26.01_cover.jpg

Mara Hvistendahl, Wired, Dec 19, 2017


Icon

This article descibes China's embrace of electronic payments using WeChat and Alipay, and discusses its extension into personal credit. It them suggests a linkage between various plans to allocate people 'social credit' according to their social behaviour (for example, whether they were charged with offenses, whether they disrupted spociety). In fairness, it then contrasts these with credit rating systems in North America. It raises questons about the surveillance such systems require, and questions the accuracy of the ratings that result. Yes, social credit could be employeed as an unaccountable means of social control. On the other hand, it could be a way to finally address the problem of corruption and cheating in society.

[Link] [Comment]
18 Dec 15:40

Pearson Open Sources Equella—Properly

files/images/equella.jpg

Michael Feldstein, e-Literate, Dec 19, 2017


Icon

The most interesting bit is the pair of disclosures at the bottom of the article. What is the "yet-to-be-announced e-Literate project" being sponsored by Pearson? What is the other "yet-to-be-announced e-Literate project" being sponsored by Unicon? Further, why does Michael feldstein call Apereo, a university non-profit, "the closest thing higher education has to the Apache Foundation," as opposed to, say, Moodle? Anyhow, the main point in this article is that Pearson open-sourced Equella, a type of learning object repository, and did it "properly", handing it off to Apereo to run. 

[Link] [Comment]
18 Dec 15:32

Google Pixel 2 now $799 in Canada, Pixel 2 XL drops to $1,009

by Ian Hardy
Pixel 2 and Pixel 2 XL

If you were waiting for a better deal on the Pixel 2 and the Pixel 2 XL, then now could be the right time to buy Google’s latest flagship devices.

Following up on its previous promo of giving a free Home Mini and discounting both devices by $50, Google has further reduced the price of its Pixel 2 Android smartphones this holiday season.

Canadians interested in buying the 5-inch Pixel 2 can now score the device for $799 unlocked for the 64GB model and $979 for the 128GB. The 6-inch Pixel 2 XL also received a price cut by $150, now $1,009 for the 64GB model and $1,139 for the 128GB model.

In addition, for the first time since the Pixel 2 was released, the original Google Pixel is now on sale for as low as $799.

Google is also offering up the free Home Mini as an incentive to purchase.

Source: Google

The post Google Pixel 2 now $799 in Canada, Pixel 2 XL drops to $1,009 appeared first on MobileSyrup.