Shared posts

19 Jul 17:00

Velo Lumino now sells SP dynamo hubs!

by somervillebikes

Up to now, Velo Lumino has been selling only components and parts that we design and fabricate ourselves (ourselves being Anton and Tom for the TMAT switch, and Anton for the AT fender taillight, AT headlight mount and AT fender reinforcement plate). But our ultimate goal is to offer a complete line of top-flight bicycle lighting and integration components. Some components are too complex for a two guys to design and manufacture– such as generator hubs, which are the heart of a truly integrated lighting system.

To that end, we’ve become a retailer of the excellent Shutter Precision dynamo hubs. SP is relatively new to the dynamo hub scene, but have gotten excellent reviews and have been making quite a splash in the dynamo community by raising the bar for efficiency, weight, size and reliability. Since before becoming a retailer of SP hubs, I’ve owned two, and I’ve been extremely satisfied with them (granted, I’ve had them less than a year). One is on my daily rider, which lives outside and has been ridden throughout the winter.

SP hubs come in a wide range of models, spoke counts, and colors, and their naming can be confusing. I demystify the naming convention on the Velo Lumino product page, and explain how to order the right hub for your needs.

–Anton

0000003168

31 Mar 13:58

The Evolution of a Data Scientist

Editor’s note: This post is a guest post by Andrew Jaffe

“How do you get to Carnegie Hall? Practice, practice, practice.” (“The Wit Parade” by E.E. Kenyon on March 13, 1955)

”..an extraordinarily consistent answer in an incredible number of fields … you need to have practiced, to have apprenticed, for 10,000 hours before you get good.” (Malcolm Gladwell, on Outliers)

I have been a data scientist for the last seven or eight years, probably before “data science” existed as a field. I work almost exclusively in the R statistical environment which I first toyed with as a sophomore in college, which ramped up through graduate school. I write all of my code in Notepad++ and make all of my plots with base R graphics, over newer and probably easier approaches, like R Studio, ggplot2, and R Markdown. Every so often, someone will email asking for code used in papers for analysis or plots, and I dig through old folders to track it down. Every time this happens, I come to two realizations: 1) I used to write fairly inefficient and not-so-great code as an early PhD student, and 2) I write a lot of R code.

I think there are some pretty good ways of measuring success and growth as a data scientist – you can count software packages and their user-bases, projects and papers, citations, grants, and promotions. But I wanted to calculate one more metric to add to the list – how much R code have I written in the last 8 years? I have been using the Joint High Performance Computing Exchange (JHPCE) at Johns Hopkins University since I started graduate school, so all of my R code was pretty much all in one place. I therefore decided to spend my Friday night drinking some Guinness and chronicling my journey using R and evolution as a data scientist.

I found all of the .R files across my four main directories on the computing cluster (after copying over my local scripts), and then removed files that came with packages, that belonged to other users, and that resulted from poorly designed simulation and permutation analyses (perm1.R,…,perm100.R) before I learned how to use array jobs, and then extracted the creation date, last modified date, file size, and line count for each R script. Based on this analysis, I have written 3257 R scripts across 13.4 megabytes and 432,753 lines of code (including whitespace and comments) since February 22, 2009.

I found that my R coding output has generally increased over time when tabulated by month (number of scripts: p=6.3e-7, size of files: p=3.5x10-9, and number of lines: p=5.0e-9). These metrics of coding – number, size, and lines - also suggest that, on average, I wrote the most code during my PhD (p-value range: 1.7e-4-1.8e-7). Interestingly, the changes in output over time surprisingly consistent across the three phases of my academic career: PhD, postdoc, and faculty (see Figure 1) – you can see the initial dropoff in production during the first one or two months as I transitioned to a postdoc at the Lieber Institute for Brain Development after finishing my PhD. My output rate has dropped slightly as a faculty member as I started working with doctoral students who took over the analyses of some projects (month-by-output interaction p-value: 5.3e-4, 0.002, and 0.03, respectively, for number, size, and lines). The mean coding output – on average, how much code it takes for a single analysis – were also increased over time and slightly decreased at LIBD, although to lesser extents (all p-values were between 0.01-0.05). I was actually surprised that coding output increased – rather than decreased – over time, as any gains in coding efficiency were probably canceled out my often times more modular analyses at LIBD.

Figure 1: Coding output over time. Vertical bars separate my PhD, postdoc, and faculty jobs

I also looked at coding output by hour of the day to better characterize my working habits – the output per hour is shown stratified by the two eras each about ~3 years (Figure 2). As expected, I never really work much in the morning – very little work get done before 8AM – and little has changed since a second year PhD student. As a faculty member, I have the highest output between 9AM-3PM. The trough between 4PM and 7PM likely corresponds to walking the dog we got three years ago, working out, and cooking (and eating) dinner. The output then increases steadily from 8PM-12AM, where I can work largely uninterrupted from meetings and people dropping by my office, with occasional days (or nights) working until 1AM.

Figure 2: Coding output by hour of day. X-axis starts at 5AM to divide the day into a more temporal order.

Lastly, I examined R coding output by day of the week. As expected, the lowest output occurred over the weekend, especially on Saturdays. Interestingly, I tended to increase output later in the work week as a faculty member, and also work a little more on Sundays and Mondays, compared to a PhD student.

Figure 3: Coding output by day of week.

Looking at the code itself, of the 432,753 lines, 84,343 were newlines (19.5%), 66,900 were lines that were exclusively comments (15.5%), and an additional 6,994 lines contained comments following R code (1.6%). Some of my most used syntax and symbols, as line counts containing at least one symbol, were pretty much as expected (dropping commas and requiring whitespace between characters):

Code Count Code Count
= 175604 == 5542
# 48763 < 5039
<- 16492 for(i 5012
{ 11879 & 4803
} 11612 the 4734
in 10587 function(x) 4591
## 8508 ### 4105
~ 6948 - 4034
> 5621 %in% 3896

My code is available on GitHub: https://github.com/andrewejaffe/how-many-lines (after removing file paths and names, as many of the projects are currently unpublished and many files are placed in folders named by collaborator), so feel free to give it a try and see how much R code you’ve written over your career. While there are probably a lot more things to play around with and explore, this was about all the time I could commit to this, given other responsibilities (I’m not on sabbatical like Jeff Leek…). All in all, this was a pretty fun experience and largely reflected, with data, how my R skills and experience have progressed over the years.

21 Mar 22:40

"It’s Betweenness That Matters, Not Your Eigenvalue: The Dark Matter Of Influence" in Socialogy, Not Sociology

by Stowe Boyd

The deep structure of being truly connected: being a conduit makes you a vector.

Continue reading on Medium »

21 Mar 22:39

Saturday Morning Breakfast Cereal - What's Sex?

by admin@smbc-comics.com
mkalus shared this story from Saturday Morning Breakfast Cereal.

Hovertext: Also, some of your friends will be more like a rundown playground than Disneyland.


New comic!
Today's News:
21 Mar 22:39

Google Maps on Android adds colourful doodles for custom locations

by Igor Bonifacic

Google has added a small but cool new feature to the Android version of its Maps app.

Users can now add a colourful sticker to their home and work locations, as well as any other spot of personal significance. Currently, there are 24 sketches to choose from, including a three story apartment building and barn, and a couple of more fanciful ones like a dragon and pirate ship. Once the user gets Maps to associate a sticker with a location, they’ll see the sticker become a permanent fixture on the map.

The blog post accompanying the announcement doesn’t mention when these doodles will make their way to the iOS version of Maps.

SourceGoogle
21 Mar 22:39

The Politics of Scale: David and Goliath

by Rob Shields

Is that Salmon versus LNG or LNG versus Salmon?

Like David and Goliath, there is a mismatch between the scale at which environmental impacts are assessed under Canadian legislation and the geographical scale of environmental, human rights and economic risks. The Provincial Government of British Columbia is promoting the development of liquified natural gas (LNG) shipping terminal at the mouth of the Skeena River estuary by Petronas.   Based on both cultural attitudes to the environment and scientific research, the proposal and and offer of $1.5B compensation has been rejected by the Lax-Kw’alaams First Nation on whose territory the LNG terminal would be located.  Effectively this would be a form of expropriation approved by the Provincial government and is reminiscent of 19th century scrip practices in Canada, by which indigenous individuals were offered rations and money to extinguish their aboriginal rights to land and traditional hunting and gathering.  An article published in Science (7 Aug 2015) by Jonathan Moore and others (Moore et al 2015) notes that this estuary is the site of the second-largest salmon-production in Canada, largely by First Nation communities. ‘Although terminal proponents and government have recognized interests of First Nations from the estuary during environmental assessment, they have ignored interests of upriver First Nations who also harvest salmon’ (see Stantec Consulting Ltd. Pacific Northwest LNG Environmental Assessment Certificate Application (Burnaby BC 2014) cited in Moore et al 2015).

Lax Kw’alaams in title action on Lelu Island
LNGWorldNews.com: Lax Kw’alaams in title action on Lelu Island

‘Identifying the proper spatial scale for environmental decision-making is a fundamental challenge for environmental policy and ethics. Whether it is migratory animals like salmon that transmit impacts, hydro-electric dams that deprive downstream farming communities of water (see Glenn et al 1995 in Biology 10.1175), or carbon emissions from industrialized countries that raise ocean levels and threaten low-lying islands (see Barnett et al 2003 in Climate Change 61, 321), decisions can impact distant ecosystems and people. Science can and should inform the scale at which environmental decision-makers weigh risks to the environment and human rights against potential economic benefits’ (Moore et al 2015)

-Rob Shields (University of Alberta)

After Moore et al 2015 Selling First Nations down the river. Science (7 Aug) Online: http://science.sciencemag.org/content/349/6248/596.1 accessed 20 Mar. 2016.

See Lukacs, Martin 2016 By rejecting $1bn for a pipeline, this First Nation has put Trudeau’s climate plan on trial Guardian (20 Mar.) Online: http://www.theguardian.com/environment/true-north/2016/mar/20/by-rejecting-1-billion-for-a-pipeline-a-first-nation-has-put-justin-trudeaus-climate-plan-on-trial accessed 20 Mar. 2016.

21 Mar 17:35

Chamath on Growing Facebook

by Matt

This is a cool talk from Chamath Palihapitiya from a few years ago in 2013 which makes it extra interesting. It seems like a smaller audience so it’s fun and unguarded. (Though a great thing about Chamath is he’s incredibly candid in every context.) You can’t see the slides in the video, and there’s not much to them, but here they are:

Here are the values he talks about at the end:

  1. Very high IQ.
  2. Strong sense of purpose.
  3. Relentless focus on success.
  4. Aggressive and competitive.
  5. High quality bar bordering on perfectionism.
  6. Likes changing and disrupting things.
  7. New ideas on how to do things better.
  8. High integrity.
  9. Surrounds themselves with good people.
  10. Cares about building real value over perception.
21 Mar 17:35

(Almost) Obtain Raw Mail Message Source

by Rui Carmo

Let’s say you need to get the raw RFC 2822 mail message source out of Mail.app and into an Automator script. The accepted way to do this is:

on run {input, parameters}
set theSource to {}
tell application "Mail"
repeat with aMessage in input
set end of theSource to aMessage's source & return
end repeat
end tell
return theSource as text
end run

Problems with this approach

However, this fails because Mail.app does not provide the full message source over the AppleScript bridge, which is buggier than a bait store these days.

I get reasonably accurate source until the end of the first MIME part (which is usually the text one), and then the output only lists the attachments but does not include them.

If it did, you’d be able to save all attachments with this Python script:

import os, os.path, sys, email, mimetypes
msg = email.message_from_file(sys.stdin)
counter = 1
for part in msg.walk():
# multipart/* are just containers
if part.get_content_maintype() == 'multipart':
continue
filename = part.get_filename()
if not filename:
ext = mimetypes.guess_extension(part.get_content_type())
if not ext:
# Use a generic bag-of-bits extension
ext = '.bin'
filename = 'part-%03d%s' % (counter, ext)
counter += 1
target = os.path.join(os.environ['HOME'],'Downloads', filename)
copy = 1
prefix = "Copy %d of "
while os.path.exists(target):
target = os.path.join(os.environ['HOME'],'Downloads', (prefix % copy) + filename)
copy += 1
fp = open(target, 'wb')
data = part.get_payload(decode=True)
fp.write(part.get_payload(decode=True))
fp.close()

Workaround

Drag messages to the Finder and build an Automator script that uses this Python block instead, taking as input the result of Ask for Finder Items:

import os, os.path, sys, email, mimetypes
for filename in sys.stdin:
if ".eml" not in filename:
break
msg = email.message_from_file(open(filename.strip()))
counter = 1
for part in msg.walk():
# multipart/* are just containers
print part.get_content_type()
if part.get_content_maintype() == 'multipart':
continue
# Applications should really sanitize the given filename so that an
# email message can't be used to overwrite important files
filename = part.get_filename()
if not filename:
ext = mimetypes.guess_extension(part.get_content_type())
if not ext:
# Use a generic bag-of-bits extension
ext = '.bin'
filename = 'part-%03d%s' % (counter, ext)
counter += 1
target = os.path.join(os.environ['HOME'],'Downloads', filename)
copy = 1
prefix = "Copy %d of "
while os.path.exists(target):
target = os.path.join(os.environ['HOME'],'Downloads', (prefix % copy) + filename)
copy += 1
fp = open(target, 'wb')
data = part.get_payload(decode=True)
print len(data)
fp.write(part.get_payload(decode=True))
fp.close()

Tao of Mac Icon "(Almost) Obtain Raw Mail Message Source" was written by Rui Carmo for The Tao of Mac and was originally posted on Sunday, Mar 20th 2016. Except as noted, it's ©2015 Rui Carmo and licensed for reuse under CC BY-NC-ND 3.0.

As usual, please consider donating towards hosting and bandwidth costs.

21 Mar 17:34

Setting Up Anaconda Python WSGI Apps On IIS

by Rui Carmo

After unconsciously avoiding IIS 8.5 during nearly six months at Microsoft, I had to deploy a few simple Python apps on Windows Server. Nothing against it, really, but I’m much more focused on microservices these days, and as such the only Windows web server I play with is Kestrel, given that it’s the future for ASP.NET.

But since I had to use IIS, I went about it in my usual pragmatic fashion — i.e., made absolutely sure it would be as painless as possible in the future. In the process, I also partially duplicated the setup used by Azure App Service Web Apps, since I wanted to be able to deploy on both with minimal changes.

My Setup

Most of the work I do on Azure these days involves Big Data or data science of some sort (usually with a machine learning twist), and as such I tend to use the Data Science Virtual Machine image.

That image has a bunch of essential goodies installed, beginning with Continuum Analytics’ Anaconda Python distribution, the latest R Server, and other staple Microsoft tools like Visual Studio and SQL Server Express — in short, all you need to start munging data at your leisure, including Jupyter and Power BI for trying out scripts interactively and making sense of data during the whole project.

I’ve taken to installing the R kernel into Jupyter, so I can do just about everything using notebooks and share the results easily — but that’s a topic for another post.

The Problem

I wanted to expose a number of REST endpoints to publish data from a model I’m developing, and wanted to test them locally using the Anaconda runtime before bundling up the lot and pushing them out to an Azure Web App.

I’d rather use Anaconda because it’s already installed, and also because I’ve had mixed results with the Python for Windows binaries from python.org over the years — nothing much, really, but installing another interpreter seemed like an unnecessary hassle.

Azure App Service leverages the web.config file and a custom WSGI handler to make it easy to set up Python apps with minimal fuss (including activating a virtualenv to allow for custom packages), but I wanted to have as close a setup as possible using Anaconda’s Python interpreter and packages.

Execution Environment

Here’s how things work in this setup, which emulates what Azure does for Python apps:

  • web.config sets up IIS to use wfastcgi as a FastCGI request handler (with a rewrite rule to make everything go through FastCGI) and defines WSGI_HANDLER, PYTHONPATH and a number of other environment variables, including WSGI_ALT_VIRTUALENV_HANDLER
  • wfastcgi then loads and looks up WSGI_HANDLER, which points to ptvs_virtualenv_proxy.py
  • That proxy sets up WSGI logging, boots your virtualenv and then loads up WSGI_ALT_VIRTUALENV_HANDLER, which is actually your app

In this case, there’s no need for the runtime.txt file that Azure uses to determine the runtime, but it’s worth pointing out it exists.

To make this work locally, all you need to do is install wfastcgi inside Anaconda and pick your WSGI framework (I went with Bottle, which is what I use for most stuff, but using Django instead is child’s play).

There’s a hidden kink, though, which is that I had to install the rewrite module manually. That had me stumped for a while, since I stopped using IIS since 6.0(ish).

The Solution

To set everything up from scratch on a fresh machine:

  • Set up IIS as usual, enabling CGI (to get the FastCGI adapter)
  • Install the rewrite module
  • Enable web.config overrides (I edited %windir%\System32\inetsrv\config\applicationHost.config “the hard way” using Notepad with admin privileges, but you can use the appcmd.exe CLI tool)
  • Drop my web.config, myapp.py and a tweaked version of pvts_virtualenv_proxy.py into the default website (I actually nuked the default while experimenting, but I’m already running two different sites on the same box with this setup)
  • Change permissions on the log folder to enable SERVERNAME\IIS_IUSRS to write to it
  • Run pip install bottle wfastcgi
  • Run wfastcgi-enable as an administrator

…and bingo, the little Bottle app should just work.

Configuration Files

Here’s the web.config file. Note the logging and WSGI handler paths:

<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="WSGI_HANDLER" value="ptvs_virtualenv_proxy.handler"/>
<!-- Make sure HOSTNAME\IIS_IUSRS can write to this -->
<add key="WSGI_LOG" value="c:\inetpub\logs\logfiles\w3svc1\wsgi.txt"/>
<add key="PYTHONPATH" value="c:\inetpub\pyroot\default" />
<add key="WSGI_ALT_VIRTUALENV_HANDLER" value="myapp.app" />
<add key="WSGI_ALT_VIRTUALENV_ACTIVATE_THIS" value="c:\inetpub\pyroot\default\env\Scripts\activate_this.py" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<handlers>
<add name="Python FastCGI"
path="handler.fcgi"
verb="*"
modules="FastCgiModule"
scriptProcessor="c:\Anaconda\python.exe|c:\Anaconda\Lib\site-packages\wfastcgi.pyc"
resourceType="Unspecified"
requireAccess="Script" />
</handlers>
<!-- 
 this requires the rewrite module, available at http://www.iis.net/learn/extensions/url-rewrite-module/using-the-url-rewrite-module
 and tweaking C:\Windows\System32\inetsrv\config\applicationHost.config 
 
 %windir%\system32\inetsrv\appcmd.exe unlock config -section:system.webServer/handlers
 %windir%\system32\inetsrv\appcmd.exe unlock config -section:system.webServer/modules
 -->
<rewrite>
<rules>
<rule name="Configure Python" stopProcessing="true">
<match url="(.*)" ignoreCase="false" />
<action type="Rewrite" url="handler.fcgi/{R:1}" appendQueryString="true" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>

Here’s the slightly tweaked ptvs_virtualenv_proxy.py. The virtualenv bit is commented out for this minimal setup, but it’s a simple matter to re-enable.

import os
import datetime
def log(txt):
"""Logs fatal errors to a log file if WSGI_LOG env var is defined"""
log_file = os.environ.get('WSGI_LOG')
if log_file:
f = file(log_file, 'a+')
try:
f.write(str(datetime.datetime.now()))
f.write(': ')
f.write(txt)
finally:
f.close()
def get_wsgi_handler(handler_name):
if not handler_name:
raise Exception('WSGI_ALT_VIRTUALENV_HANDLER env var must be set')
module, _, callable = handler_name.rpartition('.')
if not module:
raise Exception('WSGI_ALT_VIRTUALENV_HANDLER must be set to module_name.wsgi_handler, got %s' % handler_name)
if isinstance(callable, unicode):
callable = callable.encode('ascii')
if callable.endswith('()'):
callable = callable.rstrip('()')
handler = getattr(__import__(module, fromlist=[callable]), callable)()
else:
handler = getattr(__import__(module, fromlist=[callable]), callable)
if handler is None:
raise Exception('WSGI_ALT_VIRTUALENV_HANDLER "' + handler_name + '" was set to None')
return handler
# Uncomment when virtualenv is required
#activate_this = os.getenv('WSGI_ALT_VIRTUALENV_ACTIVATE_THIS')
#if activate_this is None:
# raise Exception('WSGI_ALT_VIRTUALENV_ACTIVATE_THIS is not set')
#log('doing activation' + '\n')
#execfile(activate_this, dict(__file__=activate_this))
log('getting handler ' + os.getenv('WSGI_ALT_VIRTUALENV_HANDLER') + '\n')
handler = get_wsgi_handler(os.getenv('WSGI_ALT_VIRTUALENV_HANDLER'))
log('got handler ' + repr(handler))

…and, finally, the Bottle app:

import bottle
from bottle import route
@route('/')
def index():
return "Hello World!"
app = bottle.app()

To deploy the same thing on Azure, all you’ll need to do is strip out the modified web.config and virtualenv proxy, set up a git remote to your Azure Web App, and push away.

I’ll make sure to update this when I build something complex enough to warrant a virtualenv — If you’ve been keeping track, I am rather picky about how I manage dependencies, regardless of platform, but I’m quite partial to the new wheel format, and that’s probably the most sensible way to deploy packages with native bindings on Windows.


Tao of Mac Icon "Setting Up Anaconda Python WSGI Apps On IIS" was written by Rui Carmo for The Tao of Mac and was originally posted on Sunday, Mar 20th 2016. Except as noted, it's ©2015 Rui Carmo and licensed for reuse under CC BY-NC-ND 3.0.

As usual, please consider donating towards hosting and bandwidth costs.

21 Mar 17:34

Week 57 chemo complete: Stanley Park in Black & White

by tyfn

Week 57 chemo complete: Stanley Park in Black & White

Yesterday it was a beautiful day, although a bit overcast. I decided it was a perfect opportunity to walk around Stanley Park from Lost Lagoon to Second Beach. It felt refreshing to walk around water, to see tall trees, and watch swans and geese enjoying themselves in their natural habitat.

This week’s self-portrait is black and white as I wanted to try something new. In addition, I enjoy taking multiplicity self-portraits (more than 1), as they are always fun to create.

I’m feeling happy and staying positive each day!

To recap: On Sunday, March 6th, I completed Cycle 14 Week 4. I have Multiple Myeloma and anemia, a rare blood cancer. It is incurable, but treatable. From February to November 2013, I received Velcade chemo through weekly in-hospital injections as an outpatient. Since February 9th 2015, I have been on Pomalyst and dexamethasone chemo treatment (Pom/dex).

Weekly chemo-inspired self-portraits can be viewed in my flickr album.

Sun sets on Granville IslandSunset on Granville Island

The post Week 57 chemo complete: Stanley Park in Black & White appeared first on Fade to Play.

21 Mar 17:34

LG G5 Global Sales Begin from March 31; Pre-Orders Commence at Best Buy in the US

by Rajesh Pandey
LG has announced that its flagship handset for at least the first half of 2016, the LG G5, will go on sale globally from March 31. Depending on the country, the company will also be bundling different accessories with the phone. Continue reading →
21 Mar 17:34

Twitter Favorites: [GlitchLogos] expert spoonful. unbeatable suit™ https://t.co/8iornAN8hc

Glitch Logos @GlitchLogos
expert spoonful. unbeatable suit™ pic.twitter.com/8iornAN8hc
21 Mar 17:34

Twitter Favorites: [AlexSteffen] Uber, but for smashing NIMBY stranglehold over local plans & restoring civic foresight + intergenerational inclusivity in urban democracy.

AlexSteffen @AlexSteffen
Uber, but for smashing NIMBY stranglehold over local plans & restoring civic foresight + intergenerational inclusivity in urban democracy.
21 Mar 17:31

Twitter Favorites: [counti8] These wouls be so great at Jericho beach in Vancouver, surrounded by invasive rabbits. https://t.co/x59LRkMzn2

Karen Quinn Fung 馮皓珍 @counti8
These wouls be so great at Jericho beach in Vancouver, surrounded by invasive rabbits. twitter.com/sillygwailo/st…
21 Mar 17:30

Get 42 Talks From Top Community Experts For Free This Week

by Richard Millington

Want to see 42 of the top experts in the online community space but can’t afford to attend an event?

Salesforce have sponsored a free VIP video pass to everyone that signs up this week.

This package includes talks from Google, FitBit, Moz, Airbnb, HuffingtonPost, Discourse, Community Roundtable, GitHub, Wikipedia, Lithium, Pinterest, ourselves and top experts in the fields of psychology, speechwriting, and habit-formation.

Usually it sells for $300, this week it’s absolutely free.

If you want to get 42+ expert talks for free, click here.

(offer expires midnight Friday UK time).

21 Mar 17:30

Network economy – Unicorns and donkeys Pt. IV

by windsorr

Reply to this post

RFM AvatarSmall

 

 

 

 

 

Inability to reach scale is killing the delivery start-ups.

  • The highway of 2016 is being littered on a daily with the crashes of start-ups that have been so focused on obtaining huge network scale that they forgot the basics of economics.
  • Almost exclusively, it is the start-ups that involve pick-ups or drop-offs of an asset that have got into trouble.
  • This is because of the high level of fixed costs that these companies incur as a result of requiring lots of employees or contractors to do the picking-up or dropping off.
  • Both on demand valet parking and food delivery services have been in the spotlight recently with SpoonRocket closing and almost all of the on demand valet industry imploding (Luxe, Zirx, Valet Anywhere) or exiting the on-demand model (Caarbon and Vatler).
  • I think that the single biggest problem that all of these start-ups have faced is that labour is expensive in developed markets.
  • In the start-up phase it is very difficult for these companies to make any money because they do not have enough scale to efficiently use the resources that they have.
  • For example, delivery personnel and car valets have to be paid whether they are out doing deliveries or simply sitting around waiting for a job.
  • Most importantly though, the network effect has not kicked in for anyone and this has caused substantial problems.
  • A food delivery or valet company that is the go-to place can charge higher prices to diners and also demand higher commissions from the restaurants.
  • In order to get to this hallowed position I think that a networked business needs to have 60% market share or be double the size of its next competitor.
  • Even Munchery which is one of the best financed start-ups in this area is not immune as its Chief Customer Experience Officer has just resigned after only 5 months in the job.
  • Although, it would appear that there has been some personality clash, I suspect that he has also been prevented from developing the customer experience due to monetary pressures.
  • Even India, where personnel are much cheaper, has not been immune as there are so many of them all fighting each other that the network economics are unable to emerge.
  • What usually happens in these situations is that several will fall by the wayside and the strongest will buy up the rest and obtain the scale necessary to make the network economics work.
  • This is exactly what Zomato is doing with its strategic investments in Pickingo and Grab, but whether it has the financial clout and execution capability to consolidate the sector remains to be seen.
  • However, I am pretty sure that as a classifieds website for restaurants that has been around since 2008, it understands how critical the network effect is.
  • The end result is that the initial phase of hype and euphoria is properly over and the shake-out has already begun.
  • Only the strongest with the most money are likely to survive and will do so by buying up the competition or waiting for them to wither on their own.
  • For the rest, the unicorn disguises are already slipping revealing the true colours of the donkeys underneath.
21 Mar 17:28

Breakfast at Acquia

by Dries

Last week, Acquia's executive team prepared breakfast for the 300 or so employees in our Boston office. It was a lot of fun. A tradition that we started a few years ago to thank everyone for their efforts.

Acquia
Acquia
Acquia
Acquia
Acquia
21 Mar 17:28

Twitter: Zum 10. Geburtstag endlich Zahlen für Deutschland

by Heike Scholz

Twitter wird heute zehn Jahre alt. Wie die Zeit vergeht! Am 21. März 2006 verschickte der Mit-Gründer und heutige CEO Jack Dorsey die erste Twitter-Nachricht.

just setting up my twttr

— Jack (@jack) March 21, 2006

Die ersten Jahre waren zunächst von starkem Wachstum geprägt. Heute kämpft Twitter angesichts der Erfolge der Mitbewerber Instagram, Snapchat & Co. mit seinen Wachstumszahlen und bleibt hinter den Erwartungen zurück.

Deutschland-Chef Thomas de Buhr bleibt optimistisch: „“Während der gesamten Fußball-WM 2014 gab es etwa 3,3 Millionen Tweets dazu in Deutschland“. Nach Angaben von Twitter besuchen mehr als 12 Millionen Menschen jeden Monat die deutsche Twitter-Plattform. Weltweit sind es 320 Millionen Nutzer.

Jörgen Camrath hat auf seinem Blog einige Zahlen zu Twitter zusammen gestellt. Hier sind nur zwei Grafiken aus der umfangreichen Sammlung.

twitter

Twitter

Beitragsbild: Shutterstock

21 Mar 17:28

Apple’s Town Hall: A Look Back

by Graham Spencer

Jason Snell and Stephen Hackett have taken a look back at the products that Apple has introduced at their Town Hall venue since the iPod in 2001. Timely, because today's Apple Keynote will also be held at Apple's Town Hall.

Located at 4 Infinite Loop on Apple’s main campus, the Town Hall conference center was probably designed more for in-company meetings than for major events covered by worldwide media. And yet on numerous occasions over the years, it’s been exactly that.

Monday’s event in Town Hall could very well be the last hurrah for the old 300-seat venue, given that Apple is constructing a 1,000-seat auditorium in its new campus, due to open next year. Before it goes, here’s a look back at key public events in Town Hall, starting in late 2001.

Be sure to watch the accompanying video from Stephen Hackett which features clips from the various Town Hall media events.

21 Mar 16:29

@stoweboyd

@stoweboyd:


This is an excerpt from How Will Twitter Be Governed?, from June 2009:

To a great extent, Twitter is ours, like the air we breathe.

So, how will Twitter be governed? As a tool owned by a company that is owned by the inventors and some wealthy investors? Or as a world in which we live, and in which we have inalienable rights?

The entertainment business tried to say they owned all art, all music, all movies. We know they are artifacts produced by our culture, which we share with the artists, and the controls that the entertainment business thought they had – copyright and DRM – have failed with the digital and web revolution.

So, here we have the same revolution, come home again. Twitter’s world – its conventions, meaning and use – is our artifact: we have built it, 140 characters at a time, just as the Twitter developers have been building the platform underneath our feet. But it is our dancing that makes the house rock, not the planks and pipes. It is us that makes Twitter alive, and not the code.

Twitter’s management continues to forget this. They tolerate us, but Twitter’s method is not to celebrate us.

21 Mar 16:29

Refusing to learn

by russell davies

I think the thing I really want to talk about at Strategy v Robots is the relationship between large organisations and technology. That seems to be the at the root of a lot of things.

And one of the themes that keeps beating me over the head is the way organisations seem incapable of learning anything from those that have gone before.

Social media, for instance, is not a new or unstudied phenomenon. Twitter is, after all, 10 years old today.

And yet, despite the obvious lessons of Mr Splashy Pants, here comes Boaty McBoatface.

Maybe it's all deliberate, maybe it's a clever viral campaign, maybe. I hope so.

But there's something real going on here, clever people refusing to learn.

Organisations making the same mistakes over and over again.

21 Mar 16:29

Apple live streaming ‘Let us loop you in‘ press event today

by Ian Hardy

Apple’s ‘Let us loop you in‘ event is happening today and will take place at its headquarters in Cupertino. The company is expected to announce a new 4-inch iPhone, possibly called the iPhone SE, a new 9.7-inch iPad, and a selection of new Watch bands.

Similar to previous years, Apple will live stream the event and the festivities begin at 1:00pm EST (10:00am PST).

Apple Event March 21st

Apple notes, “Live streaming uses Apple’s HTTP Live Streaming (HLS) technology. HLS requires an iPhone, iPad, or iPod touch with Safari on iOS 7.0 or later, a Mac with Safari 6.0.5 or later on OS X v10.8.5 or later, or a PC with Microsoft Edge on Windows 10. Streaming via Apple TV requires an Apple TV (2nd or 3rd generation) with software 6.2 or later or an Apple TV (4th generation).”

We’re on the ground in Cupertino now and will bring you all the details and hands-on of the new products.

Related: iPhone 5se and new iPad Air rumour round-up: Everything we know so far

Source Apple
21 Mar 16:28

Implementing Slash Commands Using Amazon Lambda Functions – Writing Tests

by Tony Hirst

In a couple of earlier posts, I’ve described how to set up a simple (insecure) AWS Lambda function to handle a request from a Slack slash command using AWS Lambda functions and the AWS API Gateway, as well as how to encrypt the Slack token that can be used by the micro-service to check that the request has come from a known Slack channel. In this post, I’ll show how to define a simple test event that allows you to test the operation of a Lambda function.

The function I want to test initially is one that simply parses an HTTP POST message from a Slack slash command. When the slash command is issued, a callback is raised that POSTs a payload with the following structure to the Lambda function:

token=SOME_TOKEN
team_id=T0001
team_domain=example
channel_id=C123456789
channel_name=test
user_id=U123456789
user_name=TestUser
command=/testcommand
text="some sort of text string"
response_url=https://hooks.slack.com/commands/1234/5678

The Slack documentation describes how this data will be sent to your URL as a HTTP POST with a content-type header set as application/x-www-form-urlencoded, which is to say that it will be passed in the body in a encoded URL form:

token=SOME_TOKEN&team_id=T0001&team_domain=example&... etc.

The Lambda function test event is created from the Lambda function control panel:

Lambda_Management_Console_test1

The test event needs to contain an example of the POSTed information that the Lambda function expects and can handle:

Lambda_Management_Console_test

For example:
{
"body":"token=ACTUAL_TOKEN _GIVES_THE_SECRET_AWAY_OOP&text=Who+are+the+members+of+the+Defence+Committee&command=/simpletest&user_name=testuser&channel_name=testChannel"
}

I suppose a dummy test token could be used in the test string and provided with limited access to the Lambda function routines?

Saving and running the text function provides a report showing either the output from a successful execution of the function, or an error message…:

Lambda_Management_Console_and_Inbox

Of course, if you don’t create a test event that faithfully resembles the content of a message sent from the service that triggered the Lambda function (in this case, an application/x-www-form-urlencoded POST event raised by the Slack slash command), you’ll either be testing against the wrong thing or getting a false response from the test.

 


21 Mar 16:28

Analysts: Samsung Galaxy S7 and Galaxy S7 Edge Sales Surpass Expectations in China, India and Europe

by Rajesh Pandey
According to analysts in Korea, the initial sales and pre-orders of Samsung’s latest flagship smartphones — the Galaxy S7 and the Galaxy S7 edge — in key markets like China, Europe and India have beaten previous expectations. Continue reading →
21 Mar 16:21

Ohrn Image — Granville St. Underpass

by Ken Ohrn

Located at the south end of Granville St. bridge, this underpass gets people on foot safely and quickly from east to west of Granville St.

Granville.Underpass

 


21 Mar 16:21

Sketching a Slack Slash Parliamentary Auto-Responder Using AWS Lambda Functions

by Tony Hirst

Across a couple of recent posts, I’ve explored how to use a webhook manager to implement the a simple Slack bot that handles queries from Slack and return information from the UK Parliament data API (Searching the UK Parliament API from Slack Slash Commands Using a Python Microservice via Hook.io Webhooks) and how to use AWS Lambda functions to construct a simple Slack slash command responder (Implementing Slack Slash Commands Using Amazon Lambda Functions – Getting Started).

So this morning, I thought I’d have a go at getting a Slack slash command responder using AWS Lambda functions to handle a couple more queries. Here’s where I got to…

First up, asking for committees that a member of parliament sits on:

slashtest___OUseful_Slack6

Secondly, a query on who the current members of a particular committee are:

slashtest___OUseful_Slack4

One rationale for supporting this sort of query is to provide fingertips information access to a researcher through a unified conversational interface.

To trigger the responses, I’ve used a regular expression that tries to capture several different question types:

x='committees that Andrew Turner is on"
regexp=re.compile(r'.*(?:committees[ (?:that|does|is)]*) (.*?)(( (:?is )?(on|sits on|sit on|a member of))|$)')
m=re.match(regexp,x)

Obviously, this is not very advanced in terms of natural language processing, but the domain is a simple one and the number of forms that a query requesting this sort of information might take will probably be quite simplistic – and predictable!

Having extracted the member’s name (for a lookup of the committees a member is on) or the committee name when trying to look up the members of a particular committee), a URL is generated that can request the data from the Parliament members API. For example:

def committee_URL(c):
    comm_url='http://data.parliament.uk/membersdataplatform/services/mnis/members/query/House=commons%7C{}/Committees/'
    urlargs={'committee':c}
    return comm_url.format(urlencode(urlargs))

We can this use this URL to get some JSON data back:

def getJSON(url):
    q = Request(url)
    q.add_header('accept', 'application/json')
    r= urlopen(q)
    a=r.read()
    return json.loads(a.decode('utf-8-sig'))

The next step is to parse the JSON response to pull out the information we want, and convert it to a simple text string:

def committeeMembers(members,c):
    tl=[]
    if members['Members'] is None: return None
    for m in members['Members']['Member']:
        tl.append('{} ({})'.format(m['FullTitle'],m['Party']['#text']))
    return 'Members of the {}: {}'.format(c,', '.join(tl))

This text string can then be returned to Slack as the slash command response.

[UPDATE…] Here’s another example… The members’ API can look up MP by location, constituency or postcode; so if we try them in turn, we can take in a wide variety of location styles; and it only takes a really simple regular expression to prime the pattern match for what I guess is a wide range of possible conversational gambits for requesting this information:

slashtest___OUseful_Slack5

As with the members API, the Parliament data API will also return JSON responses to valid queries (I used the Parliament data API in the original Hook.io demo). There’s quite a few APIs to play with – data.parliament.uk datasets so as and when I get a moment, I may try to code some more of them up as conversational responders:-)


21 Mar 16:20

Firefox 46 Beta 2 Testday Results

by Bogdan Maris

Hello Mozillians!

As you may already know, last Friday – March the 18th – we held a new Testday, for Firefox 46 Beta 2 and it was another successful event!

We’d like to take this opportunity to thank Iryna Thompson, Chandrakant Dhutadmal,Vuyisile Ndlovu, Ilse Macías, Bolaram Paul, Ángel Antonio and the people from our Bangladesh Community: Hossain Al Ikram, Amlan Biswas, Azmina Akter Papeya, Md. Rahimul Islam, Raihan Ali, Tabassum Binte Azad, Khalid Syfullah Zaman, John Sujoy, Kazi Nuzhat Tasnem, Sadia Chowdhury Ria, Saddam Hossain, Md. Ehsanul Hassan, Zannatul Ferdous, Aminul Islam Alvi, Mohammad Maruf Islam, Nazir Ahmed Sabbir, Jobayer Ahmed Mickey, Rakibul Islam, Maruf Rahman, Tanvir Rahman, Tovfikur Rahman, Farhadur Reja Fahim, Fazle Rabbi, Saddam Fci, NIaz Bhuiyan Asif, Mohammed Jawad Ibne Ishaque, Fariha Chowdhury, Tahsan Chowdhury Akash, Kazi Sakib Ahmad, Sauradeep Dutta, Sayed Ibn Masud, Sajedul Islam, Md.Majedul Islam, Meraj kazi, Asif Mahmud Shuvo, Wahiduzzaman Hridoy, and Tazin Ahmed for getting involved in this event and making Firefox as best as it could be (sorry if I misspelled your names).

Results:

Also a big thank you goes to all our active moderators.

Keep an eye on QMO for upcoming events!

21 Mar 16:20

Dear FNAME, newsletter personalization isn’t what you think it is

by Paul Jarvis
Personalization is more than just adding “Hello FNAME” to the start of your emails.
21 Mar 16:19

There’s an Apple event on Monday, with a new 4-inch iPhone and 9.7-inch iPad Pro

by Roland Banks

Apple Event March

You may be aware (or perhaps you just don’t care!) that Apple will hold a media event on Monday night in California, at which the headline products are expected to be a 4-inch iPhone and an updated 9.7-inch iPad.

Due to excessive rumours online there may well be few surprises, besides the fact there’s not much to get truly excited about, it’s worth recapping what might be unveiled and pondering what Apple’s product lineup might comprise for the next six months until the iPhone 7 is unveiled.

A 4-inch “iPhone SE”

Many people have vocally bemoaned the lack of a latest-generation 4-inch device in the iPhone lineup, since the 5s started playing second fiddle to the 4.7-inch iPhone 6/6s and 5.5-inch 6 Plus/6S Plus. Anyone who prefers the smaller and less unwieldy size will no doubt welcome the new device as far as aesthetics and overall size is concerned.

iPhone 5 SE

But just why is Apple making such a fanfare over a smaller iPhone? While the 5s has been one of the top selling handsets in recent times, it’s beginning to look (and feel) a little long in the tooth, and also doesn’t support key services like Apple Pay. The 5s however remains a decent smartphone, but a move to the latest “A9” CPU, NFC wireless chip and other hardware, many people will have more affordable chance to pickup a very capable iPhone that doesn’t have the stigma of being “last year’s model”. Yes, apparently that is a very real phenomenon – as we all know, the majority of shoppers would prefer the latest phone even if it’s not as powerful as last year’s.

The iPhone SE may also help boost sales in markets like India and China, where there’s still a lot of room for growth in the mid-range segment.

iPad Pro 9.7-inch / iPad Air 3

The anticipated iPad Air 3 was sadly neglected last autumn; instead the iPad Pro made its debut to largely positive reviews, taking the iOS experience one step further on the road to a more desktop-like experience. It’s not perfect yet, but it’s certainly getting easier to work on desktop class apps with an iPad Pro, Pencil and keyboard, even if the Surface is arguably better at fulfilling that role.

Apple iPad Pro

Whatever the new iPad is called, it will no doubt borrow hardware from its larger brother, i.e. the Apple Pencil, four speakers that orient bass and treble based on tilt, and the magnetic “Smart Connector”. These additions will surely help differentiate the iPad Air from the (now most popular model) iPad Mini, which is just as capable in terms of hardware as the Air, albeit with a smaller screen.

An iTunes Refresh

Anyone who uses iTunes will know that the music player has become rather bloated, being the place to play offline and cloud-based music, sync devices, manage playlists, use the Apple Music service, and browse the iTunes Store. It can be unintuitive at times and will benefit from being simplified, streamlined, or perhaps even split into separate apps.

There is an excellent article on 9to5Mac.com discussing some of the ways in which iTunes could be given a makeover – highly recommended if you’re one of those people frustrated with Apple’s music software…

Apple Watch

It’s very unlikely new Apple Watch hardware will be shown off tonight, however there is already a space grey milanese loop bracelet in the works, as well as some nylon military style bands and possibly more Hermes designs. A full Apple Watch update is expected in the autumn, so until then we’ll have to make do with some minor updates and perhaps a peek at the latest version of watchOS.

Space Grey Milanese Loop

New Macs?

Don’t hold your breath on this one. Despite the fact that a MacBook Pro redesign really should be on the cards in the very near future, Apple doesn’t normally devote much stage time to its laptop and desktop computers unless there’s something tantalisingly new on offer – such as last year’s ultra-slim MacBook. The Mac range is also crying out for a new 5k Thunderbolt display as well as the latest generation of Intel Skylake CPUs.

You can watch the Apple Event (“Let us loop you in”) live at 5pm here.

21 Mar 16:19

The dark side of Donald Trump’s presidential deal making

by Josh Bernoff

Adam Davidson’s New York Times Magazine article, “What Donald Trump Doesn’t Understand About ‘the Deal’,” provides fresh insight into Trump’s deal psychology. If you take the analysis a bit further, you get a window into the Trump presidency. In an ordinary deal (say, a consumer buying a washing machine or teams trading baseball players), there’s some transparency and … Continue reading The dark side of Donald Trump’s presidential deal making →

The post The dark side of Donald Trump’s presidential deal making appeared first on without bullshit.