Shared posts

21 May 01:30

Topfew Fun

This was a long weekend in Canada; since I’m unemployed and have no workaday cares, I should have plenty of time to do family stuff. And I did. But I also got interested in a small programming problem and, over the course of the weekend, built a tiny tool called topfew. It does a thing you can already do, only faster, which is what I wanted. But I remain puzzled.

[To those who are interested in Amazon or politics or photography, feel free to skip this. I’ll come back to those things.]

What it does

Back in 2016 I tweeted Hello "sort | uniq -c | sort -rn | head" my old friend, and got a few smiles. If you feed that incantation a large number of lines of text it produces a short list showing which among them appear most often, and how many times each of those appears.

It’s a beautiful expression of the old Unix craft of building simple tools that you can combine to produce surprising and useful results. But when the data gets big, it can also be damn slow. I have a little script on the ongoing Web server that uses this technique to tell me which of my pieces are most popular, and how many times each of those was read.

In the last couple of weeks, my logfiles have gotten really big, and so my script has gotten really slow. As in, it takes the best part of a minute to run and, while it’s running, it sucks the life out that poor little machine.

It turns out to be a pretty common problem. Anyone who’s operating an online service finds themselves processing logfiles to diagnose problems or weirdness, and you regularly need to answer questions like “who are the top requestors?” and “what are the most common API calls?”

What it is

Topfew is a simple-minded little Go program, less than 500 lines of code and almost half of that tests. If you have an Apache server log named access_log, and you wanted to find out what the top twelve IP addresses were hitting your server hardest, you could say:

awk '{print $1}' access_log | sort | uniq -c | sort -rn | head -12

With topfew, you’d say:

tf -fields 1 -few 12 access_log (“tf” is short for “topfew”.)

The two would produce almost the same output, except for topfew would be faster. How much faster? Well, that’s complicated (see below)… but really quite a bit.

I don’t think there’s anything terribly clever about it; My bet is that if you asked a dozen senior developers to write this, they’d all end up with nearly identical approaches, and they’d all be pretty fast. Anyhow, as the links here make obvious, it’s on GitHub. If anyone out there needs such a thing and hasn’t written their own in a weekend project, feel free to use and improve.

Since I haven’t done a Go project from scratch in a long time, I’m not only out of practice but out of touch with current best practices, so it’s probably egregiously unidiomatic in lots of ways. Oh well.

How fast?

Well, that’s interesting. I ran a few tests on my Mac and it was many many times faster than the sort/uniq incantation, so I smiled. I thought “Let’s try bigger data!” and built a Linux version (saying GOOS=linux go build still feels like living in the future to me), hopped over to my Web server, and ran exactly those queries from the last section on a recent Apache logfile (8,699,657 lines, 2.18G). Topfew was faster, but not many times faster like on my Mac. So I ran it on the Mac too. Here’s a summary of the results. All the times are in seconds.

cp
time
sort/uniq
time
topfew
time
speedup
net of I/O
Linux 17.29 37.66 26.75 2.15x
Mac 1.40 137.46 8.81 18.36x

The first column (“cp time”) is the number of seconds it takes to copy the big file from one directory to another. The last column is produced by subtracting the “cp” time from each of the other two, leaving something like the amount of extra latency introduced by the computing in excess of the time spent just copying data, then comparing the results.

Anyhow, those are some puzzling numbers. Stray thoughts and observations that I’m not going to dignify with the term “hypotheses”:

  1. The Mac has a damn fast SSD.

  2. The Linux box’s disk is sluggish.

  3. Perhaps the basic tools like sort and uniq are surprisingly fast on Linux or the Go runtime is surprisingly slow. Or, you know, the mirror image of that statement.

  4. The sort/uniq incantation is inherently parallel while topfew is 100% single-threaded. Maybe the Mac is dumb about scheduling processes in a shell pipeline across its eight cores?

Giggling

I broke out the Go profiler (Go is batteries-included in ways that other popular languages just aren’t) and ran that command against the Apache logfile again. I was poking around the output and Lauren said “I hope you’re laughing at the computer, not at me talking to the cat.”

The profiler claimed that 73% of the time was spent in syscall.syscall reading the input data, and the first trace of actual application code was 2.27% of the time being spent in the regexp library doing field splitting (on \s+).

The core code that actually accumulates counts for keys was consuming 1.54% of the elapsed time, and 93% of that was updating the total in a map[string]uint64.

Next steps?

I’m probably curious enough to poke around a little more. And maybe someone reading this will kindly explain to me in words of one syllable what’s going on here. But anyhow, the tool is useful enough as it is to save me a noticeable amount of time.

21 May 01:29

Listening Is Hard

by Richard Millington

Not long ago, I undertook a survey for a client.

We went through the results separately and came to completely different conclusions.

Data is neutral but your interpretation of it is highly influenced by your own biases which are almost impossible to escape.

For example, if your survey results show members don’t feel a strong sense of community with another you can conclude:

a) you need to take steps to increase that or

b) this isn’t the type of community where members want that sense of connection.

I’ve seen this more often than I can remember. Surveys or interviews might reveal that members don’t like a specific feature and then we battle about whether that feature needs to be improved or removed.

Even metrics are open to interpretation. Look at this graph below:

Is the number of visitors going up, down, or staying the same? The answer depends entirely upon when you start the trend line and that is where your biases creep in.

If you think data is going to win you the argument or definitively determine what you should be doing, you’re probably going to be disappointed.

So, what should you do?

First, accept that no matter what you do you can’t escape your own biases.

Second, let other people look at the same data you see and draw their own conclusions (before you share your interpretation). This will reveal your blind spots and alternative ideas. (p.s. an outside consultant can really help here).

Third, use your data to develop hypotheses you can test in your community. Not sure if members want to feel a sense of community or not? You can ask them and test activities that might help members bond and see how they go. Not sure about a feature, ask members if they want it removed. Set the parameters for success or failure of each test and stick to them.

p.s. Read this great post by Bob Hoffman.

21 May 01:29

Hold My Geolocated Beer

by Ton Zijlstra

Bell¿ngcat explains how Untappd beer check-ins can disclose more than you’ve thought about your work. Like how Strava running logs disclosed e.g. military camp locations, Untappd can be similarly used to surface the travel history, frequent locations and home location of sensitive personell. In short: sharing your location provides patterns to interested parties. Always, and everywhere. (via Roel)

I share locations sometimes, as it may help create meet-ups with people I know that happen to be near as well. It happens frequently enough to make it interesting to share location when I am outside my usual patterns and willing to be ‘found’. Inside my usual patterns it doesn’t help to share location, as it won’t create additional serendipity. At IndieWebCamp Utrecht last year, Rose worked on making location check-ins more ephemeral, meaning they are visible for a short specified time, and not available as a history of check-ins.

21 May 01:29

Alle Fotos aus iCloud herunterladen

by Volker Weber

edbfceaa58ca107eabfca887bbc43c69

Hat man einmal die iCloud Photo Library eingeschaltet, zahlt von da an eine ständig steigende Miete an Apple. Das Feature ist super-praktisch, weil man alle Fotos auf allen Geräten bearbeiten kann, ohne sie alle dort auch dauerhaft zu speichern. Damit ist man nicht mehr limitiert durch die Speichergröße eine iPhone etwa. Der Nachteil liegt auf der Hand: Da die Fotodatenbank immer größer wird, muss man immer mehr Speicher bei Apple mieten.

Die Möglichkeit, auf einen Rutsch alle Fotos von der iCloud herunterzuladen, hat Apple geschickt versteckt. Auf der Apple Privacy Website wählt man einfach die letzte Checkbox und legt noch fest, wie groß die ZIP-Dateien sein sollen, die Apple da zusammenstellt. Bingo!

Hat man erst mal alle Fotos heruntergeladen, dann kann man bei Apple aufräumen und die Dateien woanders aufbewahren.

More >

[Danke, @RafaelZeier]

21 May 01:28

Machine learning to make a dictionary of words that do not exist

by Nathan Yau

Thomas Dimson trained a model to generate words that don’t exist in real life and definitions for said imaginary words. If you didn’t tell me the words were machine-generated, I’d believe a lot of them were actual parts of the English dictionary.

Tags: machine learning, Thomas Dimson, words

21 May 01:27

Is this the biggest challenge TransLink faces?

by Gordon Price

We’re well-trained: Keep six feet of separation – or two meters, the length of a bicycle, two extended arms, three steps back.   The length may not be that specific, but the point is: keep your distance.

But unfortunately, mass transit doesn’t work well with that instruction. Buses and trains never contemplated such a parameter.  Like restaurants at half capacity, some things just aren’t viable. Without occasional crowding, mass transit doesn’t have the mass.

Daily Hive

Unfortunately, fear and failure of transit will likely lead to another form of crowding – traffic congestion.   How soon and how much is still not clear – too many variables. It’s even possible that car use may not come back to previous levels.

But if it becomes clear that we have no choice – get back on transit in serious numbers or the region can’t function – then the challenge isn’t so much a technical one; it’s to  overcome this message:

 

Yet another ask of Dr Henry: under what conditions can we ignore that sign?

21 May 01:27

Because of this terrible chart in Georgia, people could die

by Josh Bernoff

Data is crucial in making decisions about reopening states. So is the visualization of that data. And the state of Georgia may have just published the most misleading and dangerous chart about virus infections ever. Here’s the chart. Take a close look. (You can see it bigger here.) The vertical axis is infections. The horizontal … Continued

The post Because of this terrible chart in Georgia, people could die appeared first on without bullshit.

21 May 01:27

Drafts 20 Introduces Advanced Wiki-Style Linking

by Ryan Christoffel

Drafts 20, the latest update to the powerful text editor and capture tool, introduces an excellent feature for creating in-line links to other drafts, workspaces, or even searches.

I’ve always appreciated the ability to link notes inside of other notes, like what’s available in Bear, and that’s exactly the behavior that Drafts 20 enables. By typing an existing draft’s title inside of double brackets (e.g. [[Draft Title Here]]), you can create a Wiki-style link to that draft that can be tapped or clicked for instant access. For research purpose especially, I’ve found this functionality useful in the past, and I’m glad to see it in Drafts.

One nice detail of Drafts’ implementation is that you can use the same syntax to create links to brand new drafts; if you type a title in brackets that doesn’t currently exist, the app will automatically create a new draft with that title. The system is smart enough, too, to work with only partial titles entered. For example, with an old draft titled “Apple Card Now Available for All US Customers,” all I had to type in brackets was ‘Apple Card’ for the link to be created. The only enhancement I hope to see in a future update is auto-complete suggestions when typing a draft’s title so you can ensure you’ve entered the correct one.

Linking to other drafts is certainly the primary appeal of the new bracketing syntax, but developer Greg Pierce has included a handful of advanced options too that make the feature even more valuable. As detailed in the update’s release notes, you can bracket not just other draft titles, but also links to your existing workspaces, a search term inside the app, or even a Bear note. My favorite options, however, enable creating one-tap links to Google or Wikipedia searches. By typing google: or wikipedia: then a search term, all inside double brackets, Drafts will create links to initiate those types of searches. The added flexibility afforded by these links, alongside the new links to other drafts, makes Drafts a strong research and database tool, alongside all the other things the app’s great at.

Drafts 20 is available on the App Store.


Support MacStories Directly

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

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

Join Now
21 May 01:04

How to Use Android Phone as a Webcam on Windows PC or Mac

by Parth Shah
Work from home is the new norm these days. The COVID-19 pandemic around the world has forced the majority to start working from home. The practice has led to a surge in demand for work from home tools and equipment including routers, webcams, microphones, laptop stand, and more. Most of them are out of stock and the ones in stock are costing double/triple from the original price. Thankfully, you can use your Android phone as a webcam and on PC and Mac. In this article, we will help you set up your Android phone as a webcam on PC and Mac. Continue reading →
21 May 01:03

Uber cuts 3,000 more jobs, shifts focus to core business

by Aisha Malik

Uber is laying off 3,000 employees more, as the company has seen an 80 percent drop in its ride-hailing business amid the COVID-19 pandemic.

Earlier this month, the company had cut 3,700 jobs. Uber CEO Dara Khosrowshahi told employees in an email on May 18th that: “We have to take these hard actions to stand strong on our own two feet, to secure our future, and to continue on our mission.”

To put things in perspective, Uber has laid off nearly a quarter of its staff in less than a month. As of December 31st of last year, Uber employed 26,900 employees around the world.

The company is also closing 45 offices globally, and is going to focus on its core business, which it says is to help people move and deliver things.

Uber Eats, the company’s food delivery service, has seen an increase in demand, as numerous people around the world have been adhering to shelter in place orders. The platform saw a 54 percent year over year increase in bookings. However, Khosrowshahi says that the gains aren’t going to be enough to make up for the losses brought by the decrease in ride-hailing.

“I will caution that while Eats growth is accelerating, the business today doesn’t come close to covering our expenses,” he told his employees in the email.

Uber’s rival, Lyft, has also reported that it is going to cut nearly 1,000 jobs, which shows that the ride-hailing industry is taking a severe, but expected hit due to the pandemic.

Source: Wall Street Journal Via: The Verge

The post Uber cuts 3,000 more jobs, shifts focus to core business appeared first on MobileSyrup.

19 May 06:33

Where is the Leadership in Post Pandemic Vancouver?

by Sandy James Planner

1200px-George_Vancouver_statue

1200px-George_Vancouver_statue

Gordon Price and I have been discussing how internationally cities are responding to the Covid-19 lock-downs by making it easier for residents to physically distance the required two meters or six feet while using city streets and spaces.  These cities have also strategized how best to support businesses in their staged and in some places staggered reopenings. Key to supporting local businesses is making citizens comfortable in walking or cycling to shops and services, and designing the areas where consumers have to wait for their physically distanced time in stores comfortable and convenient.

One example of a Mayor and Council that are adjusting to the new normal and getting it done is the City of London Great Britain. There Mayor Sadiq Khan recognizes that the post Covid-19 recovery, single vehicle use and the challenges of physical distancing is “the biggest challenge to London’s public transport network in Transport for London’s history”.

Matthew Taylor in the Guardian writes about London’s struggle to keep the numbers of people using public transport down  for physical distancing.  London also has to  insure that public transit journeys are not replaced with car usage which would create congestion and increase air pollution.

London’s answer is to repurpose roads for walking, cycling and transit only as the Covid-19 lockdown is lifted, with one of the biggest car-free initiatives in the world. Private vehicles and trucks are also being banned from several bridges. Work on the plan implementation has already begun, and will be completed in six weeks. As well, the congestion charge for any vehicle accessing central London will increase from 11.50 pounds (20 Canadian dollars) to 15 pounds(25 Canadian dollars)  per trip.

That is what a municipal  co-ordinated approach looks like addressing how cities can thrive in post pandemic times. But that verve, the ability for Council to  assist businesses and citizens in a time of crisis is lacking in Vancouver. Gordon Price wrote about Council’s lack of enthusiasm in this article. It was noted journalist Daphne Bramham who so cogently stated the following in the Vancouver Sun:

“Vancouver  was not designed with physical distancing in mind. “Even with most businesses shut down, pedestrians have been forced to dodge into traffic lanes to get around line-ups outside groceries, pharmacies and liquor stores.

There are also challenges for citizens using regular walking and cycling routes for accessing shops and services or getting exercise. “Sidewalks on even the major bridges are too narrow for pedestrians to comfortably keep their distance. The seawalls and Arbutus Greenway are also too narrow and have no barriers between cyclists and pedestrians.”

While we do have great staff at city hall that can flexibly meld a post pandemic city for physical distancing, policy to do so must come from Council. The current Council is nearly half way through their four year mandate. Each Councillor comes with closely held social values. But being on Council means teaming to represent what is needed for the city as a whole, not  individual personal value sets. That means working together to approve badly needed policy and to show unified respect, care and attention to provide the concerted recovery direction businesses and citizens  so badly need. It’s leadership.

While Council last week agreed to expand Covid related outdoor restaurant seating, there’s no urgent turnaround on that information for opening businesses that require that assistance now. In terms of expanding streets for walking and cycling, Daphne Bramham notes that this was not even voted on, “because three council members didn’t agree to continue meeting past 10 p.m. and extending the sitting hours requires a unanimous vote.”  

These are not normal times. Leadership is needed to nimbly  provide a post pandemic plan for  opening businesses to thrive, and for returning consumers to feel  safe and comfortable.

Kirk Lapointe in Business In Vancouver identifies post pandemic plans as starting right at the sidewalk. “The contemplation of cities like Vancouver about extending restaurants and some retailers into the streets to give them a fighting chance of generating a business amid social distancing is a no-brainer. Should have been approved weeks, months, years ago. They serve as staples of a neighbourhood’s identity, and in this crisis, they are a threatened breed that the species cannot afford to lose.”

Ensuring citizens feel comfortable patronizing local businesses, and giving businesses  clear direction from the City on how they can use city street space is key for recovery. Other cities are using this post pandemic time to ensure the private automobile does not clog the road network by developing a system of filtered streets for walking, cycling and transit, ensuring ease and comfort of access.

Surely Vancouver can do this.

 

Leadership_lane

Leadership_lane

 

 

19 May 06:32

The surveillance economy is more like the commodification economy

Previous: Open source businesses, meet the real world

If we want to do anything about the surveillance economy problem, it helps to try to figure out why it's so important to so many people to do surveillance marketing working definition of surveillance marketing: any database marketing where some or all of the data used is derived from surveillance instead of other kinds of marketing. One way to look at it is that it's not about the surveillance. Surveillance is a tool in a more complicated process. Today, the surveillance marketing business looks like the Establishment, but it used to be cool (business cool anyway) back when it was emerging from the open source scene of the late 1990s and early 2000s.

Doc Searls wrote, Madison Avenue fell asleep, direct response marketing ate its brain, and it woke up as an alien replica of itself. Part of that was
driven by the realization that the same Commoditize Your Complement strategy that applies to device drivers and other open source software can also apply to every business, everywhere. It's more of a commodification economy than a surveillance economy, but we got started saying surveillance economy so we might as well stick with it.

The general direction of the "surveillance economy" is to build a system where reputation graphs gain sustainable value, and goods and services (whether they're PC hardware, or software, or songs, or news stories, or home delivery of stuff) lose value until they become commodity nodes on someone else's reputation graph. Information goods such as software code can and should be public, while reputation graphs are hidden by legal restrictions, complexity, and scale. And there's a reputation graph for everything. Amazon sellers. Uber drivers. News sites. The same adtech companies that facilited content commodification in 2014 are facilitating content commodification today. Web adfraud is just as necessary for web adtech as extra drivers cruising around are necessary to Uber.

The first market in information goods to get commoditized was the slothful, overpriced Unix business, which was already being starved of investment as CIOs and analysts talked up the inevitability of Windows NT. When Linux came along, the commodity was an improvement. Naturally, when the commodification strategy worked in one business, the winners went on to apply it elsewhere.

  • Use a stack of janky PC hardware instead of splashing out on a Digital Unix server: cool hack

  • Use a stack of miracle cure peddlers instead of splashing out on a star MD: maybe not so much

YouTube doesn't show you videos about drinking bleach because they want you to drink bleach. They show you videos about drinking bleach because the recommendation algorithm is set up to avoid creating the kind of powerful stars who tend to emerge on other media. The bleach-drinking advocacy is just a side effect of a system designed to steer you away from any content creator who might develop market power.

Algorithms that artificially boost "long tails" in content We can see this happening but it's hard to quantify from the outside. We won't see it for real until the discovery phase of some ugly lawsuit over some tragic event. are an essential part of the commodification strategy. For a platform company, fraudulent and misinfo content doesn't look good in the PR clippings, but it's manageable if you can get enough Serious People to write slick PDFs about how it's an Industry Wide Problem. Allowing the algorithm to let user preferences create bankable stars would be a real threat.

For every bad thing on the Internet, there is an "if this goes on" dystopia story. If the surveillance economy keeps going the way it's going, we'll all end up working for and buying from one big company built around a really complicated reputation graph that measures who can catch the tastiest rats in the ruins of civilization. But no dystopia narrative runs out all the way (yet). Just as the surveillance economy dystopia narrative mostly ended the IP Maximalism dystopia narrative, we're going to get a new one.

So that's the fun part. Which marketers will manage to de-commodify themselves? (Maybe think economic signal, using the whole customer including their own hard-wired monkey brain ability to process reputation and how brands are a cognitive hack on that, and so on.) One piece of good news. Section 230 of the Communications Decency Act helps platform companies enable commodification, but other laws and regulations are giving us tools to resist it. More on that soon.

Bonus links

Doordash and Pizza Arbitrage

To show how easy it is for plagiarized news sites to get ad revenue, I made my own

FTC Seeks Ad Tech Pros To Bone Up On The ‘Opaque’ Business Of Digital Advertising

An ex-Google employee was behind an online campaign to make a coronavirus conspiracy video go viral

An Ex-Google Employee Turned 'Whistleblower' and QAnon Fan Made 'Plandemic' Go Viral

Fewer advertisers means more bad ads from ad exchanges

Facebook Said It Wouldn't Take Ads For Masks. This Company Ran Them Anyway.

Facebook Reaches $52 Million Dollar Settlement With Its Hard-Hit Moderators

The latest big transparency report again shows ad tech is a mess

Coronavirus misinformation is a tricky foe for tech

Big Tech Has Crushed The News Business. That’s About To Change., by Ben Smith, New York Times

19 May 06:32

Doordash and Pizza Arbitrage

Doordash and Pizza Arbitrage

In which a Pizza restaurant owner notices that Doordash, uninvited, have started offering their $24 pizzas for $16 and starts ordering their own pizzas and keeping the difference.

Via @mattyglesias

19 May 06:32

The Unicorns Fell Into a Ditch

by Matt Levine
Also pizza arbitrage, ABS ratings and TV ads.
19 May 06:32

One Third of a Year

by peter@rukavina.net (Peter Rukavina)

Catherine died four months ago yesterday.

A few weeks ago I got a call from the Grief Support Coordinator at Hospice PEI. They’d sent me a card after Catherine died alerting me that they’d be reaching out after 3 months; I’d forgotten that. Three months, it seems, is a strategic time: it’s assumed the casseroles have stopped being dropped in the vestibule, and that the darkness is darkening. Not entirely incorrect. But not entirely correct either.

There’s a men’s grief support group starting up at the end of this month: I said I wasn’t interested, that everything was okay, that I had all the support I needed.

The next day I changed my mind, after realizing that everything was not okay, that I was interested, that I didn’t have all the support I needed, and that my decision had more to do with discomfort with the idea of sharing what I was feeling with other men in a similar position. But then I read the layout of the 8 weeks of sessions, and saw bullet points like “Am I going crazy?” and decided it was best to set aside my discomfort.

Once I’d made that decision, it was a short hop, skip and jump to making an appointment with my erstwhile psychologist. Apparently once you realize you can use some help, it’s easier to look for help on many fronts. That’s a good thing to remember.

A wise friend encouraged me to greet fear “as an ally, not an opponent,” and that’s what I have chosen to do, at least for a while.

I have not written much here about what it has been like to grieve, in part because I have been waiting to get to the point where I can tie neat bows on things, come to conclusions, provide insight. “This is what my life with Catherine was all about, and here’s how it felt when that came to an end.” I’m not there yet, and I’m starting to realize that there is no there.

I do not feel helpless; indeed, I feel enormously capable for being able to keep going. Doing the laundry, making the meals, making sure we get outside, making plans for what comes next, staunching the Polygonum cuspidatum in the back yard, getting the windshield replaced, learning how to prune the fruit trees: victories all. The countertops are clean, the cutlery drawer organized, the hat-toque-mitt box prepared for summer storage, our bicycles oiled and getting lots of use.

But lurking under my sense of capability is realization that simply being capable, being able to resume daily operations, that’s the easy part.

Being able to consider what my life with Catherine was about, what it meant, what we meant, what it means to care for someone while they are dying, and how that will affect the rest of my life, and what shape the rest of my life might take, these are all questions I feel extremely incapable of answering, or even having enough distance from to consider at all. Perhaps the best thing I can say is that I have, after four months, enough distance to relax a little into the idea that I don’t have to be in a hurry, that so much of the last five years, ten years, twenty years has disappeared behind an opaque curtain is okay, and that things will emerge as I’m able to confront them.

And it’s not like that curtain is always closed: a song lyric, or an opened drawer, or an “on this day in 2006” in my photos app, these can all reduce me to tears for a moment or two or ten. Tears are good: I almost always feel better after having a cry.

Several have written me variations of a “first your dad died, then Catherine, and now this; how much more shit are you going to have to take” message. Appreciated. But the pandemic has been less another mountain to cross than it has been a chance for the world to catch up to me: I’ve spent years living with an uncertain future, with the real possibility of death in a week or a month or a year. I am well-trained in the art of learning to not care (so much) what happens next because I have no control over it.

Which is not to say that I’ve embraced the pandemic: I could do without the loneliness, and if God is at play here, the “I’m going to take the one you love most, and then, for good measure, I’ll make sure everyone else is kept at bay too” seems like a strange way to operate. But perhaps it’s quiet contemplation that I need, not more opportunities for distraction. 

19 May 06:32

Bill Gates' Bücher für diesen Sommer

by Volker Weber

Wer die sehenswerte Netflix-Doku über Bill Gates kennt, der weiß, dass Gates eine Einkaufstasche voll mit Büchern herumschleppt. Das sind die fünf Empfehlungen für diesen Sommer:

Die Kindle-Versionen der Originaltextes, sofern verfügbar, sind wirklich spottbillig.

19 May 06:32

How to Keep Zoom Classes Secure and Private

TeachOnline.ca, Contact North, May 18, 2020
Icon

Zoom is really simple to use but really complex pbehind the scenes. It was designed for enterprise use, with the expectation that privacy setting would be managed by system administrators. But as we've all seen, it became very popular for online use by individuals, and it was not well-suited for that, from a privacy perspective. Zoom has made sdome improvements, but users still need to attend to privacy issues. That's what this article is about. Here's the advice: keep the app updated. Use a new random meeting ID for each meeting. Use a meeting password. And if you feel the need, you can enable the waiting room, so you can screen people as they join. You can also lock your meeting, disable screen sharing, and disable chat.

Web: [Direct Link] [This Post]
19 May 06:32

Write and right

It may come as a shock, but I don’t write to be “right”. Obviously, I don’t write to be purposely wrong either. That’d be silly and unproductive. Writing for me is a way to explore, think and figure...
19 May 06:31

Fresh new styling for maps on Flickr

by Phil Dokas

We’re happy to announce a small but important update to all maps on Flickr. Starting today we’re rolling out an update to use map imagery provided by the wonderful folks at Mapbox. We’ll ramp up the release over the next day or two. The update only affects map styling; it does not affect whether or where a map displays.

12

These new maps have a number of nice touches that help tell the story of where in the world your photos were taken. Mapbox’s data for roads, natural features, and even businesses are top notch – and easy to contribute to. Additionally, as you zoom in on a map, terrain data will start to appear, which is helpful for your outdoor shots in rugged environments. And now all maps take advantage of high resolution screens and appear with extra sharpness.

34

All maps on Flickr should behave the same as they always have, just now with street, satellite, and “hybrid” imagery from our new provider. If you have any questions ask in our Help Forum or visit our Help Center. Check out your map here!

Fresh new styling for maps on Flickr
19 May 06:31

Not Receiving Negative Feedback Makes It Hard to Improve

by Eugene Wallingford

As a financial writer for Forbes and the Wall Street Journal, Jason Zweig has received a lot of letters from readers, many of them forcefully suggesting that his columns could be better. In this interview, he speaks calmly about processing negative feedback:

... when you get negative feedback, you have to sort it. You can't just take all negative feedback and throw it in the "I'm not reading this" bucket. You have to go through it. And you have to say: "Is this person, who says I'm wrong, right or wrong?" Because if the person says you're wrong, and is wrong, then how does that hurt you? But if the person who says you're wrong is right, it's devastating to you if you don't listen.
It's not about winning. It's about learning.

I know profs who refuse to read their student assessments because it's too hard emotionally to deal with negative feedback. I understand the temptation... There are semesters when thirty-nine reviews are positive, yet the one negative review lodges itself in my brain and won't let go. Even after decades of teaching, it can be hard to shake off those comments immediately. And when there many comments that are "constructive" or just plain negative, well, reading the assessments can really demoralize.

But as Zweig says, closing myself off to the feedback is ultimately a losing proposition. Sometimes I assess a comment and decide that it's off the mark, or the result of singular event or experience and therefore isn't worth sweating over. But what about when the reviewer is right? Or when there's a kernel of truth in an otherwise unnecessarily personal comment? Ignoring the truth doesn't do me any good. I want to get better.

I did not receive student assessments this spring. When the university moved to remote instruction suddenly, the administration and faculty agreed to suspended assessments for the semester, with the idea that teaching and learning would both be a bit bumpier than usual under the extreme conditions. Just before the last week of the term, they agreed to bring optional assessments back purely for the prof's personal use, but by then I decided to pass. Some of my students provided some helpful feedback, including constructive criticism, all on their own.

I'll actually miss reading my assessments this month, if not the sudden spike in my blood pressure that sometimes accompanies them. Students are usually helpful and surprisingly generous in their evaluations, and I still usually learn a lot from the positive ones and the negative ones alike.

19 May 06:31

Default Feeds Are Okay

I just heard that the default feeds in NetNewsWire are okay as-is, and I don’t need to collect permissions for Apple.

Great! I’m so pleased.

(This is a follow-up to Heads-Up to RSS Reader Authors and More on the Default Feeds Issue.)

19 May 06:31

Twitter Favorites: [JodiesJumpsuit] The traditional Victoria Day weather is grey, cold, rainy and miserable and this year is thankfully no different

jump (inside) @JodiesJumpsuit
The traditional Victoria Day weather is grey, cold, rainy and miserable and this year is thankfully no different
19 May 06:30

NewsBlur Blurblog: Spotify is a Prison for Podcasts

sillygwailo shared this story from Peter Rukavina's Weblog.

I have been a happy customer of Spotify for several years now, after flirting back and forth with Apple Music, Google Play Music and the late Rdio for several years before that. We have a family subscription, which we all three use extensively, no more so than Oliver who, for many months now has been making nightly playlists to go to sleep listening to.

Spotify has recently been promoting itself as much a podcast player as a streaming music service, and Oliver has followed the lead and has accumulated a subscription list of 1500+ podcasts in Spotify.

Last night, though, he was thinking about migrating to something else for his podcast listening: he didn’t like the fact that, although the Android Spotify app sports an “episodes” tab, the desktop player for the Mac does not, which makes tracking recently-released episodes on his Mac more challenging.

Having found a possible alternative, Oliver set out to move his list of podcasts from Spotify to a new app, and was immediately faced with a task that would have extended for several days: for each of the podcasts in Spotify he was taking the title, copying and pasting it into the new app, and subscribing there. Over and over and over. When this job threatened to take over his Friday, to the exclusion of other activities, I interceded and told him that we should simply export his list of podcasts from Spotify and import it into the new app.

How naive I was.

Spotify, it turns out, is a prison for podcasts.

Spotify takes podcasting, a system that is a marvel of decentralized openness, built on the strong and flexible (and open) foundation of RSS, and locks it inside a closed, proprietary system with no way of getting data in or out. You can’t import lists of podcasts. You can’t export lists of podcasts. You can’t add your own podcasts.

Surely, I thought, given the GDPR, there must be a way of getting Oliver’s personal information–including his podcasts–out of Spotify.

And there is, in theory: if you visit your Account page in Spotify, and then navigate to Privacy, and scroll down to the bottom, you will see a section called Download your data, full of promise.

Until you read the fine print and learn that “This can take up to 30 days to complete”:

Screen shot of the Download your data section of Spotify's Privacy page

How it’s possible to create a system that takes 30 days to assemble digital data boggles the mind, and while it may live up to the letter of the GDPR, it surely defies the spirit.

What about using the Spotify API?

Although it’s not documented, there is and endpoint that exposes the list of podcasts for a user.

Here’s how you can get at it (with the caveat, detailed below, that you are wasting your time).

Go to the Web API Console for the “Get User’s Profile” endpoint and click Get Token and then copy the cURL command on the right side (I’ve redacted Oliver’s token):

Screen shot of generating a Spotify token.

If you simply paste this cURL into the Mac command line, you’ll get back your basic account information:

{
  "birthdate" : "XXXX-XX-XX",
  "country" : "CA",
  "display_name" : "Oliver Rukavina",
  "email" : "o@ruk.ca",
  "explicit_content" : {
    "filter_enabled" : false,
    "filter_locked" : false
  },
  "external_urls" : {
    "spotify" : "https://open.spotify.com/user/12154891049"
  },
  "followers" : {
    "href" : null,
    "total" : 13
  },
  "href" : "https://api.spotify.com/v1/users/12154891049",
  "id" : "12154891049",
  "images" : [ {
    "height" : null,
    "url" : "https://profile-images.scdn.co/images/userprofile/default/6a5a73861526ed7cece0ea757ab1f043277d7ebb",
    "width" : null
  } ],
  "product" : "premium",
  "type" : "user",
  "uri" : "spotify:user:12154891049"
}

If you edit this command, however, and tack shows onto the end of the URL, replacing https://api.spotify.com/v1/me with https://api.spotify.com/v1/me/shows, you’ll get back a JSON representation of your first 20 podcast subscriptions, with each one represented by an object like this:

{
    "added_at" : "2019-03-27T02:16:27Z",
    "show" : {
      "available_markets" : [ "AD", "AE", "AR", "AT", "AU", "BE", "BG", "BH", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "DZ", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "ID", "IE", "IL", "IN", "IS", "IT", "JO", "JP", "KW", "LB", "LI", "LT", "LU", "LV", "MA", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "OM", "PA", "PE", "PH", "PL", "PS", "PT", "PY", "QA", "RO", "SE", "SG", "SK", "SV", "TH", "TN", "TR", "TW", "US", "UY", "VN", "ZA" ],
      "copyrights" : [ ],
      "description" : "It's the Peter and Oliver podcast all grown up. ",
      "explicit" : false,
      "external_urls" : {
        "spotify" : "https://open.spotify.com/show/6bDdMX7OmjDG1u5ebEhNRX"
      },
      "href" : "https://api.spotify.com/v1/shows/6bDdMX7OmjDG1u5ebEhNRX",
      "id" : "6bDdMX7OmjDG1u5ebEhNRX",
      "images" : [ {
        "height" : 640,
        "url" : "https://i.scdn.co/image/8beec05386bfef3e095bcdf46aafaee112d55fdb",
        "width" : 640
      }, {
        "height" : 300,
        "url" : "https://i.scdn.co/image/4f70272b77c24c619a79486d6c88445b976151f7",
        "width" : 300
      }, {
        "height" : 64,
        "url" : "https://i.scdn.co/image/807d9151f7fa4a0ccd96c80d0c9bc265152b6012",
        "width" : 64
      } ],
      "languages" : [ "en-US" ],
      "media_type" : "audio",
      "name" : "Oliver And Peter Podcast",
      "publisher" : "Oliver Rukavina",
      "type" : "show",
      "uri" : "spotify:show:6bDdMX7OmjDG1u5ebEhNRX"
    }
}

You may be thinking “wow, this is amazing!” until you notice that nowhere in that JSON is any information that falls outside the Spotify universe: none of the standard trappings of open podcast data–the feed URL, the website, the non-Spotify-hosted artwork–are there.

And these details also aren’t there if you follow the URL in the “href” to get all the show details:

{
  "available_markets" : [ "AD", "AE", "AR", "AT", "AU", "BE", "BG", "BH", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "DZ", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "ID", "IE", "IL", "IN", "IS", "IT", "JO", "JP", "KW", "LB", "LI", "LT", "LU", "LV", "MA", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "OM", "PA", "PE", "PH", "PL", "PS", "PT", "PY", "QA", "RO", "SE", "SG", "SK", "SV", "TH", "TN", "TR", "TW", "US", "UY", "VN", "ZA" ],
  "copyrights" : [ ],
  "description" : "It's the Peter and Oliver podcast all grown up. ",
  "episodes" : {
    "href" : "https://api.spotify.com/v1/shows/6bDdMX7OmjDG1u5ebEhNRX/episodes?offset=0&limit=50",
    "items" : [ {
      "audio_preview_url" : "https://p.scdn.co/mp3-preview/1c405e3e511e5e7199a45b1de32f83e5f88c7e24",
      "description" : "This first episode is about Vancouver BC Canada ",
      "duration_ms" : 92624,
      "explicit" : false,
      "external_urls" : {
        "spotify" : "https://open.spotify.com/episode/79W2zHGuUttBOInh642kNR"
      },
      "href" : "https://api.spotify.com/v1/episodes/79W2zHGuUttBOInh642kNR",
      "id" : "79W2zHGuUttBOInh642kNR",
      "images" : [ {
        "height" : 640,
        "url" : "https://i.scdn.co/image/53b71df32a85645777ba73afa2e9e738bd788534",
        "width" : 640
      }, {
        "height" : 300,
        "url" : "https://i.scdn.co/image/2cc3d2acae39674b3c3bfdc53ae2286a692b1376",
        "width" : 300
      }, {
        "height" : 64,
        "url" : "https://i.scdn.co/image/2f6bd66373d51f8f6f62b55997539e1554a3df4a",
        "width" : 64
      } ],
      "is_externally_hosted" : false,
      "is_playable" : true,
      "language" : "en-US",
      "name" : "Oliver and Peter Podcast episode 1",
      "release_date" : "2019-03-20",
      "release_date_precision" : "day",
      "type" : "episode",
      "uri" : "spotify:episode:79W2zHGuUttBOInh642kNR"
    }, {
      "audio_preview_url" : "https://p.scdn.co/mp3-preview/1b3548d7561908fd8b4c6625e5e4d1fdbc8198bd",
      "description" : "Episode 1 is about Vancouver BC Canada  ",
      "duration_ms" : 26958,
      "explicit" : false,
      "external_urls" : {
        "spotify" : "https://open.spotify.com/episode/5bH6wVgbHQ5aCJdthQLZrk"
      },
      "href" : "https://api.spotify.com/v1/episodes/5bH6wVgbHQ5aCJdthQLZrk",
      "id" : "5bH6wVgbHQ5aCJdthQLZrk",
      "images" : [ {
        "height" : 640,
        "url" : "https://i.scdn.co/image/53b71df32a85645777ba73afa2e9e738bd788534",
        "width" : 640
      }, {
        "height" : 300,
        "url" : "https://i.scdn.co/image/2cc3d2acae39674b3c3bfdc53ae2286a692b1376",
        "width" : 300
      }, {
        "height" : 64,
        "url" : "https://i.scdn.co/image/2f6bd66373d51f8f6f62b55997539e1554a3df4a",
        "width" : 64
      } ],
      "is_externally_hosted" : false,
      "is_playable" : true,
      "language" : "en-US",
      "name" : "Oliver and Peter Podcast episode 1",
      "release_date" : "2019-03-20",
      "release_date_precision" : "day",
      "type" : "episode",
      "uri" : "spotify:episode:5bH6wVgbHQ5aCJdthQLZrk"
    } ],
    "limit" : 50,
    "next" : null,
    "offset" : 0,
    "previous" : null,
    "total" : 2
  },
  "explicit" : false,
  "external_urls" : {
    "spotify" : "https://open.spotify.com/show/6bDdMX7OmjDG1u5ebEhNRX"
  },
  "href" : "https://api.spotify.com/v1/shows/6bDdMX7OmjDG1u5ebEhNRX",
  "id" : "6bDdMX7OmjDG1u5ebEhNRX",
  "images" : [ {
    "height" : 640,
    "url" : "https://i.scdn.co/image/8beec05386bfef3e095bcdf46aafaee112d55fdb",
    "width" : 640
  }, {
    "height" : 300,
    "url" : "https://i.scdn.co/image/4f70272b77c24c619a79486d6c88445b976151f7",
    "width" : 300
  }, {
    "height" : 64,
    "url" : "https://i.scdn.co/image/807d9151f7fa4a0ccd96c80d0c9bc265152b6012",
    "width" : 64
  } ],
  "is_externally_hosted" : false,
  "languages" : [ "en-US" ],
  "media_type" : "audio",
  "name" : "Oliver And Peter Podcast",
  "publisher" : "Oliver Rukavina",
  "type" : "show",
  "uri" : "spotify:show:6bDdMX7OmjDG1u5ebEhNRX"
}

Like I said: a prison.

And there’s another problem: this is both an undocumented API call and a broken one.

In theory you should be able to specify a “limit” and an “offset” parameter to page through podcasts and retrieve them all, like:

curl -X "GET" "https://api.spotify.com/v1/me/shows?offset=0&limit=20"
curl -X "GET" "https://api.spotify.com/v1/me/shows?offset=20&limit=20"
curl -X "GET" "https://api.spotify.com/v1/me/shows?offset=40&limit=20"
curl -X "GET" "https://api.spotify.com/v1/me/shows?offset=60&limit=20"

and so on.

But that doesn’t work.

I’m able to retrieve at most 50 podcasts (out of Oliver’s 1,986 total subscriptions). And using the Spotify web player confirms this breakage, showing a scrolling list of 50 podcasts that repeats and repeats and repeats.

Because this is an undocumented, and thus unsupported API call, it’s not like I can dial 1-800-SPOTIFY to ask for help.

But I’m not willing to give up the fight, so I forge on with this crazy, destructive nuclear option, which involves working around this bug in the undocumented API by pulling the podcasts 50 at a time, saving their name and ID, and then deleting them using another undocumented API call, so that I can then get the next 50 podcasts. And so on. Until I have them all.

(Warning: if you use this code you will be unsubscribing from all your podcasts, one by one by one).

items as $oneshow) {
    $id = $oneshow->show->id;
    $name = $oneshow->show->name;

    // Write the name and ID of the podcast into the text file opened earlier
    fwrite($fpout, $name . "\t" . $id . "\n");

    // Unsubscribe from the podcast via the Spotify API
    $url = 'curl -s -X "DELETE" "https://api.spotify.com/v1/me/shows?ids=' . $id .
           '" -H "Accept: application/json" -H "Content-Type: application/json" -H "Authorization: Bearer ' .
           $bearer .
           '"';

    exec($url);
  }
}
fclose($fpout);

And even this code won’t work completely, or at least it wouldn’t work in Oliver’s case: with 905 podcasts still to extract, it simply stopped returning anything from the API call to get shows, and the web player, at this point, showed Oliver with no subscriptions at all. So perhaps the API only works for the first 1,081 podcasts?

In any case, Oliver now has a text file with 1,081 podcasts in it. Or, more accurately, the names of 1,081 podcasts in it.  But how to get the feed URLs? There’s no obvious way to do this right now, although the Listen Notes API might work. Barring that, Oliver has a lot of copying and pasting ahead of him.

In summary, let this be a warning to you: if you use Spotify as your podcast app, you are a prisoner to Spotify, and if you decide to switch to another podcast app there isn’t any way to get your data out of Spotify.

19 May 06:30

NewsBlur Blurblog: RSS: I Never Left

sillygwailo shared this story from Peter Rukavina's Weblog.

Ton muses about an RSS Revival:

RSS is the most important piece of internet plumbing for following new content from a wide range of sources. It allows you to download new updates from your favourite sites automatically and read them at your leisure. Dave Winer, forever dedicated to the open web, created it.

I used to be a very heavy RSS user. I tracked hundreds of sources on a daily basis. Not as news but as a way to stay informed about the activities and thoughts of people I was interested in. At some point, that stopped working. Popular RSS readers were discontinued, most notably Google’s RSS reader, many people migrated to the Facebook timeline, platforms like Twitter stopped providing RSS feeds to make you visit their platform, and many people stopped blogging. But with FB in the spotlight, there is some interest in refocusing on the open web, and with it on RSS.

I’ve been an emitter and consumer of RSS feeds since the very beginning, and so, for me, there’s no need for a revival, as I never left. I currently have 86 RSS feeds in my RSS reader, ranging from Ton’s blog itself to security alerts to CBC news headlines to the blogs of several Prince Edward Island MLAs:

Screen shot of detail of the admin settings of Tiny Tiny RSS, my RSS reader

For the longest time, like many others, I consumed RSS feeds in Google Reader; when it was shut down by Google, I replaced this with a self-hosted instance of Tiny Tiny RSS, a serviceable replacement.

When I’m using my laptop, I read my RSS feeds in Tiny Tiny RSS’s web interface in a browser:

Screen shot of feedreading in Tiny Tiny RSS in a browser

When I’m on my Android phone, I use the Tiny Tiny RSS app, which syncs itself with the server so that what I’ve read and what I haven’t is always current:

Screen shot of the Tiny Tiny RSS app

I self-host Tiny Tiny RSS, rather than using a third-party service like Feedly, because, well, once-bitten-twice-shy: I don’t want my RSS consumption to be dependent on the corporate whims of an RSS reader company. Besides, what’s the point of taking a collection of independent, decentralized feeds and centralizing them?

That said, I recognize that running a personal Tiny Tiny RSS server is outside the realm of possibility for most people. I also recognize that a lot of RSS nomenclature, including the name RSS itself, stands as a barrier to a lot of people. So there’s work to be done here to catalyze the revival that Ton writes about, a revival that, despite my own perseverance, I fully support and see the benefits of.

19 May 06:24

NewsBlur Blurblog: Not Mandarin

sillygwailo shared this story from China Channel.

An invitation to speak other Chineses – Will Sack

 

Imagine if all of Germany spoke Shanghainese. Or if a population bigger than Britain spoke Cantonese. Wouldn’t we treat them as more than just sideshows? With 80 and 70 million native speakers respectively, Shanghainese and Cantonese are massive in both use and importance. So why do we so seldom teach them or other non-Mandarin Chineses? Why aren’t we curious what one third of China – a politically and culturally marginalized, but not always economically marginalized, third – has to say and think on their own terms?

Korean is the fastest growing foreign language in US classrooms, but if we compared South Korea’s population with Shanghai’s, more people and more wealth coordinate to the latter. This is no saint’s crusade – much of the world’s wealth is increasingly centered on China’s south, where many of these non-Mandarin languages are spoken.

“Well, that’s all well and good,” you might be thinking, “but those are dialects, not real languages.”

There is no such thing as dialects. Or, perhaps there are only dialects, spread along a disjointed spectrum. Either way, the difference between national language and “dialect” grows out of the barrel of a gun. The subordination of languages is not a product of pronunciation or grammar, but rather of politics. Indeed, the very term “official language” delineates a phantom limb – those languages that have been pushed aside, if not actively strangled, to make way for a common speech. Towards this end, language classification, like racial classification, is a tool of those in power. The bounds of such divisions are viciously arbitrary, when in reality, we all tend to blur from one place to the next. Still, people favor the familiar, and are more willing to express themselves in what they consider their mother tongue. For idealistic and pragmatic reasons, then, we would all benefit from broader linguistic sympathies.

Some might see this as a bit much coming from a native speaker of English. Our widespread intolerance of “non-standard” English (e.g. Singaporean English) is appalling. If any language can be called invasive, it is English. So perhaps it is with English’s failings in mind that scholars like Jeffrey Weng aver that Mandarin should be called an egalitarian project. After all, the crafting of a common language is ideal in theory, and who are we to yell foul if it breaks some eggs in practice.

Despite its regal name in English, Mandarin or putonghua (meaning “the common tongue”) is not the common language of civil service members in past empires (guanhua). There is room to debate how far Taiwan and the mainland’s Mandarins have drifted, but for our purposes it’s important to note the Chinese Communist Party’s (CCP) deep imprint on the common speech. Standard putonghua uses northern pronunciations, especially those of Beijing. However, putonghua is also not Beijing’s language. (For Mandarin speakers, when’s the last time you heard the Beijinghua term cèi used to mean “break”?) Rather, CCP putonghua is a stand-in for generic northern Chinese, reflecting the gradual imposition of centralized culture and politics on Greater China.

Sixty years after its creation, though, is the “common speech” really common? When the Communist government announced that the official language of the country was an ostensible “common speech” in 1956, less than half of the population could speak it, and only half could understand it. In 2014, Beijing announced they believe one third of the country still lacks proficiency in Mandarin. Even without counting non-PRC Chinese, who speak “dialects” in far higher numbers, there are more PRC citizens who are not proficient in Mandarin than the entire population of the US – and that isn’t even counting those who speak Mandarin but have a different mother tongue.

there are more PRC citizens who are not proficient in Mandarin than the entire population of the US

Mandarin’s immensity emerges from the mind boggling scale of China – roughly twice the population of Europe. Such size also births far more diversity than many, both within and outside China, are willing to admit. It gives in to a certain kind of Orientalist trap to assume that everyone in China is the same, or that they could be understood in one language, one broad sweep. It is also politically useful to imagine a unitary China, with a common tongue. Just as few people claim to understand all of Europe, regionalization is a kind of intellectual humility: we’d be better served with “Sichuan hands” and “Jiangnan hands,” rather than China hands.

In navigating Taiwan, conversance in Taiwanese Hokkien (also known as Southern Min) has been irreplaceable for me. Once you leave Taipei, you’ll be better served in almost any interaction if you speak Taiwanese. Even in the capital city, however, I swear I get bigger helpings of food if I can order in Taiwanese. There is no more fundamental way of saying “I care” than speaking someone’s language.

This holds true not just in Greater China, but on the mainland as well. When I catch a cab in northeast China, as soon as I say my destination, the conversation begins: How long have you been here? Who taught you that? Why don’t you use putonghua? And my answer is simple: “I wanted to know you all better, so I learned your language.” And that small gesture has been rewarded a thousand times over: in food, access, work, and most of all, straight talk.

Now, at this point you might be saying, “They’re a third … for now. These languages are dying ones.” Actually, only one in particular, Shanghainese, is predicted to decline steeply in the coming years. More to the point, restrictions on other Chineses is a big reason why we should seek out these languages and their speakers. The CCP holds that other Chineses suggest other Chinas. This hints at the diversity of opinions these language communities contain. Students of China need to be more creative, or at least more intentional, in the languages we study. Remaining satisfied with Mandarin is a self-imposed obstacle to hearing marginalized voices: the poor and the old, the rural and the dissident.

Have a little gumption! Such restrictions hardly mean learning is impossible. The method for learning smaller ones might be more quixotic (step 1: learn the local card game), but for several languages there are formal schools available, many of which offer distance learning. I do not want to make any endorsements, but suffice it to say Google can connect you with Cantonese and Hokkien lessons. Learning a non-Mandarin Chinese language is a manageable, meaningful thing one can accomplish in the face of larger political currents.

Less obvious than racial genocides, the cultural destruction underneath campaigns to promote Mandarin is nonetheless appalling. They lacerate communities on the mainland today, just as they did in Singapore and Taiwan before. Even now, the governments in all three share a belief that other Chineses are inherently backwards, obstacles for the nation to overcome. The most horrific examples of such thinking in practice are among the Inner Asian peoples at China’s edge, where Uyghur, Mongolian and Tibetan are targeted for destruction. However, I cannot forget what I’ve seen among the supposedly protected Han Chinese core: dongbeihua drawling grandmothers who never see their grandchild, lest the child imprint on their speech; parents who sleep only five hours a night to work that extra shift to pay for daycare in “the” Chinese language.

Even if Hong Kong loses its grip on Cantonese, people are embracing other Chineses across Greater China. Taiwan has at last elevated Taiwanese, the language spoken at home by 71-82% of the country, to an official language, giving it near-parity with Mandarin. And in Singapore, other Chineses, such as Hakka, are returning to TV and the classroom.

While non-Mandarin Chineses are experiencing a political spring in Greater China, they have also shown surprising resilience within the PRC. Their demise, then, but also their meaninglessness, has been greatly exaggerated. Other Chineses suggest hundreds of millions of people waiting for a more open China. These are not splittist or rebellious voices, but equal members asking for a seat at a table where all of China can feel at home and flourish. We should learn what dreams these speakers have for China – or at least speak their language. ∎

 

Header image: From “700 Handy Words in Taiwanese Hokkien” (臺灣閩南語推薦用字700字詞), New Taipei City Education Bureau

The post Not Mandarin appeared first on China Channel.

19 May 06:22

NewsBlur Blurblog: Maps will detail impact of sea level rise on Valley coastline

sillygwailo shared this story from Decafnation:
This report was due in March, but delayed because of the pandemic. I hear it will he released in July/August.

Flooding of the Courtenay Flats during previous heavy rainfalls

Maps will detail impact of sea level rise on Valley coastline

By George Le Masurier

It could be argued that climate change hasn’t yet impacted the daily lives of people in the Comox Valley. Yes, it has been drier for longer periods and a year ago the smoke from forest fires dimmed our skies and filled our lungs. The Comox Glacier is disappearing before our eyes.

These are minor events, however, compared to the torrential rains, flooding, droughts and intense super-hurricanes inflicting damage to other parts of the world.

But the serious consequences of climate change will soon reach our idyllic part of the world in the form of sea level rise.

Sea levels have risen by almost eight inches since the 1890s, an annual rate of about 0.06 inches per year, an amount barely noticeable except to those paying close attention.

But the rate of sea level rise has accelerated to 0.14 inches per year since 2006, and scientists predict it will continue to speed up as global temperatures climb.

The latest dire warnings suggest sea level could rise by as much as 1.3 feet by 2050 and up to 8.2 feet (2.5 metres) by 2100, depending on the success of global efforts to reduce greenhouse gas emissions.

 

FOCUS ON COMOX VALLEY IMPACTS

To determine how rising sea levels will affect the Comox Valley coastline, the Comox Valley Regional District is undertaking detailed mapping of the regions 200 kilometres of coastline, from the Oyster River to Fanny Bay, including Denman and Hornby islands.

With a $500,000 grant from the National Disaster Mitigation Program, the CVRD hired Kerr Wood Leidal consulting engineers to assess the coastline from a geological perspective. They will produce maps and supporting technical data for five scenarios of sea level rise in the years 2030, 2050, 2100, 2150 and 2200.

The report will be a helpful planning guide for emergency management as well as for new development. And, the information will inform the CVRD how to make corresponding policy and regulatory changes, such as floodplain construction levels and setbacks.

The data will also help the CVRD predict how much flooding will occur and how long each flooding event will last.

“Sea level rise is coming whether we think it is or not and governments are being asked to act,” Alana Mullaly, the CVRD’s senior manager of the Regional Growth Strategy and sustainability, told Decafnation. “This will create a lot of hard conversations.”

With rising sea levels pouring over portions of our coastline, how close to the foreshore should building be allowed? Where should local governments put new infrastructure? How should local government manage its assets, such as parkland and archaeological sites? Who will pay for the restoration or relocation of assets?

Sea levels most certainly will have an effect on future land use planning.

“The CVRD may get a request to put a park here or a development there, but that property may be underwater in 20 years,” Mullaly said. “I’m thinking about the weighing of values that we, as a community, will need to do in dealing with climate change.”

 

RICHER DATA FOR ENGINEERS

To do this coastal flood mapping, the consultants will use LIDAR (Light Detecting and Ranging) to survey land remotely and produce high resolution topographic contours. The province has already flown LIDAR equipment over our area to collect the raw survey data and the consultants will process the data for use in the development of hundreds of maps.

Right now, communities that do not have coastal flood mapping generally rely on the requirements set by the province, which are based on mapping from the 1970s and 1980s.

Those maps did not account for any sea level rise, and neither does the current CVRD floodplain bylaw.

But by professional code, once engineers know something they have to consider it, and they have been taking sea level rise into account based on limited information. This report will give engineers richer local data.

Coastal flood mapping will put the CVRD in compliance with the Coastal Food Hazard Guideline, which is the main resource for engineers designing construction projects.

 

WHAT IT MEANS FOR THE PUBLIC

After the report is delivered by March 31 next year, the CVRD will hold public engagement events to inform citizens of its findings, which will ultimately lead to
recommendations for bylaws and other relevant regulations and guidelines.

“Sometimes it has been difficult for citizens to pinpoint the source or motivation when government rules change,” Mullaly said. “This won’t be one of them. This is not an arbitrary change. Sea level rise is coming.”

 

HOW HIGH WILL SEAS RISE?

The provincial government’s official prediction for sea level rise is a half-metre by 2050, one metre (just over three feet) by 2100 and two metres (about 6.5 feet) by 2200.

But that’s too low by at least half, according to recent scientific studies and the consulting engineers who did a similar mapping project for the City of Campbell River.

Northwest Hydraulic Consultants told Campbell River that the province’s projection “might be conservative.” One of the firm’s engineers, Grant Lamont, said it depends on future greenhouse gas emissions and how quickly ocean warming expands.

The loss of polar ice will accelerate in the second half of the century, Lamont said, and force people to cope with larger changes in shorter periods of time.

He recommended planning for two metres of sea level rise by 2100, as the states of California and New York have done.

Campbell River’s report suggests flooding will threaten downtown streets and buildings, and that local governments purchase coastal properties and turn them into pre-flooded parkland.

 

 

 

 

 

 

CLIMATE REFUGEES RETREAT FROM COASTLINES

There will be 13 million climate refugees in the United States by 2100. This report tells the story of a Lousiana town being relocated before sea level rise makes it uninhabitable. It portends to be the first of many retreats for existing coastlines.

The tiny village of Newtok near Alaska’s western coast has been sliding into the Ninglick River for years. As temperatures increase — faster there than in the rest of the U.S. — the frozen permafrost underneath Newtok is thawing. Now, in an unprecedented test case, Newtok wants the federal government to declare these mounting impacts of climate change an official disaster. Villagers say it’s their last shot at unlocking the tens of millions of dollars needed to relocate the entire community.

 

SUBSCRIBE TO OUR NEWSLETTER

Please leave this field empty

Enter your email address to subscribe to the Decafnation newsletter.

Email *

Check your email inbox or spam folder to confirm your subscription.

More Environment | Top Feature

Maps will detail impact of sea level rise on Valley coastline

Detailed mapping by the Comox Valley Regional District will identify the coastal areas most vulnerable to sea level rise and provide richer data for engineers and future local government regulations and bylaw changes

Ocean farming: more food, less land, reduced GHG emissions

The climate crisis will force us to produce more food on less land while cutting greenhouse gas emissions. For Bren Smith, director of the non-profit group Greenwave, this transition means expanding our definition of farming to include the ocean

The Week: March for our planet today, but who will take the big, bold steps we need?

The Comox Valley will march at 1 pm today for changes to slow down climate change. But are we really just giving lip service when bolder actions are needed to save the planet?

Comox Valley climate activists join 1,700 discussion events worldwide

At a meeting with nearly 100 Comox Valley climate activists, Will Cole-Hamilton discussed global progress in solar and wind technologies, how the City of Courtenay has addressed climate change and why climate marches are so important

Comox Valley to discuss the climate crisis on Wednesday, Nov. 20

The Comox Valley will join millions of people worldwide to talk about the reality of the climate crisis, what it means and what you can do. The local event will take place from 7 to 9 pm on Wednesday, Nov. 20 at the Comox United Church Hall

Maude Barlow: leading Canadian activist for the public’s right to water

Maude Barlow’s presentation today at the K’omoks Band Hall is not just another stop on the tour to promote her new book, Whose Water Is It, Anyway? The co-founder of the Council of Canadians and the Blue Planet Project is on a mission to sound the alarm about a global water crisis

Comox Valley climate strike draws thousands to Courtenay march

Comox Valley residents joined millions of people marching worldwide on Sept. 27 demanding that governments step-up their efforts to tackle the climate emergency

Who’s monitoring water quality at Island beaches?

The Vancouver Island Health Authority announced last month that it planned to drop a public health responsibility and dump it onto BC municipalities, but it apparently forgot to inform municipal officials

Comox passes $250,000 lawsuit over to global insurance firm

The Town of Comox has handed off Norine and Ken McDonald’s $250,000 lawsuit to one of the world’s largest independent providers of claims management solutions, Crawford and Company

From the Sentinel: How the small village of Cumberland returned a forest to the people

The Cumberland Community Forest Society (CCFS) has been purchasing and protecting privately owned forests scheduled for logging near the Village of Cumberland since 2000

The post Maps will detail impact of sea level rise on Valley coastline appeared first on Decafnation.

19 May 06:22

NewsBlur Blurblog: She’s Not There

sillygwailo shared this story from First Person Scholar.

Brandi Billotte is a graduate student at the Indiana University of Pennsylvania.  In the fall, she will begin to pursue her PhD in English Literature and Criticism.  She lives in DuBois with her two dogs, two cats, two children, and one husband.

While a great deal of scholarship is devoted to the problematic aspects of female representation in the stereotypically male-dominated sphere of video games, less interest lies in an alternative depiction of women that, while not predominant, exists in some video games: that of the ‘absent woman.’  There are games that feature female characters that, though heavily represented throughout the game in various forms, are not physically depicted in any thorough way. This representation might take the form of the unseen character providing narration, leaving traces of themselves in notes, leaving behind memories and/or intentions that live on inside of other characters, to name just a few examples.

Absent female characters defy tropes such as “‘damsels in distress,’ ‘sexy sidekicks,’ and ‘rewards’” (Shaw 1).  In addition to removing themselves physically, many absent characters add another element of intrigue as they attain agency by creating puzzles that simultaneously afford themselves increased agency while forcing the player (and perhaps other characters in the game) to participate in play. Through the use of puzzles built upon their absence, many absent female characters acquire the ability to police their own sexuality and feminine agency.  By not being presented physically, we are neither inclined nor able to focus our attention on traditional markers of hypersexualization such as impossibly large breasts or disproportionately long, unclothed legs.

This paper will explore examples of puzzling, sexually agentic unseen characters as they appear in Karla Zimonja, Johnnemann Nordhagen, Steve Gaynor, and Kate Craig’s Gone Home and Valve’s Portal and Portal 2.  Analysis of the exact nature of a character’s absence, the ways in which they are represented despite their lack of a physical body, and the implications and motivations surrounding their absence supports the assertion that the representation of physically absent female characters allows for said characters to exert a greater sense of agency than they may have had in physically depicted forms.

The Problem of Representation

As previously mentioned, scholars have noted that women in video games tend to be represented in a problematic, sexualized, and hyper-feminized manner.  Nicholas Johnson notes the “inherent misogyny and sexism in popular gaming culture” (1), including both the underrepresentation of women in video games as well as the “overtly sexualized and hyper-feminized portrayal that seems to be recurring in video game design” (4).  Jesse Fox and Wai Yen Tang echo Johnson’s sentiments, noting the tendency for female video game characters to be “depicted in stereotypical ways that appeal to men” (315). Adrienne Shaw, too, recognizes this attempt to create feminized caricatures that cater to male desire, addressing iconic video game heroine Lara Croft and noting her “ever-increasing and much-critiqued breast size” (58) and impractically skimpy outfits: “Croft bares many of the signifiers of female objectification, including breasts that are overly large for her physical size and revealing clothing that seems poorly suited to traipsing through danger-filled tombs” (60).  Indeed, a multitude of scholars have grappled with the issues of feminine underrepresentation and hypersexualization that have been traditionally characteristic of the video game industry. In Gaming at the Edge, Shaw addresses attempts to combat problematic representations of marginalized groups, explaining a sense that “we seem to be situated in a cultural moment in which how digital games are thought of and spoken about is constantly changing” (201).  Despite the promise of a changing cultural landscape that rebukes the promotion of sexualized, decorative female characters, Shaw acknowledges the vitriolic resistance that such progression is often met with. For instance, she describes a troubling moment “[during] the Penny Arcade Expo…[when] Irrational Games creative director Ken Levine told a female audience member [that] …instead of questioning the absence of the lead female character on the cover of the new game Bioshock: Infinite, she should just ‘play the fucking game’” (207-208).

Agency is neither exclusively nor inherently accessible to disembodied female video game characters; it is certainly possible for a female character to be physically depicted without being overtly sexualized or excessively feminized.  For example, though Portal’s Chell is presented physically, she maintains agency by serving as the protagonist who ultimately overcomes the deadly puzzles presented to her by GLaDOS.  That said, one might question why lack of representation warrants attention at all. Absent agency connects to the changing cultural moment that Shaw refers to in regard to video games as well as pertaining to issues that currently permeate society.  With the growing emphasis on the gravity of giving voice to previously silenced or underemphasized narratives, the exploration of who is represented and who is not, how they are represented, and what their representation (or lack thereof) means carries implications beyond the scope of video games.  Taking all of this into consideration, it behooves us to examine the dimensions of empowerment made possible by removing the physical female body entirely.

The Role of the Unseen Character in Literature

Robert Byrd–in his discussion of unseen characters in plays by Eugene O’Neill, Tennessee Williams, and Edward Albee–traces the role of the unseen character throughout history, describing the various functions of these notably absent characters: “…[U]nseen figures are…people whose offstage activities provide a convenient impetus to the plot (4; emphasis mine).”  Byrd emphasizes the importance of these unseen characters, citing them as “invisible forces…[that]…shape the action of the drama” (7).  Haiping Liu also notes the weight of invisible characters in her discussion of offstage characters featured in O’Neill’s various plays. Liu asserts:

…though making no stage appearances and being brought to life only through the utterances of the characters on stage, the offstage characters…[possess] certain physical, social, psychological, and moral traits bearing significantly upon the course of action in the plays in which they appear.  (149; emphasis mine)

While Byrd and Liu are concerned with absent characters as they exist in literature, these ideas also extend to absence as it occurs in video games.  Their ideas speak directly to the capacity of invisible/absent/offstage characters to contribute to the action of a narrative, often motivating plots in important ways.  As Byrd and Liu define what constitutes as absence for their own analytical purposes, let us clarify that the term “absent” as it appears here means that a character is, for significant portions of the game, simply gone.  For instance, Sam of Gone Home never makes a physical appearance in the game.  Unseen character Caroline of Portal is made to take the form of GLaDOS, who is represented as a wriggling computer mounted to the ceiling (and, in Portal 2, as a disgruntled potato).

The Puzzle of Purposeful Absence

Gone Home presents us with a puzzlingly absent character that has left behind clues, purposefully compelling our participation in the game; that is, we collect various hints that ultimately enable us to solve the mystery of Sam’s absence.  Players experience the game from the perspective of Sam’s older sister, Katie, who returns from a trip abroad to discover that her family has vacated their home. Katie is greeted with a cryptic and foreboding note affixed to the locked door, which reads: “Please…don’t go digging around trying to find out where I am” (Gone Home).  To “win” the game of Gone Home is to uncover Sam’s clues by exploring each room of the ominously deserted house, sifting through drawers and examining crumpled bits of paper.  Once Katie solves the puzzle, it becomes clear that Sam’s absence was motivated by her desire to gain agency over her sexuality. Regardless of her reasoning behind pursuing absence, Sam’s puzzle enables her to create a new narrative for herself while compelling her sister (and the player) to embark upon a mysterious quest.

 

A screenshot from the game Gone Home showing a note from the player character's sister

A Note from Sam, the player character’s sister, explaining her absence

Portal games feature a similarly puzzling character in the form of GLaDOS, who (unlike Sam) did not make the choice to become absent.  According to Laura Lannes’s “She’s the Backbone of This Facility,” GLaDOS originated as Caroline, who served as the “great woman” behind Aperture Science Enrichment Center founder Cave Johnson.  When he became ill, Caroline served as caretaker and business manager to Johnson. Realizing Caroline’s capability, he demanded that she take his place upon his imminent demise:

If I die before you people can pour me into a computer, I want Caroline to run this place. Now she’ll argue. She’ll say she can’t. She’s modest like that. But you make her…[p]ut her in my computer. (118; emphasis mine)

GLaDOS forcing game play upon Chell functions as a prime example of a character creating puzzles through and/or despite their physical absence.  Armed with the ability to taunt, manipulate, and trap, GLaDOS acts as a capricious game designer, forcing Chell to respond to various instructions, threats, and misleading promises of cake.  Despite her lack of a physical, human form, GLaDOS is dangerous, clever, and, definitely powerful.

A screenshot of the game Portal, depicting a moment where the AI antagonist of that game taunts the player with pictures of cake.

GLaDOS, nefarious puppet master of the Aperture Science Research Facility, is finally revealed. She taunts the player with images of cake.

Absence and Subverting Patriarchal Control

In addition to sometimes providing intriguing puzzles that serve to compel a game’s narrative, absence can also function as a means to exert different forms of agency.  Specifically, Sam’s absence serves as a tool to gain agency over her sexuality. Sam’s disappearance is a major aspect of Gone Home.  Ultimately, it is revealed that Sam has chosen to leave home to pursue a relationship with her girlfriend, Lonnie.  By becoming absent, Sam gains the agency to police her sexual identity and participate in a relationship that appears to have been forbidden by her parents.

GLaDOS provides us with another example of absence leading to the acquisition of agency that had been lacking in her previous existence as Caroline, whose submissiveness is made evident in her limited selection of lines.  Explains Lannes, “in two of [her five in-game lines] she’s saying: ‘Yes sir, Mr. Johnson!’” (116). As previously noted, Caroline is forced into a computer to replace the man that she had worked closely under. In addition to being turned into an object, GLaDOS notes that “engineers tried everything to make [her]… behave” (Portal 2), noting the application of an “Intelligence Dampening Sphere” called Wheatley.  Lannes describes Wheatley as “the male character who…was literally created to keep GLaDOS dumb” (121).  Despite attempts to modify her “problematic” behavior and stifle her thinking, GLaDOS exhibits agency by providing direction and narration throughout the Portal games, often taunting, deceiving, and threatening others.  By recovering remnants of her humanity and joining forces with Chell in Portal 2, GLaDOS defeats Wheatley and regains dominion over Aperture, the research facility which functions as the game’s setting.  Though Chell contributes to the overpowering of Wheatley, it could be argued that it is GLaDOS who ultimately allows Chell to win and escape Aperture.  This teaming up of formerly adversarial female figures connects to the larger idea of unseen characters’ ability to attain or regain feminine agency.  Explains Lannes: “Portal was about two women processing the oppression of patriarchy in different ways, while being pitted against each other.  Portal 2 invokes relations of power within patriarchy” (122).  In addition to articulating that allowing Chell to win is simply the easiest option, it is GLaDOS who ultimately makes the choice to alter her own identity by deleting what remains of the non-agentic Caroline.

Conclusion

Each of the previously described characters utilizes absence differently, and (arguably) both examples require that the particular characters be absent in some form.  Gone Home, for example, would be experienced completely differently if Sam had not chosen to become absent, tricking loved ones into believing that a sinister explanation lurked behind her disappearance.  GLaDOS’s taunting, manipulative narration would not exist at all if Caroline had not been forced into absence by being put into the computer. Moreover, GLaDOS’s absence directly contributes to her agency; once she becomes physically accessible at the end of game, the player is able to defeat her and subsequently win.  Since the release of these two titles, feminine representation in video games has continued to improve. Games such as Child of Light (2014), The Last of Us (2013), and Life is Strange (2015) offer female protagonists who possess a great deal of agency and rebuke the problematic stereotypes that have historically plagued video games.  Though we can hope that this trend toward empowered female protagonists persists, it is lamentable that these particular females can only seem to achieve agency by not being there.

Works Cited

Bowler, Steve. “Still Alive? She’s Free.” Game-ism. December 1, 2017.

Byrd, Robert. Unseen Characters in Selected Plays of Eugene O’Neill, Tennessee Williams, and Edward Albee. 1998.

Dotnod Entertainment. Life is Strange. 2015. Video game.

Fox, Jesse and Wai Yen Tang.  “Sexism in online video games: The role of conformity to masculine norms and social dominance orientation.”  Computers in Human Behavior, vol. 33, 2014, pp. 314-320.

Johnson, Nicholas.  Misogyny in Virtual Space: Exploring Representations of Women in Popular Video Games.  Dissertation, Middle Tennessee State University, 2015.

Lannes, Laura. “She’s the Backbone of This Facility,” Chainmail Bikini: The Anthology of Women Gamers, edited by Hazel Newlevant, Alternative Comics, 2016, pp. 116-123.

Liu, Haiping. “The Invisible: A Study of Eugene O’Neill’s Offstage Characters.”  The Eugene O’Neill Review, vol. 18, no. ½, 1994, pp. 149-161.

Naughty Dog. The Last of Us. 2013. Video game.

Valve. Portal. 2010.  Video game.

Valve. Portal 2. 2011. Video game.

Shaw, Adrienne. Gaming at the Edge: Sexuality and Gender at the Margins of Gamer Culture. University of Minnesota Press, 2014.

Ubisoft. Child of Light. 2014. Video game.

Zimonja, Karla, Johnnemann Nordhagen, Steve Gaynor, and Kate Craig. Gone Home.  Fullbright, Majesco Entertainment, 2013.

19 May 06:21

To get a better programming job, explain your problem-solving skills

When you’re looking for a new programming job, how do you explain your value? The usual approach is a long list of technologies, but this leaves out a critical skill: your ability to solve problems.

If you can convey your level of skill at problem solving, you can get:

  • More job offers.
  • Jobs with technologies you don’t know.
  • A higher salary by getting slotted into a higher pay grade.

Often just a few extra words can make a big difference in demonstrating your skills. Let’s see how you can do it.

Three levels of problem solving skills

As I discussed elsewhere in more detail, problem solving comes in three stages, each approximately corresponding to a particular career stage (these names are due to Randall Koutnik):

  1. Staff or principal software engineers are Finders: they find new problems.
  2. Senior software engineers are Solvers: they solve already-identified problems.
  3. Junior software engineers are Implementers: they implement already-identified solutions.

The earlier you are in the problem-solving process, the more productive you are, and therefore the more valuable as an employee.

As a result, you need to communicate how advanced your skill is across these three levels to demonstrate your productivity. Everything from your resume to the stories you tell in interviews should communicate your level of skill.

Explaining your skill level

Explaining your skill level involves telling stories that use the correct words and sufficient information to demonstrate your skill. I’m going to use resumes as an example here, but you should ensure you do this in interviews as well—if you’re practicing with a friend, make sure they’re checking for this, it’s easy to leave the information out.

Consider the following entry from a resume:

Moved deployment from manually-managed hosts to a new Kubernetes cluster.

This experience entry uses an implementation-level verb: “moved”. Similarly, “coded”, “tested”, “wrote”, “fixed”, “optimized”—these are all about implementation. And maybe it’s implementation was tricky and difficult, and it’s good to convey that, but if you also solved the problem or identified the problem it’s impossible to tell from this phrasing.

Any task you write about in your resume and talk about in interviews was the result of someone identifying a problem, and someone coming up with the solution. If it was you, make sure you say that.

Let’s say in our example above you were the one tasked with figuring out an alternative to manually-managed hosts. If so, you need to add additional context and verbs that convey that:

Investigated alternatives to manually-managed hosts, decided on Kubernetes, and moved the deployment to a new cluster.

Now we can clearly see you solved the problem.

If you were the one who identified the problem, again you need to make sure you explicitly call that out:

Identified manually-managed hosts as an operational problem, and got management buy-in to change to a better system. Subsequently investigated alternatives, decided on Kubernetes, and moved the deployment to a new cluster.

Now we can see all the value you provided.

If you only identified a problem, that’s fine too, just say so:

Noticed a critical customer-facing bug that was impacting many users; after the team responsible for that area fixed it, they reported a $300,000 increase in revenue as a result.

Communicating value at different career stages

Now that you’ve seen how to phrase your skill level, let’s see how this works at different career stages.

Implementers

When you’re at the start of your career you will mostly be implementing other people’s solutions. However, in one or two cases you might be starting to solve problems, or even find problems. Make sure your resume highlights those instances, however small.

Sometimes this will happen in non-programming contexts. For example, I knew one early stage software engineer who made very insightful suggestions about hiring. Mention it anyway.

If you had another career before switching to programming, you’ll likely have plenty of examples. Make sure to highlight those even if they’re unrelated to coding; those problem-finding and solving skills will at least partially transfer.

Solvers

If you can solve problems on your own, you want to both:

  1. Communicate this fact.
  2. Highlight the places where you did identify problems, even if it’s happened in only a few cases.

Review your resume and make sure all the relevant entries explicitly talk about the ways in which you came up with the solution. If you already have a suitable job title, like senior software engineer, then getting the phrasing right isn’t quite as important—but it’s still worth doing.

If you still have a junior job title but your skills have progressed, it’s doubly important to ensure you’re highlighting your problems solving skills.

Once you’ve done that, try to expand on any places where you were involved in identifying problems.

Finders

Your goal as a Finder is to ensure you’re not confused with a Solver. It’s very easy to phrase things in a way that doesn’t make clear you identified the problem—after all, identifying the problem may only have a taken a few minutes.

But those initial few minutes where you noticed something needs to be done are quite often the most value parts of the whole process, so make sure you explicitly talk about finding the problem. This is even more important if your current job title doesn’t reflect your actual level of skill.

What to do next

Even if submitting resumes isn’t the best way to find a job, you still need one, and writing it is a good way to rehearse for an interview.

So get your resume out, and for each experience entry make sure it’s clear whether you implemented the solution, solved the problem, and/or found the problem. This will take you an hour, no more, and at the end of this process you’ll have a much easier time communicating some of your most valuable non-technological skills.

And if you’d like to learn some more of those skills, check out my new book, The Secret Skills of Productive Programmers.



Tired of scrambling to get your job done?

If you were productive enough, you could take the afternoon off, confident you’d produced high value work. Not to mention having an easier time finding a new job when you need one.

Learn the secret skills of productive programmers.

19 May 06:21

What’s so funny about derogatory memes?

by Simone Redaelli

The term “meme” first appeared in the 1975 Richard Dawkins’ bestselling book The selfish gene. The neologism is derived from the ancient Greek mīmēma, which means “imitated thing”. Richard Dawkins, a notorious evolutionary biologist, coined it to describe “a unit of cultural content that is transmitted by a human mind to another” through a process that can be referred as “imitation”. For instance, anytime a philosopher ideates a new concept, their contemporaries interrogate it. If the idea is brilliant, other philosophers may eventually decide to cite it in their essays and speeches, with the outcome of propagating it. Originally, the concept was proposed to describe an analogy between the “behaviour” of genes and cultural products. A gene is transmitted from one generation to another, and if selected, it can accumulate in a given population. Similarly, a meme can spread from one mind to another, and it can become popular in the cultural context of a given civilization. The term “meme” is indeed a monosyllable, which resembles the word “gene”.

The concept of memes becomes relevant when they are considered as “selfish” entities. Dawkins’ book revolves around the idea that genes are the biological units upon which natural selection acts. Metaphorically, the genes that are positively selected – if they had a consciousness – would for example use their vehicles, or hosts, for their own preservation and propagation. They would behave as though they were “selfish”.

When this principle is applied to memes, we should not believe that cultural products – such as popular songs, books or conversations – can reason in a human sense, exactly as Dawkins did not mean that genes can think as humans do. We basically mean that their intrinsic capability to be retained in the human mind and proliferate does not necessarily favour their vehicles, the humans. As an example, Dawkins proposes the idea of “God”. God is a simplified explanation for a complex plethora of questions on the origin of human existence and, overall, of the entire universe. However, given its comforting power, and its ability to release the human mind from the chains of perpetual anguish, the idea of “God” is contagious. Most likely, starting with the creation of God, the human mind got infected by other memes, such as “life after death”. When they realized they could survive their biological end, humans no longer feared death. However, if taken to the extreme, this meme could favour the spread of “martyrs”, people who would sacrifice their biological life for the sake of the immortal one.

There are many other examples of memes that displayed, and still display, a dangerous and apparent “selfish” behaviour. The religious ideology that led to the massacres of the Crusades, which are estimated to have taken the lives of 1.7 million people, or the suicidal behaviour of terrorists, or even, on a global scale, the human culture as a threat to the well-being of the planet, and to humanity itself.

Thus, a meme is a viral piece of information, detrimental, beneficial or irrelevant for the host, that is capable of self-replication and propagation in the population, with the potential of lasting forever. This definition is instrumental to understand its role today.

Dawkins ideated the memes in a pre-Internet era, when the concept was purely theoretical and aimed at describing the spreading process of cultural information. However, in present times, thanks to the wide distribution of high-speed Internet and the invention of social media, the old neologism “meme” has acquired a new and specific meaning.

“Internet memes” are described as “any fad, joke or memorable piece of content that spreads virally across the web, usually in the form of short videos or photography accompanied by a clever caption.” Despite a variety of meme types that can be found online, most of them are usually geared toward causing a stereotypical reaction: a brief laughter.

I recently reflected on this stereotypical reaction while re-watching Who framed Roget Rabbit, a 1988 live-action animated movie, which is set in a Hollywood where cartoon characters and real people co-exist and work together. While the protagonist is a hilarious bunny who was framed for the murder of a businessman, the antagonists are a group of armed weasels who try to capture him. The main trait of these weasels is that they are victims of frequent fits of laughter, which burst irrationally and cannot be stopped, as their reaction far exceed the stimulus. The reason for the weasels’ behaviour is not obvious until the end of the film, when they literally laugh to death.

A brief introduction on the concept of humour is instrumental to understanding the message this deadly laughter conveys. The Italian dramatist and novelist Luigi Pirandello articulates it in two phases. The first one is called “the perception of the opposite”, according to which the spectator laughs at a scene, because the scene is the opposite of what the spectator’s mind would consider as a normal situation. Intriguingly, a humoristic scene does not stop here, but instead it induces the spectator to reflect upon the scene. In this second step, called “the feeling of the opposite”, the spectator rationalizes the reasons why the scene appears to be the opposite of what they expected. They stop laughing, taking the point of view of the “derided”, and eventually empathizing with them. In Who framed Roger Rabbit, the weasels are incapable of rationalizing the meaning of their laughs, which are reiterated as a vacuous gesture. They laugh when people get hurt, without understanding what it means to get hurt. Given that their irrational instinct to laugh does not encounter a rational obstacle, the laughter becomes undigested and then toxic for their mind. It consumes their soul and ultimately, their mortal bodies. In the movie, the weasels’ death is indeed not caused by a biological blight, but rather their souls literally fly out of their otherwise healthy bodies. Their laughter is de facto a disease that consumes the mind.

Internet memes are integral to communication practices on social media platforms. Some memes are fun, silly and supportive, and their evocation of a smile or laugh is relatively unproblematic. However, other memes are actively degrading: they spread hate at a viral scale, targeting racial and ethnic minorities, people with disabilities, people who are gender non-conforming, and so on. I will focus my analysis on the latter. Why has laughing at socially-degrading memes has become a normative and widespread practice?

I present two possible explanations.

The first one is exemplified by Arthur Fleck’s character in the recent movie Joker by Todd Philips. Arthur is a miserable man, affected by an impulsive laughter in situations of psychological distress or discomfort. Arthur Fleck himself is also a source of laughter. In light of the “feeling of the opposite,” the spectator is therefore confronted with a double scenario: anytime they laugh when Arthur Fleck behaves weirdly or appears ridiculous, they may also realise they shouldn’t. They should not laugh at someone’s laughter that is not genuine and intentional, a symptom of a hidden, unconscious psychological distress. Yet people do laugh at Fleck, and the reason for this laughter is instructive for understanding why we laugh in response to degrading memes. Laughing at Arthur Fleck puts a distance between the spectators and the troubled character. Dealing with other people’s desperation, disability, change or death is a complex matter. It is far simpler “to laugh about it” and move on. This is part of what the “meme industry” is offering.

There is also another explanation for the success of derogatory Internet memes. Laughing is 30 times more likely to happen in a social context rather than when people are alone. It is also an imitational process, which can be simply triggered by watching other people laughing. Even more intriguingly, in comparison to other mechanisms, such as suppression, laughter is associated with a better reduction of stress, which is commonly caused by negative emotions, including terror, rage or distaste. Thus, by definition, laughing also constitutes a social way to relieve pain, to share the grief. In this context, in order to emotionally counterbalance the negative sensations triggered by the obscenity or the turpitude of the Internet meme, the user laughs, and immediately spreads the source of their laugher to laugh with others.

Now, moving back to Richard Dawkins’ original definition of memes, are “Internet memes” beneficial or detrimental to the host? Should they be pictured as “selfish”?

On the individual level, Internet memes, including the socially derogatory ones, have clear benefits for the host. As previously explained, the laughter induced by memes generate personal well-being and social connection.

However, if people are, at scale, laughing at violence, at abuses, at disparities, there may emerge a calloused approach to human suffering, an alarming process which is indeed already on the rise. The difference between laughing at a picture that makes fun of a marginalized group and allowing their discrimination, mistreatment and segregation in real life is very subtle, and the two practices are connected. There is a direct line between laughing at a meme of someone who is hurt, ill, or dead and apathetically watching your nation’s army bombing a village. Not to mention Internet memes that tacitly portray white supremacy. Let us imagine politicians, seated in their offices, laughing at a screen.

From this wide picture, Internet memes that portray such messages emerge to be cultural traits that are eventually dangerous for the well-being of the community, even if not for the individual per se. This scenario fosters a mimetic diffusion of oppression, one shot of laughter at a time.

Headline pic via: Source

Brief biography

Simone is a molecular biologist on the verge of obtaining a doctoral title at the University of Ulm, Germany. He is Vice-Director at Culturico, where his writings span from Literature to Sociology, from Philosophy to Science.

Simone can be reached on Twitter: @simredaelli

Simone can be reached at: simred [at] hotmail . it

 

 

19 May 06:21

Why NetNewsWire Is Fast

NetNewsWire is fast because performance is one of our core values. Being fast is part of the very definition of the app.

I suspect that it’s hard to do this any other way. If you take a month or two to speed things up, from time to time, your app will always be — at best — just kind of heading toward satisfactory, but never to arrive.

The best general advice I can give is just this: make sure performance is part of the foundation of your app. Make sure it‘s part of every decision every day.

Make sure, in other words, that performance isn’t just a topping — it’s the pizza.

Below are some of the specific reasons NetNewsWire is fast. Because NetNewsWire is — like many apps these days — basically a fancy database browser where data comes from the web, some of these will apply to other apps.

The below items are in no particular order.

Fast RSS and Atom Parsing

The most painful way to parse XML is with a SAX parser — but it’s also how you’ll get the best performance and use the least memory. So we use SAX in our RSParser framework.

On my 2012 iMac, parsing a local copy of some past instance of the Daring Fireball Atom feed — relatively large at 112K in size — happens in 0.009 seconds.

That’s fast, but we do another thing as well: run the parser in the background on a serial queue. Since parsing is a self-contained operation — we input some data and get back objects — there are no threading issues.

Conditional GET and Content Hashes

The parsers are fast — but we also do our best to skip parsing entirely when we can. There are two ways we do that.

We use conditional GET, which gives the server the chance to respond with a 304 Not Modified, and no content, when a feed hasn’t changed since the last time we asked for it. We skip parsing in this case, obviously.

We also create a hash of the raw feed content whenever we download a feed. If the hash matches the hash from the last time, then we know the content hasn’t been modified, and we skip parsing.

Serial Queues

The parser isn’t the only code we run on a serial queue. When an operation can be made self-contained — when it can just do a thing and then call back to the main thread, without threading issues — we use a serial queue if there’s any chance it could noticeably block the main thread.

The key is, of course, making sure your operations are in fact self-contained. They shouldn’t trigger KVO or other kinds of notifications as they do their work.

(A simple example of a background thing, besides feed parsing, is creating thumbnails of feed icons.)

We Avoid the Single-Change-Plus-Notifications Trap

Here’s an example of a trap that’s easy to fall into. Say a user is marking an article as read. Calling article.read = true triggers, via KVO or notifications or something, things like database updates, user interface updates, unread count updating, undo stack maintenance, etc.

Now say you’re marking all articles in the current timeline as read. You could call article.read = true for each article — and, for each article, trigger a whole bunch of work. This can be very, very slow.

We have specific APIs for actions like this, and those APIs expect a collection of objects. The same API that marks a single article as read is used to mark 10,000 articles as read. This way the database is updated once, the unread counts are updated once, and we push just one action on the undo stack.

Coalescing

We also try to coalesce other kinds of work. For instance, during a refresh, the app could recalculate the unread count on every single change — but this could mean a ton of work.

So, instead, we coalesce these — we make it so that recalculating unread counts happens not more often than once every 0.25 seconds (for instance). This can make a huge difference.

Custom Database

For an app that is, again, just a fancy database browser, this is where the whole thing can be won or lost.

While Core Data is great, we use SQLite more directly, via FMDB, because this gives us the ability to treat our database as a database. We can optimize our schema, indexes, and queries in ways that are outside the scope of Core Data. (Remember that Core Data manages a graph of objects: it’s not a database.)

We use various tools — such as EXPLAIN QUERY PLAN — to make sure we’ve made fetching, counting, and updating fast and efficient.

We do our own caching. We run the database on a serial queue so we don’t block the main thread. We use structs instead of classes, as much as possible, for model objects. (Not sure that matters to performance: we just happen to like structs.)

To make searching fast, we use SQLite’s Full Text Search extension.

I could, and probably should, write more articles going into details here. The database work, more than anything else, is why NetNewsWire is fast.

Sets and Dictionaries

We often need to look up things — a feed, given its feedID, for instance — and so we use dictionaries frequently. This is quite common in Mac and iOS programming.

What I suspect is less common is use of sets. The set is our default collection type — we never want to check to see if an array contains something, and we never want to deal with duplicate objects. These can be performance-killers.

We use arrays when some API requires an array or when we need an ordered collection (usually for the UI).

Profiler

Instead of guessing at what’s slow, we use the profiler in Instruments to find out exactly what’s slow.

The profiler is often surprising! Here’s one thing we found that we didn’t expect: hashing some of our objects was, at one point, pretty slow.

Because we use sets quite a lot, there’s a whole lot of hashing going on. We were using synthesized equality and hashability on some objects with lots of string properties — and, it turns out, hashing strings is pretty darn slow.

So, instead, we wrote our own hash function for these objects. In many cases we could hash just one string property — an article ID, for instance — instead of five or ten or more.

No Stack Views

My experience with stack views tells me that they’re excruciatingly slow. They’re just not allowed.

No Auto Layout in Table Cell Views

When people praise a timeline-based app like NetNewsWire, they often say something like “It scrolls like butter!” (I imagine butter as not actually scrolling well at all, but, yes, I get that butter is smooth.)

While we use Auto Layout plenty — it’s cool, and we like it — we don’t allow it inside table cell views. Instead, we write our own layout code.

This is not actually difficult. Maybe a little tedious, but laying out a table cell view is pretty easy, really.

I figure that optimized manual layout code is always going to be faster than a constraint solver, and that gives us an edge in smooth scrolling — and this is one of the places where an otherwise good app can fall on its face.

And: because that layout code doesn’t need a view (just an article object and a width), we can run it at any time. We use that same code to determine the height of rows without having to run an Auto Layout pass.

Caching String Sizes

Text measurement is slow — slow enough to make even manual layout too slow. In NetNewsWire we do some smart things with caching text measurement.

For example: if we know that a given string is 20pts tall when the available width is 100 and when the available width is 200, we can tell, without measuring, that it will be 20pts tall when the available width is 150.

Summary

There’s no silver bullet. Making an app fast means doing a bunch of different things — and it means paying attention to performance continuously. 🍕