1. 1

    Just like 3 years ago, I still live in Emacs XMonad T430s coreboot Debian Stretch.

    1. 1

      Happy Birthday GNOME!

      1. 4

        I use a Moleskine notebook with a mix of bullet journaling and org-mode markup to log times, events that happen, doodles and diagrams. I try to transcribe as much as I can back to my Org-mode files. I keep a $workday tag, and separate each org-agenda-file by each task type like backend, ops, and such. For most cases, I keep everything in my org-mode files, just like someone else mentioned in their reply, it’s quite useful to rely on the capture capability, to capture interruptions, meetings, and quick notes. The big win of Org-mode are the capture templates. I can have notes and attendees of a meeting all setup in a heading with multiple sub-headings in one key stroke, ready to be edited, and filled up while the meeting is clocked. This makes sharing meeting notes or transcribing your notes to another document a breeze. I clock all my tasks and do effort estimates for each task which can later be filled back in any Bug Tracker. I follow as close as I can Norang’s Org-Mode document.

        I wish I could spend more time on my notebook, but I’ve become accustomed to this workflow. It’s hard to break the habit now.

        1. 1

          Is there any other known template for commits? or another alternative for a verbose commit?

          1. 33

            I’m an Ocaml user and, except for a few rare conditions, I’ve found I much prefer a result type to exceptions. My response will be based on Ocaml which may not be the same as F# so if they don’t apply there then ignore it.

            Some points I disagree with the author on:

            AN ISSUE OF RUNTIME

            I didn’t really understand the example here. How is the author accessing an optional value? In Ocaml we have to use an accessor that would throw an exception if the value is not present or pattern match the value out. This doesn’t seem to have anything to do with exceptions or results, just an invalid usage of an option.

            AN AWKWARD RECONCILIATION

            This is the case in Ocaml as well, which is why many libraries try to make exceptions never escape the API boundary. But writing combinators for this are really quite easy. A function like (unit -> 'a) -> ('a, exn) result is available in all the various standard libraries for Ocaml.

            BOILERPLATE

            The author should be using the standard applicative or monadic infix combinators. Maybe F# doesn’t allow that. In Ocaml the example would look like:

            let combine x y z =
                pure (fun x y z -> (x, y, z)) <*> x <*> y <*> z
            
            WHERE’S MY STACKTRACE?

            This is the one I disagree with quite a bit. If I am using exceptions then yes, I want stacktraces, because it’s a nearly unbounded GOTO. But the value result types give me is that I know, using the types, what errors a function can have and I have to handle it. This makes stacktraces much less valuable and the win of knowing what errors are possible and being forced to handle them. I’d much rather have this than stacktraces.

            THE PROBLEM WITH IO

            The problem here doesn’t have anything to do with exceptions, it’s that the return type should be a result where the Error case is a variant of the various ways it can fail. Ocaml makes this much much easier because it has polymorphic variants.

            STRINGLY-TYPED ERROR HANDLING

            Yeah, use a variant not a string.

            INTEROP ISSUES

            This can indeed be a problem. It’s also a problem with exceptions, though.

            1. 9

              100% agreed. Debugging from a stack trace is far more complicated than having good error handling through compiler enforced types.

              1. 3

                Ditto. This is the case I’ve found in any FP language that I worked at, it takes more time to work with the stack trace, and recover anything valuable from it, instead of utilizing the compiler and the type enforcing at compile time.

              2. 2

                WHERE’S MY STACKTRACE?

                This is the one I disagree with quite a bit. If I am using exceptions then yes, I want stacktraces, because it’s a nearly unbounded GOTO. But the value result types give me is that I know, using the types, what errors a function can have and I have to handle it. This makes stacktraces much less valuable and the win of knowing what errors are possible and being forced to handle them. I’d much rather have this than stacktraces.

                This is a case where you can eat your cake and have it too. Java has checked exceptions which the compiler enforces are handled. When call a function that can throw a checked exception, the calling a function either has to handle the exception in a try block, or include in its signature that it can throw an exception of the specified type.

                You can also do the opposite and add the stack trace to the result type. Most languages provide some way to obtain a stack trace at runtime, so all you need to do is attach the stack trace to the error when it is instantiated.

                1. 4

                  Checked exceptions in Java are a nice experiment but a rather colossal failure, unfortunately. Since the compiler cannot infer checked exceptions you have to retype them all out at each level and it becomes unwieldy. The situation is even worse with lambda’s where one has to turn a checked exception into an unchecked one.

                  1. 3

                    Is it simply type inference on function declarations that you see as the difference here? I am curious because as a Java programmer by day, I don’t see a ton of difference between “-> Result<FooVal, BarException>” and “FooVal someFunc() throws BarException { … }”.

                    Granted the implementation is quite different (unwinding the stack and all that), but is it simply ergonomics that makes the latter a “colossal failure” in your mind?

                    1. 3

                      No, the difference is that results are just types and values. From that you get all the great stuff that comes with types and values. For example:

                      • Type inference. I only specify the types of my functions at API boundary points.
                      • Aliasing types. If I have a bunch of functions that return the same error I can just do type err = ..... rather than type all of the errors out each time.
                      • They work with lambdas!
                      • They work with parametric polymorphism. I can write a function like 'a list -> ('a -> ('b, 'c) result) -> ('b list, 'c) result.
                      • And, probably most importantly, it does not add a new concept to the language.

                      That checked exceptions do not compose with lambdas in Java basically tells me they are dead. All the Java code I’m seeing these days makes heavy use of lambdas.

                      1. 2

                        Gotcha, thanks for the reply. I don’t disagree strongly, but I feel like what you are arguing for is Java, minus checked exceptions, plus more pervasive type inference, plus type aliases, plus several other changes. Which, that’d be pretty cool, but I think at this point we’re discussing sweeping language changes as opposed to the merits of checked exceptions strictly.

                        For example, simply replacing checked exceptions in modern Java with use of a Result would (at least as far as I can imagine) still result in a lot of verbosity. You’d just be typing “Result<Foo, Bar>” a lot as opposed to typing “throws Bar” a lot.

                        Not to be overly argumentative or anything. But “colossal failure” seems a little strong to me! :)

                1. 2

                  Calculating expenses given that I have to move out of my friend’s collo. Don’t know if to go AWS or DigitalOcean or a Mix of both. The not so bad part is that I already have everything in provisioning code.

                  1. 1

                    Might be worth taking a look at vultr (I found I ended up preferring it over DO). They have a couple of cheap options – I currently use one of the little $5/mo instances (running FreeBSD) over there.

                    1. 1

                      Thanks for the suggestion, I started looking into vultr today.

                  1. 30

                    My workplace acquired/hired a product and the sole developer a while back. His title is now Head of Development. He has worked on this product for some 15+ years. I was assigned to work on the same product. I quickly sold him on the idea of using the version control software we are using internally (he wasn’t using any).

                    I tried my luck on selling CI while I was at it, but I didn’t have the same success. I deployed CI anyway. 2-3 days per week, the builds are red because he checks in something that doesn’t even compile. He doesn’t notice. The C# code base is a mess with home-grown crypto instead of HTTPS. User passwords are essentially stored in plain text. We have no automated tests. Up until last week we didn’t have a release plan. He just released whenever he deemed appropriate.

                    We’re now working on mobile apps as well that will work alongside our webapp. Someone told him about JSON, which he liked over XML. I suggested we opt for a restful API, showing off various examples like api.github.com but he prefers inventing his own API (which we already know will be consumed by others at some point).

                    Just today he asked me if I knew of a best practice around formatting dates. I pointed to ISO 8601. He didn’t want to deal with that sort of complex formatting.

                    I’ve turned to meditating.

                    1. 10
                      1. 2

                        This is a good idea for internal corporate remediation too.

                      2. 7

                        o7

                        Godspeed.

                        EDIT: You might point out RFC3339 as simpler than 8601, which it is–it leaves out the interval stuff.

                        1. 4

                          RFC3339 FTW! Due to it’s regularity, it also happens to be the best fallback date format for all countries using the latin script.

                        2. 2

                          I’m in a similar stressful situation, and I can’t stop recommending going to a non-gym like yoga class. Go to a real Yoga class, meditation will help your mind, but yoga does a full body-mind work.

                          1. 2

                            I was recently in a similar situation. I came to a behemoth, 12 separate, identical web applications that should have shared code but instead each one was kept separate and changes were diffed and merged by hand. No release plan. No best practices. Ugly code being spat out by WebForms. jQuery plugins and front-end frameworks littered all over the place. I just quit and found a better company to work for.

                          1. 2

                            At work, reaping the benefits of my recent Org to JIRA undertaking. It’s not a complete implementation, but it’s handled everything I’m likely to use in a JIRA issue / comment. I usually write a private Gist where I put the master note, update it there then export to JIRA and paste into the issue. Works quite well :-) Very nice for tables, or checklists (with statistics cookies) which Orgmode handles very nicely and the default JIRA editor not at all.

                            We’re a remote company and last week the entire tech team met up at HQ, which was nice.

                            1. 1

                              That is really cool!

                              Now to convince everyone to migrate from bugzilla at $work. But jira has that agile stink to it so its not a huge desire for most.

                              1. 1

                                Thanks for that, now I have the killer combo with ox-jira. Markup my comments and send them with Emacs. Check out Org-Jira, it’s a great way to turn your tickets into org-heading and viceversa.

                                1. 2

                                  Oh cool! I’m glad you like it. I’ve tried to get org-jira to work, but I’ve had no luck. We use the hosted implementation at $foo.atlassian.net, and I’m wondering if they don’t provide the SOAP API by default? I’m getting a soap-load-wsdl-from-url: Error retrieving WSDL: 404 error :-/

                                  Update: it looks like the SOAP API was removed some time ago :-(

                                  1. 2

                                    Bummer, at work we host our own, but I guess we don’t have the most recent version. I will see if I can make it work with the REST engine.

                              1. 2

                                I’ve finally created a base host property list for my nodes in Propellor, the only thing left is applying extra tweaks for specific nodes, and I will be fully provisioned and configured with Propellor. Aside from that, I’m moving all my Gentoo nodes to Debian, it’s been a great ride, but I just don’t have the time anymore to commit to Gentoo. As an extra-endeavor, I will try to finish the Haskell exercise from Exercism. Maybe ;-)

                                At $WORK, I’m doing a performance test on our Kafka setup, finishing our disaster recovery service in Scala, and playing with more Clojurescript.

                                1. 7

                                  Got tired of running go test in a terminal inside Emacs so I wrote a plugin to do just that. Who knew writing Emacs plugins was so much fun and easy.

                                  1. 2

                                    This is neat! I pretty much exclusively use compilation-mode for this purpose, which works fairly well. But, I don’t have an easy story for “run test at point”!

                                    1. 1

                                      Thanks! I’m a bit confused, what do you mean with story?

                                      1. 1

                                        I just mean, i have no way to do what squeak does without typing the whole go test command out.

                                        1. 1

                                          Ah, right. That’s precisely what I wanted to do with it, since go-mode already provides function name detection. I also wanted something to make it easy re-run tests while modifying the package code.

                                          I was thinking of expanding it into other things, e.g., go build which would detect errors Flycheck doesn’t usually detect (like missing packages or undefined variables), and generally using the oracle tool to do all kinds of magic (find usages). So the plan is not to be exclusively a test utility library, but more of a utility kit on top of go-mode. Time will tell!

                                    2. 1

                                      Not to discourage you about your plugin, but have you used the M-x compile. You can run compile once, set it to go test -v, this will open a new window with the result and clickable line errors, and after that you can do M-x recompile to re run go test. You can utilize it for build or any other option you need from the go toolkit.

                                      Compilation manual

                                      1. 3

                                        I have. The behaviour, usability and appearance of M-x compile are exactly the reasons why I wrote this plugin.

                                        To be specific, I did not want to:

                                        • …initially write the compilation command after typing M-x compile
                                        • …have a new buffer appear every time the command runs
                                        • …read a bunch of redundant information that can be compressed into a single line
                                        • …type the name of a single test after go test -run ... myself
                                        • alter the test to be run when I want to run another unit test

                                        What I did want was something that

                                        • provides simple bindings that do what I mean and work in any Go file
                                        • requires no typing effort
                                        • compresses information into a concise one-liner
                                        • IDEs have already provided since the early 00s

                                        I understand the point of M-x compile is generic and the point of this plugin is to be specific.

                                        In the future I’ll implement highlighting of succesful and unsuccessful tests using Flycheck or something that lets me put stuff into the gutter.

                                      2. 1

                                        Nice! I’ve been using flymake plus a custom script for the last couple years. Basically by default go build is ran. If I’m editing a _test.go file then go test is ran. go vet is run on everything.

                                        1. 1

                                          Thanks a lot!

                                        1. 3

                                          When I’m close to one of my machines, I make use of org-mode in Emacs to record my notes into org-headings or notes. When I don’t have any of my machines close to me, I always carry a couple of HipsterPDA TODOs and Meetings index cards, along with a Moleskine for long and detailed notes. My pen is a Muji Fountain Pen.

                                          The cards and the notes from my Moleskine are later recorded into my org-mode headings. This helps in two ways, one, while you type down the org-heading you revise and review the task, making it easier to understand and remember, and, two, paper is not a reliable data format.

                                          I sync my org-files with a git repository that I keep in all my machines.

                                          1. 3

                                            Coreboot on T430s, GuixSD and Propellor. Trying to make this year, a Haskell year.

                                            1. 4
                                              • Posting an update to Prose for Programmers
                                              • Helping DevOps team finalize continuous delivery pipeline for UI libraries
                                              • Putting together presentations/workshops to help developers get up to speed with our UI dev stack
                                              • Writing a Yeoman generator to scaffold our UI projects
                                              1. 1

                                                I’m not a fan of JS, but man, Yeoman is such a great tool. That sounds cool. You should create a barebone css+html template website clean Yeoman generator. I would use it. I love to browse at the generators.

                                              1. 1

                                                I agree with these, but it depends on the level of the task you’re solving. We can use any language or tool to solve a problem, but shouldn’t we chose the correct and efficient tool to solve a problem the fastest way? That’s the main problem with this kind of classification. I love Python and Ruby , but I won’t write an app that will take many requests with either. But with that said, I will definitely write a fast script or tool to transform text with it, a CLI tool, and a repetitive shell task. The same goes for Guile or Lua which are best for extensions. Each language has a strength, make use of it.

                                                1. 1

                                                  Will this be recorded? Can’t tell. I hope they do release it.

                                                  1. 2

                                                    The recent ones are, e.g. https://www.youtube.com/watch?v=P4AaGQIo0HY&list=PLsnG4UoaN6hfvW_YRYqINMrv8FOd70Y1A

                                                    Also, the recordings work with non-discontinued technology (no Silverlight, that is).

                                                    1. 1

                                                      The recording is available as of today :-) https://youtu.be/48iJx8FVuis

                                                    1. 6

                                                      Wonder if this will spur any group to come forward as a potential new maintainer of Thunderbird. Any guesses on who that might be?

                                                      1. 6

                                                        My wish is for that to happen. I don’t doubt there will be many forks. I just hope the community consolidates all the effort into one project.

                                                        1. 5

                                                          Maybe it will end up with Apache, like so many other projects.

                                                          1. 5

                                                            I really like Thunderbird, would be said if it ended up on the software graveyard.

                                                            1. 5

                                                              Apache seems to be a good foster parent for projects that end up there. LibreOffice, for instance! Surely an office suite can use an email client.

                                                              1. 9

                                                                Not sure if you are being sarcastic, but LibreOffice did not end up at Apache, but OpenOffice did, and it is near dead… LibreOffice on the other hand seems to be doing quite well!

                                                                1. 4

                                                                  Also in the dead zone is Wave.

                                                                  1. 1

                                                                    My bad for not fact-checking myself before posting! I’ll remember to check before posting next time.

                                                          1. 2

                                                            gmane for mailing lists, and gwene for feeds.

                                                            1. 2

                                                              I find the article linked in the top of this post to convey the arguments that are missing. This post is a statistic.

                                                              1. 3

                                                                Is there a link to a demo / example presentation generated with this tool?

                                                                  1. 2

                                                                    You’re awesome, thanks @z3bra!

                                                                  2. 2
                                                                    git clone http://git.suckless.org/sent && cd sent
                                                                    make && ./sent example