Oisin Hurley

And some things that should not have been forgotten were lost.

History became legend. Legend became myth. And for one hundred and sixteen months, this following blog post passed out of all knowledge.

However it turns out Google did actually remember and I found my old blog again, and with it, a post that I reproduce in mostly its entirety here.

Warning before you begin: this post mentions Uncle Bob, who has become a bit of problematic figure around these parts. He did give a very good talk at that EclipseCon show in 2010, though.

Oisín’s Precepts Version 1.0.qualifier May 2010

I’m making a set of precepts that I’m going to try and stick to from a professional engagements perspective. These have been very much influenced by Uncle Bob – especially his keynote for EclipseCon 2010, which provided the inspiration to put these together in this form – and of course by the many mistakes I’ve made in the past, which is what we call experience. So, in no particular order:

Don’t be in so deep you can’t see reality. If you haven’t communicated with a user of your software in over a month, you could have departed the Earth for Epsilon Eridani and you wouldn’t know.

Seek to destroy hope, the project-killer. When you hear yourself saying well, I hope we’ll be done by the end of the week, then you are officially on the way to that state known as doomed. If you are invoking hope, trouble is not far away. So, endeavour to destroy hope at every turn. You do this with data. Know where you are – use an agile style of process to collect data points. Iterate in fine swerves that give you early notice of rocks in the development stream.

When the meeting is boring, leave. Be constructive about it, however. You should know what you want to get out of the meeting. If it’s moving away from what you are expecting, contribute to getting it back on track. It won’t always go totally your way. If you can’t retrieve it, then make your excuse and leave.

Don’t accept dumb restrictions on your development process. Pick your own example here. Note that restrictions can also take the form of a big shouty man roaring the effing developers don’t have effing time to write effing tests! (true story that).

There must be a Plan and you must Believe It Will Work. This is pretty simple on the face of it. One theory on human motivation includes three demands – autonomy, mastery, purpose – that all need to be satisfied to a certain degree before one is effectively motivated (see Dan Pink’s TED lecture). If there is no plan, or the plan stinks like a week-old haddock, then the purpose element of your motivation is going to be missing. Would like to earn lots of money, work with fantastic technologies and yet have your work burnt in front of your eyes at the end of the month? I wouldn’t.

Discussions can involve some heated exchanges. That’s ok, but only now and then. Without extensive practice, humans find it difficult to separate their emotions from discussions, especially when there is something potentially big at stake. Just look at the level of fear-mongering that politicians come out with to influence voters. There will be some shouting – expect it – but it’s not right if shouting is a regular occurrence.

Refuse to commit to miracles. How many times have I done this already over the last eighteen^h^h^h^h^h^h^h^h twenty-seven years? Ugh.

Do not harm the software, or allow it to come to harm through inaction. No making a mess – your parents taught you that. Stick with your disciplines. Don’t let any one else beat up on the software either. It’s your software too, and hence your problem if it is abused.

Neither perpetrate intellectual violence, nor allow it to be perpetrated upon you. Intellectual violence is a project management antipattern, whereby someone who understands a theory, or a buzzword, or a technology uses this knowledge to intimidate others that do not know it. Basically, it’s used to shut people up during a meeting, preying on their reluctance to show ignorance in a particular area (this reluctance can be very strong in techie folks). Check out number nineteen in Things to Say When You’re Losing a Technical Argument. Stand up to this kind of treatment. Ask for the perpetrator to explain his concern to everyone in the room.

Learn how you learn. I know that if I am learning new technologies, I can do it best provided I have time to sleep and time to exercise. I also know that my learning graph is a little like a step function, with exponential-style curves leading to plateaus. I know when I am working through problems and my brain suddenly tells me to go and get another coffee, or switch to some other task, or go and chat to someone, it means I am very close to hitting a new understanding plateau. So I have to sit there and not give in 🙂 I also know that I need to play with tiny solutions to help me too.

You have limits on overtime, know them. This should be easy for you – if you are tired, you are broken. Don’t be broken and work on your code. Go somewhere and rest. Insist on it.

Needless to say at some point in the future this post will come back to haunt me I am sure. But I’m hoping that if I produce a little laminated card with these precepts on it, keep it in my wallet, then I’ll at least not lose track by accident.

Narrator’s voice: He lost track by accident

Recipe Time! Well-tested Vegan Curry

This is a two-pot stovetop affair. Veg and gravy are cooked separately and then combined.

Tempering – creating a flavoured oil for cooking in

  • veg oil
  • 1tsp cumin seeds
  • 2 small dried red chillies
  • 4 cloves
  • 1 cinnamon stick

Vegetables

  • 100 grams green beans chopped in large pieces
  • 2 large carrots
  • 3 small potatoes
  • 2 cup peas
  • 2 small peppers, sliced
  • 1 small cauliflower
  • salt
  • 0.5tsp turmeric
  • 450ml water

Put some oil into pot and wait till it gets hot, then throw in the tempering spices and let them sizzle for about 5-10 seconds, then lash in the vegetables, carrots first, then potatoes, roll them around and get them covered in the flavoured oil, follow up a minute later with the rest of the veg items.

Turmeric, salt and water goes in next, and stir it up, cover it and let it cook, keep an eye on it so that veg doesn’t stick. Goal here is to have cooked veg in this pot, into which the gravy gets added.

In a smaller pot, it’s gravy.

Tempering

  • veg oil
  • 1tsp mustard seeds
  • 0.5tsp cumin seeds
  • 1 small dried red chilli

Gravy

  • 2 medium onions, chopped
  • 2 cloves garlic, squooshed
  • 1tbsp grated ginger
  • can of chopped tomatoes
  • 2tbsp tomato purée
  • 1tsp cumin powder
  • 2tsp coriander powder
  • 1tsp garam masala powder
  • 1 fistful of unsalted cashew nuts, ground up and made into a thick paste with some water

You are going to put this through a blender to smooth it out, so the onions don’t need to be chopped super tiny. If you are not blending, then chop them super tiny!

Put some oil into pot and wait till it gets hot, then throw in the tempering spices and let them sizzle for about 5-10 seconds, then in with the onions, garlic, ginger and cook till onions are browning up. Add the can o tomatoes, purée and all the spices, stir it up and cook on low for another 10 min. Blend it all for a smooth gravy, then stir on the cashew nut paste.

Mix the gravy into the pot of veg and bate it inta ya.

Note that there is no shame in drinking the gravy out of a mug on your own in in the kitchen.

Blinkenlights Are Go!

Procrastination-breaking is the order of the month here at Lab 47b as I finally managed to finish up the first part of my embedded projects development mise en place: the computery and development environment bit.

With 2x elderly and half-bollixed laptops (MacBook1,1 / MacBookPro2,2) and an elderly and 1x half-bollixed Mac Mini (MacMini2,1) to hand I crafted 2x gutted elderly laptops for the recycle pile and 1x mac mini with an upgraded 2GB of RAM and an upgraded 120GB SSD, running Lubuntu 18.04.

The SSD and the memory both came from the MacBook1,1 and worked flawlessly. The slightly faster memory in the MacBookPro2,1 gave the Mini indigestion such that it could only recognise one of the 2GB.

A top tip from @denishennessy got me to ditch the Arduino IDE and instead download the PlatformIO IDE, which extends Microsoft’s Visual Studio Code. This runs fine on the (relatively) low end compute of the Mac Mini.

Well! That’s enough success for one week. Now I shall briefly retire to inventory my unused microprocessor heap.

Own Goals

Welcome to 2019 – an opportunity to change the way things happen compared to the year gone by. Have you made any resolutions or goals for the new year? You have? Well keep them to yourself. Not that we aren’t interested, but because this could very well lead to you duffing it entirely. And, while aspirational goals are great for OKRs, this time you might actually want to get there, so think about setting implementation goals instead.

I’m not going to say anything about my own resolutions, however, in an unrelated event I actually finished a mini project. It’s a Naturewatch camera kit that appeared in my Christmas stocking. It goes into real-world deployment tomorrow.

Instructions to make are all available at Naturewatch. If you’ve handled any Pi / Arduino projects before it’s super simple to construct, and even if you have not, the instructions are presented really well.

Update – here’s some of the results!

Welcome to the Printer

Great excitement in 47b this evening as a new member of the family arrives, in the shape of an Anycubic Photon 3D Printer. This is a resin printer, which should be considerable smoother on a print than the PLA machine that we have in work (we make software – totally unrelated).

First print has kicked off, which hopefully will result in a translucent green Totoro in about 6 hours time. Or, indeed some intolerable resiny mess all over the place and disappointment for all. With the PLA printer, I think it took 4 prints to get all the correctly levelling, pre-heating and such jiggerypokery practiced enough to ensure regular successful prints.

Next up – go to bed and set the alarm for 4am to check this fella, or stay here and be overcome by resin fumes before midnight.

Give Me (Cheap) Convenience, Or Give Me Death

Several years ago I catalogued all my paper books using the barcode scanning capabilities of the Goodreads app and it was a task. I wanted a handheld zapparoony thing so I could just bip my way through the piles and then upload, recognize and store titles, ISBNs, etc. No reviews or sharing, just fast maintenance of my own library of 500 or so books.

“To the internet!”, I cried, only to have my hopes dashed by the pricetags on the zapparoony things that were nudging up over the $200 mark. Far too much, so the project was abandoned.

Until now.

Thanks to the fabulous trove that is Ali Express, I picked this little yella fella up for the princely sum of $24. It’s 433Mhz wireless USB, is rechargeable, has an inventory mode wherein you can bip all day and then upload all the bippage at your leisure. And, the thing identifies as a keyboard! It basically writes to STDIN. In the photo there you will see an emacs window on the right with just numbers in it, these are the data from the scanner.

Next steps – automation. After a interlude of heavy bipping, I’ll need to upload all the numbers to somewhere, and have an automated process do the lookups to flesh out the details of the books. On the local machine I’ll write a wee app to do the grabbing of the STDIN and the upload to wherever the storage will occur.

All of this will happen in my copious spare time.

My Part In The Supermicro Kerfuffle

After all the guff in the online “press” regarding there being some kind of a state-actor threat through infiltration of Supermicro and corruption of the server board supply chain, I get this on LinkedIn.

If you haven’t been following the aforementioned kerfuffle – see

www.bloomberg.com/news/feat…

aws.amazon.com/blogs/sec…

www.apple.com/newsroom/…

arstechnica.com/tech-poli…

Someone is going to get a book out of this one.

My First Affinity

This is a tiny chapel sitting on a promontory reaching out into a lake near Gougane Barra in West Cork. It was an iPhone 6 shot – it’s been cleaned up and messed with a bit, with Affinity Photo, an app I have no idea how to use properly.

It’s because all of the Mojave betas broke my Lightroom.

The Secret to Composing a Photo

You only need to do three things:

  1. Get CLOSE
  2. Get LOW
  3. Find a STRONG LEADING LINE

Apparently that’s it.

Now, go and practice for 10 years.

Next question.

Oh yes, that Otia article is indeed about me.

Environmental Sensing

This little fella is the BME680 breakout board from Pimoroni. The BME680 itself is the little silver box with a hole in it. It’s an environmental sensor made by Bosch that seems to be able to do pretty much everything – it detects gas (oo-er), pressure, humidity and temperature. The gas part there is about air quality, which is why I got it. You see, past Oisin wrote down in his little project book that future Oisin is to make an air quality monitor, and a humidity monitor, and while current Oisin isn’t quite sure why past Oisin wanted these things, it seemed like a good idea to do both at once.

It’s an I2C device, and my plan is to hook it up to a Pi Zero W, set up as headless and configured to do I2C warbling. The nice chaps at Pimoroni have provided a Python module for it and of course a tutorial which seems to cover everything.

Aside the fact that a Pi Zero W is actually a computer is has me in a constant state of amazement. But look, I am ssh’ing into the damn thing on my network!

Setting up the Pi Zero is a breeze – you ssh into it, change the password and hostname, apt-get to upgrade packages. Python 2.7 is on the box and that’s what we use to put things together.

Bit of soldering later (no headers on these boards by default) and this is the sensor + pooter package:

Extra packages you need to apt-get install are python-pip, python-smbus and, i2c-tools, to enable further Python package installation, and to get the libraries for communicating I2C protocol to the BME680. Follow the instructions in the tutorial to get the bme680 package, the examples, and run the read-all.py script. You might expect it to work out of the box, and it does!

That’s output from the “burn-in” – temperature, pressure, humidity and the raw resistance reading from the gas sensor. About 20 minutes later the gas sensor value stabilized at around 171kΩ. Just to give it a test, I put a permanent marker of the stinky variety beside the sensor and the resistance reading plummeted to 7.6kΩ. So something is happening at least when in the presence of VOCs.

Next step: put this timeseries somewhere so that I can make GRAFFSS. Also I really need to brush up on Python programming.

For a small town, Carlingford has more than its fair allocation of 14th and 15th century features

Tweety Bois

A few shots of some of the garden birds that have been hanging around this weekend www.oisin.photo/Birds/

Software Development and GDPR

Developers everywhere are having various grades of freakout about the EU’s General Data Protection Regulation - unofficial link to HTML version.

The core of this freakout is ambiguity, and it’s a key insight into how developer brains work, especially when the job to be done is something that seems extraneous, dull, or difficult.

If anything, software development is the action of embodying a swirl of concepts and rules that support the creation of a targeted set interactions with people or things. The process is about entirely eliminating ambiguity from the field.

With this GDPR business, we are seeing the legal profession slop over into development, and legal wrangles are all about ambiguity, and interpretation. This is why no piece of legislation in its own right is enough. It serves as a line where we start, but only after that line has been laid down can we practically begin to understand exactly how it affects the real world of people in all that world’s weirdness, complexity and indeed unexpected evolution and change. There’s no system tests here, folks.

To attempt to understand the whole situation better, I enrolled in an Advanced Diploma in Data Protection at King’s Inns, Ireland’s oldest law school. This is a course that looked at Data Protection in general, with a solid focus on GDPR, but taken very much from a legal perspective, although muggles like myself were also invited to join in.

Well, it was fun times, and the whole thing is a little complex. GDPR helps to harmonize over the 28 (for now) countries in the EEA – everyone had different rules and it was super onerous to have to know everything. GDPR is Regulation, which means it goes as written into the legislation of each member state – there is no diffs permitted. Governments are subject to it: this means that it is illegal, for example, for the DoJ to share conviction data with the DMV for the purposes of the DMV checking up on uninsured cars, because, maybe, some dude reckons that all people with a conviction are bad peoples and ergo won’t insure their cars.

That’s a big picture – the entire reason for the presence of the regulation is to help level the playing field for individual humans who are going up against corporations and states.

To come back to the development aspect. The ambiguities persist. This piece of writing was triggered by @DazeEnd and @joec discussing whether if it was ok to just mark a database record with deleted=yes, since it’s ok to delete data on a harddrive, but the underlying harddrive still has the data on it, marked as released=yes (see note below). That is a valid question, from the point of a developer. My assertion is that from a practical perspective, this is the kind of niggle that we must dismiss – and the kind of niggle that occurs when there’s a job to be done that no-one really wants to do. The result of niggling at this level is eventual upgrade to the atomic version – “we are now not available in Europe” – because it looks so DIFFICULT because there are all these EDGE CASES.

You could think, as a developer, that the lawyers worry about this kind of fine-grained issue. They don’t. This is one of those situations where they say, well, here’s the risk, you have to make a decision, document it, and be ready to back that up in front of a judge should the soup hit the fan.

In this particular case it’s straightforward enough. Are you in control of the presence of data in your database? Yes. It’s up to you to delete it when requested. Are you in control of the data on your harddrive? Yes. It’s up to you to delete it when requested. Are you in control of the operating system implementation or database implementation of deletion? No. Could you get the data back if you wanted to? Yes – but that’s not part of your usual run of business, so why would you explicitly do that? What if some bad dude steals your harddrive and then rummages through it? Ok we are getting a little far-fetched here for most businesses that are not keeping special category data, but if this does happen, then you have failed in your security controls.

I guess my overall point here is that GDPR Compliance is a continuum, not a tickbox. You want to be doing the best you can with it and document why you can go so far and not further. The companies that will be getting the big legislative fines are the guys that are willy-nilly exporting special category data out of the EEA en masse without the knowledge of the people associated with that data. The rest of us just need to muddle along as best we can.

Note – if you are using modern TRIM-enabled SSDs your deleted files are scrubbed immediately.

Twisty Boys

The AWS Summit London deployed the bejacketed nerd squad and fixed their registration system after 35 minutes of downtime and now I am going to drink some coffee and eat these twisty boys.

Neat Kickstarter

I just pledged to support a super worthy thing on Kickstarter – Within: A magazine about leadership for women in design/tech.

Learning AWS

Important milestone this morning: managed to set up an AWS API Gateway endpoint with a Lambda authorizer and a Lambda implementation without resorting to a tantrum. I think I know how it all works now.

Famous last words.

Update I thought I knew how it all worked until I decided to automate the whole thing with Terraform. I know nothing.

Things are Swiftly becoming animated

It’s high time I got to know Swift (the programming language) better, so today I ran through one of the Wenderlich tutorials which has a bit of SpriteKit going on as well – those animations are the business!

I just LOVE Duck Dynasty

I found this picture of Jim Dalrymple on stage in a swathe of old phone snaps. He was doing a talk at the Release Notes conference in Indianapolis back in 2015.

Exterminate!

Printing myself a Dalek here.

I’ve also bought a signal generator kit with the most abstruse Chinglish build instructions, a job lot of surface mount ring modulators and some cheap lapel mics. I wonder if I can put embed the mic in the dalek and then you can talk into it and your voice and a sine wave signal from the generator will mix through the magic of the ring modulator to produce a dalek voice.

maybe

The signal generator looks like this once it’s complete. It’s super tiny.

What a relief! Flickr bought by Smugmug

I’m relieved to see Flickr bought by Smugmug. After Verizon bought Yahoo in mid-2017, I reckoned that would be the end for the already fairly-stagnant Flickr service and set up a Smugmug account. Now I feel a little more relaxed about the future of my Flickr albums, and hopefully soon we will see import tools and a single subscription.

Me and My Entire Family Are High

This is the view from the top of the Al Khalifa tower in Dubai. It’s a long way down to that giant pond!

From the Gobshite Files

Organizing in Tech - one story about a company ostensibly managed by gobshites, who went down this road - tech workers unionisation. Super interesting topic for anyone who is working in tech and is being put on a crunch treadmill by a under-qualified management team. Also a reminder that managers should manage, and that leaders should lead.

The Past Should Not Be Discardable Except For That Thing You Did in '91

This is an amazing effort – digitisation of the Bibliotheca Palatina by the University of Heidelberg

When content delivery and storage is as mutable and delicate as bits in a chip, how do we prevent historical black holes opening up in the future past? Future us will be compelled just to see the HEAD revision of history, not the changes as they happened.