Cascade Of Insights

The blog of Adam Gordon Bell (agbell)

  • Postgres Update With Join

    How to perform and update with a join using CTE’s in postgres

    • in a cte, write a select that returns the update to values, and the join on conditions
    • join on that in the update
    • Test: Optionally write a select that tests your results and wrap it all in a rolled back transaction to test run
  • Using Custom Packages in NixOs Configuration File

    Here is a problem we encountered with NixOS:

    The nix-channel we were on didn’t have the latest version of something we needed. This happened recently when my coworker upgraded to Postgres 9.5 from 9.4 but the PostGIS version in nixpkgs hadn’t been updated to a 9.5 compatible version.

  • More Scala Groups And Tuples

    Continuing from here, I have lists of tuples and I want to group them. Here I have a list of 4-tuples and I want to group the second tuple by the first. The fact that I need to do this probably represents some greater problem, but that is a story for another time

    import shapeless._
    import syntax.std.tuple._
    import poly._
    object GroupLists {
    def group1TwoExtra[A,B,C,D](t : List[(A,B,C,D)]) : List[(A,List[B],C,D)] = {
          val map = LinkedHashMap[A, LinkedHashSet[B]]()
          val mapOther = scala.collection.mutable.Map[A,(C,D)]()
          for (i <- t) {
            val key = i.head
            map(key) = map.lift(key).getOrElse(LinkedHashSet[B]()) + i.drop(1).head
            mapOther += (key -> i.drop(2))
 => (b._1, b._2.toList) ++ mapOther(b._1)).toList


NakedObjectsFramework antlr aop attribute-based-caching blog bluetooth brain_gym c# ci clojure comedy cte data emacs essay euler f# faq field-level-authorization fitness good-judgement-project gym hakyll haskell haskell-is-hard humor ideas keyboard nix nixos nparsec parsec parser parser-combinator paul-graham postgres postsharp prediction presentation release row-level-authorization scala slick tags thinkpad tuples update windows wordpress wssf