1. 23

Heya lobsters,

It’s Monday again, a new week!

What are you going to work on this week? Feel free to share and seek help/advice if you want.

I’m going to take a dig at riot 2.0 this week. Gave a quick look to their documentation, examples and tutorials – seems promising, but any pointers or insights to it, especially if you’ve tried it and can also compare it to react/ember others would be awesome.

    1. 10

      My experiment in minimal syntax highlighting will continue! Day 5 so far, and I am starting to feel some benefits and weep less. I initially planned to have no syntax highlighting, but walked back from that a bit allowing myself 4 general groupings: errors, code, comments and strings, which currently looks like -> http://i.imgur.com/6ZVKRRT.png (after screenshot, I removed underlines from strings).

      1. 2

        Hmm I like this, I’m always annoyed when there ere one or two keywords that arent being detected and I like minimalism anyway, I might try this.

        1. 5

          It isn’t just to avoid annoyance, it has a cognitive basis as well (In theory, I am not a cognitive psychologist, but I have spoken to one about this)! When you use syntax highlighting you suffer a mild form of the stroop effect (https://en.wikipedia.org/wiki/Stroop_effect). Additionally, the way our eyes are drawn to colors means you often jump around code in a non-linear fashion. Beyond those two impacts, you also are spending cognitive energy (which is finite) on item-specific processing rather than organizational processing. Item specific processing is trying to understand what a single item does, and storing that information. Organizational processing is about relating items, concepts and document flow.

          The theory (completely unproven / conjecture / insert warning here) is that by reducing cognitive overhead that has little value – you can better reason about code. The first few days were very tough, but it gets much easier on day 3. I initially planned to just do a 7 day experiment, but I will likely be extending it now as I am finding it very helpful.

          I was initial inspired to look into this when I noticed that a lot of great developers I admire use editors that don’t even support syntax highlighting (acme, micro emacs).

            1. 1

              Thanks! I’ll see if I can do some kind of solarized port of this.

              1. 1

                Still really rough and being tweaked as I find things that look horrible (like :hlsearch did on dark). Drop a link in here when you make a solarized version of it, would love to see it.

                1. 2

                  I just created a new branch for now, I’ll see if I spin it off to it’s own repo. I just realized that viml doesnt accept variables as color names (unless I’m doing something wrong) https://github.com/Superpat/nofrils/tree/solarized

                  Edit: It works now, though terminal colors are a little wonky, the gui ones are great!

          1. 2

            I’m.. unclear on how the stroop effect applies to syntax highlighting, but this looks like a fascinating area to look into. Do you happen to have any published/prepublished research showing these effects?

            1. 1

              It is my understanding there are a few ongoing studies right now with decent sample sizes (specific to coding, not just like color coding verbs, nouns and so forth which has been studied since the 60s). The only completed study I am aware of is https://www.cl.cam.ac.uk/~as2006/files/sarkar_2015_syntax_colouring.pdf which found syntax highlighting to be beneficial. I have issues with its sample size and focus (trivial tasks) and even in that case, syntax highlighting benefit decreased with expertise.

              As for the mild form of the stroop effect, I was referencing mainly different parts of your brain that process color vs. semantics and the theories section of that wiki page which go into various ideas for why stroop might happen, which if you think of the processes happening AS you read code it is very interesting.

              1. 1

                Interesting! I’d be nice to see more results on this; personal anecdote is that I find syntax highlighting really important for orienting myself quickly, but the last time I seriously went without it was way back when I was learning to program Lua in… Windows Notepad.

                So the information may be out of date :V

                1. 1

                  I find syntax highlighting really important for orienting myself quickly

                  I actually found that the most benefit I have gotten is on unfamiliar code, which shocked me. Basically, without syntax highlighting, you really read the code without hoping around, and for me that means I miss a lot less and can hold a lot more code in my head – letting me get up to speed more quickly. This was without a doubt the biggest improvement I have seen thus far. It is almost like syntax highlighting puts me into a scan mode – were I am trying to get the gist as quickly as possible and with it toned down, I am actually reading the code. Turns out that taking that little extra time up front makes me a lot faster overall.

                  Up until this week I had NEVER written code without syntax highlighting on. All the way back to 1993 and Borland C++ – syntax highlighting has been a constant… so much so that I never questioned its value and if it was actually helping me, plus, I thought it looked fantastic. That said, this is all personal anecdote and lots of reasons from honeymoon period, to placebo effect, to ikea effect could be impacting my perspective.

                  Also, worth noting (as I have gotten a few confused messages) – I only gave up syntax highlighting (and really, I still have some, I just nofrils’d it) – I still have tags, jumping around, autocomplete, etc – all modern editor features. This is simply a reduction in visual noise.

                  1. 1

                    Haha, you mention tags/jumping around/autocomplete– I don’t find those helpful at all! :V

                    (Although regex finds and multiple cursors are real nice)

                    Your point about reading unhighlighted foreign code is super interesting. That’s significantly less investment than dropping highlighting out of the text editor entirely and– well, when drawing, it often helps to turn your work upside down so you can check it with fresh eyes. Toggling syntax highlighting on and off while working on a codebase may have a similar effect, lord knows it’d be nice to have an effective way to kick the eyes out of habit and actually double check.

                    1. 1

                      That might be the case – but I was basically useless for a day after making the switch. Maybe if you toggled regularly – but I completely lost my footing for like a day, and didn’t start to see real gains until 4 days in.

    2. 9

      I’ve just finished updating a wonderful small application called hnjobs. I’m currently unemployed and the monthly “Who’s Hiring?” thread on Hacker News is a nice collection of tech jobs, generally free of recruiters. However, trying to scroll the page can be incredibly frustrating and without a notepad beside you, can lead to repeated applications to a company. (At once, not over time. It’s a good idea to remind HR departments if they haven’t responded yet on occasion.) hnjobs had already existed but was a bit out of date and could use with some touch-ups.

      With notch on my belt, I’ll need to decide on what next. I have a notebook full of ideas for projects. Not certain which one I’ll work on this week, but I’ll just spin a pencil or roll a die and choose one at (semi) random!

      And thanks for the link to riot 2.0! hnjobs is made with React and it’s been a treat using it, but a bit slow and feels cumbersome. I had remembered another library that was like a “mini react” but had forgotten it’s name. Now I just need to find an excuse to use it!

    3. 7

      Howdy all!

      Well, I spent last week at the beach with 2 other expat families. I managed to get a lot done though anyway!

      Mid-term break is over and this week, back at home and trying not to go out too much after the last couple of weeks.

      I had a new set of blood tests today (following up on a previous set of tests in September). Just through diet control alone, I’ve made some pretty big improvements and I’m not as stressed about health now. My heart rate is slower than in 3 years, my blood pressure is lower than in a few years, and overall things are improving. Next up, trying to find a cool enough time of day to want to exercise.

      I landed some big changes of mine for my client this week, getting a lot of forward motion with a major emscripten upgrade.

      And for fun, I’ve been making a lot of headway on Mindy, the Dylan interpreter. This last week also saw pull requests from a new contributor and some new people in the Gitter chat.

      We’re thinking about a new surface syntax and are open to discussion.

      I’ve also filed a bunch of issues laying out some longer-term projects.

      Right now, I’ve been working on updating a copy of the 1993-1994 era Apple Dylan test suite to work with Mindy and see how it does. Initial results actually look pretty good. I have to figure out still if this is something that I can push or something that I have to keep private. (As if anyone would even know the legal history…)

      This week, I hope to make more progress on emscripten, Mindy, and I have some things that I need to address for Open Dylan as well.

      1. 4

        On a different note, I am interested in seeing if anyone can translate some of the mathy things in one of the bidirectional typechecking papers into English for me … at least some of them so that I can get the hang of it.

        1. 3

          I’m not a formally trained mathemagician (or computer wizard, for that matter)– so summary with a grain of salt– it looks like the authors managed to find a way to formalize dead code elimination into the type system. In the introduction they start with the Haskell sum type:

          data Sum : Natural_Number -> * where
            Left   : A -> Sum 0
            Right  : A -> Sum (succ n)
          

          (Converted to a tree)

                Natural_Number
                  /       \
                 0       n + 1
          

          (Converting to go-like pseudo-syntax)

          func Sum(n NatNum) NatNum {
            if n == 0 {
              return 0
            }
            return n + 1
          }
          

          (I may be losing some of the finer details in the logic transform there– i.e., golang doesn’t have sum types, so faking it with a branching function here.)

          And, using that definition, say they can define the following function:

          fn : Sum 0 -> A
          fn (Left a) = a
          

          (Or, again in pseudo-go, totally ignoring pattern matching)

          Sum(a) == a
          

          Which the authors claim that it’s obvious to programmers that the other branch of the sum type will never be evaluated, because there’s no scenario in which Sum(a) == a where a != 0. However:

          …language designers and implementors will have more questions. First, how can [they] implement such a type system? […] Second, designers of functional languages are accustomed to the benefits of the Curry-Howard correspondence¹, and expect to see a logical reading of type systems to accompany the operational reading.

          The authors then go on through the rest of the paper to build a formal type system that can express this idea of, what looks to me, something like dead code elimination; using a whole bunch of math I’m not trained to check to do so. It looks really cool, in general– I’ve just only been snuggling up with Curry and Howard for the last six months or so.

          1. i.e., that proofs are programs– pegging programming as a branch of applied mathematics. For more information, Philip Wadler gave a great presentation related to this idea at this year’s Strange Loop conference.
          1. 2

            Thanks!

            That one was fine … It is the ones after that, starting with equality & reflexivity and going to the end of the paper that bother me. :)

            I understand most of what the prose is saying so far, but feel like I’m missing things due to not being able to read the equations. (I almost certainly am missing things…)

            1. 3

              Oh! Yeah, same here. That’s where my math experience breaks down at the moment. I rewatched the Wadler talk linked in the original post when I woke up this morning– he summarizes the development of computability theory, a couple of logic systems (including the sequent calculus in this paper), and the idea of ‘elimination rules’, which changes my assessment from “mystery math” to “I don’t know the syntax for this programming language” when looking at the more dense proof structures.

              If you’re looking to really understand the mathematical portions, I’d highly recommend that watching that talk and then checking out sequent calculus as a stepping off point.

    4. 6

      I am working on my toy game engine again. This time, I’m trying to implement a lock-free audio mixer on its own thread. Much to my surprise, not only does it work in theory, but it appears to be working in practice.

      As is standard for programming on Linux, the majority of my time so far has been spent trying to get ALSA to do anything at all (the example programs don’t build then when you fix that they don’t work), courtesy of bad docs and worse error messages (unless you enable the secret debugging mode). Thankfully, the residents of #alsa have been very helpful.

      1. 1

        So Pulseaudio abstracting ALSA away… all lies?

        1. 1

          As far as I know pulse sits on top of ALSA, so I’m hoping if I target ALSA it will work everywhere.

          1. 1

            Well, the idea was supposedly you target pulseaudio and that takes care of ALSA, OSS, esd, phonon, and aRTs for you… Y'know, one sound framework to rule them all. I guess ALSA is pretty universal nowadays, so it’s not a waste of time to target just ALSA?

    5. 6

      Dusted off the old Thinkpad X60s that’s been sitting in my closet for months and decided to libreboot it. Now I just need to figure out whether to go with Debian or OpenBSD. Also, why did we stop producing 4:3 screens?

      I’m moving next month so I need to transfer my home server to a VPS for the interim. What are you guys using now a days?

      Other than that I fixed some of the things that were bothering me with an old pinboard CLI program I wrote. Specifically I added the use of sub-commands instead of using flags for everything, i.e. $pin add URL instead of $pin -add URL.

      1. 1

        Now I just need to figure out whether to go with Debian or OpenBSD

        In the parlance of our times…

    6. 5

      Hi! I’m doing my Go Introduction talk at DevOps Mtl tonight, I think it’s gonna be fun. Even more so that this is work-related, so, yay for that! Rest of week is probably going to be more code spelunking. That being said, it’s end of sprint, so the PO COULD decide not to pull anything big, which means my spelunking will remain quite shallow.

      For not-work, I’m gonna be hammering a bit on autoapi because I have a lunch and learn in December regarding HTTP REST APIs. I also have a sweet post-apocalypse science-fiction novel idea that I wanna start writing, Goal is: Have a story plan by end of week. This all means that I’m gonna have to severely cut back on gaming, which I haven’t been doing THAT much of, but with the kids, there’s no such thing as free time.

      1. 2

        I’m doing my Go Introduction talk at DevOps Mtl tonight,

        Oh, man, just my luck to be working remotely away from Mtl this week. Will the talk be recorded?

        December regarding HTTP REST APIs

        If you’re coming to Pycon.ca…

        1. 1

          I’ll ask whoever is in charge. It’s really introductory though. If there’s interest for that, I’ll make the slides available online sometime soon. My December talk will be focused on Go interfaces, code generation, and the database as the primary source of truth, I think it’s gonna be very interesting. I’m gonna touch a bit on middleware as well. Well. Technically in Go I usually implement those as decorators to my http handlers, but yeah. Same difference.

          I sadly am not gonna be there at Pycon.ca; will that talk be recorded? Does seem to align with a good few of my interests :)

          1. 1

            If there’s interest for that, I’ll make the slides available online sometime soon.

            I would definitely be interested, so if it is not too difficult for you, I’d like to see it.

            I sadly am not gonna be there at Pycon.ca; will that talk be recorded?

            Yes.

    7. 5

      Just got to Shenzhen (深圳) and started exploring the streets, arts districts, museums and makerspaces. Easily the most exciting city I’ve visited in China…

      If anyone has suggestions for places to check out for someone on a tech tourism kick, let me know!

      1. 1

        Whoa, that’s pretty cool. How long are you planning on staying in China, and do you plan to visit any other cities?

        1. 1

          Sorry that I missed your response!

          I’m still wandering around the Chinese speaking world. Thus far I’ve visited Beijing, Shenyang, Tongliao, Chifeng, Tai'an, Shanghai, Shenzhen, Chengdu, HK, Tai(pei|chung|nan). I’m on a bit of a tech break with my girlfriend hanging out in the mountains of Taiwan right now. Should head back toward HK and southern China in a couple weeks though!

          Do you have any suggestions? I’d still really appreciate them.

    8. 4

      Home server upgraded from a teeny 1.5TB to a whopping 4TB successfully, and about half of the zones are pulling successfully from the local puppet master.

      Also had an urge to get back into some iOS development, which I haven’t touched seriously since 2012-ish. Followed Apple’s Getting started with Swift on iOS tutorial and found it quite useful. Swift seems like a very neat language as well.

      Want to start managing setting on the kids iPad’s using the iOS configuration, tried out a couple of SaaS providers for it recently but they were either expensive for what I want, or didn’t let me configure enough. Fairly sure the .mobileconfig files are just XML, so shouldn’t be too difficult to write a generator for them. (Looks like there might be a couple of projects that at least partially implement this already on GH. Hopefully can build on one of those.)

    9. 4

      This week is mainly going to be taken up by my company’s annual all-employee get-together.

      We’ll have a day for all the technical folks to hang out together in sessions/activities, then a day where we’re with everyone else, then a fancy dinner and awards ceremony. (I got nominated for something, woo!)

      Since I work 100% remotely, this is a nice change of pace. I’ll get to see my coworkers in person, chit chat, play some video games, and maybe hack on my projects with friends. :-)

      Hoping to get a toy Angular 2 app running on my flight tomorrow.

      Aside from that, working with my team to wrap up the initial version of our internal CSS framework.

    10. 4

      $SCHOOL

      • Midterms abate for now
      • Ditching hella class for flyout interviews
      • Finally made some headway on my transactional memory research! I’ve cooked up a novel way to implement arbitrarily nested,arbitrarily sized, nonconcatonative, suspendable transactions. I’ll find out today if my advisor thinks it’s worth pursuing in which case I’ll post something here.

      $PROJECTS

      • Last week I dusted off my old processor simulators and found some hillarious bugs… turns out I implemented load and store totally wrong.
      • In that same dusting off was forced to upgrade my meta assembler a fair bit, which was an adventure in missmatched types.
      • Saturday I wrote about software versioning semantics and proposed that the best we could possibly do is have language level support for change detection across compilation/reload requests and then express “versions” in terms of APIs preserved across trees of transactions on APIs. A follow up post sketching an implementation of this reload diffing for Ox may be forthcomming.
      • Started playing with forth. I don’t think I get it yet but it’s really kinda cute.

      On a personal note, I’m debating the various merits of working for a mostly/all remote company as a fresh graduate. A good friend of mine is doing so right now fairly successfully, but I’m concerned that were I to do so I’d sacrifice a lot in terms of networking opportunities which would in the long term damage my career. Feedback on this assessment would be appreciated.

    11. 3

      I’m working on notification templates for the new Prometheus alertmanager.

      This week is also the Web Summit though, so I’m going to get very little done. I need to put out some non-Prometheus blog posts to help market my company, as well as meeting as many people as I can.

    12. 3

      The Peergos alpha is live. If you’re interested, signup here. We’ve discovered that it doesn’t work at all on IE because we use native promises and all our testing is on Firefox and Chrome. Now to plan the next phases which mainly involve integration with IPFS, future-proofing the data structures, enabling self hosting, and our KeyMail email replacement!

    13. 3

      Polishing up and writing documentation for my Rust library for finite state transducers (FST). (An FST can be used—among other things—to compactly represent ordered sets or maps, and is one of the core data structures used inside of Lucene.)

      I’m currently churning through the common crawl data set from July to get (hopefully) a ~billion URLs to play with and see how well FSTs do under pressure. It turns out that it takes a while, because the common crawl is huge!

    14. 3

      Ill be attending ricon at the end of the week.

      I got interested last week in the idea of binary images being represented as bits in bytes when I discovered how some bitmap fonts work. Might play around with “drawing” text, but dont have a clear idea for what the end goal is.

    15. 3

      I’m in a fallow period at work; I need to wrestle some existing projects into shape to be shelved, and to write documentation, and only then to move onto new and exciting technical work. This sort of week is tougher when you’re remote, because the rewards are more abstract than, e.g. getting live video into an object recognition framework.

      My non-work technical schedule has me upgrading to El Capitan on my Hackintosh; getting limber in OCaml in preparation for that Stockfighter game; and perhaps finally getting LaTeX export working to my satisfaction from org-mode.

    16. 3

      Mostly the same stuff as last week to be honest. I made a lot of progress on the SSO with CAS stuff, but I prototyped it all using two “dummy” Grails apps. Now I need to finish porting my real apps to Grails 2.4.5 and then wire up the CAS support for the Shiro plugin.

      After I finish all that, I need to get back to setting up OAuth for securing some REST APIs.

      And when all of that is done, along with maybe one or two other small fixes, I think I’ll officially release the new versions of Quoddy and Neddick.

      Outside of that, still doing a lot of reading when I can. Still working on Artificial Intelligence - A Modern Approach. Also working on brushing up on my maths skills. Reading / working my way through Probability for Dummies now ( yeah, yeah, go ahead, laugh, it’s OK). And, as always, continuing my deep dive into AI / Machine Learning.

      1. 2

        Feller is a classical probability book that is probably also “for dummies” in that it assumes very little background and has lots of examples while being comprehensive (two volumes). I recommend it, despite its age.

        1. 1

          Thanks, I’ll look that up.

    17. 1

      I’ve been re-creating a “Back To My Mac”-like VPN environment for my partner and I. Part of the backstory is available in the StackExchange question I’ve asked re: OS X’s Dynamic DNS client.

      So far, the VPN itself is setup, and we have wide-area Bonjour almost working with updates to the in-VPN DNS server; I just need to get the IP address problem sorted, which will probably be through a custom DNS server.

    18. 1

      I’m working on making sure each of the engineers on my team is making progress on their goals. And getting better every day.

    19. 1

      Angular 2 Testing chapter for ng-book 2. It’s harder than I expected specially trying to use only the public API from the angular2/testing module.

      I had 100% coverage before using test_internal and now trying to port it is being a great learning experience. Hopefully this chapter will be out in a few weeks…

    20. 1

      Doing more Django stuff at work. I am starting to finally feel like I “know” Django.

      Which is a good thing, because this weekend I am (co-)presenting at Pycon.ca!