Shared posts

19 Jul 15:41

Nobody Expects the Spanish Inquisition

by Velouria


I would like to begin by stating that I am not a Monty Python fan. But no matter how hard I try to think of an alternative, this phrase describes most accurately my experiences over the past year, including the abrupt pause in this blog's publication.

Is a more thorough explanation than that required? After giving this question some genuine consideration, I do not think so. We are all adults here. We know that 'things' - private things - happen in life. And we also know that the worst things, the things that shake to the core and immobilise, have that effect precisely because they happen suddenly, without warning. We do not anticipate them; we have no planned response or coping strategy. We do not know how we will react.

The inability to write, or even look at, the cycling weblog that had been a part of my life for years prior, was part of my reaction.

What changed today, I do not know. But today I was able to open the browser, log in, clear the cobwebs, and write this. Whether there will be more, I honestly cannot say at this stage. I can only say what I would like to happen. And I would like to keep writing.

I would also like to share a very brief summary of my life over these past months:
I am happily married and, for the most part, healthy.
I have found work in the fibre and textile industry.
I have moved away from digital photography and gone back to film.
And I cycle pretty much every day.

All of these things bring me joy and have wondrous healing powers. And, if I do continue this blog, I hope that the new infusion of energy I feel from them will translate into my writing.

In the past I have often been asked, and have certainly wondered myself: To what extent was my cycling influenced by Lovely Bicycle? would I ride a bike as much, or at all for that matter, if I did not feel obliged to write about it, to take photos, to review products? I would have liked to think that of course I would still ride a bicycle even if there was no blog. But in truth, I did not know for certain, because from the very start the two were intertwined.

Despite having stopped writing about and photographing bicycles, my enthusiasm for cycling itself has not waned over the past 8 months. The bicycle remains my main means of transport. And I cycle for sport whenever weather and health permit. No matter what else goes on in my life, the bicycle is something I need every day. For better or worse, blog or no blog, we are enmeshed.

What I have lost, I realise, is any curiosity in products, equipment and cycling tech/spec talk. I am fairly certain now that this aspect of things was largely blog-driven. And I am not sure that I see a place for any of it, in any future version of this publication.

Since I last wrote in this space, I have gone through a life change and it is inevitable that things will be different. To any part of my former audience that is still here, and wishes to see where things will go - you are most welcome to keep me company.

And to all who see this: I genuinely thank you for reading Lovely Bicycle in all its various phases, over its 8 1/2 year lifespan. And I wish you a Happy 2018.





07 Jan 19:53

“The perils of polygamy”

by Andrea

The Economist: The link between polygamy and war. “Plural marriage, bred of inequality, begets violence.” (December 19, 2017)

“Wherever it is widely practised, polygamy (specifically polygyny, the taking of multiple wives) destabilises society, largely because it is a form of inequality which creates an urgent distress in the hearts, and loins, of young men. If a rich man has a Lamborghini, that does not mean that a poor man has to walk, for the supply of cars is not fixed. By contrast, every time a rich man takes an extra wife, another poor man must remain single. If the richest and most powerful 10% of men have, say, four wives each, the bottom 30% of men cannot marry. Young men will take desperate measures to avoid this state.

This is one of the reasons why the Arab Spring erupted, why the jihadists of Boko Haram and Islamic State were able to conquer swathes of Nigeria, Iraq and Syria, and why the polygamous parts of Indonesia and Haiti are so turbulent. Polygamous societies are bloodier, more likely to invade their neighbours and more prone to collapse than others are. The taking of multiple wives is a feature of life in all of the 20 most unstable countries on the Fragile States Index compiled by the Fund for Peace, an NGO”.

04 Jan 05:25

An Impressively Detailed Philosophy Paper Grading Rubric

files/images/rubric.PNG

Justin Weinberg, Daily Nous, Jan 05, 2018


Icon

This article from lasty May showed up (deservedly) in a year-end wrap-up. As the title suggests, it is an impressively detailed rubric for grading philosophy papers (and, frankly, would serve as an excellent rubric for grading most essays in general, with perhaps some token points for correctly describing the 'content' of various subjects. The diagram is hard to read in the article so here is a link to the full JPG file. Ud there's a weakness, I would like to see a consideration for other types of reasoning besides 'argumentation' (for example, explanation, extrapolation, compare-and-contrast, etc). But those could be easily inserted into the diagram.

[Link] [Comment]
04 Jan 05:25

In Our Connected World, What If Empathy Is Learning?

files/images/iStock-485774318-768x512.jpg

Thom Markham, Mind/Shift, Jan 05, 2018


Icon

I'll file this one under 'pedagogy of harmony' though the fit is a bit uneasy. Thom Markham taskes as a point of departure the end of the transmission model of learning asks "what now?" He observes that in today's world, more than ever, people learn together, an d "living a densely linked life and operating in a non-linear, intimately connected, globally diverse, culturally conflicted world... requires entirely new thinking about learning itself." To learn, on this new model, he suggests, may be to develop empathy, where empathy is characterized not merely asd a cognitive state but also a physiological state. Markham adds that "in the transmission model, learning is very much geared toward self-fulfillment; in the new model, we can expect empathy to shift the focus to the common good."

[Link] [Comment]
04 Jan 05:25

Announcement: Donate to OLDaily

Yes, it has only been a year, and I'm asking again. I have maintained OLDaily and the rest of this website at my own expense since 2001. It is not subsidized by my employer or anyone else. I've always been happy to do it, but I need your help. Click here to Donate.

This site gets a lot of traffic - 476K unique visitors and almost five million page views in 2017. 1690.37 gigabytes of traffic. On average, it has cost $125 a month for the last ten years (currently, it's $US 140, or almost $200 Canadian, per month). Thank you to everyone who helped last year. I raised just over $3000, which paid for the server and the traffic.

I am committed to keeping all my services and resources free, and will not add a subscription to any part of my website, ever. That's a promise. So if you help me provide this service, I'd be happy to recognize your contribution, as thanks, on my Donation Page.


04 Jan 05:24

Twitter Favorites: [turntouch] Turn Touch is now 75% shipped. https://t.co/DrMVeb34ov https://t.co/yODHuUlXRd

04 Jan 05:24

Twitter Favorites: [MobyDickatSea] To me, the white whale is that wall, shoved near to me. Sometimes I think there's naught beyond.

Moby Dick @MobyDickatSea
To me, the white whale is that wall, shoved near to me. Sometimes I think there's naught beyond.
04 Jan 05:24

SotD: Western Stars

Nobody, and I mean nobody, brings more to a performance than k.d. lang. But she’s not on the road that much, so you might have to settle for recordings. A good recording to settle for would be Shadowland, featuring production by country-music legend Owen Bradley and guest appearances by other divas-with-twang. This is probably the best song on Shadowland.

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

I actually saw k.d. last year, on her “Ingenue” tour, in which she played that breakthrough album end-to-end, then a bunch of hits. The place was packed, mostly with the gay and/or grey-haired. I’m not huge on Ingenue and it took k.d. a while to really warm up, but she got there and made the walls shake, and eventually sang Hallelujah, not a dry eye in the house.

But I’d seen her twice before. Once in the Nineties and that night’s version of Walkin’ After Midnight contained the most beautiful singing I’ve ever heard in my life, by anyone. And a thousand years ago in her pure-cowpunk phase; a thrill a minute and you couldn’t stop smiling.

Anyhow, Western Stars has a completely wonderful steel-guitar part, and some high notes that will make you shudder. You can’t go wrong with it.

Links

Spotify, iTunes, Amazon, live video - best sound, best voice.

04 Jan 05:23

How To Mine Your Online Community For Powerful Insights

by Richard Millington

The equation is simple. If you want more support for the community, you have to show the community is driving more value.

The common mistake is to equate value to activity and trying to attract more members to drive more activity.

Having undertaken in-depth interviews with almost 70 people for my book, I feel fairly confident to say that there is a far more effective option. You don’t need more members, you need better systems to capture and use the value you have already created.

The Insights Matrix

Online communities are rivers of powerful insights. We usually let these insights wash away because we don’t have good systems to capture and use them.

This, in turn, means our communities aren’t generating anywhere near the value they should be. Which, in turn, means were’ not getting the support we need to build the incredible communities we want to create.

If we can better capture and use these insights, we can solve these problems.

We can divide these insights down into the four distinct categories we see below.

Organization
Solicited Unsolicited
Members Aware Ideas and opinions

This includes ideation, co-creation, surveys, polls interviews, asking for ideas and feedback.

e.g. asking customers what they think about a product.

Complaints

This includes problem posts, voting on problems (or ‘me too’) posts.

e.g. finding out what customers are really angry about.

Unaware Sentiment And Qualitative Data

This includes tracking mentions and popularity of topics. It involves identifying the words and language members use.

e.g. waiting to see what your best customers say about a product.

Behavioral Insights

This includes click-through rates, conversion rates, attribution, landing page data.

e.g. tracking what people are most interested in about the product.

These insights are categorized by whether:

a) they are solicited by the organization.
b) our audience knows they’re generating insights.

Solicitation matters because asking someone what they think gives you a very different type of insight from a furious member complaining about a problem.

Audience awareness matters because members have a tendency to lie or struggle to explain what they really want. Fortunately, their clicks don’t lie.

You’re probably capturing at least one type of insight today, but you can immediately bring more value to the table if you start capturing multiple types of insights.

1) Ideas and Opinions

Any time you ask members for feedback, you’re going to get their ideas and opinions.

Ideas are useful both in themselves and also to validate or challenge existing thinking, identify great talent, and get a range of options to choose from. If no-one else can come up with a better solution to a problem than you have today, you can probably move on to the next thing.

In practice, this falls into two buckets. Insights generated through a dedicated platform and those sought after through more traditional platforms.

The dedicated platforms include:

  • Ideation platforms. In an ideation platform, members are invited to submit ideas and vote on the ones they like best. This usually involves a platform like BrightIdea, Spigit, Charodix etc…
  • Competition platforms. In a competition platform, members are set a challenge and invited to work together to come up with the best solution. Good examples here include Kaggle, Topcoder, 99designs.
  • Co-creation platforms. In a co-creation platform, members collaborate with each other to develop a bigger project. Many open-source platforms can fall under this banner. Other common examples might include Forth and platforms like Jovoto and others. Though, in practice, outside of open-source its rare for members to refine and update each other’s ideas.

You can find a bigger list of platforms here. Pricing ranges from a few hundred dollars per year to low-six figure sums for larger efforts which require high levels of customization.

These platforms are essentially efforts that align the goal of the community to a single type of insight. It’s more effective for that purpose but limiting if you want any other kind of insights.

This leads us to the second category of ideas, those sought after on a more ad-hoc basis without a dedicated platform. This includes:

  • Surveying community members. You can ask members a range of questions about their opinions on products, their problems, or what they would prioritize. SurveyMonkey is probably the simplest tool.
  • Running a community poll. You can run a poll and get immediate feedback from members on a single question. Most platforms have this as a native feature today. Getting feedback from most members on a single question. Otherwise SurveyMonkey and Doodle are quite simple options.
  • Interviewing community members. In-depth interviews give you deep, qualitative, data on members. This can help you build profiles, better understand the problems, and appreciate how people conceive the problem. I personally use Skype with SkypeRecorder for these. I also transcribe each interview in real-time with a few pre-set questions to begin.
  • Initiating discussion questions. The easiest way to get feedback is to use the community what it is there for, asking questions and getting responses. This gives you a quick and simple understanding of what your participants (not to be generalized to your community) want.

Capturing and using these ideas and opinions:

There are a lot of different ways you can make this work for you without building a dedicated platform. The easiest might include:

  • Set a competition to solve a problem your marketing/engineering teams are struggling with. Have a small prize for the best response (or top 3 responses). Be sure to check the law on competitions.
  • Ask members to review upcoming content before it’s published (I’m doing this with my book). Find out what they like about it, don’t like about it. Does it make sense? Is it relevant? Does it read well? What were their main takeaways?
  • Ask engineers what features they would like feedback on and run a poll or survey on those issues. Solicit questions from your colleagues on a regular basis to run past the community. Find out how many ideas they want, what format they want them in, and when they want them.
  • Get snapshot responses to any question raised in meetings that would benefit from quick feedback.
  • Ask members what they would most like to change about your product/service and feeding that information back to your colleagues.
  • Highlight the roadmap and ask members to prioritize what order they want these items fixed in a survey.

You can develop plenty of your own ideas here too.

Be sure to find out exactly what feedback about your product, PR, and marketing teams would most love to see and set questions, polls, or surveys in the community to gather that feedback.

2) Complaints

Complaints are often more powerful than ideas because they reveal what members really care about.

If someone takes the time and energy to write a complaint, you can be sure the problem is important to them. Solicited ideas might reveal preferences, but complaints highlight what will influence purchase decisions.

Complaints can also act as an early warning system to any upcoming problems and avoid PR disasters. They also give you a great opportunity to correct bad strategy mistakes and turn unhappy members into satisfied participants, if not eager advocates.

However, the number of complaints received via customer support tickets or calls usually dwarfs those received by the community. But the community typically contains an organization’s most dedicated fans/supporters.

A community shows what your best customers are upset about. If you lose your best customers, you have a major problem.

Many communities are launched as a customer support channel, this means they host only complaints. Others try to focus on the positive aspects of the product, but often become overwhelmed by the negative tone of discussions.

Capturing and using these insights:

  • Setup a place in the community for member complaints and share this link with the people that need to see them. This also separates the positive community discussions from the negative.
  • Tag or screenshot each complaint (or the biggest complaints) and compile these into a simple briefing for engineers or product managers at the end of the week.
  • Find out from colleagues what complaints they want to be immediately escalated internally and train your staff/volunteers on what to do with these complaints.
  • Report which areas/features get the most complaints.
  • Respond quickly (where legally possible) to every complaint that’s received within the community and demonstrate a positive approach to trying to solve the problem.

You want to develop your own system for tagging, screenshotting, or having a place for members to post complaints. Evernote is the simplest, but far from the only solution. Most platforms will either let you ‘tag’ a discussion or add a note to these discussions. This lets you pull these complaints in a query.

3) Sentiment and Qualitative Data

Every day your audience is giving you great insights in both their sentiment and the choice of words they use. Each of these has different benefits.

Qualitative data (or sentiment) is great for analyzing how much people care about a complaint they have posted. It can help prioritise which complaints to focus on. For example, a large number of members might be mildly irritated by a feature most used, but a smaller group might be furious about a less used feature. You might want to prioritise the latter or risk losing that smaller group of customers.

Alternatively, you might notice members no longer speak about a product or the company as positively as they once did. This portends a major problem you should raise at the next company meeting.

Finally, how a member describes a problem is very useful. You can find out exactly how members talk about issues and describe problems.

This can be passed on to copywriters, marketers, your PR team, and anyone involved in writing anything members read. When you start using the exact words members use, you get a better response (as well as SEO benefits).

Capturing and using sentiment:

  • Run your community logs (or URL) through a sentiment analysis tool to either track positive/negative sentiment broadly or towards a particular product. There are plenty of social media focused tools that do this, but a few others like blockspring and Haven will either let you build your own or do this for you (note: I’ve never used Haven). You can also track mentions of specific words that might be associated with positive or negative sentiment.
  • Capture the titles and words members use to describe their problems and feed this data back to the people that write the FAQ, help center, and marketing copy. This helps them ensure they’re using the language members best understand.
  • Track which topics are most popular within the community and share this information with people who provide this data. See which discussions have the highest level of positivity associated with them.

Word of warning, sentiment tools are addictive. Make sure you know what you’re looking for before you use one.

 

4) Behavior

Behavioral insights are usually the most powerful (and the most overlooked).

It’s one thing to track what members say, it’s another matter entirely to track what members do.

Behavioral insights are relatively easy to setup and use. You can use Google Analytics and other simple tools to easily see what pages most people arrive on and make inferences about what got them there. If most people are arriving at a discussion about ‘cheap conference venues in London?’, you might want to create content about the topic.

You can also see which categories (or topics) are rising and falling in popularity. Your colleagues can then devote more time to creating content or product features within these categories and devote more time to creating content or product features within those categories.

Click data reveals trends and shows what’s rising and falling in popularity. It can tell you exactly what members are doing and help you personalize activities for your members. It also helps you to optimize for key topics.

Capturing and using behavioral data

These systems can become considerably complex, but at their easiest you can usually do the following:

  • Ensure each discussion is not just placed within a category, but properly tagged. Track and report the popularity of each tag (by visits and comments) to identify possible trends and feed these trends back to colleagues.
  • Track the top 50 landing pages to the community each month. This reveals what members (and, most often, newcomers to the topic) are searching for. Your marketing team can create more content around these trends to capture newcomers.
  • Use Google Analytics to check where members are visiting from (geographic region as well as demographic data). This might reveal the need to translate your product content or sell the product to new regions. It might at least identify possible favourable markets.
  • Track where members arrive from. High-volume websites might indicate opportunities for referral/partnership programs.
  • Track visits from specific devices or on multiple browsers. This may show a need to cater the product or material to those browsers or devices.

This is far from a definitive list. Start with something simple and expand gradually to add greater depths of insights.

Your colleagues might not act on a single data point, but if the information proves credible it becomes a powerful and invaluable asset to have.

 

Pros and Cons Of Each System

Each of the options above have various pros and cons.

Pros Cons
Ideas and opinions
  • Quick, cheap, and easy.
  • Connects engineers directly to people using the product.
  • Validates or challenges existing thinking.
  • Solves problems.
  • Gathers positions on issues rather than depth of interest in those ideas.
  • Lot of wastage through bad ideas.
Complaints
  • Demonstrates influence upon purchases.
  • Allow you to publicly resolve the problem where possible.
  • Turn angry customers into advocates.
  • Acts as early warning system.
  • Demonstrates influence upon purchases.
  • Allow you to publicly resolve the problem where possible.
  • Turn angry customers into advocates.
  • Acts as early warning system.
Sentiment and language
  • Shows what the best customers think and feel.
  • Highlights intensity of attitudes towards problem.
  • Showcases attitudes and effectiveness of campaigns.
  • Captures exact words members use to describe issues.
  • Provides qualitative background.
  • Technology is still developing and is prone to mistakes.
  • Often requires expensive technology to do it well
  • Difficult to set up.
  • The volume of information makes analysis difficult.
Behavioral data
  • Tracks exactly what members are doing.
  • Highlights new trends.
  • Helps personalize activities.
  • Let’s you optimize for key topics.
  • Easy to setup and track.
  • Can be misleading if not representative or statistically significant.
  • ‘Race to the bottom’ – following data to create the most generic projects.

Download Our Reporting Sheet

Once you begin collecting your insights, you will also want to share them more broadly than just the immediate person in need. This is why you should prepare an insights report to share around at each meeting and email to a broader group at the end of each month.

This covers the summary, the key takeaways in each of the four areas above, next steps, and insights implement.

Make sure everyone is aware of previous insights which have been implemented as a result of the community.

You can download our worksheet here:

FeverBee Community Insights Template.

 

Conclusion

Getting great insights from your members to your colleagues is the most effective way to increase the value of the community. But you need to work at both ends. You need to find out what insights your colleagues most need and develop systems to capture those insights.

Your success (and the success of the community) depends not on how much activity you generate or how many members you persuade to join, but by how useful your colleagues find the community.

If you collect a lot of great insights they can use, you will quickly win them over and build the kind of community you want to create.

04 Jan 05:23

World’s top drone seller DJI made $2.7 billion in 2017

by Masha Borak

Updated: A previous version of this post stated that Luo Zhenhua is the vice-president of DJI. Luo Zhenhua is now the president of DJI. The drone industry has not gone cold, said DJI president Luo Zhenhua (Roger Luo) in an interview with Phoenix News (in Chinese). The Shenzhen-based drone maker is currently the world’s top […]

World’s top drone seller DJI made $2.7 billion in 2017 originally appeared on TechNode

04 Jan 05:23

Remoteness as a colonization strategy

by Chris Corrigan
I’ve been enjoying reading Adam Nicolson’s book “Sea Room” about the Shiant Islands in the Hebrides. The history of the small group of islands that he owns obsesses him.  He charts the archaeology and natural history of the islands, and the book is filled with the characters who are the real owners of the place – the crofters and shepherds that work the land as tenants witinn the strange Scottish systems of private land ownership.
 
Nicolson expresses some astonishment at the amount of activity that has taken place on the Shiants over history because they are considered so remote now. It doesn’t escape him that this might be by design
 
When I was on Iona last month I was also struck by how somewhere so remote was at one time the focus of a mass pilgrimage. In the 15th century thousands of people travelled every year to visit the relics held at the Abbey there.  
 
When you look at a map of the Hebrides, you can see that these islands are beyond the ends of the world, connected as it is these days by roads.  To get to Iona from Glasgow involves two ferries and when you’re finally there, you’re much closer to Ireland than to Glasgow.  But Ireland is away across the sea.  You can’t get there from here.  
 
Yet, it wasn’t always that way. When the traditional cultures and communities of the Hebrides were strong, families rowed and sailed through the islands for work and trade and spiritual reasons.  For a culture based on the sea, places like Iona are at the very centre of the world. The abbey at Iona was as important and accessible to worshippers as St. Paul’s in London, or The Vatican.  
 
During the period of most recent colonization, since the late 1700s, Hebridean culture ended up on the margins of the world.  Travellers like Samual Johnson visited and wrote patronizing books about the lives of the people huddled together in large communal blackhouses, shared with their animals, surviving on meagre soils, livestock and fish.  The colonizers paint a picture of Hebridean communities that need saving.
 
This same strategy – of decentering a culture and a world – happened on the west coast of Canada too. Place like Bella Bella, Kitkatla and Wuikinuxv all which are considered remote now. They are inaccessible by car, and can only be reached by water or air. But the Heitlsuk, Tsimshian and Wuikinuxv peoples are canoeing cultures. Traversing the waters of the central coast was never a big deal.  Bella Bella sits right in the middle of the BC Coast, a place of strategic importance between many different cultures. Until Europeans showed up and began building roads and cities elsewhere, these communities were the heart of the 9000 year history of human occupation on the coast. Almost overnight they went from places of immense importance to places of massive inconvenience. People were moved, villages relocated, children stolen and housed in residential schools so that the colonial governments could “care for” their wards.  
 
The result of course has been a massive seismic upturning of culture and power.  That is being resisted today with increasing vigour, and on the central coast in particular, it is becoming obvious that the indigenous governments are the ones best equipped to manage resources, develop economies and protect marine and territorial ecosystems.  This ultimately benefits everyone who lives in these territories, both indigenous and non-indigenous.
 
The decentering of entire cultures is a core tactic of colonization. People that never needed help are suddenly cast as poor, disconnected and in need of aid for their very survival.  What is needed instead is a recentering of the world on their communities and ways of life. Governance, ownership and leadership should lie with the people who best understand the land and seas. When that happens, the results are better for everyone. This is what reconciliation can be.  
04 Jan 05:22

Writing basic proofs in ATS

This post covers using the latest version of ATS, ATS 2, and goes through proving some basic algorithms. I've written a couple of posts before on using proofs in ATS 1:

Writing proofs in ATS is complicated by the fact that the dependent types and proof component of the language does not use the full ATS language. It uses a restricted subset of the language. When implementing a proof for something like the factorial function you can't write factorial in the type system in the same way as you write it in the runtime system. Factorial in the latter is written using a function but in the former it needs to be encoded as relations in dataprop or dataview definitions.

Recent additions to ATS 2 have simplified the task of writing some proofs by enabling the constraint checking of ATS to be done by an external SMT solver rather than the built in solver. External solvers like Z3 have more features than the builtin solver and can solve constraints that the ATS solver cannot. For example, non-linear constraints are not solveable by ATS directly but are by using Z3 as the solver.

In this post I'll start by describing how to write proofs using quantified constraints. This is the easiest proof writing method in ATS but requires Z3 as the solver. Next I'll continue with Z3 as the solver but describe how to write proofs using Z3 without quantified constraints. Finally I'll go through writing the proofs by encoding the algorithm as relations in dataprop. This approach progressively goes from an easy, less intrusive to the code method, to more the more difficult system requiring threading proofs throughout the code.

# Installing Z3

Z3 is the external solver used in the examples in this post. To install from the Z3 github on Linux:

$ git clone https://github.com/Z3Prover/z3
$ cd z3
$ mkdir build
$ cd build
$ cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release ../
$ make && sudo make install

# Installing ATS

I used ATS2-0.3.8 for the examples in this post. There are various scripts for installing but to do install manually from the git repository on an Ubuntu based system:

$ sudo apt-get install build-essential libgmp-dev libgc-dev libjson-c-dev
$ git clone git://git.code.sf.net/p/ats2-lang/code ATS2
$ git clone https://github.com/githwxi/ATS-Postiats-contrib.git ATS2-contrib
$ export PATSHOME=`pwd`/ATS2
$ export PATSCONTRIB=`pwd`/ATS2-contrib
$ export PATH=$PATSHOME/bin:$PATH
$ (cd ATS2 && ./configure && make all)
$ (cd ATS2/contrib/ATS-extsolve && make DATS_C)
$ (cd ATS2/contrib/ATS-extsolve-z3 && make all && mv -f patsolve_z3 $PATSHOME/bin)
$ (cd ATS2/contrib/ATS-extsolve-smt2 && make all && mv -f patsolve_smt2 $PATSHOME/bin)

Optionally you can install the various ATS backends for generating code in other languages:

$ (cd ATS2/contrib/CATS-parsemit && make all)
$ (cd ATS2/contrib/CATS-atscc2js && make all && mv -f bin/atscc2js $PATSHOME/bin)
$ (cd ATS2/contrib/CATS-atscc2php && make all && mv -f bin/atscc2php $PATSHOME/bin)
$ (cd ATS2/contrib/CATS-atscc2py3 && make all && mv -f bin/atscc2py3 $PATSHOME/bin)

Add PATSHOME, PATSCONTRIB and the change to PATH to .bash-rc, .profile, or some other system file to have these environment variables populated when starting a new shell.

# Dependent Types

A function to add numbers in ATS can be proven correct using dependent types by specifying the expected result using dependently typed integers:

fun add_int {m,n:int} (a: int m, b: int n): int (m + n) = a + b

This won't compile if the implementation does anything but result in the addition of the two integers. The constraint language used in dependent types is a restricted subset of the ATS language. I wrote a bit about this in my post on dependent types in ATS.

The following is an implementation of the factorial function without proofs:

#include "share/atspre_define.hats"
#include "share/atspre_staload.hats"

fun fact (n: int): int =
  if n > 0 then n * fact(n- 1) else 1

implement main0() = let
  val r = fact(5)
in
  println!("5! = ", r)
end

Compile and run with something like:

$ patscc -o f0 f0.dats
$ ./f0
5! = 120

To prove that the implementation of factorial is correct we need to specify what factorial is in the constraint language of ATS. Ideally we'd like to write something like the following:

fun fact {n: nat} (n: int n): int (fact(n)) = ...

This would check that the body of the function implements something that matches the result of fact. Unfortunately the restricted constraint language of ATS doesn't allow implementing or using arbitary functions in the type definition.

# Using Z3 as an external solver

By default ATS solves constraints using its built in constraint solver. It has a mechanism for using an external solver, in this case Z3. To type check the previous factorial example using Z3 use the following commands:

$ patsopt -tc --constraint-export -d f0.dats |patsolve_z3 -i
Hello from [patsolve_z3]!
typechecking is finished successfully!

Note the change to use patsopt instead of patscc. The -tc flag does the type checking phase only. --constraint-export results in the constraints to be exported to stdout which is piped to patsolve_z3. That command invokes Z3 and checks the constraint results.

Since the resulting program may contain code that ATS can't typecheck itself, to actually build the final executable we invoke patscc with a command line option to disable type checking. It's important that the checking has succeeded through the external solver before doing this!

$ patscc --constraint-ignore -o f0 f0.dats

# Z3 and quantified constraints

Using Z3 with quantified constraints is a new feature of ATS and quite experimental. Hongwei notes some issues due to different versions of Z3 that can cause problems. It is however an interesting approach to proofs with ATS so I include the process of using it here and hope it becomes more stable as it progresses.

ATS provides the stacst keyword to introduce a constant into the 'statics' part of the type system. The 'statics' is the restricted constraint language used when specifying types. There are some examples of stacst usage in the prelude file basics_pre.sats.

Using stacst we can introduce a function in the statics system for factorial:

stacst fact: int -> int

Now the following code is valid:

fun fact {n:nat} (n: int n): int (fact(n)) = ...

ATS doesn't know about fact in the statics system, it only knows it's a function that takes an int and returns an int. With Z3 as the external solver we can extend ATS' constraint knowledge by adding assertions to the Z3 solver engine using $static_assert:

praxi fact_base(): [fact(0) == 1] void
praxi fact_ind {n:int | n >= 1} (): [fact(n) == n * fact(n-1)] void

The keyword praxi is used for defining axioms, whereas prfun is used for proof functions that need an implementation. This is currently not checked by the compiler but may be at some future time. From a documentation perspective using praxi shows no plan to actually prove the axiom.

The two axioms here will add to the proof store the facts about the factorial function. The first, fact_base, asserts that the factorial of zero is one. The second asserts that for all n, where n is greater than or equal to 1, that the factorial of n is equivalent to n * fact (n - 1).

To add these facts to Z3's knowledge, use $solver_assert:

fun fact {n:int | n >= 0} (n: int n): int (fact(n)) = let
  prval () = $solver_assert(fact_base)
  prval () = $solver_assert(fact_ind)
in
  if n = 0 then 1 else n * fact(n - 1)
end

This typechecks successfully. Changing the implementation to be incorrect results in a failed typecheck. Unfortunately, as is often the case with experimental code, sometimes an incorrect implementation will hang Z3 causing it to consume large amounts of memory as noted earlier.

The implementation of fact here closely mirrors the specification. The following is a tail recursive implementation of fact that is also proved correct to the specification:

#include "share/atspre_define.hats"
#include "share/atspre_staload.hats"

stacst fact: int -> int

extern praxi fact_base(): [fact(0) == 1] unit_p
extern praxi fact_ind{n:pos}(): [fact(n)==n*fact(n-1)] unit_p

fun fact {n:nat} (n: int n): int (fact(n)) = let
  prval () = $solver_assert(fact_base)
  prval () = $solver_assert(fact_ind)

  fun loop {n,r:nat} (n: int n, r: int r): int (fact(n) * r) =
    if n > 0 then loop (n - 1, n * r) else r
in
  loop (n, 1)
end

implement main0() = let
  val r = fact(5)  
in
  println!("5! = ", r)
end

This was tested and built with:

$ patsopt -tc --constraint-export -d f4.dats |patsolve_z3 -i
Hello from [patsolve_z3]!
typechecking is finished successfully!
$ patscc --constraint-ignore -o f4 f4.dats
./f4
5! = 120

# Z3 with threaded proofs

Another approach to using the external solver is not to add constraints to the Z3 store via $solver_assert but instead call the axioms explicitly as proof functions threaded in the body of the function. This is fact implemented in such a way:

stacst fact: int -> int

extern praxi fact_base(): [fact(0) == 1] void
extern praxi fact_ind {n:int | n >= 1} (): [fact(n) == n * fact(n-1)] void

fun fact {n:nat} (n: int n): int (fact(n)) =
  if n > 0 then let
      prval () = fact_ind {n} ()
    in
      n * fact(n - 1)
    end
  else let
      prval () = fact_base()
     in
       1
     end

The code is more verbose due to needing to embed the prval statements in a let block but it doesn't suffer the Z3 incompatibility that the quantified constraint example did. An incorrect implementation will give an error from Z3.

The equivalent tail recursive version is:

fun fact {n:nat} (n: int n): int (fact(n)) = let
  fun loop {n,r:nat} (n: int n, r: int r): int (fact(n) * r) =
    if n > 0 then let
        prval () = fact_ind {n} ()
      in
        loop (n - 1, n * r)
      end
    else let
        prval () = fact_base()
      in
        r + 1
      end
in
  loop (n, 1)
end

# Dataprops and Datatypes

It's still possible to write a verified version of factorial without using an external solver but the syntactic overhead is higher. The specification of fact needs to be implemented as a relation using dataprop. A dataprop introduces a type for the proof system in much the same way as declaring a datatype in the runtime system of ATS. Proof objects constructed from this type exist only at proof checking time and are erased at runtime. They can be taken as proof arguments in functions or included in return values. Proof functions can also be written to use them. In the words of Hongwei Xi:

A prop is like a type; a value classified by a prop is often called a proof, which is dynamic but erased by the compiler. So while proofs are dynamic, there is no proof construction at run-time.

For a comparison of the syntax of dataprop and datatype, here is a type for "list of integers" implement as both:

dataprop prop_list =
 | prop_nil
 | prop_cons of (int, prop_list)

datatype list =
 | list_nil
 | list_cons of (int, list)

To specifiy fact as a relation it is useful to see how it is implemented in a logic based progamming language like Prolog:

fact(0, 1).
fact(N, R) :-
    N > 0,
    N1 is N - 1,
    fact(N1, R1),
    R is R1 * N.

The equivalent as a dataprop is:

dataprop FACT (int, int) =
  | FACTzero (0, 1)
  | {n,r1:int | n > 0} FACTsucc (n, r1 * n) of (FACT (n-1, r1))

FACT(n,r) encodes the relation that fact(n) = r where fact is defined as:

  • fact(0) = 1, and
  • fact(n) where n > 0 = n * fact(n - 1)

The dataprop creates a FACT(int, int) prop with two constructors:

  • FACTzero() which encodes the relation that fact(0) = 1, and
  • FACTsucc(FACT(n-1, r1)) which encodes the relation that fact(n) = n * fact(n-1)

The declaration of the fact function uses this prop as a proof return value to enforce that the result must match this relation:

fun fact {n:nat} (n: int n): [r:int] (FACT (n, r) | int r) = ...

The return value there is a tuple, where the first element is a proof value (the left of the pipe symbol) and the second element is the factorial result. The existential variable [r:int] is used to associate the returned value with the result of the FACT relation and the universal variable, {n:nat} is used to provide the first argument of the fact prop. Through unification the compiler checks that the relationships between the variables match.

The implementation of the function is:

fun fact {n:nat} (n: int n): [r:int] (FACT (n, r) | int r) =
  if n > 0 then let
    val (pf1 | r1) = fact (n - 1)
    val r = n * r1
  in
    (FACTsucc (pf1) | r)
  end else begin
    (FACTzero () | 1)
end

Note that the result of the recursive call to fact deconstructs the proof result into pf1 and the value into r1 and that proof is used in the result of the FACTsucc constructor. Proofs are constructed like datatypes. For example:

  • FACTsucc(FACTzero()) is fact(1) (the successor, or next factorial, from fact(0).
  • FACTsucc(FACTsucc(FACTzero())) is fact(2), etc.

In this way it can be seen that a call to fact(1) will hit the first branch of the if condition which recursively calls fact(0). That hits the second branch of the conditional to return the prop FACTzero(). On return back to the caller this is returned as FACTsucc(FACTzero()), giving our prop return type as FACT(1, 1). Plugging these values into the n and r of the return type for the int r value means that value the function returns must be 1 for the function to pass type checking.

Although these proofs have syntactic overhead, the runtime overhead is nil. Proofs are erased after typechecking and only the factorial computation code remains. The full compilable program is:

#include "share/atspre_define.hats"
#include "share/atspre_staload.hats"

dataprop FACT (int, int) =
  | FACTzero (0, 1)
  | {n,r1:int | n > 0} FACTsucc (n, r1 * n) of (FACT (n-1, r1))

fun fact {n:nat} (n: int n): [r:int] (FACT (n, r) | int r) =
  if n > 0 then let
    val (pf1 | r1) = fact (n - 1)
    val r = n * r1
  in
    (FACTsucc (pf1) | r)
  end else begin
    (FACTzero () | 1)
end

implement main0() = let
  val (pf | r) = fact(5)
in
  println!("5! = ", r)
end

To compile and run:

$ patscc -o f8 f8.dats
$ ./f8
5! = 120

A tail recursive implementation of fact using dataprop that type checks is:

fun fact {n:nat} (n: int n): [r:int] (FACT (n, r) | int r) = let
  fun loop {r:int}{i:nat | i <= n}
           (pf: FACT(i, r) | n: int n, r: int r, i: int i):
           [r1:int] (FACT(n, r1) | int (r1)) =
    if n - i > 0 then
        loop (FACTsucc(pf) | n, (i + 1) * r, i + 1)
    else (pf | r)
in
  loop (FACTzero() | n, 1, 0)
end

Because our dataprop is defined recursively based on successors to a previous factorial, and we can't get a predecessor, the tail recursive loop is structured to count up. This means we have to pass in the previous factorial prop as a proof argument, in pf, and pass an index, i, to be the current factorial being computed.

# Fibonacci

Fibonacci is similar to factorial in the way the proofs are constructed. The quantified constraints versions is trivial:

stacst fib: int -> int

extern praxi fib0(): [fib(0) == 0] unit_p
extern praxi fib1(): [fib(1) == 1] unit_p
extern praxi fib2 {n:nat|n >= 2} (): [fib(n) == fib(n-1) + fib(n-2)] unit_p

fun fib {n:int | n >= 0} (n: int n): int (fib(n)) = let
  prval () = $solver_assert(fib0)
  prval () = $solver_assert(fib1)
  prval () = $solver_assert(fib2)
in
  if n = 0 then 0
  else if n = 1 then 1
  else fib(n-1) + fib(n -2)
end

The threaded version using the external solver isn't much more verbose:

stacst fib: int -> int

extern praxi fib0(): [fib(0) == 0] void
extern praxi fib1(): [fib(1) == 1] void
extern praxi fib2 {n:nat|n >= 2} (): [fib(n) == fib(n-1) + fib(n-2)] void

fun fib {n:int | n >= 0} (n: int n): int (fib(n)) =
  if n = 0 then let
      prval () = fib0()
    in
      0
    end
  else if n = 1 then let
      prval () = fib1()
    in
      1
    end
  else let
      prval () = fib2 {n} ()
    in
      fib(n-1) + fib(n -2)
    end

The dataprop version is quite readable too and has the advantage of not needing an external solver:

dataprop FIB (int, int) =
  | FIB0 (0, 0)
  | FIB1 (1, 1)
  | {n:nat}{r0,r1:int} FIB2(n, r1+r0) of (FIB(n-1, r0), FIB(n-2, r1))

fun fib {n:nat} (n: int n): [r:int] (FIB (n, r) | int r) =
  if n = 0 then (FIB0() | 0)
  else if n = 1 then (FIB1() | 1)
  else let
      val (pf0 | r0) = fib(n-1)
      val (pf1 | r1) = fib(n-2)
    in
      (FIB2(pf0, pf1) | r0 + r1)
    end

The dataprop maps nicely to the Prolog implementation of fibonacci:

fib(0,0).
fib(1,1).
fib(N,R) :- N1 is N-1, N2 is N-2, fib(N1,R1),fib(N2,R2),R is R1+R2.

I leave proving different implementations of fib to the reader.

# Conclusion

There are more algorithms that could be demonstrated but this post is getting long. Some pointers to other interesting examples and articles on ATS and proofs:

In general proof code adds a syntactic overhead to the code. With more work on using external solvers it looks like things will become easier with automated solving. ATS allows the programmer to write normal code and add proofs as needed so the barrier to entry to applying proofs is quite low, given suitable documentation and examples.

04 Jan 05:22

Most popular GIFs used to express emotion in different countries

by Nathan Yau

People often use animated GIFs to digitally express caricatures of emotion or reaction. So when you look at the most distinct ones of various countries associated with specific emotions, you get sort of a caricature for each region. Amanda Hess and Quoctrung Bui for The Upshot looked.

I wonder what the GIFs look like for people who are less likely to display emotion. Does the straight face cross over to GIF usage, or is there a dichotomy of real-life and digital self? I must know.

Tags: emotion, GIF, Upshot

04 Jan 05:22

Field Guide to the R Ecosystem

by Nathan Yau

If you’re looking to acquaint yourself with R — the non-coding aspects of the language — the brief Field Guide to the R Ecosystem by Mark Sellers might help.

Perhaps, you’re a hobbyist R user, who’d like to provide more information to your company in order to make a case for adopting R? Maybe you’re part of a support team who’ll be building out infrastructure to support R in your business, but don’t know the first thing about R. You might be a manager or executive keen to support the development of an advanced analytics capability within your organisation. In all of these cases, the field guide should be useful to you.

Useful.

If you want to learn coding with R though, get into tutorials and examples, and you pick up the stuff in this guide in the process of learning.

Tags: R

04 Jan 05:21

Der Amazon Echo ist eine Werbeplattform (Achtung: Gizmodo).Money ...

mkalus shared this story from Fefes Blog.

Der Amazon Echo ist eine Werbeplattform (Achtung: Gizmodo).

Money Quote:

Proctor & Gamble as well as Clorox are reportedly in talks for major advertising deals that would allow Alexa to suggest products for you to buy.

[…]

There are already some sponsorships on Alexa that aren’t tied to a user’s history. If a shopper asks Alexa to buy toothpaste, one response is, “Okay, I can look for a brand, like Colgate. What would you like?”

04 Jan 05:21

Donald Trump hat es geschafft, das Niveau vom letzten ...

mkalus shared this story from Fefes Blog.

Donald Trump hat es geschafft, das Niveau vom letzten Jahr noch zu unterbieten.
04 Jan 05:21

Das Auto im Kopf

by noreply@blogger.com (Christine Lehmann)
mkalus shared this story from Radfahren in Stuttgart.

Besinnen wir uns mal wieder: Autofahren ist schlimmer als eine Sucht, so lautet der Titel eines Interviews, das Susanne Führer im Deutschlandfunk Kultur mit dem Verkehrsexperten Hermann Knoflacher geführt hat.

Das Auto hat sich in unserem Stammhirn eingenistet und bestimmt unser Handeln, unsere Vorlieben und unsere Politik, so der Tenor des Interviews. Weil das Auto so tief in unserm ganzen Denken verankert ist, machen wir unsere Welt fürs Auto, nicht für Menschen.

Rund elf Millionen Kinder leben in Deutschland. Die schleichen sich auf Gehwegen an Hauswänden entlang, damit die rund 62 Millionen Autos genügend Platz haben.

Autos stoßen giftige Gase aus, die Kinderlungen und Kinderherzen schädigen, und sie töten. Unsere vom Auto besetzen Gehirne nehmen diese Toten gleichmütig hin, nur damit wir weiter Auto fahren können. Weltweit bringen Autofahrende 1,2 Millionen Menschen bei Verkehrsunfällen um (in Deutschland gut 3.000). Fünf bis sechs Millionen töten wir durch Abgase. Zwanzig bis fünfzig Millionen Menschen verletzen wir jedes Jahr bei Verkehrsunfällen. Wir, indem wir Auto fahren. Die Eltern, die ihre Kinder im Auto zur Schule fahren, verhindern, dass ihre Kinder den Weg gefahrlos zu Fuß oder mit dem Fahrrad machen können. Für unser Familienauto geben wir mehr Geld aus als für unsere Kinder. Und mit ihm schaffen wir eine Umwelt, die kinderfeindlich ist.

Knoflacher: "Beim Auto ist es überhaupt gar keine Frage, dass das Auto sozusagen den Menschen enthumanisiert, also autobilisiert hat. Dann entsteht ein anderes Lebewesen. Der Autofahrer unterscheidet sich ja vom Menschen wesentlich mehr als jedes Insekt, weil, es gibt kein Insekt, das sich im natürlichen Lebensraum so schnell bewegt, dass es sich selbst oder andere tötet. Es gibt kein Insekt, das den Lebensraum der Kinder opfert oder seiner Nachkommen opfert, wie es die Eltern tun."

Die derzeit viel beschworene E-Mobilität ändert am Grundproblem nichts. Sie macht vielleicht Innenstädte etwas leiser, aber ab ca. 40 km/h sind die Reifengeräusche lauter als der Motor. Eine Autobahn tost mit E-Autos genauso laut durch die Landschaft wie eine heutige. Feinstaub kommt hauptsächlich durch Reifenabrieb zustande, und den hat man unvermindert. Zudem sind E-Autos nicht kleiner als unsere heutigen Autos. Sie nehmen weiterhin unheimlich viel Platz weg, auf denen in Zeiten vor dem Auto Menschen lebten, einander trafen und miteinander redeten und Handel trieben. Weil man nicht mehr auf der Straße leben kann oder draußen auf dem Land, werden Wohnungen immer größer, in denen wir uns von Lärm und Abgasen abschotten. Und weil weniger Menschen in einer Stadt Platz haben, wenn wenige in immer größeren Wohnungen wohnen, ziehen wir aufs Land. Und dann brauchen wir Autos und Autostraßen, um in die Stadt zu kommen (oder zum Sportverein) und Menschen zu treffen. Die Innenstädte veröden, weil Läden an Parkplätze gekoppelt sind. Wir sehen die Welt nicht mehr, wie sie uns gefällt, sondern nur, wie sie dem Auto gefällt.

Wenn ein Mensch sein ganzes Leben einem Faktor unterordnet, dem Auto, dann  nennt man das Sucht. Das Auto braucht einen Parkplatz. Unsere Gedanken kreisen schon während der Arbeit darum, ob wir am Abend im Wohngebiet einen Parkplatz in der Nähe unserer Wohnung finden werden. Wir brechen früher am Samstag in die Innenstadt auf, damit wir dort einen Parkplatz finden. Man könnte auch mit dem Fahrrad fahren oder - ist die Strecke zu weit - mit dem Öffentlichen Nahverkehr. Das taten 1950 noch 65 Prozent der Menschen. Heute liegt die Quote beim ÖPNV bei 16 bis 18 Prozent. Denn das Auto ist verfügbar geworden. Fast jeder kann sich eines kaufen, öffentlicher Parkplatz an Straßenrändern scheint unbegrenzt und wird extrem billig zur Verfügung gestellt, oft sogar kostenlos, etwa von Einkaufszentren.

Was macht man, wenn von einer Sucht loskommen will? Man reduziert den Konsum auf Null. Man schafft sein Auto ab. Was macht man aber mit Menschen, die ihre Sucht nicht erkennen und auch gar nicht davon loskommen wollen? Man nimmt ihnen das Suchtmittel weg. Das ist der Grund, warum Appelle (ein freiwilliger Feinstaubalarm) keinen Erfolg haben. Die Sucht ist stärker. Bei manchen Menschen entsteht Panik, wenn sie nicht mit dem Auto fahren dürfen. Sie haben das Gefühl, nicht mehr in die Stadt zu können. Sie wissen nicht, wie man mit einer Stadtbahn fährt, der Gedanken löst bei ihnen Panik und Abscheu aus. Sie würden auch dann nicht auf den Öffentlichen Nahverkehr umsteigen, wenn er nichts kosten würde (abgesehen davon, dass sie den Stress mit dem Kartenautomaten nicht fürchten müssten). Sie nehmen auch nicht das billige und vergnügliche Fahrrad. Geld ist nicht das Problem. Eine Sucht lässt man sich was kosten, ohne darüber nachzudenken, ob das Geld für etwas anderes sinnvoller ausgegeben werden könnte.

Autofahren ist ein irrationales Verhalten, für das oft Begründungen angeführt werden, die im Einzelfall zutreffen, meistens aber nicht. Die meisten Menschen müssen in ihrem Auto nichts Schweres transportieren, keine gehbehinderte Mutter zum Arzt fahren. Die meisten sind auch keine Handwerker oder Pflegekräfte, die zum Dienst an anderen Menschen ausrücken. 80 Prozent der Autofahrten dienen nicht dem Lastentransport. Da wird im Auto nicht mehr transportiert als ein Mensch (plus 4 Sitze und einer Tonne Blech und Kraftstoff) und eine Tüte Lebensmittel. Diesen Menschen samt Tüte kann man genauso gut mit dem Fahrrad oder zu Fuß transportieren.

Kein Raum mehr für Fußgänger
Das einzige, was die Zahl der Autos in einem Wohngebiet oder in der Innenstadt reduziert ist der Entzug von Parkplätzen. Das hat sich in allen Städten gezeigt, die ernsthaft eine Verkehrswende versuchen. Menschen müssen und können lernen, dass das Auto nicht in der Nähe stehen und nicht jederzeit verfügbar sein muss. Dann steigen sie für kurze Strecken aufs Fahrrad oder gehen zu Fuß und steigen in eine Stadtbahn. Und sind hinterher viel zufriedener.

Parkplätze müssen nicht nur weniger werden, sondern auch teurer. (Zu den Kosten von Parkplätzen erscheint ein Post am 13.1.2018.) Autobesitzer zahlen bei Weitem nicht das, was Autostraßen, Ampelanlagen und Parkplätze die Stadt kosten. Schon gar nicht die gesundheitlichen Schäden und die Kosen der sozialen Isolation, für die unsere Autos verantwortlich wir mit unseren Autos in den Köpfen verantwortlich sind.

Und es ist ja nicht so, dass wir alle uns nicht immer wieder aufs Wesentliche besinnen und in ruhigen Gesprächen darauf kommen, dass wir uns Wohnstraßen und Innenstädte wünschen, wo Kinder spielen, Fußgänger sich frei bewegen können, wo es ruhiger zugeht, wo man sich trifft und gute und saubere Luft atmet. Wir sehen uns nach Vogelgezwitscher, Brunnengeplätscher und Bewegungsfreiheit. Wir möchten unsere Kinder springen lassen, nicht ständig auf Autos achten, nicht ständig Motoren hören. Wir möchten wieder in einer Gemeinschaft leben, Nachbarn treffen, nicht mehr so allein sein.

Knohflacher dazu: "Das heißt, hier zeigt sich, dass die Gemeinschaft einfach intelligenter ist als der – ich würde sagen – in den Exzess getriebenen Individualismus, der beim Autofahren entsteht. Man ist ja als Autofahrer im Prinzip immer gegen andere aggressiv oder man ist asozial, genau genommen. Keinem Menschen würde es einfallen, dass er andere mit karzinogenen Gasen besprüht. Aber im Auto passiert das, oder andere bedroht oder Kinder bedroht ..."

Er empfiehlt, die Autofahrer aus ihrer "infantilen Phase, in der sie sich noch befinden" heraus zu holen. Das bedeutet, aufhören, ihnen alle Wünsche zu erfüllen, sie in die Verantwortung für sich, unsere Kinder, unsere Städte und unsere Welt zu nehmen, das heißt, sie wenigstens an den Kosten zu beteiligen, die das Auto unsere Gesellschaft auferlegt. Das ist in der Bundespolitik noch viel schwieriger als auf Landes- und Stadtebene, denn das Auto in den Köpfen vieler Politiker erlaubt ja keine andere Politik als eine fürs Auto.

In allen Städten und Stadteilen, wo man für eine gewisse Zeit oder für immer die Autos verbannt hat, zeigt sich, dass Menschen wieder auf die Straße kommen, dass sie sich treffen und etwas miteinander machen. Alte sind nicht mehr so allein, Kinder können spielen. Und in den Geschäften brummt der Handel, "weil", so Knoflacher, "pro Quadratmeter Fläche kann ich wesentlich mehr Geldbörsen in Fußgängern unterbringen als in geparkten Autos. Da ist ja meist überhaupt kein Geld drin."

Oder anders gesagt: Autos kaufen nicht ein.

Link: Eine spanische Stadt wird Fahrradstadt
Link: Handel blüht auf - Times Square für Autos gesperrt
Link: EcoMobility - einen Monat autofrei
04 Jan 05:21

Thinking about social logins and identity on the web

by Doug Belshaw

Context

Yesterday was my first day as a Moodle employee. From this point onwards, I’m spending four days every week leading Project MoodleNet. This is described by Martin Dougiamas, founder and CEO as”a new open social media platform for educators, focused on professional development and open content.” As ever, I’ll be using this blog for my personal thoughts and musings, while there’s another blog for more official updates about the project.

Why I’m thinking about this

The following will be offered as core functionality through Project MoodleNet:

  1. Identity and reputation
  2. Messaging
  3. News feed
  4. Access to openly-licensed resources
  5. Crowdfunding

The above is listed in the order in which I’d like to tackle them. As you can see, I’ve put identity and reputation first. That’s because I believe projects should begin by attempting the most challenging things, and also because I don’t want us to have to retro-fit something so fundamental after developing everything else.

The growth of social sign-in on the web

These days, it’s become normal for users to be offered a ‘social’ way to sign into almost every service on the web. Some sites, such as Airbnb, go so far as to offer those who use social sign-in for their site additional privileges compared to those who use the traditional username / password combination.

As outlined on this Wikipedia page, for those running web services there are many benefits to allowing users to sign-in using a social network account. These include targeting content, reducing the use of fake email addresses, and increasing the speed of the sign-up process.

For users, the main benefits are:

  • Not having to remember multiple usernames and passwords
  • Increasing the speed of sign-up and login to their accounts
  • Quick and easy sharing of content to social networks

Although it is straightforward to find data on the percentage of users choosing to use various social network accounts to login to web services, it can be difficult to ascertain their wider practices around security. For example, how many people use browser-based password managers? Does that change by demographic? What about password managers not based on the browser, such as the ones built into the iOS and Android mobile operating systems, cloud-based services such as LastPass and Dashlane, and deterministic password generators (such as the one I use)?

Do people actually use social sign-in?

A few years ago, social sharing buttons appeared all over the web. Website visitors were encouraged to click on the relevant button to share the content they were accessing with their network. It turns out that, despite the proliferation of buttons, most people actually don’t use them, instead doing it their own way.

We know that social sign-in is different. People do use it. In fact, some reports put the number at over 90% of users preferring social sign-in to the traditional username / password combination. The most popular of these by far is Facebook, followed by Google, Yahoo, Twitter, and LinkedIn.

Social login graph

Data via Gigya

The situation is similar to using contactless card payments in shops versus using cash. Using contactless every transaction you make can be tracked by your bank, just as every social login you make can be tracked by a social network. There are benefits and drawbacks to both options.

When I choose to use social sign-in

Personally, I don’t use Facebook and have written about the pernicious effect I believe it to have on society. As a consequence, I don’t (and can’t) use Facebook for social sign-in. There are some web services, though, where I do choose to sign in using a third-party account. While I wouldn’t base decisions about Project MoodleNet on my own habits, given the picture is quite complicated, it might be worth explaining the occasions when I sign-in via Google, Twitter, and LinkedIn:

  1. When I have no other choice — I find Nuzzel an extremely useful tool for surfacing news from my networks. If I didn’t sign in using Twitter and LinkedIn, then I wouldn’t be able to access the service (and even if I did, it would have no value)
  2. When my data is being shared anyway — unless you completely remove Google services from your Android device, it’s almost impossible not to share your contacts with them. As a result, I sign into Full Contact using my Google account.
  3. When I want to buy something — I sign into The Guardian app on my Android device using my Google account as I bought a subscription through the Google Play store.

I also sign-in to my Moodle account using Google. Why? Because Moodle staff use Google Apps and it’s a professional, rather than personal, account.

Moodle sign-in page

The Moodle context

I asked David Mudrák if he’d be kind enough to generate a report on social sign-ins for moodle.org. He gave me data from 15th May 2017, which was the date that the ability to use OAuth2 to sign-in using a social account was added with Moodle 3.3. Since then, there have been five times more logins via Google than via Facebook. Those users creating new accounts since May show a preference towards the traditional username / password combination, with two-thirds of users choosing this option. Signing-in via social and traditional methods are not mutually exclusive, of course, and users can register using one option and subsequently switch to an alternative.

Project MoodleNet is separate from, but very closely connected to, moodle.org. As a result, it would complicate matters to have a separate login for Project MoodleNet, and provide little benefit to users. Instead, we should be aiming to bolster the value of having a Moodle account, which would no longer be used just for activity on moodle.org, but more widely across the Moodle ecosystem.

Learning from WordPress

Ideally, as someone who advocates for increased online privacy and security, I’d prefer it if most users signed into their Moodle account directly using a username and password combination. However, given that not using social sign-in could cause security issues for users who may otherwise re-use passwords across services, I suggest Project MoodleNet adopts the approach taken by WordPress.

Moodle and WordPress are similar projects in many ways. Both are open source and adhere to the GPL, allowing anyone to host their own version of the software without restriction or constraint. Just as anyone can use Moodle without having an account on moodle.org, so those using WordPress to power their blog or website don’t have to sign up for a wordpress.com account.

Where I think Moodle can learn from WordPress is in the powerful and intuitive way that individual sites can be linked to wordpress.com accounts to access the value-added services provided by JetPack. Enabling this allows users to sign-in to their blog or website using their wordpress.com account or with their username / password combination.

Sign-in using WordPress account

This is handy for users, who are given a choice. If they click on the ‘Log in with WordPress.com’ option, they then have further options in terms of authentication. They can enter their WordPress.com credentials (username / password), authenticate using their Google account, or be emailed a single-use login link.

Log in to WordPress.com account

This approach strikes a balance between choice and convenience, while highlighting the benefit of having a WordPress account and identity.

One way of thinking about Project MoodleNet is as JetPack for Moodle. It will provide different functionality, but the idea is the same.

Summary

So, to recap:

  1. Most users on the web seem to prefer social sign-in options. Those with an account moodle.org tend to prefer username / password, but this might be skewed towards more technical users. More research and testing is necessary.
  2. Social sign-in means user data is shared with third parties and potentially allows users to be tracked across the web. Therefore, social logins should not be the only option to sign-in to Project MoodleNet.
  3. Project MoodleNet should bolster Moodle’s existing login system in a similar way to JetPack providing extra value for WordPress users.

Additional reading

This subject can be a fascinating rabbithole. While I didn’t link to the following articles in the above, they have informed my thinking:


Photo by WOCinTech Chat used under a Creative Commons Attribution license

04 Jan 05:21

@brainpicker

@brainpicker: “Be a good steward of your gifts. Protect your time. Feed your inner life....
04 Jan 05:21

Public Art — 000 Days

by Ken Ohrn

New, to me at least, in Stanley Park. The piece is unsigned, but looks like THIS prolific artist.


04 Jan 05:21

The Best Home Security System

by Jack Smith
The Best Home Security System

After spending more than 45 hours researching and two months testing 12 home security systems, we found SimpliSafe to be the best self-installed option for people who want home monitoring. SimpliSafe gives you the benefits of 24/7 monitoring without locking you into a long-term contract, and it’s affordable, reliable, and easy to install and use.

04 Jan 05:21

Don’t Try to Change (Yet), and Five More Fitness Tracker Tricks

by lbutcher
As Wirecutter’s resident expert on fitness trackers, I get a lot of questions about these gadgets. (We give the answer to everyone’s first question—“Which one is the best?”—in our guide, The Best Fitness Trackers.) But as a personal trainer, the question I most enjoy answering is “How should I use this thing to make lasting, healthy changes—not just the fitness-fad kind that evaporate when the novelty of a new device wears off?” Here are my top six tips for fitness-tracking success.
04 Jan 05:21

The Best Knife Set

by Jack Smith
The Best Knife Set
After more than 60 hours of researching knife sets and testing 11—chopping, slicing, and peeling over 20 pounds of fruits and vegetables—we’re confident that you won’t beat the Wüsthof Classic Ikon 7-Piece Walnut Block Knife Set.
04 Jan 05:21

The Best Blender

by lbutcher
The Best Blender
Our favorite blenders, from left to right: the Cleanblend, Oster Versa, Vitamix 5200, and KitchenAid 5-Speed.

After researching dozens of blenders, talking with five experts, and testing 22 models over the course of five years, we’re confident that the Vitamix 5200 is the best blender for tackling the widest variety of tasks. Yes, it’s pricey, but we think it’s worth the investment for its powerful motor, nuanced controls, and long-lasting reliability. It blends through even the thickest smoothies without straining, it purees hot soups without splashing, and it will hold up to years of frequent use.

04 Jan 05:21

The Best Cheap MP3 Player

by James Austin
The Best Cheap MP3 Player
After researching 39 different MP3 players and testing seven top-rated options, we found that the SanDisk Clip Sport Plus is the best MP3 player under $100 for most people. Its built-in clip, water resistance, and Bluetooth support make it the perfect gym buddy for use with wireless workout headphones.
04 Jan 05:21

Twitter Favorites: [Lesley_NOPE] Fam: I wanna do Jays Twitter at Square One Playdium batting cages. Tentative time is Sat Jan 13 1-3pm. If we have e… https://t.co/sEeUl4rtb6

New Year’s Sleeve @Lesley_NOPE
Fam: I wanna do Jays Twitter at Square One Playdium batting cages. Tentative time is Sat Jan 13 1-3pm. If we have e… twitter.com/i/web/status/9…
04 Jan 05:21

Was kommt nach dem MacBook Air?

by Volker Weber

HP-EliteBook-x360-Tablet-with-Pen-768x432

Ich habe neulich, zwischen Surface Pro 4 und Surface Pro, ein paar Wochen mit meinem MacBook Pro gearbeitet. Ich mag es immer noch sehr. Aber eins hat mich unglaublich gestört: man kann nichts auf dem Bildschirm anfassen. Wenn man einmal Multitouch kennt, dann ist die Verwendung des Trackpads für Zoomgesten so praktisch wie ... also, man kann eine Unterhose auch mit der Kneifzange anziehen.

Was für mich schwerer wiegt, ist die neue Art Wissen zu verarbeiten. Viele Studenten, die sich früher ein MacBook Air gekauft hätten, greifen heute zu einem Windows Convertible. Das ist meistens kein Surface, sondern eher ein klassisches Notebook etwa aus den verschiedenen HP x360 Baureihen, die es deutlich günstiger gibt. Dort kann man mit dem Stift Notizen machen und PDFs annotieren. Das kann ein iPad Pro zwar auch, aber da muss man andere Kompromisse machen. Die meisten jungen Leute sind nicht reich genug für Smartphone plus MacBook plus iPad Pro.

Wie wäre es mit einem neuen iBook? Notebook mit Touch, Stift, Tastatur und iOS. Nur ein Touchpad geht nicht, weil iOS keinen Mauszeiger hat.

04 Jan 05:21

Record. Transcribe. Sync.

by Volker Weber

392x696bb 392x696bb

In der Weihnachtszeit bin ich durch Rafael Zeier auf Just Press Record aufmerksam geworden. Das ist ein Diktiergerät, das auf Knopfdruck aufzeichet, die Aufzeichnung als Text transkribiert und gut durchsuchbar nach Datum ablegt. Das funktioniert auf Apple Watch, iPhone, iPad und Mac. Das Programm kann über iCloud synchronisieren und stellt damit alle Aufnahmen sowohl als Audio als auch Text auf allen eigenen Geräten zur Verfügung.

Im iTunes Store für Apple Watch, iPhone und iPad, im Mac App Store für alle Macs.

04 Jan 05:21

We're Back From Break, Plus an Update on Lilac Polyvalents

by noreply@blogger.com (VeloOrange)
by Igor

And we're back. Happy 2018! What are some bike goals you hope to accomplish this year? I've always been more of a tourist and day-tripper, but I'm looking forward to doing a few brevets this year.

In other news, fresh off the presses: Due to popular demand, Lilac Polyvalents are now available for pre-sale as a limited edition offering.

We wish you all a happy, healthy, and prosperous year for you and your families!
03 Jan 20:48

Pour one out: Microsoft’s motion-sensing Kinect is now totally dead

by Patrick O'Rourke
Kinect

It looks like you really can kill what was never alive, at least as far as the Kinect is concerned.

Microsoft has finally, completely discontinued the second version of its ill-fated Xbox One motion-sensing Xbox camera, the Kinect. While the tech giant revealed that it no longer has plans to manufacture the Kinect a few weeks ago, the company has now confirmed that the adapter required to connect the console to the Xbox One S, Xbox One X or other Windows devices, is no longer available.

“After careful consideration, we decided to stop manufacturing the Xbox Kinect Adapter to focus attention on launching new, higher fan-requested gaming accessories across Xbox One and Windows 10,” said a Microsoft spokesperson in a statement to Polygon.

The first version of the Kinect released part way through the Xbox 360’s life cycle, and despite technical limitation, like the fact that the motion-sensing device needed to be used in a well-lit area, the accessory was a resounding success and went on to sell millions of units. When the Xbox One first launched, Microsoft made the controversial decision to make the Kinect 2.0 a mandatory part of the console’s launch package, driving the system’s price up $100 over the competing PlayStation 4.

The motion-sensing device eventually become optional, resulting in a Xbox One price drop. The fact that the accessory was now not included with every console, meant that Kinect no longer had an install base worth developing games for.

I was a big fan of Microsoft’s Kinect and really enjoyed games like Kinect Sports 2.0 and Harmonix’s Disney Fantasia: Music Evolved. There was also a time when I used Kinect voice commands to control my entire home theatre system, though admittedly I haven’t done that in years at this point.

I even went so far as to purchase a USB 3.0 hub, in order to have enough USB ports to plug the Kinect into the Xbox One X.

That said, Kinect is totally dead, though I’ll likely leave mine connected for nostalgia’s sake — at least for the time being.

Source: Polygon

The post Pour one out: Microsoft’s motion-sensing Kinect is now totally dead appeared first on MobileSyrup.