1.  

    I’m flying to London to meet my investors at the Google Campus for dinner and a whole bunch of on-boarding talks. Then I’m flying to Brno to attend NixCon. Also will work on preparing for when our new hires start. Busy busy busy.

    1.  

      NixCon

      Oh!!!!

      I didn’t know this existed, I see there are still tickets available..

    1. 18

      The reason this seems like a fit for lobsters is that it’s obvious a fair amount of programming skill was involved in coming up with this exploit. It involves setting internal timers and clearing mission flags at very precise moments. I haven’t looked into it beyond the video, but it seems like they pored over the internal mission scripts looking for ways to break the internal variables.

      It reminds me of the famous SNES code injection video (https://www.youtube.com/watch?v=hB6eY73sLV0) though of course it’s not as technically impressive.

      For those of you who happen to be into speedrunning, every video Karl Jobst does is wonderful. I recommend watching a few others on this lovely Sunday.

      1. 13

        I don’t think the justification is necessary; speedrunning in certain games is super interesting, and can provide insight into how game logic and AI work internally.

        A personal favourite is at the beginning of Deus Ex (the only game in the series I accept), if you throw a gas grenade at the UNATCO headquarters, the gas goes through the walls which triggers a NPC to open the main doors so he can run outside for air. This allows you to skip the entire first mission.

        Also nice that the Games Done Quick organisation/events has raised millions of dollars for cancer research.

        https://www.youtube.com/watch?v=_vCFq-jr4U4

        1.  

          Running out for air? God I need to go back and replay that game, the AI was incredible. That’s such attention to detail.

          1.  

            I’m constantly amazed by how alive the original Deus Ex felt in many ways - from small details like this to the way you could kill certain characters early and the script would just work with it.

            I’m probably just wearing my rose-tinted glasses, but I don’t know of any game since (including the sequels!) that felt as much like a proper simulation while I was playing it.

            1.  

              It might not be your cup of tea as a standard FPS, but if you’re interested in that kind of AI, play through F.E.A.R. The enemy AI is reknowned for the realism and responsiveness. They flank, take cover and wait, they sometimes retreat if they have to; the way the AI takes advantage of the environment is really impressive.

              1.  

                It was amazing. They really put the pressure on you with flanking. Later on, someone told me the A.I. had a blind spot where you could basically just rush them going for headshots. I never tried that given how smart they seemed. I just assumed it wouldn’t work. Any F.E.A.R. players here corroborate or refute that?

        2.  

          Speedrunning is just software QA testing as a spectator sport.

        1. 6

          Oh boy, even more to add to this.

          The guy who created it, Curtis Yarvin is extremely right-wing and has been described as “the Alt right’s favorite philosophy instructor”.

          Big oof.

          1. 7

            Personally I’m fine with using, discussing and even contributing to a software system created by someone whose politics I don’t agree with.

            P.S. for anyone interested in a thoughtful, thorough criticism of Yarvin’s political philosophy, I recommend this Slate Star Codex article: https://slatestarcodex.com/2013/10/20/the-anti-reactionary-faq/

            1. 2

              Yeah. How much of your system runs GNU? (Rhetorical question.) Stallman isn’t less politically charged than Yarvin, even before the recent comments; the difference is that Stallman leaned left, which is more accepted in the affluent intellectually-oriented minds of software people

              1. 0

                From what I’ve seen Stallman leaned libertarian (socially left, fiscally right).

                1. 2

                  I don’t think it’s accurate to describe Stallman as a libertarian. As far as I’m aware, he describes himself as a socialist and holds non-free-software-related political views that are generally consistent with the left wing of American politics, including fiscally. Many of his views on software freedom are consistent with some strains of libertarianism, but I think it’s ultimately a limitation of the “left-right” metaphor when talking about political beliefs to describe him as otherwise socially left, fiscally right.

            2. 4

              I was wondering how long it would be before someone would chime in with this tired bit of commentary.

              Every comment you’ve left in this thread has been inflammatory and off-topic. The Urbit guy wrote some things you don’t like. We get it. The weird thing to me is the most hysterical people who constantly yell at those they deem right-wing also have funny ideas about when prejudice is acceptable, i.e., punching down vs punching up, power dynamics, etc. How much authority or power do you think CY/MM has?

              This is a horrendously boring topic, and you have made this forum a more boring place for having brought it up. Please just stop. Let’s focus on technology.

              1. 2

                The piece of technology was founded by someone with very strong visions as to what society should be, which means that in the software, there are design decisions being made to align with this. In this case, there’s a very strange belief in a feudalistic system where - even if the names were changed from lords/dukes/etc. to galaxies/planets/etc. - this influence still exists in the software. I believe it bears mentioning.

                1. -1

                  Would this wired bit of commentary upon commentary therefore be horrendously boring by transitivity or equally and oppositely – to be precise, horrendously – interesting?

                  I almost wrote your exact comment, although mine, blessedly unposted, was the product of inimitable genius, dizzying charisma, and a thunderous thesaurus (not to mention my usual tediously unwelcome sardonic flippancy).

                  That said, I do think someone is entitled to their opinions – and furthermore, while you called out a single dude[ette/???] (what’s the non-binary declension of this, perhaps dudezir?), mdszy, besides sharing with you the property of being named entirely consonants even in Welsh and Serbian, shares his/her/their opinion with a large number of woefully underrepresented-in-your-diatribe-against-tired-chimes folks. So I just wanted to let you know, helpfully, that additional context is necessary.

                  Question: when you write, “[that is], punching down vs punching up, power dynamics, etc.,” what does that mean?

                  PS I guess the “y” in mdszy is a fair pt of contention, but I think y behaves as a vowel only when it is pronounceable.

                2. 0

                  Yep. He’s said some horrendous things and excluded a lot of people. I have no interest in this project if it can’t bring itself to align with the values of the community.

                  1. 4

                    The tendency to universalize one’s values creates a problematic blind spot for a great many people

                    1. 1

                      Kind of seems like it has, though? Or at least they kicked him out and erased his name from their public intro, probably other places. I guess it’s down to who exactly you mean by “the” community.

                  1. 6

                    I like the sleek presentation style, and I see the appeal of decentralised social networking software. My values don’t necessarily align with the values of a few Californian individuals who have managed to politick their way into a position of immense power.

                    As a layman however, the following sentence worries me (emphasis my own):

                    Your Urbit is a permanent, private archive.

                    I’m not comfortable with the idea of a permanent record for social data. How would I then disown the moody poetry I wrote as a 13 year old? Will it haunt me forever?

                    1. 9

                      No because it’s private data

                    1. 8

                      Job interviews. I’m hiring people for my startup, and I had many excellent applications. Now it’s a case of going through them all.

                      1. 53

                        Becoming a father!!!!!!!

                        (Maybe this week, the due date was today. No sign of her yet…)

                        1. 6

                          Congratulations!

                          1. 4

                            Congratulations! Wishing good health to all involved

                          1. 6

                            I am certainly not part of the Haskell community, but I wonder this: Will the name “Ormolu” (which seems to mean a gold in color alloy) hinder widespread adoption of it? When I think about gofmt, Go’s formatter, even if it weren’t part of the standard toolchain, I could find it really easy with a search like “go format”, and remember it’s name, trivially. How does a newcomer to Haskell learn about ormolu, and remember that it’s there, as opposed to discovering it because of the name ghcfmt or haskfmt or some other variation like that?

                            1. 2

                              If you’ve never used a code formatter before I think you’d probably find one first in the options of your editor plugin or part of a linting system at work. Once you experience one and decide you like them, one of the first things you search for when learning a new language is a code formatter, and Ormolu already shows up in the results. There are already others named haskell-formatter and hformat as well, using a name related to this might make it even more confusing as to which one is best. As for existing users, I usually learn about it from Twitter or a coworker, and to me a distinctive name is easier to remember.

                              1. 2

                                I doubt the name would harm adoption. One of the more awkward names that comes to mind is zxcvbn, and I don’t think its adoption was harmed by it either.

                                1. 2

                                  It certainly ought not to be called ghcfmt nor haskfmt because it is in no way an official formatter!

                                1. 3

                                  I really want to know what their video processing pipeline is like since they generate clips and varying video quality levels for what I assume is every device in existence. There were some nice nuggets here. I didn’t know about the Beacon api or the intersection observer. Seems like a mostly boring stack but considering they’ve been around for about 10 years and the site hasn’t slowed to a crawl on my intentionally crappy test laptop it means they’re doing something right.

                                  Did anyone pick up on whether they’re running all of their infra on AWS or just the vertica part? I thought the bandwidth costs would be killer.

                                  1. 4

                                    Why would they need to generate so many different quality levels? They probably just have 2 or 3 which is enough to cover most devices out there. Using ffmepg it’s trivial to generate these videos, though you need the infrastructure and processing power behind it.

                                    1. 2

                                      When you do it live, constantly, on terabytes of data, the infrastructure and processing power become the big problems.

                                      Edit: upon rereading it, they actually sound like they put a big emphasis on quality and compatibility too. So their question is, “if we can we make this content incrementally better for X market segment, is it worth it?” Start from the biggest X’s and work your way down like any other priority list!

                                      1. 2

                                        There’s absolutely no way they’d do live transcoding; these sites usually only have two versions, it’d be much cheaper to simply store both at all times.

                                        It’s actually a very simple thought experiment — you obviously cannot re-create the high-res version from the low-res one, and the low-res one would take so little space in storage compared to high-res one, that spending minutes trying re-create it from the high-res one would simply make very little sense — they’re probably transcoded once on upload, and pretty much forever cached.

                                        BTW, I’d suggest you read the DDIA book, which explains a lot of these things. It has many insights into how actual popular applications are designed nowadays, including the actual Twitter implementation — which answered my own question on why it often takes so long to post a Tweet.

                                        1. 1

                                          They might only have two versions from your perspective (SD and HD), but having worked in video development, it’s likely they have 3-4 x those two versions for compatability. The web has converged on a few technologies in the last few years, making it less cumbersome, but if they want to cover “most” devices, then I still expect them to have at least 2-3 sets of files.

                                        2. 1

                                          Do you think they do live transcoding? I’m certain they have multiple copies of the media transcoded to different qualities. It’s really not that much processing power when you have things like Ryzen boxes and GPUs which can rip through this in no time.

                                        3. 2

                                          At this point, they almost certainly don’t. But in the not too distant past, they would have had to have a multiplicity of encodings, because of the varying abilities of the various browsers/devices/codecs.

                                        4. 3

                                          This is tangential, but I have really enjoyed learning about how netflix handles encoding and processing their videos.

                                          Although Pornhub must process much more video than netflix does. I wonder what trade offs PH makes compared to Netflix’s approach based soley on the amount of content they have.

                                          Here is a brief article from the Netflix Engineering blog about encoding. But I first started thinking about it when I watched this system design video from Gaurav Sen.

                                          1. 2

                                            Although Pornhub must process much more video than netflix does

                                            Are you sure about this? I don’t remember where I read it, but I’m sure at some point I read that one of the adult sites (likely this one) determined that most viewing behaviour is to watch a bit at the beginning, and then skip forward to about 80% of the way through the video. The consumption of Netflix [I’m guessing] would look very different, i.e., watching a film start to finish.

                                            I would have thought that this site could optimise videos for certain behavioural patterns.

                                          2. 3

                                            Self hosted, I’ve seen their servers in the datacenter.

                                            Porn industry giants usually self-host as much as possible.

                                            1. 2

                                              Self-hosted using Level 3 as the network provider per Rusty.

                                            2. 1

                                              Although idk about processing, I do remember that Rusty said in Reddit AMA that they use Limelight for video CDN.

                                            1. 15

                                              I’m a bit disappointed that the interviewer didn’t mention a single question regarding addiction or any ethical dimension. It’s kind of been assumed that not liking pornography is just a conservative, right-wing thing, but I don’t think that’s correct. I personally perceive it to be pushing harmful stereotypes (both as in what women should look like, or how intimacy should look like), and then there’s the problem with trafficking, and never knowing what’s actually going on behind the scenes. Chomsky says it well.

                                              Setting aside things like these, which should be enough to say something isn’t right, but knowing the digital world (where creating addictions has become a common and often even necessary business model) reading

                                              you have to be clever to innovate at the bleeding edge of the web.

                                              makes me somewhat uneasy. Especially a front end developer should have to think about these questions. They are the ones tasked with creating “seamless experiences”, ultimately, disregarding the influence it has on people’s daily and personal life’s. I don’t think the interviewer should have just glossed over this. YouTube has hateful or harmful videos, but their raison d’être isn’t hosting them. PornHub will have it a bit harder that hosting and spreading pornography isn’t a big part of what they are.

                                              From the technical perspective it’s somewhat interesting, I guess. It’s about the problems of high-demand video streaming, probably above the level of most other video sites, but still way below sites like YouTube. That’s like having an interview with a slaveholder on what kind of whips they have found to have the best quality CIA agent on what the best strategies are to manipulate a foreign election.

                                              Edit: Rewrote a few sentences to avoid confusion, and replaced my analogy with a different one.

                                              1. 13

                                                I’m a bit disappointed that the interviewer didn’t mention a single question regarding addiction or any ethical dimension.

                                                Porn has been around a really long time. I’m pretty sure there’s nothing new to be discovered or discussed almost anywhere on earth on the topic, much less here.

                                                Like, the human race has brute-forced about every part of that solution space we can. There is not a dirty thought we can have that hasn’t occurred to scores of other people at one point in history or another–of this I’m certain.

                                                1. 21

                                                  Porn has been around a really long time.

                                                  Not in the way it is now, as an endless torrent on demand. Modern porn has demonstrably changed society in ways that ancient porn did not. For example, women now believe that pubic hair is unclean and as a result of excessive pubic hair removal are getting health problems that pubic hair can prevent.

                                                  Also, just being around forever does not categorise something as innocuous or beneficial.

                                                  1. 3

                                                    Hairstyles have been coming and going in fads ever since we left the trees and discovered hair can be cut and washed. Having this apply also to pubic hair is not exactly a huge change.

                                                    1. 3

                                                      As the article notes, gynecologists disagree, but what do they know, I guess.

                                                  2. 8

                                                    Like comparing chewing coca leaves to mainlining cocaine.

                                                    1. 3

                                                      Quantity acquires a quality of its own, you know. Not to mention that quality is altogether different as well: 4K video isn’t the same as a blurry black and white photo. There’s a strange blindness to this effect in the tech industry, whether it comes to social media, endless tsunami of content on Netflix, or indeed porn. Much like Facebook’s idea that more communication is unconditionally better has backfired spectacularly, maybe it’s the same with porn. And then of course there’s also all the engineered “engagement” in all these areas. Don’t be so quick to say it’s all totally harmless.

                                                      1. 0

                                                        Well-put.

                                                      2. 6

                                                        I’m a bit disappointed that the interviewer didn’t mention a single question regarding addiction or any ethical dimension.

                                                        The audience is web developers wanting to read something interesting about web development at a big company. They also want most of them to enjoy the article. Talking about the damage they might be doing doesn’t serve either purpose. Most would’ve just clicked the little X or otherwise moved on.

                                                        There’s been a lot of good writing on that subject for anyone looking for it. The key words are easy to guess.

                                                        1. 6

                                                          You’re kinda circling back to the same point. Yes, talking about ethical implications of our jobs is hard, and uncomfortable, but it’s necessary. Of course nost people don’t want to do it, off course most people don’t want to read about it. But it’s our responsibility to talk and to read about those things. “I don’t like doing it” is not a valid excuse for not doing something it’s your responsibility to do.

                                                          That said, the comparison with slavery is a bit out of place, imo.

                                                          1. 10

                                                            You’re doing that trick many people do here where it becomes all or nothing in every post, forum, etc. The stress of introspecting on these topics make many people do it at certain times and read relaxing content at other times. They’re fine splitting it up. Dare I’d say most people prefer that based on that simply being most popular way content is done online.

                                                            Then, other people think they should be mentally engaged on these topics at all times in all articles, forums, etc due to their importance. They also falsely accuse people of not caring about social responsibilities if they don’t discuss them in every article where they might come into play. You must be in that group. Author of the original post and their audience is not. Hence, the separation of concerns that lets readers relax just focusing about web tech before optionally engaging with hard realities of life at another time in another article.

                                                          2. 2

                                                            This isn’t a “what if my open source library was used by some military”-kind of question, I think that there is a much stronger connection between the two. Front end design is related to user behaviour, and I still consider this relation to be a technical question (UI design, user protection, setting up incentives, …).

                                                            If the interviewer had asked these questions, and the interviewee had chosen not to comment, that would have been something, but the article currently just brushes it away affront by saying “ Regardless of your stance on pornography, …”.

                                                            1. 3

                                                              I’m a bit disappointed that the interviewer didn’t mention a single question regarding addiction or any ethical dimension

                                                              A tech-related, Lobsters-worthy discussion of the topic would focus on how they collected user behavior, analyzed it, measured whether they were reaching their goals, strategized for how to achieve them, and specific methods of influence with associated payoffs. It would actually be more Barnacles-like since marketing is behind a lot of that. These technical and marketing techniques are politically-neutral in that they are used by many companies to measure and advance a wide range of goals, including pornography consumption. They could be discussed free-standing with little drama if the focus was really on the technology.

                                                              You were doing the opposite. That quote is an ethical question, even says so, where you have political views about pornography consumption, you wanted theirs explored, and you might have had some goal to be achieved with that. The emotional language in the rest of your post further suggested this wasn’t about rational analysis of a technology stack. You also didn’t care what the writer or any of their readers thought about that. So, I countered representing the majority of people who just wanted to read about a web stack. A mix that either doesn’t care about ethics of porn or does with it being a depressing topic they want to handle at another time.

                                                              I was on 2nd cup of coffee when you wanted me to be thinking about lives being destroyed instead of reading peaceful and interesting things easier to wake up to. Woke up faster in a different way. Oh well. Now, I’m off this drama to find a Thursday submission in my pile.

                                                              1. 2

                                                                A tech-related, Lobsters-worthy discussion of the topic would focus on how they collected user behavior, analyzed it, measured whether they were reaching their goals, strategized for how to achieve them, and specific methods of influence with associated payoffs.

                                                                I think these kinds of things were missing from the article. I know this isn’t the place to discuss pornography, and I try not to go into it in the comments. What I just brought up was a disappointment in the style and focus of the interview, and it being one-sided.

                                                                The emotional language in the rest of your post further suggested this wasn’t about rational analysis of a technology stack.

                                                                Well I do think it’s important, so I apologize for being a tad emotional. But other than what I wrote, I don’t have anything else to contribute. I neither run nor plan to run a streaming site, so I end up not having too strong opinions on what is being used in the backend stack ^^.

                                                                A mix that either doesn’t care about ethics of porn or does with it being a depressing topic they want to handle at another time.

                                                                I understand that, that’s why I prefixed my top comment with what you quoted. I furthermore feel obligated to apologise if anyone had to go through any inconvenience thinking about the “ethics of porn” because of my comment, I guess? No but seriously, bringing up a concern like this, which I explicitly tried to link back to a technical question, should be ok.

                                                                1. 1

                                                                  “I furthermore feel obligated to apologise if anyone had to go through any inconvenience thinking about the “ethics of porn” because of my comment, I guess? No but seriously, bringing up a concern like this, which I explicitly tried to link back to a technical question, should be ok.”

                                                                  There’s quite a few people here that are OK with it. I’m not deciding that for anyone. I just had to remind you that caring people who want a break in some places exist and that you do more good by addressing the porn problem where it’s at. I appreciate you at least considering the effect on us.

                                                                  “I neither run nor plan to run a streaming site”

                                                                  The main problem is consumer side where there’s mass demand following by all types of supply and clever ways to keep people hooked. You can’t beat that since they straight-up want it. What you might do is work on profiles for porn sites with tools such as NoScript that make them usable without the revenue-generating ads. Then, lots of people push for their use. If there’s any uptake, they get a temporary hit in their wallet but maybe an offset with ad-free Premium. I’m not sure the effectiveness. I just know they’re an ad model with tools existing to attack that.

                                                                  Griping about it on technical sites won’t change anything because… most viewers aren’t on technical sites and those that are rarely changed. So, it’s just noise. Gotta work on porn laws, labor protections for those involved, ethical standards in industry itself, ad blocking, etc.

                                                          3. 6

                                                            If you would like to discuss the ethical aspects go to a different forum. I would rrecommend the community around Thaddeus Russell’s podcast for a critical and reasoned take from people that actually interact with sex workers https://www.thaddeusrussell.com/podcast/2

                                                            1. 3

                                                              I’ve mentioned it elsewhere, but I’m not here to discuss the ethical aspects, not am I in a position to be able to. My comments are related to the interviewer and his choice of questions.

                                                              1. 1

                                                                Your gave opinions, stated as scare-hints without support:

                                                                “then there’s the problem with trafficking,”

                                                                “which should be enough to say something isn’t right,”

                                                                … and then based upon the now well-built pretext that porn “isn’t right” (and is therefore ethically ‘wrong’) - you commented on what the interviewer should have done - i.e. they should have had the same opinions and conceptions as yourself - and they should have turned the interview into one about ethics.

                                                                The interview was interesting to read, because of the info about the tech. As bsima says, please take ethical discussion elsewhere.

                                                                1. 2

                                                                  As you said, I prefixed the controversial parts by saying that it was my opinion. But I don’t think that the interviewer must have shared my views. The point I was raising was that I thought it wasn’t appropriate for the interview to just ignore a quite relevant topic, since this was about PornHub specifically, not their parent company.

                                                                  IMO, a just final question like

                                                                  “What are you doing to enforce age restrictions?”

                                                                  or

                                                                  “Due to recent reports, do you think that doing something against pornography addiction among younger generations can be tackled technically or does it need more (social) effort?”

                                                                  would have been more than enough, as to just show this is being considered. I’m not a journalist, so I don’t know how these questions could be phrased better, but I hope you do get my point.

                                                                2. 1

                                                                  I’m not here to discuss the ethical aspects

                                                                  …and yet, it’s the ethical aspects that you brought up.

                                                                  1. 3

                                                                    Looking at this thread, I didn’t respond to people who started talking about the harmfulness of pornography or the lack thereof. This even though I would like to – yet I understand that it is off topic. In fact most of this sub-thread has been more about the meta-discussion.

                                                                    All I can say is that I will be more careful not be too provoke these kinds of discussions in the future. I was thinking critically a lot about the topic the last few months, so my comment might not have been as neutral as some might have wished.

                                                              2. 5

                                                                That’s like asking an interview with a slaveholder on what kind of whips they have found to have the best quality.

                                                                This is more than a little hyperbolic.

                                                                1. 4

                                                                  My analogy is that the direct consequences of technical questions are being more or less ignored, which I think is fair in both questions. Of course it’s not identical, but that’s stylistic devices for you.

                                                                2. 2

                                                                  I could come up with quite a few objections to pornography, but the chap in your video link is not only not convincing, he is also hinting that he watches porn even though he denies it. He backs up his statement “porn is degrading to women” by qualifying “just look at it” which implies that he does that enough to have an opinion.

                                                                1. 1
                                                                  Learning

                                                                  My team has (starting today) a fortnightly dedicated Research Day where we are free to study whatever programming thing we want and not do chores or work on the product.

                                                                  Admin

                                                                  I’m booking all the travel for our first company off-site. The word “off-site” is a bit weird given that we’re distributed and we don’t actually have a site to be on-site on.

                                                                  Hiring

                                                                  I’ve been sent a whole bunch of super impressive résumés, and it’s going to be difficult to choose our next hire.

                                                                  1. 12

                                                                    This project would be built with a microservices architecture

                                                                    Why? I don’t see a rationale for this anywhere in the article.

                                                                    A “microservices architecture” is almost never a good idea. What possesses programmers to believe that if maintaining one system is hard, maintaining several would be easier? Or that network calls are less complex than function calls? Even among people who actually like this approach for some strange reason, anecdotally I’ve only heard tales along the line “oh yeah, I just use some microservices for simple things, like postcode validation”.

                                                                    …Because that’s somehow easier than using a library? 😐

                                                                    1. 11

                                                                      Looking back, we thought the tasks running part was a logical place to split the code. It was also the “new idea” that others had had success with internally. We got nerd-sniped.

                                                                      1. 3

                                                                        The main (only?) valid rationale I can see for microservices is when the services need to be reused and composed in different ways to solve different problems (particularly when the services manage their own state). Splitting a logically singular app into services just for fun is, in practice, no fun at all.

                                                                        1. 1

                                                                          That’s interesting. Genuinely curious — because I’m drawing a blank personally — could you give an example of when a part of a system should maintain its own state, and when that state should not be adjacent to, i.e. in the same database as, the core system state? And why would this be different from a monolith collaborating with multiple databases?

                                                                          1. 3

                                                                            I can’t go into specifics of the main example I’ve seen in practice, but the way I (perhaps incorrectly) think of microservices is as islands of independent functionality. There is no ‘core system state’; if you want to know something, you have to ask the service responsible for it. The services can then be part of different independent business flows with minimal spillover effects.

                                                                            Lets say you have an interactive business flow that involves a user going through a series of processes (A, B, C, D) in a mobile app. A ‘gateway’ service provides an API for the app and orchestrates calls to internal microservices A, B, C and D that provide specific functionality. The gateway might know where a user is up to in the flow, but will rely on the services to manage the state related to their part of the process.

                                                                            Another gateway API could be written for a batch process that progresses through processes B, D and E. Changes to either flow are less likely to impact on each other, particularly if the service boundaries are well thought through.

                                                                            Of course you can do this in a monolith with different endpoints for different clients/flows, but that can get messy unless you’re quite strict about how you structure your code and data. it’s easy to tweak something in your ‘user’ flow and accidentally break something seemingly unrelated in your ‘batch’ flow.

                                                                            I’ve worked on another system where microservices used essentially the same data store, with some logical partitioning. Over time, the partitions got thinner and thinner and the boundary between services less and less clear. We ended up collapsing it back into a monolith because there was no gain (and a lot of pain).

                                                                            1. 2

                                                                              In my department, we ended up with a microbased service kind of by accident (it was how the work was initially divided up by different departments, only to end up in one department). It worked out for us because it broke the front end (accepting requests for service) from the backend (the business logic) so when we needed to support a new front end (original front end talks SS7, new front end talks SIP) it was easy enough to write. It also allows us to make updates to the business logic without disrupting exiting connections with our customers (very important with SS7).

                                                                              1. 1

                                                                                The natural example is something like Auth0 before Auth0 itself existed. Centralizing your authentication and authorization so that users could have a single login to all your stuff. Then you can have public APIs, websites, or native apps and have authorization work identically.

                                                                                1. 1

                                                                                  Right, but why does that need to be a separate system? Why would that not work as part of a monolithic system?

                                                                                  1. 1

                                                                                    The need arises when you have multiple products and they use some common functionality, and the multiple products could have independent scaling needs. For instance, imagine Gitlab with VCS, CI, Issue Tracking. You’d want someone to be able to login from each into the same account, you’d want to be able to scale or improve your login system independent of Issue Tracking, etc.

                                                                                    It’s just separation of concerns in a way that gives you independent scalability, updatability, reusability, etc.

                                                                                    1. 1

                                                                                      That makes sense, but I think the discourse in this area typically forgets what cost this approach has, and whether or not it’s genuinely financially appropriate for the business adopting it.

                                                                            2. 2

                                                                              Why? I don’t see a rationale for this anywhere in the article.

                                                                              I don’t think the author was defending the decisions per se, hence

                                                                              Those of you who have been down this road before probably have massive alarm bells going off in your head.

                                                                              and

                                                                              The second lesson is that making something microservices out of the gate is a terrible idea. Microservices architectures are not planned. They are an evolutionary result, not a fully anticipated feature.

                                                                              1. 1

                                                                                Sorry, I don’t mean for this at all to be an attack on the author. But to address the quotes you pulled:

                                                                                Those of you who have been down this road before probably have massive alarm bells going off in your head.

                                                                                This does not suggest the author has herself been down this road before.

                                                                                The second lesson is that making something microservices out of the gate is a terrible idea. Microservices architectures are not planned. They are an evolutionary result, not a fully anticipated feature.

                                                                                Again, this does not suggest that the author was not aware of this being a terrible idea before embarking on it (and I recognise she was part of a team). I believe my perspective is reasonable, given the use of the word “lesson”, suggesting she learned from this experience.

                                                                                1. 4

                                                                                  I, for one, would like to read more posts which describe a project’s failure points and lessons learned. There’s too much focus on “look at how awesome we are” and “we implemented this shiny new thing and it’s great” in tech.

                                                                                  1. 2

                                                                                    I had not been down that road before the failed project in question, no.

                                                                              1. 1

                                                                                I’m interested, but the landing page is quite generic and to get a feel for the theme of the conference and its content I’d like to look at talks from previous years. When I search for bob conf in YouTube, the results are mostly conference “talks” by Robert “Uncle Bob” C. Martin. Which is unfortunate.

                                                                                EDIT: I found the talks.

                                                                                1. 2

                                                                                  This is the intermediate-level Haskell that everyone has been looking for. I’d love to see more articles like this.

                                                                                  1. 5

                                                                                    Not from the article, but from one of the comments:

                                                                                    I’d go one step further and insist on proper spelling as well. If I can’t trust you to spell English correctly, how can I be sure you’re spelling function names correctly?

                                                                                    If I started doing this with my own employees — who are all Russian — I hope for the sake of their own dignity, they’d all tell me to go and do something unspeakable to myself, and then quit.

                                                                                    My colleagues are invaluable. They’re helping me build my business, and they do excellent work. I wouldn’t dare start drawing red lines around correct usage of English. I wouldn’t even do it with colleagues who speak English as a first language. If an American colleague were to write “the performance here could be better, but it doesn’t matter for us and I could care less”, even though I find it annoying that Americans constantly get this standard phrase backwards, I wouldn’t dare get precious over it in a software project.

                                                                                    Merge it and move on. If it bothers you that much, send a correction in a commit or PR after the fact.

                                                                                    1. 2

                                                                                      Maybe if software engineers spent more time actually learning what agile was, they’d realize that they actually don’t like the fake agile that they are being sold by their companies. Maybe they’d finally throw that Jira trash out the door and use something effective. Maybe agile isn’t the problem.

                                                                                      Okay. In this case, maybe not maybe.

                                                                                        1. 0

                                                                                          Not really. You can do it in a lot of ways, but a lot of people do what is called “waterfall” and pretend it’s agile.

                                                                                          1. 1

                                                                                            I think you are proving the point that @federico3 was making :)

                                                                                            1. 1

                                                                                              Exactly.

                                                                                              1. 0

                                                                                                No. Again, there are differences between the methodologies. You can’t just take a waterfall process and call it agile and then tell everyone they don’t understand.

                                                                                                If you don’t know the details of the processes which I am referring to in order to make the assumption of being a “no true scotsman” argument then assuming that I’m wrong is plainly ignorant.

                                                                                                I didn’t say that everyone or even most people do this. I just said that it happens. Your argument here relies on the idea that everyone who says they’re doing agile is actually doing agile - and that they are never doing waterfall. It is plainly wrong, and absolutely only supported by ignorance.

                                                                                                Since, however, you seem to be so sure that this is the actual issue, feel free to enlighten me on the situation which I am referring to is agile and how I am representing the issue incorrectly - since you’ve already established such. I’d love to learn from your extra-sensory perception of my experiences.

                                                                                        1. 10

                                                                                          I strongly disagree with the entire section deriding technical debt.

                                                                                          One of the best things you can do for yourself as a software developer is running your own business. I don’t mean a consultancy business where you’re essentially an employee that sends invoices every month. I mean something more like a product business.

                                                                                          When you’re building a business, you don’t know what features are going to bring money in. It is so well-known that we all don’t know what we’re doing that the startup in-joke is to put “pivot” explicitly somewhere on the roadmap. I will by no means defend Agile as I think that’s nonsense too, but the aversion to technical debt is (I think) the most likely cause of this supposed “divide between business and programmers”.

                                                                                          Who cares if the feature you implement is beautifully designed and backed by a comprehensive suite of automated tests, if that feature ends up not making any money and is scrapped anyway? Professional software development doesn’t happen in a vacuum; the code you write is an investment, and you and/or the business should expect to see a return on it. Technical debt is an excellent way to limit potential losses from investing in a feature/system which turns out to not be profitable.

                                                                                          Debt is not a bad thing. Debt is what allows you to live in your house before you can actually pay for all of it.

                                                                                          1. 2

                                                                                            It doesn’t hurt to go back to the source when the “technical debt” metaphor is discussed: a lot of the “not all debt is bad” discussion is exactly what Ward said - http://wiki.c2.com/?WardExplainsDebtMetaphor. I have two points here

                                                                                            1. Managed debt is not a bad thing, but you probably wouldn’t be able to get a mortgage on a house if you were already maxed out on your credit cards, and you can’t take on more debt when all your income is going on paying off your minimum payments

                                                                                            2. sometimes the metaphor breaks down because whereas financial debt is fairly predictable (it’s x% of the principle, compounded) the cruft in your codebase may have unknowable effects on your development speed. Say for example you left an XSS attack in your frontend, it won’t slow you down at all adding future new features if nobody finds it - but as soon as they do, it might finish you off completely. The analogue here is not with debt, more with unhedged options, or with uninsured risks. You gave yourself an extra £500/year for pizza by not insuring your car against theft, but now you have no car and you can’t get to work.

                                                                                            1. 1

                                                                                              That is true. But it’s also true that not every stage of a company is searching for a business model. Companies stabilise and need to care about existing systems. And that include cleaning up technical debt. Of course, only of the parts that bring money…

                                                                                              The problem I see with Agile practices as understood by many business is that they tend to be a “new features all the time, no need to clean up” way beyond the point that’s reasonable. Because having a solid system that can scale and decrease maintenance costs is less glamorous than the new initiative to tweak a awful mess once more “to have a quick win”. So it ends up taking way more that it should.

                                                                                              Profesional cooks clean as they cook for best operation, but if they are in a big run, at least they clean after the fact and before making another dish…

                                                                                              1. 1

                                                                                                Although I agree, that’s where contracts and generative testing can help. The overhead on programmer’s end is low enough that code thrown away isn’t a big deal. Same for other automated analyses.

                                                                                              1. 7

                                                                                                This is one of the better written and clearly more informed reviews of learning Elm that I’ve read. This could be because this is just well written and balanced, without succumbing to the Middle Ground Fallacy as many others do and end up saying “oh it’s nice and all, but at the end of the day it’s just a language and all languages are basically the same…”. It could also be because so many of the other articles are full of hyperbole, and the authors feel their sensibilities have been offended because Elm doesn’t conform to their pet code formatting style. It could be both.

                                                                                                Anyway…

                                                                                                That’s the extent of the formal documentation, and then there is an example (which is very helpful, but I don’t think examples are a substitute for thorough documentation)

                                                                                                This is a little confusing. The documentation linked to from this part of the article actually includes a written English description of what this function is for, and the type signature, and a code example demonstrating a specific use case.

                                                                                                Here’s the suggested alternative example:

                                                                                                filterMap : (a -> Maybe b) -> List a -> List b
                                                                                                filterMap convertFn input = ...
                                                                                                

                                                                                                The suggested alternative example is arguably not clearer. I say “arguably” because there’s no right answer here. Why would one argument be called input? Aren’t both arguments inputs? What’s clear to one reader is a quandary to another.

                                                                                                I think the people creating Elm have in general done a pretty good job of balancing the pragmatic and specific examples with not obscuring what is perhaps the more important concept of generality. This is aside from the contentious issue of generality in Elm regarding lack of typeclasses.

                                                                                                String.length says merely “get the length of a string”. Is that the number of bytes in its UTF-8 encoding? Number of unicode codepoints? Number of UTF-16 words?

                                                                                                That’s a good question, but again I’d provide the same style of answer. At what level of specificity do we want to communicate our ideas? What assumptions can we make about who will be reading this specific part of the documentation, and at what level their technical proficiency is. If this were more specific, would another person’s complaint then become “Oh I don’t care about all these irrelevant details! I just want to know how I get the length of a string!”

                                                                                                Information hierarchy/architecture is not a trivial thing to solve, and again I think the Elm people have done a pretty good job of taking a position on where on the spectrum they want to be with this.

                                                                                                I think the criticism around Date types is fair, and I remember in some of the larger Elm apps I’ve worked on, we’ve resorted to using moment.js through ports.

                                                                                                Again, while I’m pushing back on some of the criticisms in the article, I think the article on the whole is well-written and valid.

                                                                                                1. 4

                                                                                                  I find the Date situation to be great nowadays, you just have to bite the bullet and use justinmimbs/elm-date-extra.

                                                                                                  In fact that is a common pattern I’m starting to observe: you really have to trust the quality of a lot of libraries and just use them, without being afraid about (a) stability or (b) lock-in. We sometimes have the wrong instincts due to experience in languages that are less robust (addressing (a)), or less easy to refactor (cf (b)).

                                                                                                  See the author’s comment about NoRedInk/elm-json-decode-pipeline: I would never start a project without it if it involved json decoding!

                                                                                                  The awful SEO of the Elm ecosystem is really to blame for a lot of this confusion. It’s hard to find the community consensus about which libraries are good, and constantly stumbling onto deprecated versions is annoying.

                                                                                                  All in all Elm is awesome though.

                                                                                                  1. 2

                                                                                                    Oh, no doubt. In fact two of my three businesses lean pretty heavily on Elm. I’m certainly a fan, though I try as hard as I can to avoid “fanboyism”, and I think it’s important to recognise drawbacks — whether perceived or genuine — even in languages you enjoy.

                                                                                                    1. 1

                                                                                                      If you were starting today would you still pick Elm for those businesses? I don’t think there’s been much in the way of alternatives created in the past few years. I’m pretty sure Purescript was already around. Maybe ReasonML is newer?

                                                                                                      1. 2

                                                                                                        Yes, I would. Generally we try to keep all logic in Haskell on the server, and avoid logic in the UI. For my main business (and indeed for most businesses), our users are totally fine with full page reloads. When we do need a more complex and stateful UI, Elm is our first choice. It doesn’t have as many features as say PureScript, but I think that’s to our benefit. It certainly makes it easier to onboard UI developers who have only ever worked with JavaScript and React.

                                                                                                        I haven’t tried ReasonML, but as I understand it, it doesn’t enforce purity as strictly as Elm does. The following passage from their documentation worries me:

                                                                                                        An eye for simplicity & pragmatism. We allow opt-in side-effect, mutation and object for familiarity & interop, while keeping the rest of the language pure, immutable and functional.

                                                                                                        Some developers when learning Haskell get annoyed that they can’t just do IO anywhere, and then reach for unsafePerformIO. This is almost never a good idea. It’s better the developer just learns the new thing, and it’s better for the product and the business that we can guarantee there aren’t unsafe IO actions hiding throughout the codebase.

                                                                                                        YMMV, this is all just my opinion, man, etc. etc.

                                                                                                  2. 4

                                                                                                    (Note in advance: my apologies for writing that has turned out to be a overly-long ‘rebuttal with some sources’ for one element of your comment. The sources are just there because they are far more fun & informative than my comment (and because I want to be more like Hillel ^_^ ), not because I want to Argue On The Internet And Win. I also like the rest of your commentary! And I recognise my own comment might be too long to reply to, that’s fine.)

                                                                                                    I fully agree with Ben Hoyt and you that that the Elm docs for filterMap have a helpful description and example; but I’m not sure I agree with a subsequent comment you made. That comment seemed to assert that a purely abstract type description …

                                                                                                    filterMap : (a -> Maybe b) -> List a -> List b
                                                                                                    

                                                                                                    … might be better than an abstract one plus a concrete one:

                                                                                                    filterMap : (a -> Maybe b) -> List a -> List b
                                                                                                    filterMap convertFn input = ...
                                                                                                    

                                                                                                    You wrote:

                                                                                                    The suggested alternative example is arguably not clearer. I say “arguably” because there’s no right answer here. Why would one argument be called input? Aren’t both arguments inputs? What’s clear to one reader is a quandary to another. […] I think the people creating Elm have in general done a pretty good job of balancing the pragmatic and specific examples with not obscuring what is perhaps the more important concept of generality.

                                                                                                    My specific objection: considering a function’s data argument its main argument/input is ubiquitous. It is also ubiquitous in functional languages – just look at the fact that they (Elm, Haskell, etc.) reserve the last argument position for the data argument, so they can easily write pipelines where the data passes through curried functions.

                                                                                                    My more general objection: One does not teach by only offering the final level of understanding, but by connecting it to a learner’s present level of understanding. In this case, you want to teach the generality of the filterMap function. The abstract defintion is still there. The current docs already have the very abstract type defintion and the very concrete usage example. Adding the intermediate ‘definition with arguments named for their most common semantics’ makes it easier to move up and down the ladder of abstraction.

                                                                                                    Educational research has found ([Raws2014], cited in Teaching Tech Together [Wilson2019]) that “presenting examples helps students understand definitions, so long as examples and definitions are interleaved.” I realize that is not quite the same as “presenting examples will also help students understand abstractions”, but I do believe that that is also often true.

                                                                                                    • [Raws2014]: Rawson, Katherine A., Ruthann C. Thomas, and Larry L. Jacoby. The Power of Examples: Illustrative Examples Enhance Conceptual Learning of Declarative Concepts. Educational Psychology Review 27, no. 3 (June 2014): 483–504. doi:10.1007/s10648-014-9273-3. Reports that presenting examples helps students understand definitions, so long as examples and definitions are interleaved.

                                                                                                    • [Wilson2019] Greg Wilson (2019), Teaching Tech Together, section Concrete Examples.

                                                                                                    1. 2

                                                                                                      That comment seemed to assert that a purely abstract type description might be better than an abstract one plus a concrete one

                                                                                                      I’m sorry, that isn’t my position. I may have been clumsy in communicating that. To clarify: I believe the best documentation is a balance of both the concrete and the abstract.

                                                                                                      One does not teach by only offering the final level of understanding, but by connecting it to a learner’s present level of understanding.

                                                                                                      I completely agree. That’s why I said I think the Elm team have done a good job of balancing approaches, and that information hierarchy is non-trivial.

                                                                                                      1. 2

                                                                                                        I’m sorry, that isn’t my position. I may have been clumsy in communicating that.

                                                                                                        And/or I may have been clumsy in my interpretation of your comment :-) My apologies for the inconvenience.

                                                                                                        To clarify: I believe the best documentation is a balance of both the concrete and the abstract.

                                                                                                        Agreed, obv. I’m not so sure anymore which part of Hoyt’s proposal you objected to, but never mind. Have a nice day!

                                                                                                    2. 3

                                                                                                      When I learned Elm, I had the advantage of experience with Rust’s Iterator trait, so I already expected certain things about the function signatures of filter and map. When I saw Elm’s filterMap, just by looking at the types I knew there was only one way it could possibly work, and of course I was right.

                                                                                                      But I can imagine if I’d come to Elm straight from Python or JavaScript, I might find that function signature quite daunting. Other languages have quite a divide between the parameter and result types, while Elm’s optimised-for-currying syntax keeps things ambiguous. Other languages like to put the subject of a function as the first parameter, or even make it implicit, while Elm puts the subject right at the end, for the benefit of the |> operator. Other languages make every type implicitly nullable, or don’t declare types at all, while in Elm they’re blaringly eye-catching. Other languages that aren’t as strongly-typed make great efforts to give function parameters descriptive names, while Elm doesn’t bother to name parameters at all (at least, not in the docs).

                                                                                                      None of those things are problems, some of them are even benefits, but I’m not surprised that somebody new to Elm occasionally gets a bout of culture-shock. Elm has put a lot of resources into being kind and helpful to new users, but there’s that intermediate stage between “what’s this Maybe everywhere” and “why can’t I define my own typeclasses” where it could afford to be a little bit more like better-known languages. For example, by naming function parameters in the documentation — entirely superfluous for experienced Elm developers, but something familiar for intermediate developers to cling to in an unfamiliar environment.

                                                                                                      1. 2

                                                                                                        I recognise the culture shock. It is real, but at some point developers just need to take the plunge and learn something completely new, rather than just syntax swaps on ideas they’re already familiar with.

                                                                                                        With regards to your point about argument order, I remember this short talk does a pretty good job of explaining why even some of the most popular JavaScript libraries get it just dead wrong: https://www.youtube.com/watch?v=m3svKOdZijA

                                                                                                      1. 1

                                                                                                        This video is linked and quoted in the piece…

                                                                                                      1. 2

                                                                                                        From one of the comments below the article:

                                                                                                        To me this sounds like you’ve completely missed the point of TDD.

                                                                                                        This is the same back-and-forth navel-gazing that’s seemingly been the focus of the “software craftsmanship” community for at least the past five years.

                                                                                                        TDD is great and all, but when are we going to get over ourselves?

                                                                                                        1. 8

                                                                                                          I encourage you to first start with the mentality “TDD is always viable” and try to pick out flaws in your process that are hindering it.

                                                                                                          Oh my.

                                                                                                          1. 1

                                                                                                            I’m not sure there is a problem here…..

                                                                                                            There has always since the XP days been the notion of an Architectural Spike.

                                                                                                            All seat belts off, no tests, coding standards out the door, cowboy to the max…. get the info you need to understand the external system / framework / Tool whatever.

                                                                                                            Then throw it away and do it right.

                                                                                                            Then, in this case, you TDD collaboration tests..

                                                                                                            ie. You test that your code and the external system agree on the interface.

                                                                                                            ie. You test your can handle everything the external system throws at you, and you can handle every error condition the external system may return.

                                                                                                            1. 7

                                                                                                              When people say “you’re not doing TDD right”, they mean a specific interpretation of TDD: the strict minimalist red-green-refactor as a form of design. “Test everything” or even “write tests before your code” don’t “count” as “real TDD”. So saying “TDD is always viable” is saying “this specific set of rigid rules is always a good choice”, which is… bad.

                                                                                                              1. 1

                                                                                                                In the category of “Throwing a Mental Grenade into the Conversation and running away giggling…”

                                                                                                                Kent Beck’s latest adventure is… test && commit || revert

                                                                                                                https://increment.com/testing/testing-the-boundaries-of-collaboration/

                                                                                                                Which actually might be a fun experiment to try.

                                                                                                          2. 5

                                                                                                            Every time I see a criticism of TDD the response is “you don’t understand TDD” or “you’re doing TDD wrong”, to the point where I’m wondering what the hell TDD even is.

                                                                                                            1. 8

                                                                                                              Dismissing criticism with a hand-wavy “you are doing it wrong” seems to be popular in the Scrum/Agile circles too. It reminds me a lot of https://yourlogicalfallacyis.com/no-true-scotsman

                                                                                                              1. 2

                                                                                                                I’ve done a lot of TDD, so I’d say it’s:

                                                                                                                1. Write a test that fails (either for a feature that doesn’t exist yet or that reproduces a bug)
                                                                                                                2. Write minimal code that makes the test pass, no matter how ugly or WET
                                                                                                                3. Refactor (this is where design happens)

                                                                                                                Other than that the only other rule is to not write production code without a test to motivate/cover it.

                                                                                                                In my experience people dismiss seeing the test fail, but it’s extremely important.

                                                                                                                1. 3

                                                                                                                  In my experience people dismiss seeing the test fail, but it’s extremely important.

                                                                                                                  This to me is one of the two truly valuable things you gain from TDD: if you always make the test fail first, you never fall into that nasty trap of having both buggy code and a buggy test, which makes debugging the thing at midnight when the page comes in so much worse. It’s so tempting and easy to see a bug report come in and think, “I know what caused that,” and change the production code. Now maybe you also write a test, but the test passing doesn’t necessarily tell you much. Even if you do things in this order, commenting out your changes once you write the test (to prove that it can fail) gives you the same benefit. Extremely useful, IME.

                                                                                                                  The other main benefit I think is a tendency to write functions/methods which return values, rather than mutate state or produce side effects, which is of course not limited to TDD but in some idioms that are lax about side effects/mutability, TDD can help you avoid the temptation to just mutate state all over in eg a big Rails controller method or something.

                                                                                                                  These 2 things I have personally found very valuable in my career; all the other dogmatizing I find sensationalized.

                                                                                                                  1. 2

                                                                                                                    if you always make the test fail first, you never fall into that nasty trap of having both buggy code and a buggy test

                                                                                                                    Precisely. As Sean Parent said in his CppCon 2019 talk, it’s like double-entry bookkeping in accounting.

                                                                                                                    These 2 things I have personally found very valuable in my career; all the other dogmatizing I find sensationalized.

                                                                                                                    Atila’s rule #0 of programming: use your head. I mostly TDD, but sometimes I don’t. It’s always about trade-offs.

                                                                                                              2. 4

                                                                                                                TDD is basically 1% of software developers aggressively shouting that the other 99% are wrong, stupid, incompetent, and “may wind up fired and in jail” for not using TDD 100% of the time.