Articles by Peter Sabaini

  1. When Ferrous Metals Corrode, pt. V


    This part summarizes the sixth chapter of "Programming Rust, 2nd Edition", "Expressions".

    An Expression Language

    All control structures are expressions – they can produce a value. For example:

    let status =
      if cpu.temperature <= MAX_TEMP {
      } else {
          HttpStatus::ServerError  // server melted

    Blocks and Semicolons

    A block can produce a …

  2. When Ferrous Metals Corrode, pt. IV


    This part summarizes the fifth chapter of "Programming Rust, 2nd Edition", "References". There was talk of references before, this chapter provides some additional detail around shared and mutable references and lifetimes.

    References to Values

    We have encountered references previously. There are two types


    r/o references, can be …

  3. When Ferrous Metals Corrode, pt. III


    This part summarizes the fourth chapter of "Programming Rust, 2nd Edition" and deals with data ownership.

    This to me is one of the most fascinating things in Rust: how it strictly tracks which part of the code holds a piece of data, and how that ownership is passed around …

  4. When Ferrous Metals Corrode, pt. II


    Second part of my Rust learning notes, about Rust datatypes. This corresponds with chapter 3 of Programming Rust, 2nd Edition

    Fundamental Types

    Coming from a Python-heavy background, Rust type handling is of course completely different – everything statically typed, and a lot of nuance in basic datatypes. Fortunately the compiler …

  5. When Ferrous Metals Corrode, pt. I


    Hello Rustlang. I have been circling around this for a while, there's lots of folks I respect that have nothing but nice things to say, and both efficiency and safety have come to the forefront more and more for me. I think the final straw was when I recently …

  6. NATS and Go


    These are some notes and an example on hooking up Golang programs to the NATS messaging system

    NATS Messaging

    NATS messaging enables data sharing via a publish/subscribe mechanism across different processes, systems and platforms. NATS core offers an "at most once" quality of service. If a subscriber is …

  7. Fabric Automation

    Occasionally I have to do scripting work outside of our config management tool of choice, Juju 1 - eg. for bootstrapping or one-off jobs. I had used Fabric version 1 previously (as well as Plumbum) for those, and was looking at Fabric 2 (respectively it's sidekick Invoke) now.

    So whats Fabric …

  8. Thespian, A Python Actor System

    Overview: Concurrency with Actors

    Actor systems model concurrency with actors. In such a system, actors are independent objects that communicate asynchronously with each other via message passing.

    An actor can:

    • Receive and send messages asynchronously

    • Change private state

    • Create new actors

    Each actor has an address under which it can …

  9. Requests debugging

    TIL that the Python requests library is able to dump request/response details to the debug log - quite useful for development and debugging of http clients.

    Switch it on with something like this:

    import requests
    import logging
    try: # for Python 3
        from http.client import HTTPConnection
    except ImportError:
        from httplib …
  10. Neutronic Security

    Or: digging into Openstack Neutrons' packet filtering bowels

    The other day I had to track down weird behaviour with Neutron security groups in one of our clouds, and thought to share notes on debugging those and on Neutron networking in general 1.

    Compute node neutronics

    Recall that on a compute …

  11. Ceph Cheatsheet

    I love Ceph to pieces! I don't love it's docs that much though, and I find the multi-level subcommands unintuitive at times. Quick, is it "ceph pg query x.y" or "ceph pg x.y query"? There's some good docs out there, but to me they feel scattered and it's …

« Page 2 / 2