Event: Makers Marks – Connecting Engineers & Scientists with Artists & Designers

Hacklab member Al (who writes in the third person) is helping to organise an event at Summerhall on Monday 28th of November to show some glass pieces that are the output of a collaborative art project, combining glass blowing and casting, electronics, sound design and composition. The event will include some brief presentations about collaborative art,[…]

Made in Hacklab: Sentient Forest

If you’ve been in the lab during the day in the first couple of months this year there’s a good chance you’ve found me, Andrea and Random sweating over LED strips, surrounded by wires and PVC tubing. It was all assembly work for an artwork called Sentient Forest, which has now been installed in its new[…]

Science Festival 2015 workshops!

We’re pleased to again be part of the Edinburgh International Science Festival. This year’s Science Festival is just about to start and the big finale is on the 19th of April when the Edinburgh Mini Maker Faire returns to Summerhall, more on that soon. Hacklab is running five workshops this Festival, our Paper Circuits workshop has already[…]

Eigentesting

my task

"connect 80k simultaneous clients, logging in and out at an overall rate of 50Hz, and requesting pages at an overall rate of 100Hz"

lets model a client as a random walk on a state graph (a Markov chain), where the action taken by a client is drawn from a distribution conditioned on the current action. (TL;DR we will bootstrap frequency estimates from this representation using eigenvectors)

MarkovControl

[…]

New workshops for the Science Festival!

Missed out on our recent Arduino or soldering workshops? You’re in luck! In April, we’re running workshops as part of the Edinburgh International Science Festival. We have four different workshops in the Festival programme, each one running twice during the two-week Festival: Getting started with Arduino Arduino is an easy to use microcontroller platform designed for[…]

Remove redundant brackets from expressions with Falafel

I am writing a static analyser for Firebase. My approach to precedence and brackets has always been, if in doubt, whack a bracket round it. Unfortunately when writing code generation tools my output ends up with more brackets than logic :s

Anyway, I was having trouble debugging my generated code, and it was impossible to reason why it wasn’t working what with all the brackets. So I kept with maximum bracket insertion in the 1st pass (a reliable strategy), but wrote a function for removing ALL redundant brackets from a Javascript expression post 1st pass (easier to read). It took a while to get right but I was very pleased with the brevity.

So the expression: (4 + 6) * 6 needs its brackets to operated correctly, but (((4) + (7) * 8) has a number of pointless brackets in it. There are some tricky cases like 5 / (7 * 6), which requires brackets despite * and / having equal precedence. To understand why 5 / (6 * 7) needs brackets you have to understand that when operators have equal precedence, by default, they associate to the left. Anyway the code to actually do this turned out to be super compact so I share it with you!

I used node-falafel which is an awesome package that allows in place source code rewrites during a bottom up parse. Woah! The function “simplify” takes an expression as a string, and returns a functionally equivalent expression but without the pointless brackets in it. Nice!

[…]

Weaving Wolfram Rule 90

 

I’ve been interested for a while in cellular automata, pattern generating mathematical formulae such as Rule 90

There are many of these rules, each generating different behaviour. Each rule generates the content of cells in a column based on the cells in the preceding column, and are each based upon given starting conditions. 

These are the rules for Rule 90:

current pattern

111

110

101

100

011

010

001

000

new state for center cell

0

1

0

1

1

0

1

0