1.  

    Some interviews, some meetings, mostly just wrangling stakeholders to get their assent in making a pretty big change to a variety of complex broken abandoned systems. I’m also revisiting last year’s Advent of Code and trying to finish up the puzzles in Haskell. My primary lesson here is that I am bad at Haskell.

    1. 16

      I skimmed it and saw the following things that were factually wrong:

      • Simplicity is the same as reliable
      • OOP requires procedures or imperative programming
      • OOP languages weren’t “properly designed” and didn’t “come out of a research institution”
      • OOP cannot have a theoretical foundation
      • OOP code is nondeterministic, while FP code is always deterministic (what does this even mean?)
      • The human brain thinks in “doing things” (sounds like “not even wrong” neuroscience)
      • FP is in contrast with OOP
      • Alan Kay invented objects
      • Kay’s original OOP vision didn’t intend to have polymorphism or inheritance
      • Messages are in contrast with method calls
      • Erlang systems have 99.9999999% reliability (Ericsson completely disavows the claim)
      • Design patterns are just an OOP thing
      • The author can juggle two balls.

      Those are just some things I noticed that are factually wrong, as in not-up-for-interpretation wrong. And I didn’t really try to dig into his claims, just the stuff I saw that was obviously factually wrong. As it is, it’s a pretty sloppy hit piece.

      1. 2

        That’s a great presentation, thanks.

        1. 2

          I mean, juggling two balls in one hand is a thing. But otherwise, right on the money.

          1. 2

            He thinks he can “probably” juggle two balls, which is pretty good evidence he thinks “two balls” means 31 and not 40. Most people can do the first without practice, but not the second.

        1. 15

          I agree that mainstreamed OOP is awful. Mainstreaming FP will go the same way. We’re at the point with Functional Programming now that Object-Oriented Programming critics saw OOP being at a quarter of a century ago. Everyone knows that it’s The Solution and cannot understand why anyone would use anything else. Let’s check back in twenty-five years from now to find out why mainstreaming FP was a quadrillion-dollar disaster that people should have seen coming.

          1. 5

            Sadly, enough buzzword-based management and consultants can turn anything into a disaster.

            1. 12

              This is all a symptom of the immaturity of the industry. We still don’t have a reliable way to measure our work, which means that we as an industry are vulnerable to groupthink and cultish trends.

            2. 3

              When the pendulum swings back what the industry (or at least, the cheerleaders and consultants who make money on these things) still won’t want to admit, but what many people have said for a long time, is that people can, and will, write shitty code in any language / framework / paradigm.

              1. 4

                Again with the relativism! Some languages are better than others. Some paradigms make it harder to write shitty code and inherently promote good practices. I believe FP fares better according to this measure.

                1. 3

                  I didn’t say some languages aren’t better than others, I said that it’s possible to write shitty code in any language. Maybe it’s only shitty relative to great code written in that same language, but I stand by the claim.

              2. 1

                So much this. Some problems (lots of structure but don’t have the data yet) lend themselves to OO as a reasonable method. Others (I need to repeat the same thing on a bunch of existing data) make really good sense with functional.

                Using either as a magic bullet that is THE ONE TRUE WAY is going to result in a very bad time.

              1. 1

                Nothing exciting. I’ve had a few clarifying conversations at work, so I’m polishing up my resume and thinking about next steps. I still am invested in my people and our projects, but I don’t see a path to the career growth I want here. It’s a bummer, but so it goes.

                I’ve also finally decided that I do not have the time to replace the radio in CAR, so I’m going to get that done by a pro.

                1. 5

                  I think the biggest ORM related mistake is in embedding the schemata partially or wholly in the application layer. Every source of data I’ve ever worked with has needed some kind of ad-hoc queryability, and the more of your schema that is trapped in your application, the poorer the quality of the insights you can extract from the data. Some ORM are better at discouraging this antipattern than others, but your active record systems are by far the worst.

                  1. 3

                    Travelling to Toronto for a week onboarding at new remote job. Simultaneously excited about the week to come and dreading the long flight—and week away from family!

                    1. 1

                      Picked a good week for it, weather-wise.

                    1. 27

                      The thing I like about Iosevka is that you can build it with different sets of ligatures, and I’ve configured my Emacs to use the version of Ioseveka specific to the language in the buffer. That’s sort of cool. Of course, I’ve now officially spent more time setting Emacs up to write Haskell and OCaml in than I have actually writing Haskell or OCaml, but, you know, you gotta start somewhere.

                      1. 47

                        I think you’re doing fine. I’ve spent more time reading about people setting up their Emacs than I ever used Emacs

                        1. 3

                          Hah! Nice. I can certainly empathise with spending more time configuring Emacs than actually using it to write things. Do you have your configuration published anywhere? I’d be interested in seeing the font set-up :)

                          In the interest of sharing, here’s mine: https://github.com/cmacrae/.emacs.d

                          1. 1

                            Here’s some horrible elisp, assuming “Iosevka Haskell P” and “Iosevka ML P” are proportionally spaced versions of Iosevka with the appropriate ligatures defined:

                            (defun jfb/frame-is-displaying-?-buffer (frame mode)
                              (interactive)
                              (eq mode (buffer-local-value 'major-mode (car (buffer-list frame))))) ;; this assumes that the first buffer in a frame's list of buffers is the visible one. Sigh.
                            
                            (defun jfb/frames-that-? (predicate)
                              (interactive)
                              (require 'seq)
                              (seq-filter predicate (visible-frame-list)))
                            
                            (defun jfb/assign-font-to-frame (predicate-to-pick face-to-assign)
                              (interactive)
                              (setq frames (jfb/frames-that-? predicate-to-pick))
                              (if frames   (set-frame-font face-to-assign
                                                           nil
                                                           frames)
                                nil))
                            
                            
                            (defun jfb/define-haskell-font ()
                              (interactive)
                              (jfb/assign-font-to-frame (lambda (f) (jfb/frame-is-displaying-?-buffer f 'haskell-mode)) "Iosevka Haskell P:weight=ultra-light:slant=normal:width=normal:spacing=100:scalable=true"))
                            
                            (defun jfb/define-ocaml-font ()
                              (interactive)
                              (jfb/assign-font-to-frame (lambda (f) (jfb/frame-is-displaying-?-buffer f 'tuareg-mode)) "Iosevka ML P:weight=ultra-light:slant=normal:width=normal:spacing=100:scalable=true"))
                            
                            (defun jfb/fixup-fonts ()
                              (interactive)
                              (jfb/define-haskell-font)
                              (jfb/define-ocaml-font))
                            
                            (global-set-key [f9] 'jfb/fixup-fonts)
                            
                          2. 3

                            I always try to teach Haskell using nano otherwise everyone is like “ooo what are you using?” and “can I get something like that but for jEdit/Sublime/Atom/VS?”

                            1. 2

                              How are you handling ligatures? AFAIU emacs doesn’t render opentype ligatures?

                              1. 3

                                On MacOS it does!

                                1. 1

                                  It doesn’t out of the box, no - even if the new shaping engine might help on that front? - but you can tell it to use different glyphs for arbitrary character combinations. There’s apparently at least three different ways to tackle this, by using prettify-symbols-mode, a composition table, or font-lock. All of them, though, are specific to a single font, but there should be instructions for most of them nowadays.

                                2. 1

                                  Ligatures are some of the finest things known to man. Are you familiar with Chartwell? Are you doing that sort of thing in emacs?

                                  http://image.linotype.com/files/fontshop/FF%20Chartwell%202.0%20User%20Manual.pdf

                                1. 1

                                  Obviously written by a Marketing Lead. Where is the technical meat?

                                  1. 10

                                    I mean, the RFCs are linked right in the first paragraph.

                                    1. 6

                                      i was expecting this reply, but of course an article like text comparing JMAP to IMAP with perf statistics is what I’m looking for, instead of reading the dreary bare specs and deriving the real world implications by hard thinking.

                                      1. 10

                                        You know, that’s fair. My response was too glib, and I apologize. The JMAP homepage might have better info. As far as I can tell, it’s a more “webby” HTTP API, that doesn’t require a persistent socket, and has changes for use cases that are more common now than when IMAP was standardized. Too, it also handles sending mail from the client.

                                        I’ve thought about implementing it, or at least some of it, just to see. But it’s pretty ugly, and I really mislike the HTTP style, so, I’ll probably just continue free-riding on other people’s work.

                                        1. 1

                                          There is no performance involved with a protocol. Implementations have.

                                          Protocols might be designed with performance in mind though.

                                          1. 1

                                            Anecdotal, but Fastmail web via JMAP is the fastest, most responsive email client I have ever used (other than pure-text ones like mutt).

                                      1. 1

                                        Looks fine. It’s just a JSON-y and more powerful version of IMAP though. Evolutionary, not revolutionary. I like the support for tags and such though.

                                        Can we fix SMTP yet?

                                        1. 4

                                          As explained at jmap.io, it’s a whole new protocol, not just an expanded JSON version of IMAP. I hope it catches on.

                                          1. 1

                                            in what way is it different from an expanded JSON version of IMAP?

                                            1. 8

                                              It also supports outbound client mail, replacing SMTP for the clients. That’s pretty different. It also doesn’t use a persistent socket, and the API is quite different.

                                              1. 1

                                                So no notification (imap IDLE) support? Polling an HTTP api is what to do?

                                                1. 1

                                                  Yes it support notifications:

                                                  For desktop clients and webmail, there’s an event source interface. This requires a persistent HTTP connection.

                                                  No firewall / Timeout problems?

                                                  For mobile, and web integrations, you can set a callback handler, which conforms with the use of a push endpoint by an Application Server as defined in RFC8030.

                                                  Be careful with abuses!

                                          2. 4

                                            … No it’s not?

                                            And, in terms of client access, this literally addresses that:

                                            JMAP (JSON Meta Application Protocol) is a modern standard for email clients to connect to mail stores. It therefore primarily replaces IMAP + SMTP submission. It does not replace MTA-to-MTA SMTP transmission.

                                            1. 0

                                              it’s not? how so?

                                          1. 5

                                            I used Scala a bunch at Apple, and then my current teams use it. I really find it grating, for the same reason I find C++ grating – it is just a giant pile of stuff without a clear through-line, and it encourages all kinds of nasty shorthand. It is almost perfectly designed to irritate me, but since I’m just a Mr Manager Person now, and no longer expected to generate it, I can accede to my team’s desire to use it.

                                            But I’d never recommend that anyone start a new project with it.

                                            1. 1

                                              I counter that as a manager, you have more of a responsibility to identify and defuse team-draining issues than the individual contributors do.

                                              1. 1

                                                This is true, yes. I am comfortable with the team’s usage of Scala (lots and lots of Spark), and the team is comfortable with the insanity. I just stay the F. away.

                                                1. 1

                                                  Ah, Spark is one of those nagging reasons to use Scala that’s hard to avoid when you need it. You have my sympathies. Please try to maintain space for the non-Haskell developers on your team, or you may find them running for the exits before too long. Speaking from experience.

                                                  1. 1

                                                    Yeah, it’s sort of the lingua franca. Happily, my people are more into Spark than they are into Scala, so I’m not that worried that some of the horror will creep in.

                                                    1. 1

                                                      Noting that PySpark lags Scala in the Spark API in some areas, is Python a viable option where Scala is troublesome in your case?

                                            1. 5

                                              Why should it? It’s another boil-the-ocean solution at the language-level, for people who are obsessed with syntax.

                                              Language designers should aim for less, not more. Go and Clojure embody this: find/build features in libraries, quit looking for party tricks. Lua 5.1 is wonderful because it’s finished. Urbit versions its language by decrementing towards zero, where change will stop.

                                              Libraries, not languages.

                                              projects such as Scaladex, Spores, Scastie

                                              Sounds unpleasant. I guess “Scabs” was taken.

                                              1. 4

                                                It’s another boil-the-ocean solution at the language-level, for people who are obsessed with syntax.

                                                I always describe it as a compiler experiment that escaped the lab, like the rage virus from 28 Days Later.

                                              1. 5

                                                I enjoyed this, but I have to say the affectation of not capitalizing initial letters makes prose harder to read. Good content, though.

                                                1. 13

                                                  From TFA:

                                                  First, large scale blocking of cookies undermine people’s privacy by encouraging opaque techniques such as fingerprinting.

                                                  I just want to point out that for everyone who thinks Firefox is the paragon of privacy, this is the same argument that Mozilla used when deciding to implement link-tracking in Firefox. To paraphrase it, “We know this is going to be used to track people’s movements on the web but it at least when done this way, it results in a better user experience while their rights are being violated.”

                                                  1. 17

                                                    Mozilla is no paragon, but when the credible browser vendors consist of

                                                    • Cartoonishly evil for-profit corporation no longer pretending to be benevolent
                                                    • Cartoonishly evil for-profit corporation that recently began pretending to be benevolent
                                                    • Imperfect non-profit

                                                    …the most reasonable choice is extremely clear.

                                                    1. 0

                                                      Or you could use a Macintosh?

                                                      1. 2
                                                        • Cartoonishly evil for-profit corporation no longer pretending to be benevolent and also no longer making its web browser not suck
                                                      2. -2

                                                        Cartoonishly evil for-profit corporation pretending to be an imperfect non-profit?

                                                        1. 2

                                                          Which corporation are you thinking of here? The Mozilla Corporation is wholly owned by the Mozilla Foundation.

                                                      3. 9

                                                        I fully support Mozilla’s decision here. The options were:

                                                        • do nothing about HTTP-based link tracking,
                                                        • drop support for HTTP redirects (good luck with that!)
                                                        • incentivize sites to replace tracking via HTTP redirects with a method that is more transparent, performant, and — for those who really want to — can be blocked without breaking the sites.
                                                      1. 16

                                                        No need for my Atlassian account anymore…

                                                        1. 15

                                                          Agree. The only reason I had a BitBucket account was my mercurial repositories.

                                                          If only Atlassian could sunset JIRA. That would be nice…

                                                          1. 12

                                                            If only Atlassian could sunset JIRA. That would be nice…

                                                            Like all right-thinking people, I detest JIRA and every microsecond I spend in it feels like a million agonizing years, but what’s the alternative for bug tracking? Most software of this ilk is not purchased by the people who have to use it, so it responds not to actual user pressure, but to CTO sales pressure. That’s my pet theory about while enterprise software is uniformly terrible, at least.

                                                            1. 6

                                                              That’s my pet theory about while enterprise software is uniformly terrible, at least.

                                                              That’s quite close to the theory of the old-timers I’ve asked about it, but there’s an important difference.

                                                              CTOs ask consultants what software they should use. Consultants who recommend software that’s simple and easily configured go out of business, because most of the money is in helping clients configure/install/start using software.

                                                              1. 3

                                                                I like Phabricator much better, and it’s free software too.

                                                                1. 2

                                                                  GitHub issues are fine.

                                                                2. 1

                                                                  I do not understand the hate against JIRA. I think it is good software with many useful features. Yes, it can be abused to make tracking your issues really bad, but that is problem of those who use the software and not the software itself.

                                                                3. 4

                                                                  Good luck actually closing your Atlassian account though :-( I’ve tried to do it many times but still get email from them occasionally when they discover vulnerabilities in products I’ve never used.

                                                                1. 4

                                                                  Should’ve invested that VA Linux money better, eh?

                                                                  The problem is a real one; but the issue to me seems one of free software people grievously under-pricing themselves.

                                                                  1. 10

                                                                    Many of these are only obscure if you weren’t around in Ye Olden Days when there were no real ‘desktop environments’ and stock X apps predominated.

                                                                    Kinda surprised they didn’t include xlife

                                                                    1. 2

                                                                      True, but some of them are hard to find these days. It took some time to locate the source code to Xchomp (why not play some Pac Man?). Be prepared to spend some time getting it work (hope you are up on your K&R C).

                                                                      1. 1

                                                                        Oh no doubt! Compiling Xlife for OSX a ways back was an exercise in dusting off my old dis-used UNIX porting skills!

                                                                        Had to dig xmkmf and friends out of mothballs as well :) Wish I’d taken the time to build a homebrew formula for it all :)

                                                                      2. 2

                                                                        It’s a blast from the past, yeah. I remember the machinations required to get the xv binary running on ancient Iris machines to view images downloaded via xrn.

                                                                      1. 17

                                                                        I’ve been a hiring manager / engineering director in San Francisco for a number of years and I’ve talked a lot with people who’s job it is to set engineering compensation.

                                                                        This is mostly my own speculating and reasoning it out. So sorry, won’t be citing any sources.

                                                                        Much of what you’re seeing is really the top companies, especially FAANG and those trying to compete with them for engineers. This is especially true in the Bay Area where there are a lot of engineers, but still a limited number that live there or are willing to relocate. The housing costs are a big deterrent to relocating. Everyone is hiring.

                                                                        There is another tier of companies that doesn’t pay as well as these.

                                                                        In those top companies, they generally have to recruit engineers from other companies, and candidates often have multiple offers. They index their compensation against each other. So it’s a bit of an arms race. If another company is willing to pay your engineers more, you need to match it or risk losing them.

                                                                        Generally it’s a labor shortage, combined with easy Venture Capital, but also a set of businesses that have or have potential for great profit and revenue with high margins.

                                                                        One thing we’re seeing is a push to hire remote engineers, elsewhere in the US or even outside of the US. I think this is because we’ve finally run compensation up to a level that is hard for businesses to bear. And everyone uses video conferencing and things like Slack now.

                                                                        Generally for more senior engineers in the US, they can demand Bay Area compensation even when remote. More junior are going to take a hair cut on Bay Area compensation.

                                                                        1. 16

                                                                          I’m talking with a friend of mine right now who is moving from Google in SV at ~$250k USD to Google Montreal at ~$230k CAD (~$170k USD). (Total comp with stock/bonus)

                                                                          While $250k USD in SV is great, you’re still living in an overpriced rental, you just feel mid-upper class. But $230k CAD in Montreal though is completely different. You’re basically “the 1%”, you can buy what ever place you want, you can go to the fanciest restaurants often, etc.

                                                                          My friend is going from a rather miserable place he hates, to his home city and while he took a comparable pay cut, he’s gaining a much better QOL and Google just saved $60-70k USD on a single employee.

                                                                          The real question ends up being where you want to end up in the long run. I was in a similar boat making ~$170k CAD ($130k USD) (base pay, no bonus/comp) working remote from Toronto, which was awesome a comparable position locally would have got me around $120k CAD. I had an amazing downtown penthouse condo, my QOL was generally great. But I wasn’t going to live in Toronto forever, my partner lives in the US, and we’ll likely end up in the US for at least the next 5-30 years. My $170k CAD salary was a huge hindrance if we were wanting to buy a place in one of our choice cities: Seattle, Boston, DC, NYC, etc. All of which are more expensive than Toronto. I’m in Seattle now and while I comparably make a lot more my QOL dropped a fair bit, I now live on the 2nd floor of a ~6 story rental building, paying the same percentage of my income towards rent as I was for my Toronto penthouse. (So really a lot more than I was paying for my Toronto place.) But if I were to return to Toronto I’d just straight up have more cash.

                                                                          The trade offs are interesting.

                                                                          1. 1

                                                                            My friend is going from a rather miserable place he hates, to his home city and while he took a comparable pay cut, he’s gaining a much better QOL and Google just saved $60-70k USD on a single employee.

                                                                            Glad to hear that your friend is choosing their own happiness over money, even if it worked out with QOL. Also glad to hear that someone aside from myself detested SV—most people there make fun of everywhere that’s not California. I’m extremely happy I don’t live there anymore.

                                                                            I’m in Seattle now and while I comparably make a lot more my QOL dropped a fair bit

                                                                            Interesting to hear that Seattle is more expensive than Toronto! That goes against what I assumed. I’m actually in the inverse boat—due to circumstances surrounding my partner we’ll likely end up moving from Seattle to Canada in the next few years. I love the PNW, but Vancouver seems even worse than Seattle at this point QOL-wise.

                                                                            1. 2

                                                                              Also glad to hear that someone aside from myself detested SV—most people there make fun of everywhere that’s not California. I’m extremely happy I don’t live there anymore.

                                                                              I didn’t realize how little I liked the Bay Area until I moved to Toronto. Obviously, there’s a lot of California that I miss, but it’s really nice to not hate my working life any longer.

                                                                        1. 3

                                                                          I found this very interesting and well written. I have no experience with, or indeed, much interest in, Wayland or VR, but this was enjoyable nonetheless.

                                                                          1. 3

                                                                            One of my teams is going to have to grow, both in size and in area of responsibility, as we discover more and more abandoned yet still business critical functions in a variety of systems. The problem domain we’re tackling is basically tech debt, but it’s distributed across a wide variety of places and there are crosspressures from a variety of non-engineering stakeholders that is going to make actually fixing things a nightmare not from a technical perspective, but rather from a political one. Oh well! That’s why I get paid the moderate bucks.

                                                                            1. 7

                                                                              Better question is why they are so low in Europe…

                                                                              1. 5

                                                                                Depends on the places. In most tech hubs they easily start at 2-3 times the average salary and they get as highas 4-5 times in places like Zurich. after taxes. With european standards of welfare. That means a disposable income sensibly higher than the general population.

                                                                                The real question should be: why is society paying so much for a bunch of kids building stuff that most of the times doesn’t have any social value, but we already know the answer.

                                                                                1. 9

                                                                                  The real question should be: why is society paying so much for a bunch of kids building stuff that most of the times doesn’t have any social value,

                                                                                  It’s not. Most developers aren’t in SV building useless stuff, they’re working for government and businesses, and getting paid because they save/make their employer money.

                                                                                  1. 3

                                                                                    that’s very different from producing social value. Just because you make money from somebody doesn’t mean you’re doing much for society. Some people in some countries believe market value and social value are somehow connected but it’s a somewhat old-fashioned cultural artifact it’s time to get rid of.

                                                                                    1. 1

                                                                                      Just because you make money from somebody doesn’t mean you’re doing much for society.

                                                                                      Well, it’s an indication that you’re providing value to someone. It’s then up to you as an individual to add a moral assessment of the value of the overall enterprise.

                                                                                      Some people in some countries believe market value and social value are somehow connected but it’s a somewhat old-fashioned cultural artifact it’s time to get rid of.

                                                                                      They certainly somehow connected, though imperfectly.

                                                                                  2. 2

                                                                                    why is society paying so much for a bunch of kids building stuff that most of the times doesn’t have any social value

                                                                                    And doesn’t even work well (e.g. I am unable to paste text in Facebook messenger; the entire thing loses it shit if I paste with either middle mouse or C-v).

                                                                                    1. 1

                                                                                      I mean, even more so for software, which never works.

                                                                                    2. 1

                                                                                      I think because social welfare states cost money? Taxation is higher in Europe (for individuals and companies) and we don’t have a billionaire class lobbying for constant cuts. There are tax havens (Luxembourg, Ireland, etc.) but those are mostly for multi-nationals and not SMBs and the like. There’s also higher labor protection over here.

                                                                                      I don’t think the EU will ever make more money than the US. And I sure hope it stays that way.