Shared posts

18 Oct 15:28

Functionial Dreams (Part 1)

by Article Author

sometimes
i dream in code


class Book:
  def __init__(self, a, t, p):
    self.author = a
    self.title = t
    self.published = p

  def description(self):
    return self.title + " by " + self.author + " published in " + self.published

bits of programs
glide around
in my head


function Book (t, a, p) {
  this.title = t;
  this.author = a;
  this.published = p;

  this.description = function() {
    return this.title + ' by ' + this.author + ' published in ' + this.published;
  };
  return this;
}

i close my eyes
and there it is
code


0900 Dim thisBook As book

always the code
pointy k's
and bumpy m's

it follows me
from one rem cycle
to the next


01  BOOK
    05  TITLE           PIC X(15).
    05  AUTHOR          PIC X(15).
    05  YEARPUB         PIC 9(4).

i've used
a lot of
programming languages


class Book {
  private String title;
  private String author;
  private int year_published;

  public Book(t, a, p) {
    title = t;
    author = a;
    year_published = p;
  }

  public getDescription() {
    return title  + " by " + author + " published in " + year_published;
  }
}

from BASIC to FORTRAN


0100 author = "Tolstoy"
0200 title = "War and Peace"
0300 published = 1869

to Ruby and Python


class Book
  attr_accessor :author, :title, :published

  def initialize(a, t, p)
    @title = t;
    @author = a;
    @published = p;
  end

  def description
    "#{@title} by #{@author} published in #{@published}"
  end
end

sometimes
it all
runs together


 0100  class Book:
 0200    attr_accessor :author, :title, :published
 0300
 0400    public Book(t, a, p) {
 0500      title = t;
 0600      author = a;
 0700      year_published = p;
 0800    }
 0900  end

these dreams
of code
they are hell


var codeBook = Book("Inferno", "Dante", 1320);

coding is my job
five days a week
i'm coding man

but i don’t want to code
when i'm sleeping

i just want to sleep
when i'm asleep

hell


pride = Book.new("Pride and Prejudice", "Austen", 1813)

since i can't
get away from the code
i try to make it
as easy as i can

after all
i’m tired
in fact i’m asleep
life should be easy
when i’m asleep


       NOW = TIME(0)
       CALL MAKEEASY(NOW)

sometimes
when i’m dreaming
in code
i make an array


pride = new Book("Pride and Prejudice", "Austen", 1813);
war = new Book("War and Peace", "Tolstoy", 1869);

books = [pride, war];

and i let your code
borrow my array


your_nefarious_code(books);

and your code
changes my array


// Your nefarious code.

public your_nefarious_code(Book[] books) {
  zombies = new Book("Pride and Prejudice and Zombies", "Grahame-Smith", 2009);
  books[0] = zombies;
}

it's my array
i didn't want you
to change it

truth be told
sometimes
i do it to myself


// An honest mistake

public my_function(Book[] books) {
  jaws = new Book("Jaws", "Benchley", 1974);
  books[0] = jaws;
}

i have an excuse though
i’m asleep


# Don't modify this code unless you are unconscious.

this changing
behind my back
makes me
thrash in my sleep


def []=(idx, value)
  raise "YouCantChangeMyArraySucker"
end

so in my dream
i make
a new rule
no more
changing arrays
ever


  // Your nefarious code foiled.
  // Blam! Throws a YouCantChangeMyArraySuckerException!

  books[0] = zombies;

once i create an array
that's it
you can’t change it
neither can i


  your_impossible_to_be_nefarious_code(books);

now
i don’t
have to worry
about your code or threads
messing with my arrays

or my code
or my threads
it’s just easier


0600 REM I like zombies

but sometimes
i need
to change my array


GoTo 0000

but if i do
i’m back to square one
i don’t want to deal with it


function justLikeTheOldOneExcept(a, i, x){
  result = a.slice(0);
  result[i] = x
  return result
}

so i'll let arrays make
copies of themselves
copies that are
the same as the original

only different


var pride = new Book("Pride and Prejudice", "Austen", 1813);
var war = new Book("War and Peace", "Tolstoy", 1869);
var zombies = new Book("Pride & Prejudice & Zombies", "Grahame-Smith", 2009);

var books = [pride, war];

var other_books = justLikeTheOldOneExcept(books, 0, zombies);

then i can have
my old array
and
my new array


C  ZOMBIES ARE BACK

now i don't have to
expend the effort
to trust you


/* I trust me more than you. */

or me


/* I don't trust me. */

but sometimes you
change my objects too


public void aNefariousBookMethod(Book b) {
  b.setTitle("Dirk Gently's Holistic Detective Agency");
}

sometimes i forget
and change them myself


// Going about my sleepy business..

Book war = new Book("War and Peace", "Tolstoy", 1869);
aNefariousBookMethod(war);

// Wait what?

System.out.println(war.title);

it’s been a long night
so let’s have the same rules for objects
and arrays


def justLikeTheOldOneExcept(v, i, x):
  result = copy(v)
  if isinstance(result, list):
    result[i] = x
  else:
     setattr(result, i, x)
  return result

no changing
just modified copies


Book book1 = new Book("War and Peace", "Tolstoy", 1869);
Book book2 = book1.justLikeTheOldOneExcept(
                         "title",
                         "Dirk Gently's Holistic Detective Agency");

after all
it's just a dream


// Rules are like spouses. There is an optimal number to have.

now there are fewer
rules to remember

sometimes i make an object
with private fields


class Book {
  private String title;
  private String author;
  private int year_published;

  // ...
}

then i discover
that i need
to get at
those private fields


class Book {
  private String title;
  private String author;
  private int year_published;

  public String getTitle(){
    return title;
  }

  public String getAuthor(){
    return author;
  }

  public int getYearPublished(){
    return year_published;
  }
}

so i make them public


C TOTAL UP THE EFFORT

       EFFORT = PRIVEFFT + PUBLEFFT

i had to make the
private fields private
and then i had to make
the private fields public

that’s a lot of work
and then it’s more work


class Book {
  public String title;
  public String author;
  public int year_published;
}

it’s just easier to
make all the fields public

after all
why am i hiding from the data?
don't hide from the data
it's just data


class ThoseObjects {
  public String title;
  public String author;
  public String cityPublshed;
  public String countryPublished;
  public int yearPublishd;
  public int editoon;
  public int copiesSold;
}

sometimes
and there are
lots of fields
and i get tired of all the typing
and my fingers make mistakes


git ci -m 'Fix misspelling of Book fields.' Book.java

so i’ll just use a
map or a hash or a dictionary
or whatever we call it in this language
and make an open
name/value thing


var pride = {"title": "Pride and Prejudice", "author": "Austen", "published": 1813};

now i can make
new objects full of data
as fast as i can type
which isn’t very fast
since
my eyes are closed


var zombies = {"title": "Pride and Prejudice and Zombies", "author": "Grahame-Smith", "published": 2009};
var war =  {"title": "War and Peace", "author": "Tolstoy", "published": 1869};

if all my data
is in
hashes or
dictionaries
or maps
whatever we call them
in this language
then i don’t have a place for my code


interface Function {
  public Object invoke(Object arg);
}

class MakeDescription implements Function {
  public Object invoke(Object arg) {
    Book book = (Book)arg;

    return book.get("title") +
           " by " +   
           book.get("author") +
           " published in " +  
           book.get("yearPublished");
  }
}

so i’ll just make little
one method
no data
objects
and put my code there

i’ll call these things
functions
that’s a word i learned in
math class
before i feel asleep


var make_description = function (b){
  return b.title + " by " + b.author   
  " published in " + b.published
};

but before the night was over
the dream continued

– Russ

A version of this article originally appeared on Cognitect blog.

17 Apr 04:04

False Creek Seawall Improvement

by Stephen Rees

The latest upgrade of the seawall from Granville Island to Hinge Park is now open. The separation between bicycles and pedestrians has been greatly improved, and the experience of walking on this path is much better. However, there are still people who do not appreciate what they need to do to make it conflict free.

For a start, the sort of pedestrian who simply wanders, oblivious of others, and pays no attention to signs or paviours.

Groups of people, who think their simple number gives them some kind of priority.

Cyclists who want to break their personal best time.

People who do not fit into either category of “on foot” or “on bike” – wheelchairs, rollerblades (one of whom was pushing a sort of racing basinette/SUV) – they don’t know which side they are supposed to use.

Very young children who have just had the training wheels taken off their bikes. (Actually they are doing fine: it’s the “adults” who are the issue. )

While there is not nearly as much dodging and weaving going on, most of the probable collisions are avoided more by luck than forethought. To the MAMILs I would say, why ride at speed into a blind bend on a path used by a lot of people, some of whom may be unpredictable?

I am also a bit disappointed about the lack of foresight shown by the engineers who designed the drainage. Guys, you need to think of the next twenty years, not the last twenty years, when it comes to rainfall.

Seawall separation

Really good, strong white concrete line and contrast in surfaces: failing paint is not going to be an issue. I know the problems that bollards cause – but could you consider a raised curb? Or something tactile?

Separation

Is that sign actually necessary?

More mud on the path

There needs to be something here to intercept the water/mud streaming down the slope. And you do not want the soil washing into the creek!

Muddy path

And this is a mess!

New improved seawall path

This is better!

 

 

 

17 Apr 04:04

On Attention

by Ton Zijlstra

“The medium was no longer the message, it was just an asshole.
I want my attention back.

Attention is a muscle. It must be exercised.
We deserve our attention.”

Craig Mod on attention in January 2017. In his case he got his attention back by disconnecting, which for all intents and purposes isn’t a viable option. Completely disconnecting in our networked societies is just a reactionary exercise in privilege. But it does sum up my current sentiment, e.g. concerning Facebook, quite nicely.

17 Apr 04:02

The Rise of the TSP: A Ford Fleet in 2021

by pricetags

I’ve been predicting the rise of the TSP – Transportation Service Providers: potentially huge integrated companies providing consumers with transportation options and replacements for personal car ownership. Like Ford fleets:

From engadget:

Ford’s Jim Farley told the Financial Times in an interview that the automaker’s self-driving car network will be running “at scale” in 2021. It launched its recent Miami pilot precisely so that it “can scale [by] then,” the executive said, not to merely get the ball rolling.

Farley also stressed that this would be a truly Ford-run service. While Ford does have self-driving car partnerships with companies like Lyft, it intends to “own the fleet” for its own services.

… it’s not entirely surprising that the company would push for a large, in-house driverless network. Its leadership has repeatedly talked about preparing for the decline of car ownership, and that means a shift toward services (such as its on-demand commuter vans) instead of pure car sales. If it runs its own fleet, it has a reliable business even if vehicle sales to other customers eventually dry up.

17 Apr 04:02

European Cars Take Ship to Nanaimo

by Sandy James Planner

car-at-port

What happens when Port facilities in Metro Vancouver and their associated auto processing centres are filled to capacity with automobiles? You ship European cars to Nanaimo and then barge them across to the Lower Mainland.

European cars are normally shipped to Halifax and then trucked or railed across the country. With the growing cost and scarcity of industrial land, Nanaimo is transforming into the European car depot for vehicles shipped by sea through the newly widened Panama Canal.

The president and chief executive of the Nanaimo Port Authority stated “The project has the potential to transform Canada’s import automobile supply chain.” There’s no thought of a shift to ride share autonomous vehicles in this supply model.

As Business in Vancouver reports from Carla Wilson instead of sending European cars across the Canadian continent ships will navigate directly through the  Panama canal to Nanaimo. This expanded facility in Nanaimo will cost eighteen million dollars to implement and will “tackle existing transportation bottlenecks and congestion”.

This includes the repurposing of a 60,000 square foot building on 16 acres of land to be run by Western Stevedoring. There is an “assembly wharf” a paved facility of 36 acres where the cars will be prepped for shipping.

At the Nanaimo Port, cars designed to European standards get bilingual stickers and are upgraded for the Canadian market. Starting in January 2019 large carrier ships will offload 400 to 500 vehicles per vessel at the Nanaimo port.

It should also be noted that Port Metro Vancouver is one of the few in North American to not run 24 hours a day, a potential solution for real and perceived congestion and bottlenecks.

By using the Panama Canal, ships will also be able to “short ship” by delivering European vehicles to Mexico, pick up mechanical parts, and then continue to Los Angeles and Nanaimo.

Twelve thousand vehicles are expected to land in Nanaimo in 2019,  with a target of 50,000 expected annually. At that point most of the vehicles will then be barged onto the mainland.

The logistics for that transshipment have not yet been announced.

17h9qdpzzjjycjpg

17 Apr 04:02

A Speed Bump and Earthquake Fissures in Mexico City

by Sandy James Planner

IMG_2465

The Director of Engineering at the City of Vancouver, Jerry Dobrovolny was in Mexico City assessing the earthquake damage which severely impacted some of the poorest neighbourhoods. He sent this photo of an augmented speed bump.

The two photos below show the impact of an earthquake fissure three feet deep that runs through a park, and also separates a parking garage from the ramp into the back lane. Photos by Jerry Dobrovolny.

17 Apr 04:02

When Bikes Ruled Seattle

by pricetags
17 Apr 03:58

Apple could soon allow third-party developers to make their own Apple Watch faces

by Patrick O'Rourke
Apple Watch Series 3

One of the defining features that separates watchOS and the Apple Watch from Google’s Wear OS and the variety of Wear OS smartwatches out there, is the inability for third-party developers to release custom watch faces.

The Apple Watch’s faces have become significantly more customizable over the years — especially with the release of watchOS 4 — but it’s still not possible to download watch faces from any one other than Apple. According to code uncovered in watchOS 4.3.1 by 9to5Mac, however, that could soon change.

The latest developer version of Apple’s wearable operating system includes a message that reads: “this is where 3rd party face config bundle generation would happen.”

It’s possible that this is just a placeholder reference, but it could also indicate Apple plans to add the ability for developers to release their own custom watch faces at some point in the future.

Apple is expected to reveal watchOS 5 at the its 2018 Worldwide Developer Conference (WWDC) on June 4th.

Source: 9to5Mac

The post Apple could soon allow third-party developers to make their own Apple Watch faces appeared first on MobileSyrup.

17 Apr 03:58

Tesla batteries last longer than expected, says survey

by Bradly Shankar
Tesla Model 3 red and grey

A new survey of over 350 Tesla car owners found that their vehicles’ batteries are lasting longer than expected.

The survey, commissioned by the Dutch-Belgium Tesla Motors Club, determined that Tesla cars saw battery capacity drop by only five percent after 50,000 miles (approximately 80,467 kilometres), while the rate of battery capacity decline slowed dramatically after this milestone.

Further, the majority of the Tesla electric vehicles examined in the survey demonstrated 90 percent battery capacity after 185,000 miles (approximately 297,728 kilometres), and at 500,000 miles (approximately 804,672 kilometres) most Teslas still had 80 percent of their battery capacity.

It’s worth noting that Tesla doesn’t note battery degradation performance for its Model S and Model X. That said, the company states that its Model 3 vehicles will retain 70 percent capacity after 120,000 miles (approximately 193,121 kilometres).

Based on the reports from the vehicle owners, it would appear that Tesla’s estimates are rather conservative.

Source: Tesla Motors Club Via: Engadget

The post Tesla batteries last longer than expected, says survey appeared first on MobileSyrup.

17 Apr 03:57

Harry Potter auf bayrisch

by Ronny
mkalus shared this story from Das Kraftfuttermischwerk.


(via Iggy)

17 Apr 03:56

Green side up: planting Vancouver's canopy, one tree at a time

mkalus shared this story .

Dig a hole. Drop in a tree. Fill with dirt. Water and repeat.

That's been the past seven months of effort for Vancouver Park Board workers Michael Robinson and Tim Witheridge.

The pair are one of several crews whose job it is to plant trees along streets and in parks to help increase their number across the city.

These root balls belong to pine trees the Park Board will plant in parks in the city. (Chad Pawson/CBC)

"Thousands...thousands," said Robinson, an apprentice arborist with the Park Board, when asked how many he has planted between October 2017 and April 2018.

"It's not easy. You've got to have a strong back."

The City of Vancouver is aiming to plant 150,000 new trees across Vancouver in a 10-year span, from 2010 to 2020, as part of its Urban Forest Strategy.

This monkey puzzle tree, seen here laying on its side at the Vancouver Park Board work yard is one of thousands of trees being planted across the city. (Chad Pawson/CBC)

A main goal is to increase the city's canopy — ground area covered by tree leaves as seen from the air — from 18 per cent to 22 per cent.

Vancouver had 22-per-cent canopy cover in in 1995, but a combination of development, pests and even property owners bent on improving their views by cutting down mature trees, caused that figure to decline.

'There are 500 different kinds of trees growing along our streets all told and we continue to add to that as well,' says Vancouver Park Boar forester Bill Stephen. (Chad Pawson/CBC)

According to foresters like the Park Board's Bill Stephen, urban forests clean the air, slow climate change, ease strong winds, conserve rainwater, provide wildlife habitat and contribute to a sense of wellbeing for city residents.

"There are a lot of amenities that trees can provide in a city... in my mind, making Vancouver the beautiful place that it is," he said.

Michael Robinson, left, and Tim Witherridge arrive at a tree planting site. (Chad Pawson/CBC)

Stephen says that by the end of 2017, more than 102,000 trees have been planted — so a final push of close to 50,000 will be needed before 2020.

"We started off a little bit more slowly because we weren't accustomed to planting as many trees as that," he said. "But we're definitely in full swing now."

Robinson and Witheridge use a lift on their trailer to get trees for planting on and off. (Chad Pawson/CBC)

Trees are planted during the fall and winter when most are not actively growing because they have a better chance to settle in before the spring and summer.

For larger trees, Robinson and Witheridge try to plant between eight and 10 each shift, but that can be slowed by bad weather or even hard soil, which is hard to dig through.

Each tree planted in this way costs the park board an average of $500.

Digging holes for the trees can be tough work depending on what the soil is like. (Chad Pawson/CBC)

Robinson says all the effort is worth it.

"You're planting trees, you're giving back to the community and it's sort of spreading the beauty of Vancouver when you see the cherry blossoms that come out ... you contributed to something special."

Robinson and Wetheridge measure their hole to make sure it is deep enough to fit the root ball of the Japanese dogwood they are planting. (Chad Pawson/CBC)

The planters also face obstacles, such as soil space where pipes and utility lines need to run; enough water to get established, especially as summers in Vancouver become drier due to climate change; and even residents who fear the new trees will mean more work for them.

Robinson and Witheridge wrestle the dogwood, which will grow to up to 12 metres high, into place. (Chad Pawson/CBC)

Robinson says the tree is more important than the extra leaf raking they require.

"The oxygen that the tree gives you and the beauty of having a tree in front of your house far outweighs your week of having to rake leaves," he said.

Watch Michael Robinson explain the importance of water for newly planted trees and how residents can help:

CBC News BC

Vancouver Park Board needs help watering trees

Share Video

Playback Status: ready
Assigned test group: None
Identifier: mediaId 1205456451795
Asset: Undetermined
Bitrate: Undetermined
Streaming URL:
Events Log:

Vancouver Park Board apprentice arborist Michael Robinson explains importance of helping to water public trees in Vancouver. 0:48

Stephen says up to 1,500 street or park trees either die or need to be removed each year either due to disease, age or some other problem. But they are being replaced.

"We're adding to the inventory as we go," he said.

Michael Robinson with the Vancouver Park Board puts the finishing touches on the planting of a Japanese dogwood in a city park in South Vancouver. (Chad Pawson/CBC)
16 Apr 06:07

A Proposal for Markdown Comments

In this document, I describe an extension to Markdown footnotes to support a convention for comments...
16 Apr 01:19

Adding a Wiki-like Section

by Ton Zijlstra

I added a page-based section to this blog, to serve as a wiki-like extension. Where blogs are a stream of content, I find I have need of a more static part of the site, with content that can serve as reference, as a jump-off page to blog content, or to document things.

In the 00’s I used to have a wiki living alongside this blog, and think of ways of connecting my blog to a wiki (in 2004 I wrote a WordPress and a Movable Type plugin to let blogposts and wiki-pages synchronise). The wiki I ran was wikkawiki, which based on functionality would still be my goto choice for an open source self hosted wiki.
The issue with running a wiki exposed to the public was that it attracted loads of spam attacks, something that in practice never was outweighed by the use bona fide visitors made of the wiki to alter or add content.

In short to add wiki-style functionality to my blog, the only functionality that is really needed is that 1) I myself have a edit button on static items, 2) the ability to categorise and tag those items, and 3) keep those items outside of the blog posting stream on the front page, and outside of the RSS feed. WordPress pages fit that description, when I’m logged in, and after adding a plugin to allow categories and tags on pages. So a page based section it is, or rather, will be over time.

16 Apr 01:17

programming languages and empiricism

Yesterday I had a somewhat incoherent conversation / argument about programming languages, over dinner with friends, and I wanted to write a more coherent and less argumentative version of here for future reference.



It's an argument that originates with a position I've seen stated in public discussions in the past: that language designers and implementers don't do enough empirical research, and that users and the platform-developers who motivate, fund and ultimately deploy languages make their decisions about what to build in an uninformed fashion, again due to a lack of empirical or objective data.

The metaphor used in the argument yesterday (which I've heard repeatedly before) was that of evidence-based medicine, with the analogy being that current language design, funding, and selection is being made the same way medicine was being practised before the era of evidence-based medicine (and similar trends in other fields). That is: we're doing our work strictly "by folklore and tradition", not "rigorous data" about how languages operate in the field.

I feel this metaphor (and argument) over-generalizes substantially, and both rests-on and reinforces a bunch of misunderstandings about what language design is and how languages are made. But it has some kernel of truth, and I want to acknowledge and state for the record that I'm no enemy of empiricism. I'd be happy to see more-rigorous empirical studies of the things we have actual uncertainty about and that can be objectively quantified from the field. More information -- and more scientifically-valid information -- can't hurt the design process, assuming it has an objective interpretation without tradeoffs (more on that below). But that's .. kinda where my agreement with the argument ends.

My disagreements with this metaphor and argument derive from the observation that as stated, it's mixing together several very different aspects of language-building (aspects that really don't translate to the medicine metaphor):


  1. Primary engineering concerns: literally "what works" in a language.
  2. Secondary engineering concerns: tradeoffs and weighting in design.
  3. Quality of implementation: the labor that goes into each implementation.
  4. Psycho-cognitive mental concerns: what's understandable, easy, fun, etc.
  5. Socio-cultural ecosystem concerns: what "being a user" is like.
  6. System-integration and infrastructure concerns: how it's situated.


I'm going to argue that language design includes at least all of these aspects -- is informed-by them, constrained-by them, considers them at length -- but that only some (say the third and fourth) are likely ripe for empirical research, and only the latter of those (cognitive concerns) could yield something individual practitioners can use, rather than organizations.

Primary engineering: "what works"


Languages are at some level human engineering artifacts, consciously designed to achieve specific engineering goals. It is an ongoing field of research and development in which both entirely new approaches and different combinations of existing approaches are regularly built and evaluated. Typically new research is done at the scale of "toy languages" that are built to explore one or more concepts, to see if it "works" at a pilot-project level, and what is seen as promising at that scale is then scaled-up to an "industrial language" to see if scale-dependent factors emerge (and to investigate non-engineering concerns once the language is in the wild -- see later sections).

What "working" means in a "pure engineering" sense is usually relatively straightforward to evaluate: factors such as parsimony, expressivity, size and complexity of implementation, performance and various forms of scalability are easily (and regularly) measured and compared. While there can be (and is) significant disagreement about the composition and significance of certain benchmarks, the argument that no measurement or empiricism happens in the more obviously "engineering" aspects of languages is simply untrue: research papers, experience reports, internal evaluation at a project-management level, and external positioning by marketing and reviews regularly includes measurements of code sizes, human/machine automation ratios, error detection rates, compilation and execution speeds, etc.

Secondary engineering: tradeoffs and weighting


So: certain engineering aspects of languages can be (and are) objectively evaluated. That does not mean that there is a single optimal setting on the design landscape of engineering concerns (even just considering the artifact and its immediate users in isolation). For two reasons:

  1. Several engineering considerations are in somewhat-direct tradeoff with one another. We do our best to eliminate tradeoffs but when they exist one cannot optimize for both (or many!) simultaneously: improving (say) peak runtime performance or correctness may very well only be possible at the expense of (say) compilation speed or cognitive load.

  2. Any given engineering consideration, even if objectively measurable and with an obvious "good" and "bad" orientation to its measurement, may have totally different subjective value to different audiences. For some people (say) online reconfiguration is more important than bounded latency; for others the ranking is the opposite. Both qualities can easily be evaluated (having either quality is obviously better than not) but the relative value of each is subjective.


When some improvement is made to some aspect of language engineering not in tradeoff with anything else it tends to be adopted quickly, across the board, and that tends to stick in subsequent languages. And to the extent to which differences in subjective value of objective differences exist, different languages often exist to cater to them separately.

To make a tired language analogy to cars: there's room in the market for both sports cars and pickup trucks, even while they both quietly adopt each year's improved brake pads and windshield wipers.

QOI


It makes for boring "arguments on the internet", but language implementations are also just software artifacts: built by people in organizations, at a cost of time, and subject to management structures and software engineering practice. A great deal of what's good or bad about a "real" industrial language comes down to considerations of the people employed and underlying software-engineering process (and its various influences) that produced the implementation, not the on-paper design of the language.

While one can do empirical research here, it's not especially language-specific. It's research about how software projects manage risk, achieve quality, hire and manage skilled workers, estimate schedules and so on. Including how they gain adequate funding (given considerations of market power, maintenance costs, R&D grant-funding, government procurement requirements, etc.) and what their long-term strategic plans for the language are.

Empirical results here are also more likely to inform decisions made by the management chain of a language-development project, rather than language designers or implementers. The latter are usually not in a position to make such decisions, merely have to work in whatever employment circumstances they can find.

Cognitive load of different features


Insofar as a language is a human/computer interface -- and I think this is a fairly important way of describing them -- it's meaningful to try to tune both sides of that interface to "fit" the needs of each party.

The machine side is comparatively easy to evaluate: machines are relatively narrow, deterministic things that we can (and do) run lots of experiments on, while doing engineering. As I said earlier, I don't think we're suffering from a lack of empiricism on that side.

The human side of the interface is a lot more challenging to evaluate, and if any part of the argument for "more empirical research" seems compelling to me, it's this: I'd like more numerical evidence about the relative cognitive costs of different (local) language features -- specific notations, abstractions or facilities -- and the limits of "ability to understand them" among various population(s) of users. Evaluation among practitioners here is driven a bit too much by folklore and rules of thumb, and additional clarity of "what's easy enough" or "what's too hard" for users would strictly improve our design choices.

That said, there are two big caveats to this desire:

  1. Many features of a language are dictated by circumstances beyond simply "fitting within the cognitive budget", i.e. one of the other 5 aspects discussed in this argument simply requires the feature be present or absent, regardless of whether it's "cognitively affordable".

  2. Many features can only be deployed in combination with, or exclusion of, other features, and/or have cognitive effects that are strongly conditioned on the presence of other features, i.e. they're impossible to test independently, in isolation.



Human and cultural ecosystem around a language


Talking about languages -- especially when it comes to choosing one to use -- can often mean talking about much more than their on-paper designs or implementations: it often means talking about (and choosing between) different languages' libraries and communities. Even if you're an antisocial hermit who enjoys programming solo, working in a given language almost always entails contact with a substantial literature written in and about that language: its packages, documentation and "areas of focus".

This doesn't always happen by accident: often a language is designed specifically for an existing community of users, to address shortcomings of that community's current "standard language", or to anticipate the community's future needs. But often the development of a community and literature is very path-dependent, and cannot be isolated, predicted or reproduced: to "do Java again" or "do Perl again", for example, one would need to reproduce the entire sociological context of the early web. To "do Ada again" one would need to reproduce the context of the US military in the 1970s. Once a given culture starts to take shape around a language, feedback and self-selection often take control, cementing the language's "nature" (and even influencing its subsequent technical evolution) in ways that can't be deduced at all from the initial design. But that strongly influence who will want to use it, who it's appropriate for.

Such cultural developments happen at a given time and place, and while they're subject to analysis -- they certainly factor into choices people make about which language to use! -- they're about as challenging to do "rigorous empirical study" on (with hypotheses and experiments) as sociology or economics: you very occasionally get lucky and there's a somewhat-comparable minimal pair of scenarios to contrast, but usually any given pair of scenarios differs so many ways as to make conclusions very qualified, very uncertain.

Technical situation of a language


What I just said about cultural context resisting empirical experiment goes double when talking about the technical situation of a language. This is perhaps the least-appealing, most disappointing, frustrating and honestly compromised aspect of language engineering, but also one of its most important: every language is born into, and must execute amid, a specific technical context of other languages, other libraries and other software systems, speaking other file formats and network protocols, running on other hardware and operating systems. These all have their own semantics, their own requirements, their own histories, their own vast investments of time and money and therefore technical inertia.

I've said this before, but to repeat myself: as much as Silicon Valley folks like to talk about this being a "young industry" it's really close to a hundred years old, and at least looking at the almost-50-years of technical infrastructure (re)built after the VLSI/microprocessor shift, many decisions are effectively set in stone at this point: changing them would cost tens or hundreds of billions of dollars, millions of person-years of effort. If you write a language -- especially one you wish to have a significant set of users -- you must be very aware of the technical situation it's going to exist within, and to interoperate with; and that technical situation will dictate a great deal of the design you pursue.

To talk about empirical research in this aspect of a language design, then, is even more wishful thinking than when talking about empirical research across communities of users: a language designer (or putative "empirical researcher") has no meaningful way to run a language-deployment experiment in a "different technical context" that doesn't include the historical development of the x86 ISA, or POSIX or Win32 filesystems or process semantics, or SQL RDBMSs, or TCP/IP sockets, or IEEE754 floats, or OpenGL, or Unicode, or all the standard and expected forms of linkage and representation, packaging and distrbution, diagnostics and debugging, clocks and coordination, interfaces and communication systems in a given technical environment. To the extent that language features are dictated by these considerations, they really are just a matter of puzzling out (and pricing) "how to be compatible", nothing the designer can experiment on, evaluate or change. One must simply learn how they work, and adapt one's design accordingly.

Conclusion



Overall: I don't think it's meaningless to talk about increasing empirical research in ways that could benefit language design, but I don't think it applies to most of the things that influence a language's design or, more broadly, its trajectory in the world. Most of what decides a given language's fate is either well understood and universally adopted engineering practice; or well undersood and either niche-specific choices or tradeoffs; or depends on the money spent and developers hired by its sponsoring organization; or is path-dependent and unpredictable social factors; or is totally inflexible and dictated by technical context. The residual (mostly psychological) factors, sure: research away. But that's unlikely to dramatically alter the story of how languages get built, evolve, are chosen or deployed, persist or die off.

This entry was originally posted at https://graydon2.dreamwidth.org/259333.html. Please comment there using OpenID.
16 Apr 01:16

Top Canadian mobile stories from the past week

by Ian Hardy
Huawei P20 Pro header

Every week we bring you the latest in Canadian mobile news. Listed below is a quick overview of the top stories from the past seven days.

  • Google launches Live Cases featuring designs from the Toronto-based Broadbent sisters [Read here]
  • Facebook offering bounty program for users who report data abuse [Read here]
  • How 5G will accelerate the growth of smart cities [Read here]
  • CCTS mid-year report shows 73 percent year-over-year increase in telecom complaints [Read here]
  • iPhone launch and Big Gig helps Shaw’s Freedom Mobile add 93,500 wireless subscribers in Q2 [Read here]
  • Win a Samsung Galaxy S9 in Lilac Purple courtesy of Telus [Read here]
  • Pixel and Pixel XL no longer listed in the Canadian Google Store [Read here]
  • 10 Canadian telecoms are now qualified to bid on leftover 4G spectrum [Read here]
  • OnePlus teases first official look at OnePlus 6 [Read here]
  • Xplornet posts retail job listings in preparation for Manitoba wireless launch [Read here]
  • Amazon announces that the Echo Spot is coming to Canada [Read here]
  • LG’s upcoming G7 ThinQ to be revealed in New York and Seoul on May 2nd [Read here]
  • CBC’s premium membership streaming service is officially live [Read here]
  • Apple announces Product Red iPhone 8 and 8 Plus [Read here]
  • 2018 Chrysler Uconnect Review: Back and forth [Read here]
  • Google’s Melissa Dominguez on welcoming women into STEM [Read here]
  • CTV News, BNN and TSN updates now available on Google Home [Read here]

The post Top Canadian mobile stories from the past week appeared first on MobileSyrup.

16 Apr 01:15

A Chequered Past

by Rui Carmo

I dumped more than a few old backups over the past couple of weeks, to fascinating results.

Much to my amazement, I kept a fair amount of source code from the past couple of decades, and it was fun (if occasionally embarrassing) to look at the hundreds of personal projects I dabbled in, from little hacks and scripts to entire desktop apps (none of which even run anymore, unless I can bother to set up a VM for them).

The awesome thing was that after hitting a set of densely packed folders with college coursework, I came across a “Sinclair” folder… I have absolutely no idea how I managed to convert some of those assembly files across (I suppose the older bits were migrated by way of CP/M on the +3), but it was then that I decided to try to summarize the whole thing in some fashion.

For your amusement, here’s a more-or-less complete tally of what programming languages I was into over the years:

Update: Come April 2018, I decided to tack on the post-2013 years.

Year (est.) Languages Platforms
2018 (Very little) C#, a lot of Python and JavaScript, a fair amount of Java, some regrettable moments with PHP on Windows, a fair amount of fun with Lua and C/C++ on IoT devices, some R again. Windows (obviously) in Azure services, a lot of Linux, some ARM64, a bunch of tiny ARM devices, Xamarin.
2017
2016
2015 A return to LISP via Clojure, a few deep dives into Go and Erlang, yet more Python and JavaScript Mostly Linux and ARM devices, a lot less iOS.
2014
2013
2012 A lot more Python and JavaScript, a little more Java, a little raw C, some Objective-C, some Ruby, a little Lua, a fair amount of R. Macs, some Linux boxes and a plethora of ARM and mobile devices (Android, iOS, Linux).
2011
2010
2009
2008 Python (including PyObjC), JavaScript, a lot less “big iron” Java and Perl, as little PHP as humanly possible, some C++ Macs and assorted ARM devices. A few Linux machines, the dawn of Android apps, some Qt and LiMo.
2007
2006
2005
2004
2003
2002 Loads and loads of Perl and PHP, very little JavaScript, some C. Mostly Macs.
2001
2000 A bunch of Linux and Windows PCs, some Sun boxes.
1999
1998
1997 Java (I had faith). Some C++, some Perl.
1996
1995
1994 MPW, more 680×0 stuff, Object Pascal, Objective-C, C++ (mostly Microsoft MFC), a bunch of LISP, some Prolog, some Perl. A bunch of 68k Macs, VMS and UNIX gear, my beloved NeXTCube.
1993
1992
1991
1990 x86 assembly, Turbo Pascal, a little C (there was even a copy of Brief …) A few PCs, some 68k Macs
1989
1988
1987
1986 680×0 assembly, Pascal QL, an Atari ST
1985
1984
1983 BASIC, Z80 assembly Sinclair ZX81, Spectrum 48K (later +3)
1982
1981

(Some dates are approximate, and could even be wrong since I had to believe the archive dates…)

16 Apr 01:15

Transit tokens via eBay

by illustratedvancouver


Transit tokens via eBay

16 Apr 01:15

Nearly a dozen people who rode Car 1304 on its final trip in...

by illustratedvancouver


Nearly a dozen people who rode Car 1304 on its final trip in 1955 returned for another spin on the now-restored car on Saturday, along with their families. The tram used to run as part of the B.C. Electric Railway in the early 1900s. (Photo: Doug Kerr/CBC) 3rd-graders welcomed back onboard B.C. tram, 62 years after their final field trip

16 Apr 01:15

Congrats to Translink and Vancouver on 400 million boardings!...

by illustratedvancouver


Congrats to Translink and Vancouver on 400 million boardings! From the Buzzer blog on December 21:

Transit ridership in Metro Vancouver has been consistently breaking records this year. Today is no different as our 400 millionth boarding took place in Metro Vancouver at the tail end of this morning’s rush hour commute!

via All aboard! TransLink celebrates 400 million boardings

16 Apr 01:15

Discover transit like it’s 1989!

by illustratedvancouver


Discover transit like it’s 1989!

16 Apr 01:15

"You are what you cover up."

“You are what you cover up.” - | Richard Siken
16 Apr 01:15

"Humans have shared microbial destiny. If there’s one thing that challenges the extreme..."

“Humans have shared microbial destiny. If there’s one thing that challenges the extreme...
16 Apr 01:14

SotD: La Isla Bonita

This is a beautiful and simple little Spanish-inflected melody, written by Madonna, Patrick Leonard, and Bruce Gaitsch. It sold a lot of records for her and is a staple of her live shows.

San Pedro

Last night I dreamt of San Pedro…

Wikipedia says the song was written as an instrumental, then Madonna added words and melody. But it sounds like a single voice and vision.

I’m an admirer of Madonna but not really a big fan of most of her music. The actual songs only rarely rise to greatness, as La Isla Bonita does. But by pure force of will she became, for a number of years, the sexiest, most attention-worthy woman in the world.

I also admire her showmanship and professionalism. Nobody’s ever gone to a Madonna show without coming away impressed. A lot more performers’ concerts would be pushed over the edge from fine to fantastic if they brought her level of dedication and practice and polish to the show.

This is the 105th in the Song of the Day series (background).

Links

Spotify playlist. This tune on Spotify, iTunes, Amazon. There seems to be a video performance from every Madonna tour in living memory. My faves are this one from 1986 and this from 2001.

16 Apr 01:14

Lieutenant Don’t Know

An intriguing look at Afghanistan, which I grabbed because Tom Ricks pointed to it as a key book about logistics. As the Trump madness grows, I fear it makes sense to learn what we can about the wars that are coming.

Jeffrey Clement was a second lieutenant in Northern Afghanistan, in command of a truck platoon. He argues that the command of a truck platoon is the very best job a Marine can have, if not the absolute pinnacle of human happiness. That in itself is interesting.

Early in the first convoy Clement led, he sighted an isolated observer watching the convoy in the distance. He prepares to shoot the man if the man does anything hostile, while hoping he would not. When nothing happens, Clement is relieved but confident that he was in fact a “bad guy” and that he would have killed him if necessary. This is strange: Clement was there and he was a professional and I am a civilian with an yellowing 1-O card, but Clement cannot actually have know whether this man was a “bad guy”. He might have been curious. He might have been undecided in his allegiance. He might have been Lawrence of Fucking Arabia. Clement doesn’t discuss this further, but it seems to me this epitomizes a constant and growing problem in both our military and our police.

16 Apr 01:14

When I’m feeling down I like to imagine Jack White’s face, as we drive past the parking lot for “Ned’s Nothin’ Fancy Texas BBQ” and into the parking lot for “Ezra’s Molecular Gastronomy Bistro”

by shutupmikeginn
mkalus shared this story from shutupmikeginn on Twitter.

When I’m feeling down I like to imagine Jack White’s face, as we drive past the parking lot for “Ned’s Nothin’ Fancy Texas BBQ” and into the parking lot for “Ezra’s Molecular Gastronomy Bistro”


Posted by shutupmikeginn on Tuesday, March 27th, 2018 2:30am


204 likes, 18 retweets
16 Apr 01:13

MozRetreat’18 – a recap

by princiya

Last week I joined a cohort of 43 people from 12 countries in the beautiful city of Eindhoven, Netherlands for MozRetreat! We were a team of friends, partners, network members, Mozilla staff and first-time collaborators to become festival wranglers and shape the design of the MozFest program.

I was invited because of my continued involvement with Mozilla through Outreachy and the Mozilla Open Leader program.

WhatsApp Image 2018-04-15 at 18.54.18 (2)
The circular-open-seat arrangement

MozRetreat was a super-charged three-day event for planning, dreaming and collaborating. Here, we examined what works about the festival, challenged the old ways of doing things and explored new opportunities for protecting and promoting the health of the internet.

 

This is the 9th year for MozFest and the theme this year is ‘DATA’. There will be keynote sessions, lot of planned activities and impromptu conversations on the below 5 broad topics:

  1. Openness (Open innovation, all things OPEN)
  2. Privacy & Security
  3. Web Literacy
  4. Digital Inclusion
  5. Decentralisation

In addition, there will be a week of meetups, hackjams, and unconferences run by allied organizations.

At the end of the retreat we chose which space we wanted to wrangle. I chose to be a wrangler to the Open space! A wrangler is someone who designs and delivers a part of MozFest.

All in all, I enjoyed every minute spent with this amazing bunch of humble, smart and talented people. Over the next few months we would work collaboratively to deliver the best of MozFest.

Come and be a part of the festivities in London this October to celebrate Internet Health!

 

16 Apr 01:12

Consumption spirals

by Paul Jarvis
I’d rather be happy with what I’ve got than think I’ll only be happy when I buy what I desire. Think about it: it feels better to be happy presently than hopefully happy later.
16 Apr 01:12

The View-Source Web

A line in Frank Chimero’s article Everything Easy Is Hard Again, published a couple months ago, has stuck with me:

That breaks my heart, because so much of my start on the web came from being able to see and easily make sense of any site I’d visit. I had view source, but each year that goes by, it becomes less and less helpful as a way to investigate other people’s work.

One of the ironies of this is that HTML5 makes it easier than ever to make readable, simple HTML. I especially like two things:

  1. Quotes for attribute values are optional (when there are no spaces), and
  2. There are semantic tags for things where before you had to guess at the author’s intention. We have header, main, nav, article, and similar now.

I realized that this blog — since it doesn’t use cookies or JavaScript, since the layout is as straightforward as can be — would make a good personal test case. How easy-to-read can I make the HTML?

So I adopted the semantic HTML5 tags, simplified a few things, and now the source is as easy to read as any HTML I’ve ever written.

Lesson learned: the discoverable and understandable web is still do-able — it’s there waiting to be discovered. It just needs some commitment from the people who make websites.

16 Apr 01:12

A Word About Tracking On This Site

by hrbrmstr

Since I just railed against Congress for being a bit two-faced about privacy I thought some rud.is site disclosure would be in order.

At present, third-party tracking is limited to:

  • Something in my WordPress configuration adding a DNS pre-fetch for fonts.googleapis.com. There are a few more other DNS pre-fetches that I’m also going to try to eradicate (but that aren’t showing up in my uBlock Origin likely to to /etc/hosts blocks);
  • Gravatar (which displays logos near comment author names). I’m torn on this one but Gravatar is owned by Automattic (who owns WordPress). See next bullet on that;
  • WordPress. Vain site stats tracking, JetPack uptime warnings and some other WordPress pings happen (including some automatic short-linking) as well as the previous bullet bits. I’m not likely going to do the site surgery necessary to stop this but you have full disclosure and can easily avoid pings to those sites via uBlock Origin site-specific rules;
  • SendPulse; I’m running an experiment on user behaviours when it comes to authorizing web notifications (and I just kinda ruined said experiment). I’ll be disabling it later this year (after a full year of it being on so I can have more than just a few sentences to say).

The above came from an in-browser uBlock Origin report.

I ran a splashr::render_har() — which is how I measured things for the Congressional privacy post — on one of my pages and this is the result:

tld                 n
1 rud.is           67
2 wp.com           21
3 gravatar.com      6
4 wordpress.com     3
5 w.org             3
6 sendpulse.com     2

Props on WordPress capturing w.org! I’m still ticked Microsoft stole bob.com from me ages ago.

As you can see, most resources load from my site and none come from Twitter, Facebook or Google Plus.

I run WordPress for a ton of reasons too long to go into for this post, so I’m likely not going to change anything about that list (apart from the DNS pre-fetching).

Hopefully that will abate any concerns visitors might have, especially after reading the post about Congress.

16 Apr 01:06

Farewell dangerousmeta!

by Andrea

The Long Goodbye.. “Friday, April 13, 2018: As of today, dangerousmeta! is no longer being actively updated.”

I’ve been a reader of Garret’s blog since the beginning, back when his blog was called array.editthispage.com. In those first few years the community on EditThisPage.com felt like a neighborhood in a small town, where everyone knows everyone else. Many of those bloggers have stopped blogging years ago, but Garret’s was one of the most prolific and long-lived weblogs.

Garret organized the Behind the Curtain project in September of 2000, in which over a hundred webloggeres documented their day-to-day lives with photos during a time in which affordable digital cameras were still a novelty. I was able to help him a little, and we became friends. About two years later André and I got to meet him and his lovely wife for the first time when we got married (shout-out to all participants of the weblogger wedding!), and we’ve visited them several times since.

Garret, your voice on the web will be missed, especially during these times of political upheaval. Even though I understand your reasons, I’m sad that I won’t find daily dangerousmeta updates in my RSS reader any longer. Thank you for sharing your unique point of view for the past almost 20 years, and keep in touch!