Skip to main content
 

Just Walk Out technology

Amazon Go, shopping without checkouts:

Amazon Go is a new kind of store with no checkout required. We created the world’s most advanced shopping technology so you never have to wait in line. With our Just Walk Out Shopping experience, simply use the Amazon Go app to enter the store, take the products you want, and go!

With the amount of recorded prior art they will find it difficult to pantent the Just Walk Out technology  ;-)

 

Building on temporary foundations

Just came across an interesting perspective on frameworks by Timothy Perrett:

It is imperative to understand that the need for composability in our software tools is an absolute requirement. If we as an industry have any hope of not repeating ourselves time and time again, we have to change our ways.

I definately agree that we're doomed to keep making the same mistakes if we're building on top of frameworks and then switching them out for a different one, which I hadn't considered before.

 

Updating Homebrew for macOS Sierra

If you've just upgraded to Sierra and previously had Homebrew installed you may find that it no longer works because of the stricter security feature in macOS. In order to get Homebrew back up and running you need to execute the following commands in your terminal (thanks thehitmaniptf):

sudo chown -R $(whoami) /usr/local
xcode-select --install

The first command simply gives your local user account ownership of /usr/local (where brew installs things). The second command updates the Xcode command line tools without which Homebrew cannot compile packages.

Once this is done you can successfully update Homebrew as normal, and diagnose any remaining issues:

brew update
brew doctor

After running this you will receive instructions on how to restore the permissions on /usr/local as after updating Homebrew no longer will use this path.

Update 6th Nov, 2016: When using cask you might get told to update the cask room location:

sudo mv /opt/homebrew-cask/Caskroom /usr/local

 

How Apple Scaled Back Its Titanic Plan to Take on Detroit

I think we have stumbled upon the reason why there are no new Macs. Apple was wasting resources on the car.

Apple Inc. has drastically scaled back its automotive ambitions, leading to hundreds of job cuts and a new direction that, for now, no longer includes building its own car, according to people familiar with the project.

[..]

Zadesky handed the reins to his boss, Dan Riccio, adding to responsibilities that already included engineering annual iPhone, iPad, and Mac refreshes.

Source: How Apple Scaled Back Its Titanic Plan to Take on Detroit - Bloomberg

 

Dropbox Modifies TCC.db to Give Itself Accessibility Access

Dropbox was using a sql attack on the tcc database to circumvent Apple’s authorization policy

Another issue like this and a lot of people will switch to iCloud Drive.

 

How to signup for Flickr without disclosing your mobile number

I was looking to setup a Flickr account and noticed that it requires you to enter a mobile phone number to sign up. I prefer not to disclose this information to third parties so I looked for a solution. Unfortunatley, a lot of information is out of date as Yahoo! (which owns Flickr, and which is the service you sign up to so you can login) turned off third party signups back in 2014. However I found a way...

To complete this process you will need to have a non-yahoo email address. I recommend you try Hover and register your own domain with email (such as your surname), so that you will never have to change it when your email provider closes up shop.

Follow these steps:

  1. Instead of signing up via Flickr, Sign up for a Yahoo!'s account via their website.
  2. Notice that a mobile number is required. Follow the I'd rather use my own email address link just below the email address input.
  3. Notice you can now sign up with your own email and a mobile phone number is no longer required.
  4. Choosing your password and create a Yahoo! account.

Now you can use the credentials to sign into Flickr!

 

 

Painless Lektor Setup in Less Than 5 Minutes

Two technologies that I have can really recommend you try out - Lektor and Cloud9 - can be used together to start a static site or blog in a matter of minutes. If you want to try out the power of Lektor without leaving a trace on your machine then follow this quick setup.

Lektor is a flexible and powerful static content management system for building complex and beautiful websites out of flat files — for people who do not want to make a compromise between a CMS and a static blog engine.

Cloud9 combines a powerful online code editor with a full Ubuntu workspace in the cloud.

Because every Cloud9 workspace is also a Docker container, you have full access to a ubuntu system with terminal access. We can use this to install a development Lektor install and work on our static website as follows:

  1. Create a new Cloud9 workspace with the Python template, as Lektor is written in Python.
  2. Delete the ex50 folder
  3. In the bash tab of the new workspace, install lektor by running: curl -sf https://www.getlektor.com/install.sh | sh
  4. Once this completes, start a new project: lektor quickstart
  5. Create a new runner (Run > Run With > New Runner) with the following contents (replace myproject):
    {
    "cmd" : ["lektor", "server", "-p", "8080", "-h", "0.0.0.0"],
    "info" : "Started $project_path",
    "working_dir": "/home/ubuntu/workspace/myproject"
    }
  6. Press the Run button to start the server, and Preview > Preview Running Application to browse the Lektor site.

That's all there is to it, you can continue with the Lektor Quickstart instructions.

 

 

 

Nvidia unveils GTX 1060: Faster than a GTX 980 for £220

1080p gamers, would-be VR explorers, and e-sports players who crave hundreds of frames per second look no further: the GTX 1060 is the graphics card to buy.

Looks like the card to get if you're not in the market for an ATI card.

 

WorkLog.py - work logging

I wrote this little script and thought it might be useful for others. WorkLog.py allows you to keep track of what you are working on by writing a timestamped message to a CSV file.
It turns out it helps me stay in tack during a long day of work.

worklog

I've put the latest code on GitHub

 

A great little bit of python code. It requires Python 3. Then just run the file.

 

Traktor streaming to SHOUTcast servers using LiquidSoap

I've been using Traktor for years now as my deejaying solution and broadcasting tool. The one missing feature on the broadcasting side is that it can only stream directly to Icecast servers, lacking the ability to stream to SHOUTcast based servers. Most servers use the SHOUTcast streaming protocol which grew popular through the MP3 movement back around the turn of the century. We will setup a transcoding link to enable streaming to SHOUTcast servers.

This guide will focus on OS X but on a general level is also applicable to Windows users.

This replaces my previous guide at https://sites.google.com/site/traktorshoutcast/

Overview

We will need the do the following things:

  1. Install Homebrew, a package manager to help set things up.(OS X)
  2. Install and setup Icecast, a streaming server that will accept the Traktor stream. (aka local streaming server)
  3. Install and setup LiquidSoap, a transcoder that will connect to the local stream, and broadcast it in SHOUTcast format.
  4. Configure Traktor's broadcasting settings to point to the local streaming server.

Also useful is to keep the SHOUTcast stream (remote stream) details to connect to at hand (host, port, password).

signal flow

1) Install Homebrew

Homebrew is a terminal package manager to add / remove / update OS X software and compile it from source code for us, so we don't have to.

Homebrew installs the stuff you need that Apple didn’t.

To install, follow the directions on http://brew.sh. Currently (as of Feb 16) that says:

  1. Open a terminal window.
  2. Run /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Follow any instructions about the Xcode commandline tools.

After everything is setup you can run brew update to update your formulae, brew upgrade to upgrade to their latest versions, and brew doctor to diagnose any issues with your particular installation. Keep the terminal open for the next step.

2) Install and setup Icecast

Icecast is a streaming media server which [...] can be used to create an Internet radio station or a privately running jukebox and many things in between.

We will setup the local streaming server so that we can connect Traktor and the transcoder to it.

Install

In the terminal window you left open, run brew install icecast.

If I remember correctly, everything should go smoothly and before long you'll get a message saying it's successfully installed.

Configuration

To keep the configuration files we are about to create nicely together, create a broadcast folder somewhere (I used ~/Music/Broadcast).

I have prepared a very simple configuration file for you, download it from https://gist.github.com/svandragt/f7ecb720416a68f096a1 (right click the raw button and select Download Linked File As.. and save it as icecast.xml in the broadcast folder you just created).

You won't have to change the contents of this file, apart from the passwords.
This configuration creates a mount point on http://localhost:8000/traktor.ogg for Traktor and LiquidSoap to connect to.

Starting and Stopping the Local Streaming Server

In the terminal window, in your broadcast folder, run icecast -c icecast.xml. It should show a few warnings but no errors, and your local streaming server is now running. Stop it now by pressing ctrl+c.

3) Install and setup LiquidSoap

Our flagship is liquidsoap, a swiss-army knife for multimedia streaming, notably used for netradios and webtvs. Liquidsoap is a powerful and flexible language for describing your streams. It offers a rich collection of operators that you can combine at will, giving you more power than you need for creating or transforming streams. But liquidsoap is still very light and easy to use, in the Unix tradition of simple strong components working together.

We will install the program and setup a flow (configuration) to connect to the local streaming server, and broadcast it to the remote stream.

It should have been simple to install using brew, but unfortunately it was not. After several days of debugging here is a working set of instructions I produced.

Install

In the terminal window you left open, we will run the following commands:

  1. brew tap drfill/liquidsoap -- This enabled homebrew to install it.
  2. brew install --env=std liquidsoap --with-shout -- this installs LiquidSoap using the standard build environment with shoutcast support

Grab a drink. After a while hopefully all works fine. I noticed that LiquidSoap is now recommending OPAM to install it so you could try that if this doesn't work for you. (http://liquidsoap.fm/download.html) - I have not tried it.

Configuration

As before, I have created a very simple flow. You will need to setup one flow per destination stream so if you play at multiple radio stations / SecondLife clubs then you will need multiple flows.

Download it from https://gist.github.com/svandragt/af43c07d5842c9c429d5 (right click the raw button and select Download Linked File As.. and save it as example.liq in the broadcast folder).

This time you have to edit it, to add the remote stream details. Change the following lines to suit your purposes:

  • output_host = "example.com"
  • output_port = 8124
  • output_pass = "mypassword"

The configuration above is for broadcasting to a SHOUTcast server at http://example.com:8124 (using the password mypassword). Leave the rest of the file alone or make a copy and start experimenting LATER, see http://liquidsoap.fm/documentation.html. LiquidSoap is very powerful.

Starting and Stopping the Transcoder

In the terminal window, in your broadcast folder, run liquidsoap example.liq. It will start showing a lot of messages, and because you are not currently broadcasting also some errors. Stop it now by pressing ctrl+c.

Traktor

Start Traktor and open the Preferences menu item. Open the Broadcasting tab.

Use the following information to point to the local streaming server:

Server settings:

  • Address: localhost
  • Port: 8000
  • Mount path: traktor.ogg
  • Password: hackme (but you changed this, right)
  • Format: Ogg Vorbis, 44100 Hz, 192 kBit/s (highest quality, bottom option)

You can enter whatever you like in the Metadata Settings.

tractor broadcasting settings

In Traktor, click the broadcast button (the little attenna). It will flash because the local streaming server isn't running and therefore Traktor cannot connect to it. Whenever Icecast is running but the button is still flashing, check that the password and other connection details match.

For now, click it again to stop broadcasting.

All together now

Before you start streaming:

  1. Start Icecast and keep it running.
  2. In Traktor, click the broadcast button and confirm its not flashing.
  3. Open another terminal window / tab in the broadcast folder for the next step.

When you start streaming:

  1. Start LiquidSoap with the flow of your remote stream. Keep it running.
  2. Start deejaying!

When you are finished

  1. Stop broadcasting with Traktor.
  2. Stop liquidSoap to let the next DJ on the stream.
  3. Stop Icecast because nothing is connected to it now.

Final thoughts

I hope this helps anyone having trouble deejaying online, I enjoy it very much and if you'd like to listen to deep house / electronica, please listen to my mixes.

 

First Thoughts on "Day One 2"

Day One 2 is out. I think it's a well rounded app although my first experience wasn't completely smooth. Still worth buying.

After a quick think, being happy with Day One Classic, I bought it assuming that the previous version won't be maintained for much longer even though I'm a very light user.

Everything imported well and quickly. The previous version synced to iCloud but now you must create an account and sync through that. This isn't explained in the interface so I was tapping on the sync preference wondering why no options popped up. Until you sign in it is unable to sync.

The app asks for your location permissions even when not using the app. This is a pet peeve of mine because I'm aware of the additional power consumption this brings. In addition I don't like being followed. When declined any feature that depends on location is still enabled but just won't do anything when tapped. Going into the system settings reveals a third preferred option of only using location when using the app. I prefer being in control of things like this.

Day One doesn't explain what is new in the app although it is instantly apparent that you can have multiple journals. Not sure why I would want this though, because I'm mostly using it to record how long ago it's been since certain events happened (light user).

Conclusion

It's clear this is a premium iOS app and all of the above niggles can be easily addressed. I have removed the classic version as a sign of confidence.

 

Trusting the government

The UK government had setup the Independent Commision on Freedom of Information with an eye to review the Freedom Of Information Act:

Last year, the government set up a commission to review the law, composed mostly of people who had expressed scepticism or concern about the scope of the FOIA, and with a clear brief to add restrictions to its workings.

Not my definition of independent.

 

Alternative Football Manager

Jack Arnott writes for Eurogamer in the Football Manager 2016 review:

Anything beyond that, though, and, once again, I'm stumped. It won't tell you whether you've lost because you were closing down too much, or too little. Or because your defensive line was too high, or too low. Would Prozone analysis have helped me tame those pesky Shrews? Not without a hireable in-game performance analyst. This is no panacea for those, like me, who crave some FM feedback.

[...]

Despite a couple of neat additions, Football Manager 2016 is an iterative release that's sadly short on big new ideas.

None of this directly applies to this review or the quality of the game but is a bit more generalist rambling on my part -- I feel SI is stuck between a rock and a hard place.
It's difficult to make a game that is seen as holding realism above all other values and then see it being criticsed for lack of feedback.

The hypothetical version that sorts this out would be surely used by all real world managers as this gives them the winning formula for winning their own leagues! The marketing of FM being used by real world managers only strangthens this conflicted ideal in my mind.

With all features already in the game the developer might be making enourmous investments now to advance the simulation just that little bit, unable to make great leaps as there is no great leap to make.

I used to think that making Football Manager light was the solution to create a more playable game but as people expect "all of the realism with less options" I don't think that is ever going to work either.

As long as it keeps selling though they would be silly to overhaul it, as it would alienate the existing fanbase.

I'm hoping there will sometime be an approximation of the FM lineage but with fun and passion as the core values under a different name, perhaps with fantasy clubs and players, silly things happening, no numbers and passion for the athmosphere of football.

 

Removing index.php from SilverStripe sites

If your website has mod_rewrite enabled but the URL's generated by SilverStripe still contain 'index.php' then SilverStripe is unable to detect mod_rewrite. Adding the following line to /mysite/_config.php will address the issue (Thanks DsX):

Director::setBaseURL('/'); // fixed index.php in the URL's

 

Gist: Pomodoro MediaPlayer

I was suffering from lack of concentration later in the workday, until I stumbled upon the Pomodoro focusing technique. I've been a lot more productive and in a better mood since I started using this two weeks ago:

The Pomodoro Technique is a time management method developed by Francesco Cirillo in the late 1980s. The technique uses a timer to break down work into intervals traditionally 25 minutes in length, separated by short breaks. These intervals are known as "pomodori", the plural of the Italian word pomodoro for "tomato".

The method is based on the idea that frequent breaks can improve mental agility.

I created an AutoHotkey script that uses timers and a global hot-key I set for WinAmp to automatically stop and start the music after instructing me to work / have a break. It works really well for me.

 

Rob Gruhl - How to Buy a New Car

From 2007, but a great video full of advice, and a fantastic example of pechakucha 20x20 presentation style.

 

Windows 10 Privacy Guide

Steve Gibson pointed me to a guide to setting your desired privacy level in Windows 10. This version of Microsoft's operating system follows the 'always socially connected' footsteps of smartphones and therefore makes privacy assumptions. Using this guide you can check if they match your expectations.

 

Automatic crash reporting using FogBugz for PowerShell

This morning I integrated our PowerShell processes into FogBugz by writing a small module that submits occurrences of all errors to BugzScout. You might want to do something similar so I did this write-up.

Broadly it works similar to BugzScoutLogWriter that I developed previously for integration with SilverStripe CMS. In this case however, we need to do the following things:

  1. Set the script to stop on all errors so they can be trapped instead of ending the execution of the script.
  2. Capture the error details and submit them to FogBugz
  3. Have an error occur. ;)

I've published the code in a Gist for you a have a look. I include the function in every script I use.

 

Hide Trackbacks works with WordPress 4.2

Hide Trackbacks is a WordPress plugin that hides pingbacks and trackbacks from your website comments.

I've updated the plugin to indicate it works correctly with WordPress 4.2.

 

Enum label lookup

In your datamodel you might have a Enum field such as this date-based dropdown:

public static $db = array(
    "Year"        => "Enum('2013, 2014, 2015')"
}

Internally, SilverStripe stores the index, so that when you retrieve the value in methods such as onBeforeWrite, instead of 2013 you will receive 1. Use the function below to retrieve the label of the Enum:

public function EnumLabel($field_name) {
    $enumValues = $this->dbObject($field_name)->enumValues();
    $label    = $enumValues[$this->$field_name];
    return $label;
}

// $year = $this->EnumLabel('Year');