Rob Ashton

Writing

I tend to write in series, sometimes ten or twenty posts about one thing while I learn it, and the odd standalone rant in between. 262 posts since 2009, some of them still useful, some of them about technology nobody has touched in a decade. They stay up either way.

The series · Everything, by year · RSS

Series

Blogging the mundane: NVIDIA

Writing an NVENC/NVDEC driver for our own media stack, with only moderate frustration.

  1. Blogging the mundane
  2. Getting started with NVEnc
  3. Exploring the NVIDIA code samples and docs
  4. Decoding h264 with Nvidia
  5. CUDA Context Management with NvEnc
  6. Encoding h264 with Nvidia

Purescript on the BEAM

id3as starts writing Purescript instead of Erlang, and I write down what happens.

  1. Functional Erlang - Purescript on the BEAM - Intro
  2. Purescript on the BEAM: Getting Started
  3. Purescript on the BEAM - Writing some basic code
  4. Purescript on the BEAM - Basic interop with Erlang
  5. Purescript on the BEAM - Calling Purescript from Erlang
  6. Purescript on the BEAM - OTP from scratch

Pinto and Stetson

Opinionated Purescript bindings to OTP and Cowboy, and an end-to-end project built on them.

  1. Introducing Pinto and Stetson - Opinionated Purescript bindings to OTP and Cowboy
  2. The structure of an end-to-end Purescript OTP project
  3. Building on top of OTP with Purescript with Pinto
  4. Building a Purescript web server with Stetson and Pinto
  5. Shared code twixt Purescript server and client
  6. Purescript interop with native Erlang - Interacting with Redis
  7. Codemesh 2019 - Purerl and OTP talk
  8. Purerl - Some questions from #CodeMeshLdn

Purerl updates

Two rounds of changes to Pinto and Stetson, in 2020 and 2021.

  1. Updates to Pinto+Stetson - Purerl In Progress
  2. Purerl updates - Typed routes in Stetson
  3. Purerl Updates - Arbitrary messages and handle_info in gen servers
  4. Purerl Updates - Arbitrary messages and Stetson handlers
  5. Purerl Updates - Monitors in Stetson and Pinto
  6. Purerl Updates - Message Routing From Legacy Code
  7. Purerl Updates - Processes and Self
  8. Purerl Updates - Subscriptions
  9. Purerl Updates - Untagged Unions
  10. Purerl Updates - maxing out Pinto OTP
  11. Purerl Updates - GenStatem
  12. Purerl Updates - A heap of ported modules

A few notes on Elm 0.17

  1. A few notes on Elm 0.17 - Intro
  2. A few notes on Elm 0.17 - The Language
  3. A few notes on Elm 0.17 - Composing Applications

EventStore

  1. Playing with the event store
  2. Basic projections
  3. Re-partitioning streams
  4. Creating a projection per stream
  5. Pumping data from Github into the EventStore
  6. Emitting commits as their own events
  7. Backing up your database
  8. Who writes the sweariest commits?
  9. Temporal queries - who doesn't trust their hardware?
  10. Crossing the streams to gain real insights
  11. Temporal averages
  12. Sentiment analysis of Github commits

Javascript

  1. Look Ma - No Framworks
  2. Grunt+Browserify+NPM = Application Success
  3. jQuery isn't a framework, but I don't really use it anyway
  4. Frameworkless JS - an example
  5. Starting the frameworkless project
  6. Rendering templates in a frameworkless project
  7. Using Knockout in a frameworkless project
  8. Why I stopped using Asynchronous Module Definitions
  9. Stop using relative paths in our JS
  10. Anti templating languages

Investigating Kotlin

  1. Looking at Kotlin
  2. Classes and functions
  3. Kicking the inheritance addiction
  4. Fun with functions
  5. Wrapping up

Writing space invaders in Clojure

  1. Mission statement
  2. Drawing a square
  3. Moving the square
  4. Attributes and Vectors
  5. Improving my workflow
  6. Adding more state
  7. Mutating lots of state
  8. Adding maps
  9. Keyboard input
  10. Adding items to a sequence
  11. Refactoring state transition
  12. More idiomatic clojure
  13. Adding collision detection
  14. Functional difficulty levels
  15. This is where I realised how bad it was

My relationship with SOLID

  1. Single Responsibility
  2. Open Closed
  3. Liskov
  4. Interface Segregation
  5. Dependency Inversion

Cascalog and the OHD Platform

  1. Part 1
  2. Part 2
  3. Part 3
  4. Part 4
  5. REPL Driven Development
  6. Opinion on all of this

Being agile, and having a work life balance

  1. I worry too
  2. Don't be a super hero
  3. Change it up with Tekpub
  4. Stand-ups are a crutch
  5. Working for free and what it taught me
  6. Working hours and working at home
  7. Fallacy of the Drefus model in software development
  8. Why work for free
  9. A relaxed attitude towards the pragmatic delivery of okay software

A week or so at Hibernating Rhinos

  1. Working at Hibernating Rhinos
  2. Adding idle indexes
  3. Auto idling indexes
  4. Removing temporary indexes
  5. Autocompaction of indexes
  6. Running indexes in memory
  7. Re-thinking result transformers
  8. The problem with result transformers
  9. A new way to look at transformers
  10. Using transformers outside of querying
  11. Avoiding ambiguity in transformers
  12. Custom query inputs in RavenDB
  13. Investigating RavenDB on Mono again
  14. Basic operations with LevelDB
  15. Transactional Guaranteers in LevelDB
  16. Writing a transaction manager on top of LevelDB
  17. Streaming large values from LevelDB
  18. Secondary indexes in LevelDB
  19. The price of abstraction, LevelDB in RavenDB

Opinions

  1. Your container is not wanted here
  2. Ruby on Rails and the Phantom Menace
  3. Testing and the REPL in Clojure
  4. CQRS is too complicated
  5. Uncle Bob's viewpoint considered harmful
  6. Service location is not always evil

Project write-ups

  1. Github Live
  2. The anatomy of a 48 hour HTMLJS game
  3. Asset packaging in browser based games
  4. A video of me building a game in 48 hours
  5. Hoverbattles is released
  6. WebGL pong
  7. Game loops for multiplayer Javascript
  8. TwitterFS - Hackcamp 2010
  9. CUDA I
  10. CUDA II

Miscellaneous

  1. Primary/Secondary set-ups in RavenDB
  2. Garbage collection in a managed database
  3. Refactoring the method I am least proud of in CravenDB
  4. A tongue in cheek comparison of frameworks in JS
  5. Lessons learned building a game in WebGL
  6. Static analysis of code to generate schemas from Simple.Data

Learning OMeta with OData in Greece

  1. Learning OMeta
  2. Building a JSON Parser
  3. Building an OData Parser
  4. Starting with OData
  5. Nested resource paths
  6. Service operations
  7. Applying modifiers
  8. Paging support for OData
  9. Looking at FilterBy
  10. Recursive expression parsing
  11. Not the results you are looking for
  12. Arithmetic operators
  13. Precedence grouping
  14. Filtering functions
  15. The final query bits
  16. The end product

Everything, by year

2023

2021

2020

2019

2018

2016

2015

2014

2013

2012

2011

2010

2009