RxSwift: Multiple subscribers for a unit of work

December 7, 2018

I've been working on a side project for better CIFilter documentation lately, and I decided this was as good of a time as any to try out RxSwift. We use reactive programming at work, but I haven't really been able to dig into it yet...

Installing Nokogiri from a Gemfile on Mojave

November 13, 2018

Another MacOS and another struggle through installing nokogiri. Most places online recommend using...

Accessing MDX Frontmatter in Gatsby

November 7, 2018

While building this site in Gatsby using MDX, I noticed that there wasn't any documentation on how to include data from the frontmatter of an MDX document in the document's page layout...

Easy Gatsby Image Components

November 1, 2018

I use Gatsby as a static site generator to build this blog using React. As part of this, I wanted a simple component to display a static image, something like this:

<Image filename="myimage.png" />

Surprisingly, this is hard to do in Gatsby. The default Image component generated by Gatsby uses StaticQuery:

How NOT to set nil in UserDefaults

October 21, 2018

To clear a value from UserDefaults, I previously thought it was fine to do something like this:

UserDefaults.standard.set(nil, forKey: "myKey")

Turns out that this works differently in different iOS versions. Starting in iOS 11, setting nil for a key works as I expected.

Casting a pointer to UInt in Swift

October 15, 2018

There are some times in Swift, like when using System Trace, that you want to get the pointer value of an object directly as a UInt (passing the pointer to kdebug_signpost is one). I was surprised at how hard it was to find documentation on how to get a Swift reference’s pointer value as a UInt.

NSObject Equality is Tricky

November 12, 2016

Swift can be tricky sometimes. For example, what does the following print?

class A: NSObject {
  let x: Int

  init(x: Int) {
    self.x = x
  }
}
func ==(left: A, right: A) -> Bool {
  return left.x == right.x
}
print(A(x: 1) == A(x: 1))
print([A(x: 1)] == [A(x: 1)])

Syntax trees with Pyparsing

October 22, 2016

Let's talk about syntax trees. In static analysis, a common operation is to take a character string (e.g. "x = 1") and transform it into well structured data. Let's try to do this in python. We'll use Pyparsing as our tokenization tool.

My Bucket List

May 19, 2014

Ambitious, subject to change, incomplete, based on this. 1. Create something that touches 10,000 people. (January 20th, 2013) 2. Create something that touches 100,000 people. (January 14th, 2015) 3. Create something that touches 1,000,000 people.

Tables are hard

April 2, 2014

Let’s talk about HTML tables. Here’s some code:

<table class="main">
  <colgroup><col class="votes"><col></colgroup>
  <tr>
    <td>Votes</td>
    <td>Comments</td>
  </tr>
  <tr>
    <td>
      <p class="vote-desc">Some long name, really long, like really super long</p>
      <p class="vote-desc">Another long name, really long</p>
    </td>
    <td>
      <p class="comment">A really, really, really, really, really really really really really, really long comment.</p>
    </td>
  </tr>
</table>