Game of Thrones: An Ending

George R.R. Martin, on his blog “Not a Blog”, now that the final episode of Game of Thrones has aired:

I’m writing. Winter is coming, I told you, long ago… and so it is. THE WINDS OF WINTER is very late, I know, I know, but it will be done. I won’t say when, I’ve tried that before, only to burn you all and jinx myself… but I will finish it, and then will come A DREAM OF SPRING.

How will it all end? I hear people asking. The same ending as the show? Different?

Well… yes. And no. And yes. And no. And yes. And no. And yes.

And oh, I especially like GRRM’s closing paragraph in his post:

Book or show, which will be the “real” ending? […] How about this? I’ll write it. You read it. Then everyone can make up their own mind, and argue about it on the internet.

😂

An Ending – Not a Blog →

Really looking forward to the books, as the final season on TV was quite the disappointment. Next to some very poor dialogues this season was packed with inconsistencies, character development that got thrown out of the window, lots of loose ends … the number of WTFs per episode was rising way too fast imho.

See, for example, this narrated version of Episode 3 to see what I’m talking about:

(Same thing can be said for all other episode in the season)

Winging back to Episode 3, a few smart people suggested some really good changes, such as an improved plan for “The Battle of Winterfell” itself or even a rewrite of some parts to make it more tensive.

Be sure to also read this article on why the writing in GoT S08 feels off.

Microsoft Edge preview builds for macOS

Speaking of IE in the previous post: Microsoft just (officially) released the first preview builds for Microsoft Edge for macOS, which uses the Chromium rendering engine internally.

Although I don’t use my Mac’s Touch Bar – I’ve got set it to always show the full control strip – I really like how they’ve linked it to the browser’s tabs:

🤔 I’m wondering if that would place nice with tab hoarder like me though … I rarely have less than 250 tabs open (spread across several windows) … so much to read and watch.

Introducing the first Microsoft Edge preview builds for macOS →
Download Microsoft Edge preview builds →

A Conspiracy To Kill IE6 — How YouTube got rid of IE6 for us

Great read on how a few YouTube engineers bypassed the internal Google politics in order to abolish IE6 from their list of supported browsers:

One idea rose to the surface that quickly captured everyone’s attention. Instead of outright dropping IE6 support, what if we just threatened to? How would users react? Would they revolt against YouTube? Would they mail death threats to our team like had happened in the past? Or would they suddenly become loud advocates of modern browsers?

A Conspiracy To Kill IE6 →

Selling Composer Packages through “Private Packagist for Vendors”

Nice new addition by Packagist:

If you’re selling PHP packages, the easiest way to offer Composer package installation to your customers is now “Private Packagist for Vendors”. You get a unique URL and authentication token for each customer and they can use these in their composer.json file to install your packages. Especially if you’re still sending zip files to your customers, there is really no reason anymore not to to offer Composer installations.

You can use their our API to integrate “Private Packagist for Vendors” with your existing PHP package shop: Create a customer, grant the customer access to the package, and then get the info needed to send to the customer — all using their API.

// 1. Create Customer
$customer = $client
    ->customers()
    ->create('Acme Web Inc.');

// 2. Grant access to package for customer
$client->customers()->addOrUpdatePackages(
    $customer['id'],
    [[
        'name' => 'my-vendor/cool-package',
        'versionConstraint' => '^1.0',
        'expirationDate' => strtotime('+1 year'),
    ]]
);

// 3. Get info to send to user
$info = $client->customers()->show($customer['id']);

// …
//    'composerRepository' => [
//        'url' => 'https://my-vendor.repo.packagist.com',
//        'user' => 'token',
//        'token' => 'a6addb89a67b2822d352d113',
// …

As you can see in the code above, customers their access can be locked to specific versions and also limited in time.

Packagist Blog: Introducing Private Packagist for Vendors →
Private Packagist for Vendors →

The Grocery Store Receipt, Reimagined

Data Visualization Engineer Susie Lu wondered: how can viz be integrated into everyday experiences?. This is what they did with the classical grocery store receipt:

Wow, that’s … great!

😔 Unfortunately we all know that stores won’t do this, as it will lead to people to be more aware of what they are spending, and thus will make them save on unnecessary spendings.

Can you spot a Map Trap?

Short and funny video on the (in 2013!) aforementioned Trap Streets.

Truncating Multi-line Text with CSS

Firefox 68 will support -webkit-line-clamp (prefixed!), which allows one to trunacate multi-line text using CSS. It’s already been available in Webkit for quite some time.

.line-clamp-3 {
  /* Required declarations: */
  overflow: hidden;
  display: -webkit-box;
  -webkit-box-orient: vertical;

  /* Limit the text block to three lines */
  -webkit-line-clamp: 3;
}

I find it strange that the old display: -webkit-box; and -webkit-box-orient: vertical; declarations are still required … I’d’ve dropped them if I were Firefox.

💁‍♂️ What about older browsers? For those I used to limit the height of the box to a multiple of the line-height:

Multiline `text-overlow: ellipsis`

The CSS feature for truncating multi-line text has been implemented in Firefox →

Optimizing JavaScript packages for tree shaking

Geoffrey Dhuyvetters from madewithlove on how authors of (open source) JavaScript packages can optimize their builds for tree shaking:

How do we create a package that exposes both CommonJS & ES modules while making sure we don’t break cross-platform support? Publishing 2 separate packages is an option (e.g. lodash/lodash-es). But there is a nicer, more maintainable option that obviates the need to publish twice. We can provide an extra build step that creates an ES version of our package and links it via package.json.

The package.json links both builds like so:

{
  …
  "main": "build/cjs/index.js",
  "module": "build/esm/index.js",
  …
}

Didn’t know you could als provide a module field, similar to name … handy!

Optimizing JavaScript packages for tree shaking →

Bash/Shell Autocompletion for Composer

The other day I opened up a PHP project that I hadn’t worked on in a while. No longer remembering which Composer Scripts I had defined for it, I needed to take a peek inside composer.json to see which ones were available to me. Then it hit me: why is there no autocompletion for composer available?

Googling around a bit I eventually turned to creating my own Bash completion script for Composer. After installing it, it will autocomplete composer commands for you:

$ composer in[TAB][TAB]
info     init     install

💡 Want to build your own bash completion script? This very good tutorial has got you covered.

The code builds further upon this earlier work by Rob Allen. Key area where it differs from Rob’s work is that composer-autocomplete also provides autocompletion for composer run-script, listing which Composer Scripts are available to you (as I initially wanted).

{
    "name": "bramus/example-php-package",
    "description": "Example PHP Package",
    "type": "library",
    "license": "MIT",
    …
    "scripts": {
        "test": "./vendor/bin/phpunit --colors=always",
        "lint": "php-cs-fixer fix --diff --dry-run --ansi",
        "fix": "php-cs-fixer fix"
    }
}
$ composer run-script [TAB][TAB]
fix   lint  test

Bash/Shell Autocompletion for Composer →

Did this help you out? Like what you see?
Consider donating.

I don’t run ads on my blog nor do I do this for profit. A donation however would always put a smile on my face though. Thanks!

☕️ Buy me a Coffee ($3)

Making Future Interfaces: ES Modules

Once again a highly entertaining video by Heydon Pickering. This time he’s tackling ES Modules: how and where (e.g. in which browsers) can you use them?

💁‍♂️ Even if you already know how to ship ES2015 JavaScript to browsers the video still is worth your time, as it’s very fun to watch!