Shared posts

03 Jun 23:46

Urbanist Abroad: Three Weeks in the White City

by Gordon Price

For most of June, the Price in Price Tags will be far away.  Mostly in Tel Aviv.  More specifically, in the part known as the White City.

I kept hearing good things about Tel Aviv – the people, the food, the beaches, the night life.  Even its Gay Pride and Parade – the antithesis to Jerusalem, I was told.

What really intrigued this urbanist, though, was its planning history.  How its first mayor, Dizengoff – knowing the city would expand far beyond Jaffa, the historic Arab port, after World War I – needed a plan.  And how he went to, of all people, a Scottish botantist in Edinburgh active in the Garden City movement.  And how that planner, Patick Geddes, started on a master plan in the mid-1920s that was accepted in 1929 – and how, amazingly, Tel Aviv built it.  At least the streets, blocks and, to a great extent, the public spaces.  This is very unusual.

Geddes did not prescribe an architectural style for the buildings.  And this is where the story gets even more interesting.

In the 1930s, with the rise of Nazism in Germany, many Jewish architects, heavily influenced by the modernist architect Corbusier and what became known as the International Style, fled to Israel, where the demand for functional, simple and inexpensive apartment buildings was enormous.  Those principles were inherent in the Bauhaus Style, named after the school based in Dessau at the time when Hitler closed it (another example, to him, of ‘degenerate art’.) The flight of great architects accelerated.

Tel Aviv became, in time, the greatest concentration of such buildings in the world – over 4,000 – filling in the blocks of the Geddes Plan.  Most of these two to four-storey unornamented buidings were, in response to the climate and modernist aesthetic, painted white.  And hence its name.

The White City.  Now with its own UNESCO designation, and a reputation that attracts people like me.

I’m going to explore a district that, I have a hunch, is going to feel rather like home: the West End – where density, mixed use, some really nice beaches, and a tolerance for what others might see as degenerate, creates a place of cultural and economic energy – hopefully not overwhelmed by tourists like me.

So follow me along on Instagram at pricetags.  Our co-editor Colin may bundle a few of them, with his own insightful comments, on this platform – depending, of course, on whether either of us is not overly distracted by the demands and amusements of our lives and the places we live.  Or places like Tel Aviv.

 

03 Jun 23:44

2019 Goals - Five months check in

Checking in with my five month goals.

  • Holy crap it's been this long.

  • Lost a couple of pounds and finally got back on track with my diet. Not as good as it could be, but getting better.

  • Still stuggle with eating too much after exercise.

  • I'm doing a lot of exercise and I'm back cycling now, yay! Did 127 km bike ride followed by an 80 km bike ride this weekend for example. Yeah I was tired.

  • Still running a couple of days a week around 5km ish. Need to bring that back up to 8 and 10km and still keep cycling.

  • I haven't been to the gym in ages.

  • I've got a plan for cycling through to the Fondo. Damn holidays keep getting in the way though.

03 Jun 23:43

Our AI Overlords Are Already Here, They Likely Employ You

by Ton Zijlstra

The P2P Foundation reposts an article by Jeremy Lent from late 2017 on how corporations are artificial intelligences.

It doesn’t mention Brewster Kahle’s 2014 exploration of the same notion.
SF writer Charlie Stross referenced Kahle when he called corporations a 19 century form of ‘slow AI’.
Because “corporations are context blind, single purpose algorithms“.

I like that positioning of organisations as slow AI and single purpose algorithms. For two reasons.
First, as it refocuses us on the fact that organisational structures are tools. When those tools get bigger than us, they stop serving us. And it points the way to how we always need to think about AI as tools, with their smallness as design principle.
Second, because it nicely highlights what I said earlier about ethics futurising. Futurising is when ethical questions are tied to AI in ways that puts it well into the future, and not paying attention to how those same ethical issues play out in your current context. All the ethical aspects of AI we discuss apply to our organisations, corporations just as much, but we simply assume that was considered some point in the past. It wasn’t.

P1000960Your Slow AI overlords looking down on you, photo Simone Brunozzi, CC-BY-SA

03 Jun 23:42

How to create Sparklines in LibreOffice Calc

by Thejesh GN

I love using sparklines. I use them everywhere from Google Sheets to web pages. Popularized by Edward Tufte. It’s usually a small line chart without axes or coordinates. Like this . I like them because they go very well with text, without disturbing the flow but significantly adding to the information display.

Sparklines are small, intense, word-sized graphics with typographic resolution. Sparklines are can be placed anywhere that words or numbers or graphics can be placed: in sentences, maps, graphics, tables. Sparklines have a data-ink or data- pixel ratio = 1.0, consisting entirely of data, with no non-data at all. Thus sparklines have no frames, tic marks, and non-data paraphernalia. Sparklines often get their quantitative scaling context from nearby words, numbers and graphics; sparklines are directly quantified by numbers on or near the sparkline itself.

On web I use jQuery.sparline. It’s easy to work with and offers different formats as well. I am also looking for simple SVG/Canvas based ones but as of now this jQuery plugin works really well.

One Google sheets I use builtin SPARKLINES function. Excel also has a similar function. But I am LibreOffice user. LibreOffice calc doesn’t have SPARKLINES function. Hence this post. My first step was to search for a LibreOffice addon. There seems to be one but it’s not maintained and doesn’t work anymore, hence I am not linking.

My next step was to create one, but writing and maintaining one takes significant effort. Hence I started looking for hacks. My first idea was to use this very creative way of building SVG sparklines, where JavaScript embeded inside SVG reads the parameters and creates the actual image dynamically. It’s a great idea. But I was looking for something that can be used across the platforms1 and I chanced upon Sparks project by After the Flood. In simple words sparks is a font that you can apply to a set of data, which renders data as sparklines. The data needs to be formatted as comma-separated values, with curly brackets at both ends of the dataset, Eg: {1,2,3}. When you apply Sparks font, text {1,2,3}, becomes a sparkline. It’s as simple as that. Sparks has fifteen styles (fonts), that will allow you to design your sparkline the way you want. Since it’s just a font, you can use CSS to style it as well.

Since Sparks was just a font, I imagined it would work wherever it’s installed. This made me to use it inside LibreOffice calc and it worked beautifully. Below I have documented steps and scripts, that I use. It’s probably useful to you too.

Install Font

As a first step let’s download and install the Sparks font. The zip file will have around 15 fonts. I installed all the fonts. I installed OTFs. Once you install these fonts. You should be able to see them in the Fonts drop down inside your LibreOffice Calc, Txt or Impress.

Write a Macro Function

Now in LibreOffice calc, We will create a function called SPARKLINE This function format the data as per Sparks requirement. Go to Tools- Macros - Organize macros - LibreOffice Basic . Create a new module and add the following code. Save it and close the macro editing dialog.

REM  *****  BASIC  SCRIPT for SPARKLIES 
REM  *****  This just prepares the data and not styling. You apply style as a font.
Function sparklines(criteriaCellRange)
	sparklines = "{"
	For Each cell In criteriaCellRange
		sparklines = sparklines+cell+","
    Next cell
    REM  *****  Remove extra comma at the end
    totalLength = Len(sparklines) 
    sparklines = Left(sparklines, totalLength-1)
	sparklines = sparklines+"}"
End Function

Logic inside the function is straight forward. It takes a range of cells, arranges them as comma separated values. It also adds flower brackets at the beginning and at the end. And returns that string.

Screenshot of Creating a macro

Creating a macro

Insert and Style Sparkline

Now our macro will be available as a function SPARKLINE. You can use it just like any other function. It expects a range of cells that has data. So for example you can insert =SPARKLINE(j1:j10) into a cell, assuming cells j1 to j10 have data.

Screenshot of using SPARKLINE function in LibreOffice Calc

Using SPARKLINE function in LibreOffice Calc

Now change the Font of the cell to one of the Sparks fonts. Voila, you should be able to see a Sparkline. A different Sparks font gives you different type of sparkline. You can also use font color, size etc to style the line.

Ship it

For shipping, you need to embed both the Macro and Font inside the sheet. The enduser needs to enable to Macros to view it. To embed font Go to File -> Properties -> Font.

Screenshot of Embedding Font in a LibreOffice Document

Embedding Font in a LibreOffice Document

For embedding Macro. Move the macro module from My macros – ‘Standard’ Library to You Documents ‘Standard’ Library. Save the document. Now the Macro is inside your document.

Screenshot of Embedding MAcro inside LibreOffice Document

Embedding Macro inside LibreOffice Document

What do you think? Is this useful? Do you have any other ways of inserting sparklines in LibreOffice?

  1. I am till very excited by this SVG sparkline. I am going to hack around.
03 Jun 23:41

tizi flip Ultra :: Lightning mit USB-C PD

by Volker Weber

ab94b9bb980cc84a2732c8a3885188f6

Endlich ist das tizi-Kabel da, mit dem man neuere iPhones mit 18 W und iPads (ab iPad Pro 2) mit bis zu 30 W laden kann. Das mitgelieferte Apple-Kabel bringt mit dem Apple Netzteil nur 12 W (iPad) oder 5 W (iPhone).

tizi flip Ultra, jeweils in rot oder schwarz:

Bisher hatte ich nur das gleichwertige, aber teurere Apple-Original (25 € für 1m und 39 € für 2 m). Und ich vertraue diese Geräte nur Apple- oder tizi-Kabeln an.

Da gibt es unglaublichen Schrott, der zwar gut aussieht, aber nicht funktioniert. Das Kabel muss einen Chip enthalten, der sowohl USB PD unterstützt und auch MFi-zertifiziert ist. Das Kabel muss eine zusätzliche Leitung für USB-PD verbaut haben. Und am Ende muss auch noch alles funktionieren, damit das iPhone nicht zu viel Strom verpasst bekommt, aber eben auch so viel wie erlaubt ist.

Ich benutze übrigens vorwiegend zwei tizi-Ladegeräte:

Mit der Tankstation lade ich auch Laptops wie das Lenovo Yoga C930. Funktioniert tadellos und man hat nur ein Netzteil für alles. Eigentlich habe ich nur eine Anregung an tizi: Die Tankstation ist in Pappe verpackt, aber die Kabel noch in sehr viel Plastik. Das lässt sich bestimmt noch verbessern.

5c595c6d4ee06a4f1887d799cf74d9c9

03 Jun 23:39

Recommended on Medium: Let’s talk about sex

About that time my partner’s orgasms shook the internet

It’s been a long time since I’ve talked about sex or relationships on the internet. And the last time, I really didn’t even touch on sex — I wasn’t confident enough in myself or how to speak to my sexuality to wade into that topic. Instead, I shared what I’d been learning about non-monogamous relationships (i.e. how to ethically have more than one intimate relationship at a time). Many responses were harsh and assumed negative intent, which is another way to say: just another typical day on the internet.

If it’s not completely obvious, because it takes so much less effort to criticize than to meet someone in good faith with comparable vulnerability and curiosity, it turns out, many people don’t and so I decided that opening up about opening up was best reserved for private communications (probably in person) rather than the public internet. And so that’s how I had conversations about these topics for the next four years.

During that time, I voraciously learned about relationships and sex and had all manner of conversations — in person — and it’s been great. I’ve discovered much, and share when I can and when it’s appropriate and when I think it’ll be helpful. I don’t have anything “figured out”, but I have a bunch of useful experiences and questions to ask. As I’ve integrated these things into my life, my thoughts and the way I understand myself has changed. And my behavior has too.

For example, I’ve started sharing more sex-positive content in my Instagram Stories. But since that content goes away after 24 hours, no one’s really had much of a reaction. I also post and collect sexual wellness products on Product Hunt, somehow without raising any eyebrows (as far as I know).

So as I’ve become more curious and open-minded about sex and my sexuality (a topic I know realize I need to expand in another post), I’ve gained comfort and confidence with both. And now, it feels disingenuous to not express those things, somehow, in my digital or public personae.

With the explosive rise of social media, authenticity has become the coin of the social realm. But identity and authenticity are not realized through the same machinery, a fact previously lost on me given the automatic privilege conferred upon me by happening to be born white and male. One benefit is that I’ve gotten away with treating my internet identity as fungible and malleable for so long, which inured me to the headwinds facing marginalized groups in their baseline ability to express who they are without fear of reprisals or abuse. And while what I’m about to describe to you might seem superficial or self-aggrandizing, this recent experience may be one of the first times in my life when I’ve had to reckon with an emergent conflict between revealing more of my secret self with the need by a public (or at least my Twitter followers) for me to maintain their well-known stable image of me. But without unnecessarily trying to rub my secret self in anyone’s face, I no longer feel compelled to tuck this part of me away, especially as I’ve released the shame and discomfort I once had towards it.

Who’d you write your Twitter bio for?

So let’s talk about the thing.

Recently, I changed both my Twitter and Instagram bios.

I’ve always been coquettish with my internet identity, but overall it’s been shelf-stable since I started identifying as the “inventor of the hashtag” when Twitter tried to take exclusive ownership of it a few years back. Since then I’ve included that distinction plus past employers and professional roles I’ve had in my bio. There was this one time when I became Chris Messina The Actor for a couple days and confused a bunch of people who got very excited when I sent them kissy-face emojis, but otherwise, while I try not to take myself too seriously on the internet, I’ve never been quite so… * ahem *… risque in my digital plumage until I made this latest change.

And to be fair, I’ve kept it pretty conversative with good reason (see the aforementioned attempt to talk publicly about relationships). Kara Swisher has long pointed out Silicon Valley’s Peter Pan syndrome and it’s true: it’s a place where men haven’t been asked to grow up. They are infantilized and their behavior excused as long as their tech companies are moving fast and breaking things and/or racing towards an IPO. Talking about sex publicly hasn’t offered much reward considering the risk.

I left Uber right before Susan Fowler published her internet-breaking piece, and so it’s not without trepidation that I enter the fray casually. I mean, who am I — as a white cis male — to talk about sex in any way that isn’t reverent or detached — or perhaps even apologetically? (We white cis men truly have much to atone for, but might there also be space for lightness and a healthier, more integrative approach?)

So anyway, what happened was that my romantic partner messaged me about a new connected sexual wellness device (read: vibrator) that she’d discovered and we were going back and forth about it when she proposed that I alter my new very-serious tagline (i.e. “On a mission to make myself more useful.”) to read, “On a mission to give my beautiful partner the most orgasms she’s experienced in one day.”

And so I did — on both Instagram and Twitter.

I thought it was funny and a little crass and like “no one” would even notice!

But one friend did notice, and she asked about it and when I shared the story with her, she nodded with an impish and approving smirk and declared it “super ballsy”.

When my partner finally saw it, she texted, “OMG! How long do you plan on keeping that up there?!?!”

And I responded, “I’m curious who will notice and if anyone will say anything… Maybe I’ll change it before my next talk…? 😜

“You’re crazy. Let’s see who does notice it.”

And then, sure enough, within 24 hours some people did — sharing screenshots to their active Twitter followings… including Ed Zitron (43K followers), Prof. Brian Krassenstein (23K followers, a parody account), Kate Sloan (10K followers), Zach Kahn (5K followers), Jenn Schiffer (32K followers), Jason Calacanis (300K followers), and others. I mention their follower counts only to indicate that what I thought would be this amusing little nothingburger inside joke between me and my partner suddenly had the potential to be seen by… a lot more people.

Reactions varied from concerned (“thought to message him to see if he was hacked”) to comical (“The guy who invented the hashtag has one of the weirdest and horniest bios in town”) to sarcastic (“This bio is a masterpiece.”) to… derivative (“On a mission to give my wife the most number of unicorn investments.“).

The replies, of course, were unsurprisingly less good-natured, and aren’t worth digging in to, though there were… many.

Expecting to expect the expected

In some abstract way, I feel like this is my personal headphone jack moment.

That is, by declaring myself to be someone or something other than what people were expecting — I caused such severe cognitive dissonance in people that the most viable responses included ridicule, rejection, repression, skepticism, shame, or some kind of required reversion back to a previous, and thus more familiar, state.

To make the analogy: people defined an iPhone as having a headphone jack, but Apple decided that an iPhone need not be defined by a headphone jack after all, and everyone lost their shit.

So at least in some cases, it seemed like my bio freaked people out because they needed me to be the “inventor of the hashtag guy or whatever” but with my new bio that was talking about sex, I was fucking with the microscopic mental space they reserved for me (or for “people like me”) and that was breaking their brains at least a little.

All that, or — sharing the intimate sexual exploits in the context of a Twitter bio is weird.

Or it’s both of these things.

I mean, I guess I can understand that some people might be offended by imagining other people having or engaging in sex — especially if you normally don’t associate them with sex… but really though? Don’t most people (though certainly not all, and that’s ok too), at some point in their lives, have or engage in some form of sexual intimacy? If so, and in the post-internet, post-porn world, are we still so squeamish about the topic when it’s discussed in public? Is it really kinky to do so? I If the president can carelessly talk about nonconsensually grabbing a woman by her genitals, must we also ban talk about consensual intimacy?

Moreover, isn’t this taboo and our inability to speak openly and intelligently about sex and sexuality a key element of Silicon Valley’s juvenile toxicity towards women and non-cisgendered individuals? Isn’t it the general ignorance and lack of awareness preventing us from having plain and matter of fact conversations about consent, desire, curiosity, and healthy sexual wellness? Hasn’t the lack of diversity and a healthy, respectful dialog about sexual identity contributed to the unaddressed corrosive abuse that’s haunted social media from the outset? Isn’t this aversion one explanation for the pleasure gap, and what is also motivating companies like Andrea Barrica’s O.school and OMGYes?

Where does healthy sexuality fit on the social web?

Look, I’m far from being an expert and I am deeply aware of that — but at the same time, should stating an interest in offering my partner orgasms be controversial?

Ok, if you don’t like the context of expression, let’s separate that out: if not on one’s Twitter bio (which is about that person, mind you), where should one reflect the sundry parts of her or hisself, including their sexuality? Why is healthy sexuality or sexual desire inappropriate in one’s Twitter bio while struggle porn and “crushing it” at your startup is celebrated?

Why is stating an interest in offering my partner orgasms controversial?

To be clear, my sexuality is not going to be what I solely define myself by going forward. But my sexuality and sexual identity is absolutely part of who I am — and always has been. I just wasn’t able to share this part of myself without fear and shame years ago. But I am now at a place where I can do that. And given that Twitter and Instagram are my two primary platforms to share my life and my thoughts, why should I leave out parts that are just as vital and necessary as my interests in product, technology, design, culture and startups?

But — I get it. If you don’t want to hear about these things, that’s totally cool. I invite you to unfollow or block me — no hard feelings. There was a time when I might have done the same thing to myself if I were in your shoes. But, if you’re a curious person and perchance open to learning more about these topics — occasionally (and not necessarily explicitly) — then stick around. And if you’re interested in sharing your own lessons and journey into developing and deshaming your own sexuality, drop me a note. I find connecting to people and learning new things very satisfying.


Let’s talk about sex was originally published in Chris Messina on Medium, where people are continuing the conversation by highlighting and responding to this story.

03 Jun 23:37

Sunscreen: Scourge and Savior

by Ganda Suthivarakom
Sunscreen: Scourge and Savior

A version of this post was sent to our weekly newsletter mailing list. If you’d like to receive this in your inbox, subscribe here.

Hawaii and Key West, Florida, have both banned certain chemical sunscreens for fear that they kill reefs. An FDA study published in JAMA just last month says that the active ingredients of four tested sunscreens entered the bloodstream of the participants. Adewole S. Adamson, assistant professor of internal medicine at the University of Texas at Austin, says on The Conversation that insistence on sunscreen use won’t reduce melanoma instances in black patients.

Still, given that many people work indoors and get exposure to sunlight only minimally in their everyday lives, sunscreen can protect skin from sunburn. (As you can see in the picture above, I am a bit of a sun-avoiding vampire, myself.) The American Cancer Society says UV rays are a major cause of melanoma, especially damage that occurs when people are young. The CDC recommends that people apply sunscreen of at least SPF 15 when going outside to help prevent skin cancer, , but you may be better off going even higher than SPF 30 for the best chance of getting enough protection.

All of this information may leave you wanting to hide in a windowless, air-conditioned bunker for the rest of the summer. But we’re here to help you separate fact from fear-mongering. We’ve updated our sunscreen guide, and the two sunscreens we like best are Coppertone Ultra Guard Sunscreen Lotion SPF 70 and No-Ad Sport Sunscreen Lotion SPF 50. But we also recommend CVS Health Clear Zinc Sun Lotion SPF 50, a combo chemical-physical sunscreen with zinc oxide that rubbed in clearer than others we tested on both darker- and lighter-toned skin (and doesn’t smell like anything). And although we don’t recommend spray sunscreen as a first line of defense, we do have a spray-sunscreen recommendation, Banana Boat Sport Performance Clear UltraMist Sunscreen SPF 100, for a little water-resistant extra coverage on kids who won’t sit still for a second slathering. Stock up and don’t be stingy with the spray—it takes a whole bottle of the stuff to provide proper coverage for one person on a day spent outdoors if used correctly.

And don’t forget your lips. We recommend Maybelline Baby Lips (SPF 20) and Aquaphor Lip Protectant + Sunscreen (SPF 30).

New this week

The Best iPhone Armbands for Running
Updated May 27

List: Gear to Help You Sleep Better
Published May 27

The Best Car GPS
Updated May 29

The Best USB Wi-Fi Adapters
Published May 29

A Brief Case for the Briefcase
Published May 29

The Best Chromebook
Updated May 29

The Best Cheap Coffee Maker
Updated May 30

PenFed Pathfinder Rewards American Express® Card Review: Surprisingly Great Perks for No Annual Fee
Published May 30

The Best Electronic Drums for Beginners
Published May 30

The Best Cotton Sheets
Updated May 30

The Best Sunscreen
Updated May 31

The Best Ant Killer
Published May 31

The Best Mattress for Side Sleepers
Published May 31

Checks Are Dying. Long Live Checks!
Published May 31

Things we’ve been enjoying lately

Some good listening, watching, and reading you may like

The Princess Who Thought She Was Made of Glass [BBC]

“The story of a 19th-century Bavarian princess who thought she’d swallowed a glass piano and therefore navigated the world with extreme physical care—fearing that she might shatter at a bump—is remarkable enough. What’s flabbergasting is that this was a common psychosis for centuries in Europe.”

—Tim Heffernan, editor

Listen: Dedicated, by Carly Rae Jepsen [Spotify]

“I listened to this album three times in a row last Saturday before a scary thought popped into my head: ‘Is this too much? Am I going to hate this tomorrow?’ Then I listened to it four times on Sunday. It is good.”

—Daniel Varghese, associate staff writer

The Night The Lights Went Out [The Concourse]

“About surviving a freak near-death experience, and the family, friends, and medical professionals who help get your life back.”

—Michael Kennelly, updates editor

03 Jun 23:36

Elektroautos können erst ab 2040 die CO2-Emissionen deutlich senken

by Externer Autor
PM des MCC: Elektroautos können erst ab 2040 die CO?-Emissionen deutlich senken Die Vorstellung, Deutschland könnte im Wesentlichen mit Elektroautos seine Klimaschutzziele im Verkehrssektor realisieren, wird durch eine Studie des Berliner Klimaforschungsinstituts MCC (Mercator Research [...]
03 Jun 23:30

Z Week: Your Questions Answered

I asked for your questions to answer during Z Week, and you responded with some excellent ones. 

---------

Friday summation

I hope you enjoyed Z Week. One camera review, three lens reviews, and a lot of your questions answered (see below). …

03 Jun 23:28

Our AI Overlords Are Already Here, They Likely Employ You

Ton Zijlstra, Interdependent Thoughts, Jun 03, 2019
Icon

Short post pointing to a reprint of an article by Jeremy Lent from late 2017 arguing that corporations are artificial intelligences. This framing of the corporation allows us to talk about the ethics of AI in a different way, writes Ton Zijlstra. "It refocuses us on the fact that organisational structures are tools. When those tools get bigger than us, they stop serving us," he says. And second, it puts questions about ethics well into the future, "and not paying attention to how those same ethical issues play out in your current context." Imagine subjecting corporations to the same sort of ethical scrutiny we do to AI. Privacy, autonomy, choice - all of these are impacted by corporation in ways we would deem unacceptable for an AI.

Web: [Direct Link] [This Post]
03 Jun 23:28

‘Robots’ Are Not 'Coming for Your Job'—Management Is

Brian Merchant, Gizmodo, Jun 03, 2019
Icon

The Davos set likes to talk about the "4th industrial revolution", which sounds great, but serves to mask the core issue of the previous three, in which the benefits earned by increasing industrialization benefited only a few, while the many who were displaced had to fight to retain even a small stake in society (and the same is true of the agricultural revolutions of earlier years, as the history of people like John of Gaunt will tell you). What this article stresses is that industrialization - this time in the form of robots - is something people do to other people. "The CEOs who see an opportunity to reap greater profits in machines that will make back their investment in three point seven years and send the savings upstream—they’re the ones coming for your job."

Web: [Direct Link] [This Post]
03 Jun 23:25

Links for June 3rd

by delicious
  • "Black and white and RSS is an RSS feed of black and white photographs, updating throughout June 2019. There is no associated website. You can only see the photos if you use an RSS feed reader and subscribe to the feed." Subscribed.
03 Jun 23:25

Crosscall Trekker-X4 :: Das wird spannend

by Volker Weber

da351c1ae480381c57cdd1543bcef3af

Es gibt ja kaum etwas langweiligeres als das x-te neue Smartphone, bei dem man die Specs runterleiert und Fotos möglichst im Dunkeln macht, um noch irgendetwas herauszukitzeln, wo das eine vielleicht etwas besser als das andere ist. Und dann gibt es die Geschichten, die zu schön sind, um wahr zu sein, etwa das faltbare Tablet, siehe Samsung Fold.

Aber dieses TREKKER-X4 ist erfrischend anders. Da drin steckt ein "normales" Android-Handy. Aber außen rum ist alles anders. Die zweite Kamera ist nämlich kein Weitwinkel, sondern ein Ultrawide mit bis zu 170 Grad Blickwinkel. Wofür braucht man das? Man stelle sich Handy und GoPro in einem Gehäuse vor. Dieses Gerät ist von Supersportburschis entworfen. Wasserdicht, stoßgeschützt, mit einer cleveren Magnethalterung und spezieller Software. So gibt es etwa einen Dashcam-Modus, bei dem man hinterher die letzten 30, 60 oder 90 Sekunden speichern kann. Also erst den neuen Skateboard-Trick und wenn er endlich klappt, dann die Aufnahme speichern. Dazu hat man nackten Zugriff auf alle Sensoren, also Barometer, Altimeter, GPS, Temperatur etc. pp.

Ich habe ein ziemlich vollständiges Paket:

Auf der Rückseite hat der Trekker einen magnetischen Anschluss mit mehreren konzentrischen Ringen. Da kann man das Kabel anschließen, ohne den USB-C Port zu öffnen, aber auch die ganzen Halterungen schnell montieren. Wenn es rough wird, dann nutzt man einen zusätzliche Klammer, die das Handy formschlüssig hält. Und für eine Sicherungsleine gibt es auch noch eine Öse. Das ist alles unglaublich durchdacht und für den heftigen Einsatz geplant. Die Halterungen nutzen eine ähnliche Technik wie die GoPros und damit passt auch deren Zubehör.

Ich bin kein Sportler und damit eigentlich nicht der richtige Tester für so ein Equipment. Das geht in jedem Fall zurück. Aber ein paar Aufnahmen werde ich damit machen, die ich mit einem iPhone nie zustande brächte. Der Trekker selbst macht jedenfalls einen supersoliden Eindruck. So ein iPhone hätte ich gerne.

Allerdings erkenne ich auch schon eine Schwachstelle: Android 8.1 mit Sicherheits-Patch vom 1.2.2019. Das spricht nicht für eine gute Software-Versorgung.

03 Jun 23:24

What is an inverse, and why is it useful?

by Eric Normand

Inverses are everywhere. They let us undo an action. For instance, I can open a door and close it. Why do we want to do this? Because there are things I can do with the door open, and other things I can do with it closed. We need this same flexibility in our computer programs.

Transcript

Eric Normand: What is an inverse? How is it useful? By the end of this episode, we’ll go over a few uses for inverse, what it means, and why we might want to make something not have an inverse. My name is Eric Normand. I help people thrive with functional programming.

Inversion is a very useful algebraic property. The way I like to think about it is, from the real world, we often do things that we can then undo. Imagine if you could open a door, but you could never close it. You could climb up a mountain, but then never come back down.

The inverse captures this idea of reversibility. Basically, it’s a property of usually two functions. The two functions are inverses of each other. One can undo the other, and it usually works both ways. A simple example is, if I add one, so I increment a number, the inverse of that is decrement the number. It goes back to the value before.

More formally, I would say, g(f(a))=a, g and f are inverse of each other. You could also put it the other way, f(g(a))=a. If I apply f and then I apply g, I get back to where I started with a. This is more common than you think.

The main use is that you can move something into a state space. Let’s say, a new type, a new structure to the thing, where the problem you’re trying to solve is easier or even possible. It wasn’t possible in the other space.

For instance, if I have some data structure, some nested thing, I can serialize it to JSON. That’s my operation. Now as a JSON string, that I can send over the wire. It goes from this in-memory representation with pointers, and whatever else your language needs to hold that structure. It goes into a JSON string, which is just a linear sequence of characters.

Now, I can send it over the wire. That’s something I couldn’t do before. On the other side, I can do the inverse of serializing it, deserializing it, parsing it, and turn it into a data structure on the other side. I have serialize and then deserialize are inverses of each other.

That’s a common example of something that is an inverse and a practical application. You can’t send the data structure itself over a wire. If you choose a linear character format for it, some kind of byte format for it, you can.

Then, on the other side, in the byte format, there’s things you can’t do to it either. You can’t act on it recursively. You have to deserialize it out of that byte format back into some in-memory representation of it.

Some other things that I like to do, you might think of as boxing and unboxing. If you have a native number format in your language, you could box it up, and now it’s treated like an object. It has methods and stuff.

Then, when you need to actually add it to something internally, your language is going to unbox it, add it, and then probably rebox it up. Boxing unboxing, another inverse.

There’s an interesting thing that some functions are their own inverse. Negating a number is its own inverse. If I have one and I negate it, now I have negative one. I negate it again. I get back to one. It’s its own inverse. It’s pretty cool.

This is an easy property to test because the formula for it, the definition of that property, is so simple. You can do a lot of property-based testing on it.

This is one that’s given a lot. One is an example that’s given a lot when people talk about property-based testing, this idea of testing a round trip. You can take a value, run a function on it, take that output value, run another function. It should be equal to the first thing you had. It’s very common property.

There’s also, sometimes, the property is that there exists no inverse of a function. This is something like a cryptographic hash. If I have some sequence, some data, and I run a cryptographic hash on it, I have lost the ability now to get that data back out.

The hash is lossy. I cannot get back to where I was. That is the desired property of a cryptographic hash because that’s what you’re looking for. You’re looking for some secure identity of this data that does not actually contain the data itself.

I’ll recap. I guess this is going to be a pretty short one because it’s a pretty clear property. We have a notion of it already. This is an algebraic property, usually, of two. Like I said, sometimes, you can have one function be its own inverse. Typically, it’s two functions that undo each other.

Usually, you can call them in either order. I can start with a value, call the first function on it, then call the next function on it. I get back to where I was with the original value. Some functions are their own inverse. Sometimes, you want a function to not have an inverse. It is proven or somehow tested pretty well that there is no inverse.

If you liked this episode and you want more, you can go to lispcast.com/podcast. You’ll see all the old episodes. Every episode has video, audio, and a text transcript. You’ll also find links to subscribe and how to reach me on social media.

I love getting into discussions. I love talking about this stuff. If you’re so inclined, if you have something to ask, something to tell me, if I made a mistake, please let me know.

Thank you so much. Rock on.

The post What is an inverse, and why is it useful? appeared first on LispCast.

03 Jun 23:23

Cake or death: AMP and the worrying power dynamics of the web

Andrew Betts, Jun 03, 2019
Icon

Andrew Betts lays out the argument against Accelerated Mobile Pages (AMP). A lot of the discussion is pretty technical, but they boil down to the assertion (which is well-founded) that AMP essentially turn the web into a private portal for Google, and that Google is not managing this stewardship responsibly. As Betts says, "If Google was my doctor, they’d be currently explaining to my family that although the experiment they tried did sadly kill me, they got a ton of useful data from it, and they think they can definitely work on fixing that bug in the next version of the experiment." The article also links to a really interesting set of resources worth exploring, including the Portals specification, feature policy, Newsguard, and content passes (which "would require publishers of paywalled content to declare the paywall in the metadata of the article" instead of trying to trick people into clicking). Via Aaron Davis.

Web: [Direct Link] [This Post]
03 Jun 23:21

Always In

by Drew Austin

I still remember the first time I saw someone order at a coffee shop without removing their AirPods. I’d seen people with regular headphones do this many times before, of course, but they had just seemed obviously rude. Strangely, this person didn’t. He carried himself with a nonchalant ease, his body language reflecting the calm knowledge that his behavior was not only acceptable but somehow prescient. Once the rest of us had AirPods too, we would understand. I sensed that I was witnessing a new norm taking shape.

Years before AirPods started appearing, mobile phones had already accomplished a similar reshaping of etiquette, evolving from novelty to necessity in a relatively short time. We carry phones for the majority of our waking lives, touching them more than 2,600 times a day and treating them with a fondness rarely afforded to other objects. Once a discrete tool, the phone has become an appendage; we feel its absence, sometimes painfully, when separated from it. This can be partly attributed to Apple’s iPhone design, which made the smartphone into an elegant and smooth object, something to covet and obsessively handle.

AirPods efficiently communicate your refusal to pretend to be “fully present”

With AirPods, Apple hopes to replicate that effect, producing another minimalist device so intimately responsive that it feels like a part of us. Though many have criticized AirPods for making people look ridiculous, many have already embraced the $159 earbuds as conspicuous status symbols. Even the pieces written to mock them acknowledge the likelihood that people making fun of AirPods now will eventually get used to them. “Their sleek design and lack of wires make it easy to forget they’re resting in your head,” Buzzfeed’s Alex Kantrowitz writes. They prioritize convenience over high-quality sound, and they don’t cancel external noise so completely that they cut off their wearers from the outside world.

But it’s not just merely efficient design that has driven AirPod adoption. By removing the headphone input jack from iPhones, Apple has nudged users toward adopting wireless headphones whether they are ready or not, hoping to capitalize on the kind of lock-in that the company’s investors love and its customers have been trained to tolerate. That strategy seems to be working: The sight of people wearing AirPods grows increasingly familiar. Ideally, from Apple’s point of view, we will all reach a point where we all don’t just own AirPods, we rarely even think to remove them from our ears.


Headphones have traditionally indicated their wearers’ detachment from their physical surroundings. Since the Walkman era, people have used them to override the sounds of their immediate environment and withdraw into a private sonic universe free of unwanted disturbances. They have also served to shield wearers from unwanted advances in public or from distracting conversations at work. In such cases, the more noise the headphones can cancel, the better.

AirPods foster a different approach to detachment: Rather than mute the surrounding world altogether, they visually signal the wearer’s choice to perpetually relegate the immediate environment to the background. The white earbuds create what Kantrowitz calls the AirPod Barrier, a soft but recognizable obstacle to interpersonal interaction not unlike that of phone usage. While staring at a phone suggests that attitude indirectly, AirPods formalize it, expressing potential distractedness in a more sustained and effortless manner. You don’t have to look down at a screen to convey that your mind might be elsewhere — that you are dividing your attention between your physical surroundings and other kinds of interactions, hearing other voices. AirPods efficiently communicate your refusal to pretend to be “fully present.” AirPods, then, express a more complete embrace of our simultaneous existence in physical and digital space, taking for granted that we’re frequently splitting our mental energy between the two.

Though the AirPod experience appears strictly solitary and a matter of personal choice, the headphones in fact reshape social behavior for everyone around them, whether those others have their own pair or not. In other words, AirPods have externalities — penalizing non-wearers while confining the value they generate to their individual users. They reinforce the idea that networked products and not particular shared spaces provide common ground, positing a world where people don’t really interact with strangers in public. This may be why the gym was an ideal site for early adoption. If that rationalized aloofness intensifies outsiders’ desire to get AirPods of their own, that’s probably just what Apple wants. (AirPods have other environmental externalities too: They won’t biodegrade for at least a millennium, and Apple’s program for recycling them is uneconomical and little-used.) Once everyone has earbuds that are always in, physical proximity will no longer confer a social expectation of shared experience. With no one trying to overcome the AirPod Barrier anymore, it might become pervasive and invisible. Living with AirPods always in would become established as a new way of being.


In Apple’s ambitions, AirPods are more than just convenient headphones; they are a component of a new interface that can saturate or fracture our aural attention just as screens have with visual attention. AirPods’ emergent use pattern thus far has been disengagement from one’s environment — listening to music while interacting with service staff or maintaining a phone call while working out — rather than data-enhanced immersion in it. But as more people perpetually wear wireless earbuds, they could become the basis for a platform for a multitude of audio apps, as venture capitalist Jordan Cooper describes here. Always-available two-way voice communication channels not only make existing iPhone features like Siri and Voice Control much easier to use frequently but also create the possibility of vocal social media networks, ongoing group conversations among distant friends, interactive music and podcast listening, and sound-based augmented reality games. Spotify, for example, recently announced that it will test voice-enabled ads, a proposition that becomes more viable in an AirPod-filled world where listeners are always already on mic and able to react quickly. Once wireless earbuds attain critical mass, it would become a common expectation to always be listening, just as one is now more or less expected to never go anywhere without their phone.

Voice-driven apps and platforms have already gained popularity outside of headphones. Virtual assistants like Amazon Alexa, along with apps that dictate spoken language to text for various purposes, already demonstrate the feasibility of voice-based interfaces and users’ growing comfort with speaking to devices. A growing population of constant AirPod users, with microphones inches from their faces and speakers in their ears, would enable more new forms of interaction that require always being ready to speak and be spoken to. Visual social media already encourage and depend upon such readiness, as an ever-growing flood of notifications attests. But on an aural platform, there may be less friction in embracing a more notification-driven life: With earbuds already in, users would get the message automatically.

As audio-based platforms take off, network effects would kick in, strengthening the incentives to leave earbuds in for longer and longer. It wouldn’t seem rude to wear them in conversation; it would be as acceptable as glancing at one’s phone or even sending a quick text message seems today. Just as people began to set their phones on the dinner table and direct a small percentage of visual attention toward them, so we might learn to split off a small, continuous share of auditory attention for the headphones we leave in — a rebalancing of sensory inputs to expand our sonic world beyond the merely local.

With everyone attending to their own auditory environment, the public soundscape will increasingly consist of fewer voices and more ambient filler

Much as phones have enabled and concretized the always-on nature of everyday life, introducing the constant interpenetration of physical and digital space to individual experience, wireless earbuds facilitate a deeper integration, an “always in” existence that we need never interrupt by looking down at a screen. Their aural interface means we don’t have to awkwardly switch attention back and forth between IRL and a screen as though the two are starkly separated. Instead, we can seem to occupy both seamlessly, an experience that other augmented-reality devices, like Google Glass, have promised with varying degrees of success.

The ostensible goal of augmented-reality wearables in general is to enhance the immediate physical reality around us with digital information, immersing us more deeply in the blended whole — AR glasses unobtrusively annotate one’s immediate surroundings; always-in earbuds narrate details for our ears only. But these devices can just as easily allow wearers to pursue a different, less integrated path: not augmented the surrounding physical reality or taking the people inhabiting it into account, but constructing an altogether parallel reality. Either way, they reinforce the idea that gains are available to us if we situate ourselves as isolated yet networked individuals rather than as potentially collective subjects in shared space. If we can further subordinate our in-person sociality to the privatized infrastructure of networked communication, we will reap the full benefits of the AirPod user experience.


The visual internet’s transformation of physical environments has been widely acknowledged: The rise of brand-friendly, photogenic Airspace and Instagrammable iconography in restaurants, hotels, and public art are prominent examples. But phones and the always-on disposition that encourages their constant usage has also depleted those environments, which no longer require the same degree of sensory richness because phones themselves furnish so many of the stimuli that physical space once did. Now, the kind of space that suffices instead is a pleasant backdrop for solitary device usage, a relatively blank slate that doesn’t compete with the phone’s foreground — conditions that places like Sweetgreen and Equinox supply.

A dominant aural information platform could have a similar effect, fostering a world where we might as well leave our headphones on because there’s nothing around us worth hearing. With everyone silently attending to their own auditory environment, the public soundscape will increasingly consist of fewer voices and more ambient filler and sonic exhaust from the devices themselves — phone conversations, buzzing devices, unmuted YouTube videos.

In his 1966 book Complexity and Contradiction in Architecture, Robert Venturi questioned the traditional public square’s suitability for modern American culture, writing, “Americans feel uncomfortable sitting in a square: they should be working at the office or home with the family looking at television.” Now we can bring the private space of both the office and the television with us back to the square, via our devices, and feel comfortable again, as long as the square doesn’t compete too aggressively with the platform we’re trying to stay within.

Whether that platform is mediated by wireless earbuds or something else, we might ask what purpose the public square serves, and whether the technology we’re using estranges us from it or further immerses us in it. Public space in the physical world can be a source of a sense of freedom and serendipity, a place where self-interest can be subordinated to other social interests. Digital tools can improve our ability to use that space and connect with one another more effectively within it. But if those same tools instead re-create platforms oriented toward atomizing individuals within those spaces, we risk impoverishing something vital, producing a public square full of people ignoring one another, doing their best to be nowhere.

03 Jun 23:21

Malvertising: Werbung mit Malware

by Volker Weber
Aktuell tritt es vermehrt auf, dass beim Starten oder der Nutzung von Apps auf Windows 10 bösartige Werbebanner aufgerufen werden, die Betrugs-Webseiten im Standard-Browser öffnen. Diese Webseiten versprechen entweder Gewinne in einem Gewinnspiel oder drohen damit, dass der PC mit Viren verseucht sei. Beides ist Unsinn.

Der absolute Treppenwitz ist, dass das bei Apps auftritt, die Microsoft selbst dem Anwender mit Windows 10 unterjubelt, etwa den Apps MSN Wetter, News und Money, die Microsoft Solitaire Collection sowie Microsoft Mahjong.

More >

03 Jun 23:20

C J Silverio’s story of npm and call to replace...

C J Silverio’s story of npm and call to replace it is increadibly important.

Whether or not Entropic is the right answer doesn’t matter as much as the fact that she’s asking the correct questions and is taking action.

03 Jun 22:18

Apple deletes all iTunes-related content from Facebook and Instagram

by Igor Bonifacic
iTunes on macOS

If there was any doubt Apple had planned to sunset iTunes at WWDC this week, there’s now little doubt

On Saturday, Reddit user “MalteseAppleFan” spotted that Apple had deleted all posts from its iTunes-dedicated Instagram and Facebook social media pages. The company appears to have deleted the content over a period of 24 hours, as it will still possible to view old posts as recently as May 31st.

On Instagram, for instance, not only is there not a single post on the page, Apple now directs users to follow @AppleTV for any and all entertainment-related updates.

Of the three major social media platform, Apple has only yet to delete anything from Twitter.

What’s more, Iconfactory’s Craig Hockenberry spotted that, as of this weekend, all itunes.apple.com links now redirect to music.apple.com.

Per a recent report from Bloomberg‘s Mark Gurman, Apple plans to separate iTunes into standalone Music, TV and Podcasts apps. Apple’s actions over the weekend are likely a prelude to a major announcement the company has planned for the start of WWDC today.

Apple first introduced iTunes back in 2001.

Source: Reddit

The post Apple deletes all iTunes-related content from Facebook and Instagram appeared first on MobileSyrup.

03 Jun 22:18

The TTC’s first electric bus is now in service

by Aisha Malik

The TTC’s first fully electric bus has begun service on June 3rd, along the 35 Jane route.

It is one of 60 electric buses that the city will obtain by 2020, which will make it one of the largest electric mini-fleets in North America.

The TTC hopes to only purchase electric buses by 2025. By 2040, the TTC hopes to have an electric only bus fleet.

The electric buses will save between $70 million to $80 million annually based on fuel cost.

The federal government is providing around $140 million through the Public Transit Infrastructure Fund, which will be used to purchase new buses.

“Our city is continuously looking at ways to reduce our carbon emissions, introducing electric buses to our robust fleet is one of the many ways we are advancing the TTC and demonstrating our leadership in becoming an environmentally friendly city,” said Toronto Mayor John Tory in a press release.

The buses operate on ‘green propulsion technology’ with zero tailpipe emissions.

Image credit: Twitter 

Source: TTC

The post The TTC’s first electric bus is now in service appeared first on MobileSyrup.

03 Jun 22:18

Microsoft shows off dual-screen Surface device

by Aisha Malik

Microsoft reportedly started internal demonstrations of a new dual-screen Surface device.

Sources have told The Verge that Microsoft held an event for its devices team where it showed a teaser for the new dual-screen prototype hardware.

The new device has been in production for two years under the codename ‘Centaurus.’ The device will be a laptop/ tablet hybrid with a dual-screen.

If the company moves forward with the device, it could be one of the first Windows Lite devices. Windows Lite is meant to be a lightweight version of Windows designed for dual-screen devices and Chromebook competitors.

The Verge says Microsoft could potentially launch the device in the next six months, especially since it is showing it to employees.

Microsoft has also unveiled a new demo version of Microsoft Teams, according The Verge. The company is also testing location, document, and calendar sharing.

Source: The Verge

The post Microsoft shows off dual-screen Surface device appeared first on MobileSyrup.

03 Jun 22:17

You can finally plug a USB thumb drive into your iPad

by Jonathan Lamont
iPad USB support

During its opening keynote at WWDC 2019, Apple announced several new features coming to the iPad, but one of the most important was support for USB drives.

In other words, users will now be able to plug USB thumb drives, SD cards, cameras and other devices into iPads — assuming, of course, that they have an appropriate dongle.

While it may seem like a small feature, the addition of USB support dramatically improves the workflow of using an iPad.

For example, someone like me who would need to edit photos throughout the day, being able to connect my camera and pull in my photos to edit them is incredibly important.

Apple also announced iPadOS at WWDC, a dedicated operating system for the iPad that is based on iOS.

The post You can finally plug a USB thumb drive into your iPad appeared first on MobileSyrup.

02 Jun 19:50

Panasonic Reveals Cinema-Oriented S1H

bythom panasonic s1h

Panasonic today pulled a Sony, beginning to coordinate their still and video product lines via a unified lens mount (E in Sony's case, L in Panasonic's). The camera was pre-announced at Cinegear, and won't be available until fall.

02 Jun 19:50

Maurice Parker writes Proposed NetNewsWire Bran...

Maurice Parker writes Proposed NetNewsWire Branching Strategy. Discussion on the Slack group.

02 Jun 19:50

Trawling Through iOS Backups For Treasure (a.k.a. How to fish for target files in iOS backups) with R

by hrbrmstr

In a recent previous post I brazenly talked over the “hard parts” of how I got to the target SQLite file that houses “mowing history” for what has become my weekend obsession. So, we’ll cover just how to do that (find things in iOS backups) in this post along with how to deal with some “gotchas” if you’re doing this from macOS.

macOS (the Knife)

Kurt Weill, Bertolt Brecht, and Marc Blitzstein created some amazing lyrics that Bobby Darin did some sweet, sweet justice to:

I bring that up to talk about the cutting, biting, dangerous edge of macOS that is Apple’s somewhat mixed attempt at protecting your privacy and keeping out of sight sensitive files and directories from the the sharp teeth of malware (and to re-pimp my {mactheknife} package) . You can read up on Apple’s new protections more thoroughly over at The Eclectic Light Company. For the purposes of this blog post, Apple’s macOS Sandbox policies means you have to do some extra steps to gain access to the folder and files associated with iOS backups (which is ~/Library/Application Support/MobileSync/Backup/).

If you want RStudio, R, and anything run with Rscript to access these sandboxed areas you’ll need to enable “Full Disk Access” for those apps and executables. First you’ll need to open System Preferences > Security & Privacy and then make the Privacy tab active. Keep that window open and tap the lock to unlock the settings.

Full Disk Access settings panel in macOS

Full Disk Access settings panel in macOS

Adding RStudio is easy. Just make Finder active and hit Cmd Shift A and then find and drag the “RStudio” application into the pane+tab you opened in the previous step. Back in the Finder, hit Cmd Shift G and paste in: /Library/Frameworks/R.framework/Resources/bin and go to that folder. Drag in R and Rscript each into the pane+tab from the aforementioned step. Finally (and this got me for a minute) you also need to (again, in Finder) hit Cmd Shift G and paste in /Library/Frameworks/R.framework/Versions/3.6/Resources/bin/exec and drag that R executable into the Security & Privacy Privacy/Full Disk Access pane+tab as well. When you’ve done all that, lock the System Preferences pane and close it.

It is important to note that you just gave “R” and anything that calls R from your user space complete (well, almost) access to every sandboxed area on your system. R is a general purpose programming and scripting language which means any bit of malicious code that knows you have added those executables can use R to read from and write to any area on your system.

It is also important to note that I had to use 3.6 vs the Current symlink for the last entry so that means you need to do this for each new R version you install.

I hope folks on legacy Windows OS installs didn’t skip over this part as you’ll need to go here to figure out where your iOS backups folder is to go through the rest of the post.

Sneakin’ Round The Corner

Windows folks hopefully read at least the last bit of the previous section to figure out where their iOS backups are. On macOS that’s ~/Library/Application Support/MobileSync/Backup/. You need a local backup there (most folks just use iCloud backups these days) and Apple tells you how to do this.

Once you know you’ve got an (unencrypted) backup just go to your iOS backups directory and list the files by date and note the name/path of the most recent backup. Now we can have some fun.

library(XML) # to read plist (property list) files
library(tidyverse) # for printing and access to sqlite dbs

# replace this with the relative path to your most recent backup dir
mb <- "~/Library/Application Support/MobileSync/Backup/28500cd31b9580aaf5815c695ebd3ea5f7455628-20190601-165737"

list.files(mb, pattern = ".*\\.(db|plist)$")
## [1] "Info.plist"      "Manifest.db"      "Manifest.plist"      "Status.plist"

The above code looks for some key metadata files for iOS backups.

  • Info.plist has info on your device
  • Manifest.db has tons of info on all the files in the backup in a SQLite database
  • Manifest.plist has some additional metadata on the backup including applications included in the backup
  • Status.plist contains info on the status of the backup

Let’s take a look at the plists:

info_p <- file.path(mb, "Info.plist")
file.copy(info_p, "/tmp", overwrite = TRUE)
system2("plutil", args=c("-convert", "xml1", "-o", "/tmp/Info.plist", "/tmp/Info.plist"))

info <- XML::readKeyValueDB("/tmp/Info.plist")

str(info)
## List of 11
##  $ Device Name        : chr REDACTED
##  $ Display Name       : chr REDACTED
##  $ ICCID              : chr REDACTED
##  $ IMEI               : chr REDACTED
##  $ IPBE Backup Version: int 1
##  $ Last Backup Date   : POSIXct[1:1], format: "2019-06-01 21:23:02"
##  $ Phone Number       : chr REDACTED
##  $ Product Type       : chr REDACTED
##  $ Product Version    : chr REDACTED
##  $ Serial Number      : chr REDACTED
##  $ Unique Identifier  : chr REDACTED

status_p <- file.path(mb, "Status.plist")
file.copy(status_p, "/tmp", overwrite = TRUE)
system2("plutil", args=c("-convert", "xml1", "-o", "/tmp/Status.plist", "/tmp/Status.plist"))

status <- XML::readKeyValueDB("/tmp/Status.plist")

str(status)
## List of 6
##  $ BackupState  : chr "new"
##  $ Date         : POSIXct[1:1], format: "2019-06-01 21:22:53"
##  $ IsFullBackup : logi FALSE
##  $ SnapshotState: chr "finished"
##  $ UUID         : chr REDACTED
##  $ Version      : chr "3.3"

mainf_p <- file.path(mb, "Manifest.plist")
file.copy(mainf_p, "/tmp", overwrite = TRUE)
system2("plutil", args=c("-convert", "xml1", "-o", "/tmp/Manifest.plist", "/tmp/Manifest.plist"))

manifest <- XML::readKeyValueDB("/tmp/Manifest.plist")

str(manifest, 1)
## List of 8
##  $ Applications        :List of 745
##  $ BackupKeyBag        : chr __truncated__
##  $ Date                : POSIXct[1:1], format: "2019-06-01 20:57:40"
##  $ IsEncrypted         : logi FALSE
##  $ Lockdown            :List of 12
##  $ SystemDomainsVersion: chr "24.0"
##  $ Version             : chr "10.0"
##  $ WasPasscodeSet      : logi TRUE

You’ll note we’re making copies of these files (never play with system-managed files directly unless you know what you’re doing) and turning binary property lists into plain text XML property lists as well so we can read them with the XML::readKeyValueDB() function.

Most of that information is fairly useless for this blog post but I figured you might like to see the hidden things the system knows about your devices. What we do want to check is to see if the John Deere application and data made it into the backup. The Applications slot is a named list of application metadata. Let’s see if there’s anything Deere-ish in it:

grep("deere", names(manifest$Applications), ignore.case = TRUE, value = TRUE)
##                   key 
## "com.deere.mowerplus"

str(manifest$Applications$com.deere.mowerplus, 1)
## List of 4
##  $ CFBundleIdentifier   : chr "com.deere.mowerplus"
##  $ CFBundleVersion      : chr "180"
##  $ ContainerContentClass: chr "Data/Application"
##  $ Path                 : chr "/var/containers/Bundle/Application/30DF2640-A9AA-43A0-AD87-932CA513D75A/MowerPlus.app"

Aye! This means we should have some luck finding “mower” data in the Manifest SQLite database.

Now, we could try to follow UUIDs around but we can also take a stab at a less cumbersome approach. Let’s make a copy of the Manifest database and see what it holds:

mainf_d <- file.path(mb, "Manifest.db")
file.copy(mainf_d, "/tmp", overwrite = TRUE)
## [1] TRUE

(manifest_db <- src_sqlite("/tmp/Manifest.db"))
## src:  sqlite 3.22.0 [/private/tmp/Manifest.db]
## tbls: Files, Properties

We want to get to (hopefully) a SQLite file with the mowing data so we likely care about the Files table. Let’s take a look at the structure of that table:

(fils <- tbl(manifest_db, "Files"))
## # Source:   table<Files> [?? x 5]
## # Database: sqlite 3.22.0 [/private/tmp/Manifest.db]
##    fileID           domain         relativePath           flags        file
##    <chr>            <chr>          <chr>                  <int>      <blob>
##  1 c1da4199a18d0b5… AppDomain-com… ""                         2 <raw 437 B>
##  2 7426ac0386e2887… AppDomain-com… Library                    2 <raw 444 B>
##  3 a6393e739e1ad37… AppDomain-com… Library/WebKit             2 <raw 444 B>
##  4 c54f5c77a5e970b… AppDomain-com… Library/WebKit/Websit…     2 <raw 458 B>
##  5 578f2c96f219e95… AppDomain-com… Library/WebKit/Websit…     2 <raw 465 B>
##  6 c8833032ce7c9e9… AppDomain-com… Library/WebKit/Websit…     2 <raw 481 B>
##  7 6af21902e595f7c… AppDomain-com… Library/WebKit/Websit…     2 <raw 468 B>
##  8 4c1c49324646af0… AppDomain-com… Library/WebKit/Websit…     2 <raw 471 B>
##  9 d0636bf9b5ba2ae… AppDomain-com… Library/WebKit/Websit…     2 <raw 468 B>
## 10 0b6bb30c8abaa4e… AppDomain-com… Library/Preferences        2 <raw 458 B>
## # … with more rows

If you have a ton of apps, this is a pretty big haystack to comb through. We may be able to narrow things down a bit, though, and we’ll start by seeing what that domain column holds:

distinct(fils, domain)
## # Source:   lazy query [?? x 1]
## # Database: sqlite 3.22.0 [/private/tmp/Manifest.db]
##    domain                                 
##    <chr>                                  
##  1 AppDomain-Outils-OBD-Facile.EOBD-Facile
##  2 AppDomain-ch.threema.iapp              
##  3 AppDomain-co.humanco.Human             
##  4 AppDomain-co.ortatech.colr-app         
##  5 AppDomain-co.vero.app                  
##  6 AppDomain-com.7thg.Tides               
##  7 AppDomain-com.AerLingus                
##  8 AppDomain-com.BloomSky.BloomSky        
##  9 AppDomain-com.PunchThrough.LightBlue   
## 10 AppDomain-com.agilebits.onepassword-ios
## # … with more rows

So, these are app-specific and the bits after the - in each one look like the CFBundleIdentifiers from above. Let’s make sure:

filter(fils, lower(domain) %like% "%com.deere.mowerplus%") %>% 
  distinct(domain)
## # Source:   lazy query [?? x 1]
## # Database: sqlite 3.22.0 [/private/tmp/Manifest.db]
##   domain                       
##   <chr>                        
## 1 AppDomain-com.deere.mowerplus

Aye! Let’s check to see what files are in there (and hope for a nice SQLite database):

filter(fils, domain == "AppDomain-com.deere.mowerplus") %>%
  select(relativePath) %>% 
  collect() 
## # A tibble: 14 x 1
##    relativePath                                                     
##    <chr>                                                            
##  1 ""                                                               
##  2 Library                                                          
##  3 Library/Preferences                                              
##  4 Library/Application Support                                      
##  5 Library/Application Support/com.crashlytics                      
##  6 Documents                                                        
##  7 Library/GoAppPersistentStore-GoMow.sqlite                        
##  8 Library/googleanalytics-aux-v4.sql                               
##  9 Library/googleanalytics-v3.sql                                   
## 10 Library/Preferences/com.deere.mowerplus.plist                    
## 11 Library/Application Support/ActivityCards.sqlite                 
## 12 Library/Application Support/com.crashlytics/CLSUserDefaults.plist
## 13 Library/googleanalytics-v2.sql                                   
## 14 Library/Application Support/MowTracking.sqlite

It turns out that last one is what we’re looking for. Now we just need a bit of crucial metadata to get to it:

filter(fils, relativePath == "Library/Application Support/MowTracking.sqlite") %>% 
  select(fileID, relativePath)
## # Source:   lazy query [?? x 2]
## # Database: sqlite 3.22.0 [/private/tmp/Manifest.db]
##   fileID                            relativePath                           
##   <chr>                             <chr>                                  
## 1 ad0009ec04c44b544d37bfc7ab343869… Library/Application Support/MowTrackin…

That fileID maps to the seriously ugly directory tree that is the rest of the iOS backups folder (you likely looked into it and wondered “What the heck?!”). The top level is a 2-digit hex prefix with files underneath it (likely for performance reasons but a bit of obfuscation never hurts, too). We’ll get the whole string:

filter(fils, relativePath == "Library/Application Support/MowTracking.sqlite") %>% 
  select(fileID)
## # Source:   lazy query [?? x 1]
## # Database: sqlite 3.22.0 [/private/tmp/Manifest.db]
##   fileID                                  
##   <chr>                                   
## 1 ad0009ec04c44b544d37bfc7ab3438697d23d618

and, then copy over the mowing database somewhere safe to work on:

file.copy(
  file.path(mb, "ad/ad0009ec04c44b544d37bfc7ab3438697d23d618"),
  "/tmp/mowtrack.sqlite",
  overwrite = TRUE
)
## [1] TRUE

mow <- src_sqlite("/tmp/mowtrack.sqlite")

mow
## src:  sqlite 3.22.0 [/private/tmp/mowtrack.sqlite]
## tbls: Z_METADATA, Z_MODELCACHE, Z_PRIMARYKEY, ZACTIVITY, ZDEALER,
##   ZMOWALERT, ZMOWER, ZMOWLOCATION, ZSMARTCONNECTOR, ZUSER

tbl(mow, "ZMOWLOCATION") %>% 
  glimpse()
## Observations: ??
## Variables: 16
## Database: sqlite 3.22.0 [/private/tmp/mowtrack.sqlite]
## $ Z_PK                <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1…
## $ Z_ENT               <int> 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,…
## $ Z_OPT               <int> 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ ZISPAUSEDPOINT      <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, …
## $ ZORDER              <int> 1, 2, 0, 11, 20, 58, 38, 43, 30, 25, 21, 10,…
## $ ZSESSION            <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ ZSESSION2           <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, …
## $ ZALTITUDE           <dbl> 42.64804, 42.70590, 40.99661, 39.54770, 38.2…
## $ ZCOURSE             <dbl> 358.242188, 332.226562, 18.281250, 260.85937…
## $ ZHORIZONTALACCURACY <dbl> 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,…
## $ ZLATITUDE           <dbl> 43.25913, 43.25914, 43.25913, 43.25915, 43.2…
## $ ZLONGITUDE          <dbl> -70.80069, -70.80069, -70.80069, -70.80067, …
## $ ZSPEED              <dbl> 0.0000000, 0.4250179, 0.5592341, 0.3802792, …
## $ ZTIMESTAMP          <dbl> 581100271, 581100272, 581100270, 581100281, …
## $ ZVERTICALACCURACY   <dbl> 6, 6, 8, 6, 4, 4, 4, 3, 4, 4, 4, 6, 4, 4, 4,…
## $ ZKLVDATA            <blob> <NA>, <NA>, <NA>, <NA>, <NA>, <NA>, <NA>, <…

(Shark) FIN

Even if you don’t have this mower app that I’m currently obsessed with, you now have a primer on how to get to SQLite databases stored by any application on your iOS device. That alone may unearth some fun projects for you to hack on. Plus, you also learned a bit on how to do some light forensics on iOS backups with R/RStudio.

If you did your own trawling and found something interesting definitely blog or tweet about it and drop a link in the comments.

02 Jun 19:49

Ride for Heart 2019

by jnyyz

Today was the fourth year in a row that I volunteered as a ride ambassador at the Ride for Heart. This time, good friend Tim came along. Note: since Tim is also a bit of a bike shutter bug, some of the pictures to follow were taken by him (especially the ones of my riding).

First repair of the day: an adjustment on a fellow volunteer’s bike.

Big thumbs up at the start gate.

Approaching the first on the road repair of the day: these kids reluctantly received some help with a jammed chain.

photo: T. Potter

Tire underinflation: by far the most common thing we saw all morning.

Rear brake cabling problem.

More inflating of tires. You’ll notice that Tim is going all the work.

This couple had a jammed chain. Their bike was borrowed from a neighbour, a beautiful Claude Butler tandem that was older that they were.

They got a flat further along the ride, but towards the end of the ride, we saw them all smiles, with a new rear tire.

Glad to get this traffic update…….

At the York Mills turn around.

Back down the hill, and under the Prince Edward Viaduct.

Leading up to the last climb of the day.

Raising seats for two girls that were struggling a bit on the climb.

Biking by the undeveloped lands by the mouth of the Don. At this point we’ve decided to remove our ambassador shirts so that we can show off our wool jerseys.

Thanks to Jeff at Palo Alto bikes for exemplary customer service: he took the trouble to accept a phone order for this special PA Bikes wool jersey. Not only that, but he sent it by USPS rather than UPS as per my preference. I get to stir up a few memories of my grad school days when I wear it.

photo: T. Potter

Never get tired of seeing this skyline from this vantage point.

These two bike dads were smart enough to have a bail out option.

The final stretch along the Gardiner to the S. Kingsway exit.

Overall, no flat tires this time, but lots of pumping up tires and seat adjustments. There seemed to be fewer mechanicals this year. At one point, five of us white shirted volunteers converged on a single cyclist to see if they needed help.

Thanks to for TBN for giving us the opportunity to help out. Thanks also to Tim for good company, and doing 90% of the work this year.

02 Jun 19:46

Week Notes 19#22

by Ton Zijlstra

A week spent mostly at home (due to a national holiday on Thursday, and a nation wide public transport strike on Tuesday) in which:

  • I worked on my company’s admin and book keeping
  • We had our monthly all-hands meeting on Wednesday, where I did a first session on information security and operational security
  • I pitched myself for taking on a national project on responsible data use by (decentral) public institutions
  • Elmine and I prepared for Peter’s Crafting {:} a Life unconference next week
  • I worked on an open data project for a province
  • The little one turned 3 years old
  • Wrote a pitch for an energy poverty experiment using open data, as part of a design sprint that takes place next week
  • Went to a former dorm mate’s 50th birthday, with many dear friends present. It’s a luxury to just be and hang-out together, because you’ve known each other for 30 years, apart from catching up on the most recent context</.li>

22
22 by Edward and Caroline, license CC-BY-SA

02 Jun 05:02

Reclaiming Power and Place

by Rob Shields
Reclaiming Power and Place, The Report by the National Inquiry into Murdered and Missing Indigenous Women, estimated to number 4000 or more, concludes that this is a “Canadian genocide”. It forces Canadians to reconsider their …
01 Jun 14:14

NetNewsWire Alpha One

After five years of work — including getting the name NetNewsWire back, and a beautiful new app icon by Brad Ellis — NetNewsWire 5 has finally hit the alpha stage.

This was the very first milestone to hit in the bug tracker. No other milestone will take years to achieve. But I did it — and, way more importantly, we did it. I did a bunch of foundational work, but then folks like Maurice Parker, Daniel Jalkut, Olof Hellman, and others totally stepped up and made huge contributions.

* * *

When we (NewsGator, at the time) sold NetNewsWire to Black Pixel, I described working on NetNewsWire as the thrill of my career. I loved every minute. I loved talking to every NetNewsWire customer who wrote in. I loved everybody who helped test, and everybody who helped me think things through.

And now I’m at it again. Only this time it’s open source, and there are people willing and able to help actually write it. And there are people writing in again, via email and via the Slack group — and this is already better. A bigger thrill.

I’m in my 50s now. When NetNewsWire 1.0 shipped, I was 35. Did I think things could get better with age? Nope!

I’m so glad to be wrong. :)

* * *

How fortunate am I! Today is the day NetNewsWire 5.0 alpha one goes out — and it’s NetNewsWire, not something else, and it has a NetNewsWire icon.

And my Bendii Syndrome has taken me over entirely.

New NetNewsWire icon, which shows a communications satellite orbiting the Earth.

01 Jun 14:12

Blogging {:} a Life

by Ton Zijlstra

My friend Peter has been blogging for exactly 20 years yesterday. His blog is a real commonplace book, and way more than my blog, an eclectic mixture of personal things, professional interests, and the rhythm of life of his hometown. When you keep that up for long enough, decades even, it stops being a random collection and becomes a body of work, an œuvre. Œuvre really is the right word, according to Peter he’s written 2.67 million words. Novels on average have eighty thousand words, so Peter’s blog is over 33 novels long. Most novelists aren’t that prolific.

I’m a regular reader of Peter’s blog exactly because of the quirky mix of observations, travelogues, personal things, snippets of code, and reflection. To me the way he weaves all those things into one, is what we also tried to achieve with our Smart Stuff that Matters unconference (in which Peter participated): bringing global (technology) developments back to the size of your own home life, your own city life, and letting your life inform how you want to shape and use the tools available to you. So that, in the words of Heinz Wittenbrink (another participant last summer), when you discuss themes important to you, you actually are discussing the details of your own life:

To list the themes [….of the sessions I attended…] fails to express what was special about the unconference: that you meet people or meet them again, for whom these themes are personal themes, so that they are actually talking about their lives when they talk about them. At an unconference like this one does not try to create results that can be broadcast in abstracted formulations, but through learning about different practices and discussing them, extend your own living practice and view it from new perspectives. These practices or ways of living cannot be separated from the relationships in which and with which you live, and the relationships you create or change at such an event like this.

Heinz’ last sentence in that quote “These practices or ways of living cannot be separated from the relationships in which and with which you live.” is true and important as well.

Of the 20 years Peter kept up his blog, I’ve known him for 14 years almost to the day, ever since we met in a Copenhagen hotel lobby mid June 2005. Our first meeting was aptly technology mediated. As Heinz wrote, our blogging practices cannot be separated from the relationships in which we live. Traces of our connections are visible through the years, building on each others thinking, meeting up in various places, visiting each others homes. Not just our specific connection but the shared connections to so many others.
Blogging isn’t just a reflection of our lives, but is an active part in weaving the connections that make up our lives.

Next week Peter organises an unconference, called Crafting {:} a Life. Modelled after Elmine’s and my unconference birthday parties, Peter is celebrating not just the 20 year milestone of his blog and his company. He’s celebrating in the same way he blogs, the completeness of our lives, both the sweet and the bitter. It’s in that contrast where beauty lives to me, and how we can appreciate the value of the connections we weave. Elmine and I will go visit Peter and his family, with 50 or so others, on Prince Edward Island in Canada in a few days.

Peter recently said about our and other participants coming to Canada from Europe
It is humbling to consider that each of these old friends is coming across the ocean to join us for the simple act of spending time together talking about life for a while.
We felt the same every time we did an edition of our unconferences. Elmine wrote last summer, looking back on her birthday unconference Smart Stuff That Matters:

How do you put into words how much it means to you that friends travel [literally] across the world to attend your birthday party? … How can I describe how much it means to me to be able to connect all those people Ton and I collected in our lives, bring them together in the same space and for all of them to hit it off? That they all openly exchanged life stories, inspired each other, geeked out together, built robots together?

The simple act of spending time together talking about life for a while. is a rather rich and powerful thing to do, Peter, which packs the full complexity of being human. We look forward to seeing you, Catherine and Oliver next week, as well as 50 or so others that came to form your ‘global village’ while you were engaged in blogging a life.