15 years ago, twttr got just set up

On this day, 15 years ago, Jack Dorsey sent the first tweet ever.

  1. The Daily iOS. And while we’re in Twitter, this account publishes hidden gems from Appleā€™s documentation. Yes, another source to monitor. Can’t point out a single best example, but it’s worth it to have it in your feed and at least glance through the links from time to time.
  2. An intro to Mutation Testing - or why coverage sucks. The title says it all. You can run all the code in tests but make no assertion, and get 100% coverage, you can also miss some corner cases asserts, too (complex conditions, speaking to you), and get 100%. What if you mutate your source code a little (negate operators, change logical connections, remove function calls) to see if your test suite survives? In Swift you can try muter (still only on my list, alas).
  3. Facilitation and diving: depth, duration and decompression time. When you dive, you need to take care of the speed of emergence. You dive deep, you need time to decompress, and same rule can be applied to meetings. Simple 25-minutes call needs no time to recover, but after an hour of serious submersion you should rest at least 20 minutes before the next session.
  4. The SPACE of Developer Productivity. Developer’s productivity is hard to measure. Especially, because it’s not a single metric. SPACE frameworks tries to help here and highlights the following dimensions:
    • Satisfaction and well-being
    • Performance
    • Activity
    • Communication and collaboration
    • Efficiency and flow.
  5. Exploiting String Interpolation For Fun And For Profit. Did you know that
    let value: MyType = "Hello, \(name)!"
    var builder = MyType.StringInterpolation(literalCapacity: 8, interpolationCount: 1)
    builder.appendLiteral("Hello, ")
    let value = MyType(stringInterpolation: builder)
    but that’s not so much interesting. Better see how you can utilize it to write high-level code, just with String.
    let route: Route = "/api/profile/\(memberID: Int.self)/lists/\(listID: String.self)"
    let validArguments = route.match("/api/profile/1234/lists/5678") 
    // validArguments = ["memberID": 1234, "listID": "5678"]