1. 1

    Remember: everything breaks, have a backup plan for when this YubiKey does.

    Can anyone elaborate on what they do as backup. I sometimes worry about this (use Yubikey for AWS console auth amonst other things).

    1. 1

      Have a backup key that’s already associated with your important accounts, and store it in a safe place. Some services won’t let you assign more than one key to an account, and I think carefully about how important it is that I can get in if my key breaks.

    1. 4
      • I plan to teach myself more about implementation design, both at work as I take on more technical leadership responsibilities and at home, fleshing out the design for and ultimately actually implementing my hobby open source project which is currently in a not very well thought out embryonic state.

      • I’ve been getting rather jazzed about the state of the Linux desktop. I’d really love to contribute to Gnome, either by writing an app or (more likely) fixing bugs in others. To that end, in line with my pledge to myself not to learn any new programming languages until I master Python, I want to learn PyGobject/PyGtk. There are a surprising (to me) number of Gnome apps written using it and I’m guessing some of them need help :)

      • I have the unlikely dream of learning enough low level details to fixi the bug in Firefox that makes it play through my internal speakers even when a Bluetooth headset is connected and properly paired. I’ve done some work already to isolate it to Firefox. Chromium and all other apps work great. Some diving in their bug tracker indicates this is a result of their dependence on the audio library they use.

      1. 1

        I plan to teach myself more about implementation design

        Any thoughts about how you’re going to go about this?

        1. 1

          At work it’s easy peasy. My team has a really strong design review culture. I’ll get hot and cold running feedback on every aspect of my design.

          For hobby projects it’s much harder. It can be very difficult to even get people to understand what it is you’re trying to build (But then communications / marketing is an important part of any good design, right?)

          I wonder if there are groups out there that do this for each other in the open source world. If there aren’t, there should be!

      1. 6

        Man, thats right next to where the Pipe would be on a QWERTZ keyboard. CP437 shows the pipe as line with a break in the middle - IMHO not too far.

        1. 4

          Pipe is another weird one, although probably less mysterious.

          Growing up, I saw the pipe with break ¦ character on my keyboard, but it produced the unbroken pipe | character. Now in 2019 with my laptop, both the key and the character are the unbroken one. (I can type the broken one using the AltGr deadkey.)

          They seem interchangeable to me, and I think some fonts get them mixed up, too.

          1. 4

            I came across this post about the difference between vertical bar and broken bar on Reddit recently:


            1. 1

              Thanks! I notice now that the pipe key on my Steelseries keyboard (around 7 years old) is a broken bar.

              On my Dell laptop it’s a solid bar. Both have “Scandiwegian” layouts, so the key (next to the left Shift) has these characters

              < \ |

              It’s also present on the top left key, which looks like this

              § ½
              ½ § |

              on the Steelseries, and

              ½ § §
              § ½ |

              on the Dell,

              and on the top right row (just left of backspace), which looks like this

              \ ' |
            2. 2

              The article mentions the broken pipe, but the source it links to is a dead link.

          1. 13

            As someone who works on a large system that sees its fair and regular share of outages, I see about 95% of outages caused by bad deploys, the mitigation being rolling the deploy back. The remaining 5% are largely unexpected faults like network cables physically being cut, power being cut across a whole data center or other hard-to-test-for cases. Note that the bad deploy can often be at a third party we rely on, such as a payments processor or cloud provider.

            This is also the reason that at critical times, when we want to minimise downtime, we put a “code freeze” no-deployment policy in-place. Most large companies for this around e.g. the winter holidays (Christmas and New Years), when many people are away and/or large traffic spikes are expected for commerce. Same with Thanksgiving or Black Friday in the US.

            And the crazy thing is, code freezes work like a charm! Having been through multiple weeks-long code freeze, this is the time when there are virtually no outages or pages. On the flip side, I observed a lot more outages happening when the code freeze is lifted and many times more changes hitting production, than before.

            1. 9

              I used to work for a large company where we had services which we deployed many times each day. One demo season we decided not to deploy anything for a while so that the televised presentations would work without a hitch.

              Unfortunately we hadn’t noticed a memory leak in one of the services which meant that it would fall over after a few days. This is one of the few times I’ve found that not releasing a change has caused a problem.

              1. 1

                This is also the reason that at critical times, when we want to minimise downtime, we put a “code freeze” no-deployment policy in-place.

                I think I read the same idea also in the “Site Reliability Engineering” book from Google. They advertise the idea there that you define a percentage uptime you want to achieve (e.g. 99,9%) and try to push changes as long you’re above your target uptime. If you fall below you’re not allowed to push changes anymore.

              1. 25

                I do this with Emacs and org-mode. I have one dedicated file - journal.org, and I create an entry per day. Despite ‘setup’ and configuration costs (which isn’t really that bad if you look at getting started with Spacemacs or Doom-Emacs), I’ve yet to come across anything that’s as frictionless whilst at the same time retaining the ultimate in flexibility.

                It might be worth a look at org-journal, but personally I’ve found the above to be pretty much all I need.

                1. 7

                  Another +1 for org-mode. I keep an inbox.org that has a top level heading for each day. So it might look something like this.

                  * March 19 - Tuesday
                  ** 1:1 w/ boss
                   - some 1:1 notes
                   - more notes
                  *** TODO a task from the 1:1
                  ** A coding task [ 0 / 3 ]
                  - [ ] write the code
                  - [ ] write the tests
                  - [ ] make a PR

                  org-mode has built in tools to manage the TODO items and the checkboxes for you. You can pull a list of all todos, or see what things were checked off what days. The check boxes give a nice overview when the subtasks are folded. All of this gets folded up by org-mode so I can see a nice summary of the day without needing to dig into each sub item.

                  1. 3

                    org-mode has built in tools to manage the TODO items and the checkboxes for you.

                    The dates, too: ‘C-c .’ AKA ‘org-time-stamp’ inserts <2019-03-19 Tue> and S-leftarrow goes back one day, etc.

                    1. 2

                      I do this exact same thing. One top-level item for each day.

                    2. 4

                      Same here with org-mode, but I also have a capture template that allows me to create a journal entry from anywhere with very little effort.

                      The following in my emacs config file allows me to type C-c c j to open a buffer where I can record my entry, which then gets saved to ~/org/journal.org under the Journal heading.

                      (global-set-key (kbd "C-c c") 'org-capture)
                       (setq org-capture-templates
                             '(("j" "Journal" entry (file+olp+datetree "~/org/journal.org" "Journal")
                                "* %?\n  %i\n  %a\n")))

                      Emacs capture templates

                      1. 2

                        I do this as well. I have a file: labbook.org with one entry per day. For me I was getting lost trying to come up with good methods of organizing my content (todo.org, $project.org, $person.org) and finally decided to simplify with chronological ordering.

                        1. 1

                          If you’re an emacs person org-mode is hard to beat. It’s outlining features are without peer near as I can tell. It’s one of the things I miss about emacs.

                          1. 2

                            Even if you don’t use Emacs for anything else, what stops you from using it for Org? Your comment reads a bit to me like “If you’re a Java person, Minecraft is a pretty fun game”.

                            1. 1

                              Because I came to realize that much of Org’s power, much like the rest of emacs’s power, is more than I need and ends up being a bright shiny distraction that I end up futzing with endlessly rather than actually getting work done :)

                              Plain old Markdown files have served me very well for work stuff, and Evernote for personal stuff.

                        1. 2

                          I’ve used Streisand to create a VPN endpoint on a Digital Ocean droplet. AWS, Google Cloud and more are supported out of the box.

                          1. 2

                            Streisand looks very cool!

                            I’ve personally used Algo a lot - spins up a quick IPSEC VPN. I’ll trash it and make a new one every few weeks, really well written and good bit of software.

                          1. 16

                            This is a mix of great advice, things that are hopefully obvious, and a few terrible ideas just to spice things up. In particular the example of (comp str/capitalize str/trim) being labeled as “hard to read” compared to the lambda version is just bizarre, and the convention of marking reference types with * “because it resembles C/C++ pointers” would be a huge red flag if I saw it during code review. Adding in extra newlines sounds like a great idea if you always work plugged into an external display or two but shows a disregard for your colleagues who may prefer to work from a laptop.

                            1. 6

                              I thought the * prefix was interesting in that it offers up a solution to naming references. I find it difficult to name references something other than the thing they point to.

                              1. 2

                                I think you could make a case for a special naming convention for top-level def reference types, but it’s not helpful when it’s a local, which hopefully is the more common case.

                              2. 5

                                I had similar thoughts. It seems peculiar to offer a recommendation “Avoid higher-order functions” in a functional language.

                                The article did put me in mind of Stuart Sierra’s series of posts Clojure Dos and Don’ts. I also like How to Name Clojure Functions.

                                Regarding the recommendation to replace the threading macro with a let: an advantage (for me) of the threading macro, is that it’s immediately clear that the result of a function is not used again. It’s a temporary value that doesn’t matter after the next function in line has been called. In a let you have to scan the surrounding code to see how the value is used.

                                As an aside: I quite dislike that the code examples are images without alt text.

                                1. 1

                                  Also, avoiding the threading operator just to obscure the computation going on with some (probably badly) named steps (remember, naming is hard) is not the best.

                                  At work we used ->> a lot, because it both frees you from giving strange names to intermediate computation results and allows you to plug in whatever function you want to intercept the computation without having to rewrite your code.

                                1. 3

                                  Where Erlang uses true as a catch-all, Clojure has the :else keyword. This makes it more readable.

                                    (< n 0) "negative"
                                    (> n 0) "positive"
                                    :else "zero"))
                                  1. 16

                                    :else isn’t anything special in Clojure, it’s just truthy. The following is the same:

                                      (< n 0) "negative"
                                      (> n 0) "positive"
                                      true "zero"))
                                    1. 5

                                      I regularly use :else as the catchall clause in Elixir (same rules as Erlang). Anything truthy will work.

                                    1. 5

                                      If you use Emacs check out magit.