1. 6
    1.  

      Markdown does not support underlined text, and also it provides a lot features that I don’t need or want if I just want to add bold/italic/underlined text to a plain text file. I could use Markdown for bold/italic, but then I’d feel bound by its syntax for lists and code blocks and headings too.

      1.  

        I’ve always felt that markdown picked the wrong syntax. Rich.vim seems to have picked what I feel like are more natural choices.

        1.  

          I use italics way more often than bold, and having my Markdown source sprinkled with slashes would drive me up the wall. Gimme asterisks or underscores anyday.

          Don’t forget that Markdown allows embedded HTML tags. Disallowing slashes for italics makes parsing slightly easier.

          1.  

            In the past I typically used bold text to add emphasis, but now I almost exclusively use italics, something I started doing mostly because it was just easier to read and write in Markdown. I also prefer italics now as it’s more subtle and less in-your-face than bold text, although that’s perhaps also because I’m more used to it now (and not the reason I started using it).

            Interesting how the choice of writing tools influences the way we write.

            1.  

              I like using italics for emphasis and bold for introducing new terms.

            2.  

              Don’t forget that Markdown allows embedded HTML tags.

              You say that as if it’s a feature and not an abstraction pouring through John Gruber’s incompetence like an infinite waterfall of sadness.

              1.  

                Eh, I’d rather have a small markup language that’s extensible if needed than some bloated monstrosity that includes every formatting option under the sun…

                1.  

                  I’ve gotten a lot of mileage out of it by being able to write in a simple markup language >95% of the time, and resorting to HTML on the rare occasions that didn’t suffice. I think it’s a good way to keep the common use case simple, while still allowing more advanced ones with an “escape hatch”.

                  Keep in mind that Markdown was created by Gruber as a simple Perl script just to write his personal weblog in. It has since taken off as a standard, but that wasn’t Gruber’s intention at all. It was just designed as a personal tool to solve a specific personal need.

                  Not a huge fan of insulting people as “incompetent” over these kind of technical disagreements by the way. Point your criticisms at Markdown, rather than its author.

          1. 1

            I just want nine day weeks

            1. 3

              I’m afraid to ask why

              1. 1

                6 day week, 3 day weekend – it’d work well for a system where not everybody took their weekend at exactly the same time.

                Also it would lend a completely new meaning to the hit Beatles song “eight days a week”

              2. 2

                Since 365 x 4 + 1 = 1461 = 3 x 487 I always thought that 3 day weeks with 487 week years made the most sense.

              1. 39

                Wanna quickly figure out how you got to a particular point in a foreign codebase? Throw an exception there.

                1. 14

                  I use import ipdb; ipdb.set_trace() in python almost pathologically. It’s 1 step up from an exception cause it drops you to a REPL, which is super convenient.

                  1. 11

                    With 3.7 we now have breakpoint() as a built-in.

                    1. 2

                      I’ve found the interactivity of the IPython debugger to be slightly better than the built-in one, but nearly all of my codebase is pinned to Python 3.5 for now.

                      1. 6

                        Use export PYTHONBREAKPOINT=ipdb.set_trace where ipdb is available and you don’t have to change your code for different environments. (at least once you’re on 3.7)

                    2. 5

                      I like to use IPython’s embed to achieve a similar goal.

                      Add in a call to embed() as a breakpoint and find yourself in a full-blown IPython session with your objects in scope.

                      1. 2

                        also, ptpython

                      2. 5

                        I use binding.pry the same way in Ruby. Requires the pry gem, but it’s well worth it.

                        1. 4

                          I’ve been using pudb in the same manner. It’s got a TUI and it’s simple to jump into the REPL from there.

                          1. 1

                            Ooh, pudb looks really cool! Might switch to using that

                        2. 3

                          Yeah, unless there’s a try catch higher in the callstack consuming everything.

                          1. 3

                            Or unless you are in a minified React component with no source map.

                          2. 2

                            Long time before I learned the debugger; statement in JavaScript. Still seems unusual.

                            1. 1

                              I use this all the time but always feel a little dirty and imposterish. I’m glad my method has been validated by a stranger on an internet board!

                              1. 1

                                For big monolithic web apps: if finding the backend code for an operation is less obvious than it should be, find some method that will almost always be called (in our app it’s a particular method that gets the user context for a request, but it could be various things) and breakpoint it.

                              1. 2

                                I’ve been looking for a way to publish notes or thoughts for quite some time now, and this is inspiring. However, it seems to boil down to “My phone can run a script, so I now blog from my phone”, rather than being a way to quickly take notes from anywhere.

                                This is more of a job for emails I think. They’re available on every platform, with the same set of features. They fit the “write once and publish” mindset of notes, and you could even “amend” notes by replying to your own email. It would be easy to do with a sieve script when self-hosting emails, but using a subject pattern of “[NOTE]: ” with filter rules could work as well (you’d need to retrieve the “notes” folder using IMAP for example).

                                1. 3

                                  My notes sites (example 1, 2) are managed with a “write once and publish” workflow, using GitHub Actions and Zettelkasten. You edit your notes on GitHub, and it auto-publishes within a minute.

                                  You can give this a try instantly using this template repository: https://github.com/srid/neuron-template

                                  1. 2

                                    Thanks for creating Neuron! I’ve been using it for a few months now and really enjoy it.

                                    In fact, right now while I post this comment, I’m trying to build it on my new Pinebook Pro (ARM64 chip.)

                                    1. 2

                                      I’m trying to build it on my new Pinebook Pro (ARM64 chip.)

                                      Let me know how that goes! Daniel Kahlenberg tried to build it as well: https://github.com/srid/neuron/issues/66

                                      1. 1

                                        It’s not going that well. The PBP runs on battery, even when plugged in. The charger doesn’t deliver enough current to keep the machine charged, so I watch the battery gauge drain down. Cachix doesn’t help, since it’s all x86-64, so I’m pretty much compiling the world. GHC is the one I can’t get done on a single charge. The battery runs out before it finishes compiling!

                                        Apparently there’s a way to open up the case, disconnect the battery and bypass it to run directly from the charging port. I’ll try that next. (Lovely sticker inside informs me that using the bypass without disconnecting the battery will result in damage, possibly with fire and explosion. Lithium-ion is just the best, isn’t it?)

                                        1. 2

                                          As of yesterday, we have nightly linux bundle here. If GitHub Actions can build for aarch64 (looks like it can?), then we could also build an aarch64 bundle automatically. That, or perhaps you can build an aarch64 bundle manually from a VM on a powerful machine (relevant), and then copy over the bundle to your laptop for running.

                                          EDIT: This looks to be relevant: https://github.com/cachix/cachix/issues/295

                                          1. 2

                                            Great idea. I didn’t understand nix bundles before this. I’m building on an EC2 ARM Nixos instance now. I’m starting to appreciate Nix more… I think my previous frustration was from not being “all in” on Nixos.

                                            1. 1

                                              Nope. I spoke too soon. Nix has defeated me once again.

                                      2. 1

                                        Ditto

                                    2. 1

                                      Thanks for the kind words, they mean a lot.

                                      You’re right in that it is essentially running a script on my phone to get the file there (or else scp it over if I’m on my desktop or laptop. The distinction is that the actual work is all done server side, and what the phone script does is copy the content of the iOS shortcut into a file to be processed.

                                      I’m still not 100% happy with it though, and I hadn’t thought of email. It’s an inspired solution because it removes the vendor-specific nature of what I have. The good thing is that regardless of the method of getting the Markdown files onto the server, the rest of the processing and site generation would work.

                                      1. 2

                                        It’s cool that you managed to setup something that works for you, regardless of the vendor-specific bits of your solution ! To be fair I’m a little jealous because while my phone is a real linux box (sailfishOS), featuring a terminal, bash, git, … I still lack a good way to automate tasks using something like your “Shortcuts” app.

                                        Do you still use that solution to take notes from elsewhere though ? Or you only take notes from your phone now that you have this ?

                                        1. 2

                                          The funny thing is, even though I said “from anywhere”, the only place I was bothered about was my phone. Had I been serious about the from anywhere aspect, I might have come up with a different solution. Seriously considering writing the email part to go with it!

                                          1. 1

                                            I still lack a good way to automate tasks using something like your “Shortcuts” app.

                                            i guess if one fiddles around with the freedesktop mime type handler stuff it could work, but that’s horrible :)

                                            1. 1

                                              That could work, but still require to open the file manager which is hidden deep in the phone settings. I’d rather be able to put an icon on the app grid that I could tap to launch a script in $PATH for example.

                                              1. 1

                                                I haven’t done it but i think you should be able to just add a .desktop file pointing to your script: https://harbour.jolla.com/faq

                                                1. 1

                                                  I never though about doing that ! Thanks for the idea !

                                        2. 1

                                          I’ve been thinking about doing something similar with email as well. I was thinking of doing a bespoke smtp server whose ip I email directly and does the processing I want. Still haven’t gotten around to it, any more than writing anything that I’d publish that way.

                                          1. 1

                                            I run my own mail server, which means I can use a specific alias to pipe incoming mails into a program, say:

                                            z3bra+notes@domain.tld        |/usr/local/bin/push-note.sh
                                            

                                            And that script would strip the headers (verifying sender, perhaps?), use subject to name the note, and create the file in /var/gopher/notes. Perhaps even piping it through markdown and publishing as HTML as well !

                                            1. 1

                                              I’ve written most of this now, need to plumb it all together and write another blog post…

                                        1. 2

                                          You could add packages from above directly to the buildInputs list, but that would install each package in isolate and they would not see each other, and what you want is a Python distribution with the package installed inside it.

                                          I’m confused about this point. What can go wrong if we include the packages in buildInputs?

                                          1. 3

                                            As I mentioned on my other comment, with Nix you make dependencies explicit. When you add a python38 and a python38Packages.invoke side by side on a buildInputs list, you are saying that you want Python and Invoke but you don’t care about how they relate and it’s just a coincidence they are both Python things.

                                            In this particular case it will just work because 1) Nix puts invoke in $PYTHONPATH and it will be found when you try to import it from Python, and 2) python38.invoke has the default python38 as input so it is “reused”.

                                            So what can actually go wrong?

                                            Say you want to customize the Python installation (e.g. a compile flag or a patch). Now you have two variations of Python because Invoke still pulls the default one (and you haven’t told it depends on your new Python). Invoke has it’s own executable script to run tasks, and when you run it you are using default Python, but if you import it into another script you are using your customized Python.

                                          1. 7

                                            Although not a CLI tool, I’ve just remembered how torturous to write puppeteer is to a non-native English speaker. I still double-check to see if I got it right.

                                            1. 2

                                              I fail to come up with any harder words on the spot, though I know there are lots, but I find that puppeteer is spelled as it’s said: pup-pe-teer. Super easy, and I’m not native to the English language.

                                              1. 2

                                                Well, I find “torturous” harder. Another one which makes me pause is “colleague”.

                                                What is harder in a non-obvious way for many non-english keyboard users is the symbols. I use the german qwertz layout which means a slash, backslash, semicolon, and brackets require the shift key (or even Alt for backslash).

                                                1. 2

                                                  in many countries, torture is tortious

                                                  1. 1

                                                    In retrospect, writing this non-native instead of a non-native would have made for a far less controversial statement.

                                                  2. 2

                                                    I started using a US keyboard layout many years ago and just switch between them when I need the Swedish characters…

                                                    1. 2

                                                      I’m using these in my .Xmodmap for German umlauts:

                                                      keysym a = a A adiaeresis Adiaeresis
                                                      keysym u = u U udiaeresis Udiaeresis
                                                      keysym o = o O odiaeresis Odiaeresis
                                                      

                                                      Swedish characters probably have similar names.

                                                      1. 1

                                                        That’s a solution, I guess, but the Swedish keyboard has other affordances, such as diaresis, acute and grave accents, euro-sign, etc. So it’s more convenient for me to stay in US layout mostly and just switch when I need to type the classic test phrase “räksmörgås é gött” (shrimp sandwich tastes good).

                                                      2. 2

                                                        Same. The cultural empire won.

                                                1. 2

                                                  I’ve used it before. It’s nice. I keep running into the odd issue with it, though, and since I don’t know D it’s hard for me to volunteer to fix it.

                                                  1. 2

                                                    What issues have you run into? I hadn’t written any D before this morning, but something woke me up very early and I filed a couple of PRs to the project to fix some minor things that I’d seen. Maybe we can figure this out together.

                                                    1. 1

                                                      See eg https://github.com/zyedidia/Literate/issues/29 where Markdown footnotes don’t quite work. There was something else but I don’t remember it being as frustrating.

                                                    2. 1

                                                      How would you compare to alternatives like noweb or emacs Babel for org-mode? I used Babel but hated the emacs dependency

                                                      1. 2

                                                        I also used to use emacs org-mode. It’s notably less featureful than org-mode but is more useful right off the bat. And it produces nicely styled pages, too. The nice thing about emacs org-mode is that you can edit in any editor you want and only use emacs to compile your literate code.

                                                        Literate is much much much easier to use than noweb, and does not require using LaTeX (which IIRC noweb does).

                                                    1. 5

                                                      This looks very nice. I’ve known about Knuth’s cweb and friends for a long time, but this looks like a very user-friendly tool. I’d like to try it on a small project at work soon, see if our eternal documentation problems can be made a little better.

                                                      1. 1

                                                        I wrote a dumb and simple script today that makes illiterate programs, if you want I can put it up on GitHub. All it does is convert commented source to a markdown, but it is easier than adopting one of these literate tools.

                                                        1. 2

                                                          Yeah sure, I can write 80% of one of these in Perl in an hour, but then I’ll give up before I get to the integration with error reporting from the compiler which is the key to getting anyone else to go along with this.

                                                          1. 1

                                                            yeah I have no idea how to get a team to adopt better documentation, let alone literate programming :/

                                                      1. 3

                                                        It’s a bit sad that the C Shell isn’t mentioned in either article; I know that the current trend is to mock it all the time, but I quite like it and according to its man page it’s responsible for a lot of features we take for granted today: history, job control, completion…

                                                        I guess vi is nice too though ;)

                                                        1. 9

                                                          You as csh enthusiast and me as a Perl programmer can start our own “Most hated software” club. Everyone’s invited!

                                                          1. 4

                                                            Perl is cool, but the guy defending csh has no pardon.

                                                            1. 2

                                                              They hate you ‘cause they ain’t you.

                                                              1. 2

                                                                By volume, effectively all the useful code I’ve ever written has been PHP, Perl, or shell. When do we meet?

                                                                1. 2

                                                                  As someone who really likes both perl and csh, I’ve accepted them as things not to mention unless I’m talking to another perl programmer or another BSD enthusiast.

                                                                  1. 2

                                                                    The sigil that dare not speak its name.

                                                              1. 9

                                                                man it’d sure be neat if there was a setting in every mainstream browser that dictated whether or not you wanted to be tracked. they could call it “Do Not Track”. shame that’s not the world we live in though

                                                                1. 7

                                                                  Too bad that an advertising company makes the browser with 68% market share.

                                                                1. 28

                                                                  Stephen Wolfram is considered a crank by professional scientists; see for example Scott Aaronson’s review of Wolfram’s A new kind of science.

                                                                  The “buyer beware” signal from this breathless celebration of Wolfram’s genius (by Wolfram) is strong.

                                                                  1. 10

                                                                    Also this one about him suing people for writing math proofs: http://bactra.org/reviews/wolfram/

                                                                    1. 3

                                                                      Thanks so much for sharing that. It’s sent me down a rabbit hole for the past two hours, in the course of which I have discovered many fascinating things. Like Natalie Portman having an Erdös-Bacon-Sabbath number of 11.

                                                                    2. 3

                                                                      I approach these kinds of things from a philosophical perspective so for me reading Stephen Hawking and reading the Bhagavad Gita are both valid forms of investigation of the universe. The idea that ‘professional scientists don’t approve your choice of reading material’ has always been something that I find very annoying and unhelpful. It is essentially none of their business what I read.

                                                                      Even if I were about to spend money or time building an experimental setup based on the information in that article, that would still be valid science if I did it rigorously and correctly. Any result achieved by the setup would be valid science and either falsify or fail to falsify the tested hypothesis.

                                                                      If thinkers always listened to what ‘professional scientists’ said we would have no plate tectonics, no theory of evolution, and no germ theory, to name just a few.

                                                                      I think I phrased this more harshly than I meant to, your comment is relevant and may be of use to some readers. But I can’t let it go unchallenged as I find there are a lot of impressionable science enthusiasts that read something like that and take it as an invitation to start sending hate mail and flaming people on forums for discussing this kind of idea. I feel like blindly clinging to accepted dogma is extremely detrimental to the practice of good science, whereas wild imaginative ideas with little supporting evidence have proven to be quite beneficial to it in the past.

                                                                      I will also admit that the breathless celebration of one’s own genius, as shown by Wolfram and others, is also annoying and unhelpful. Nevertheless I found this article fascinating and I am glad it was shared here.

                                                                      1. 2

                                                                        I feel like blindly clinging to accepted dogma is extremely detrimental to the practice of good science, whereas wild imaginative ideas with little supporting evidence have proven to be quite beneficial to it in the past.

                                                                        I agree and I’m going to explain how at length.

                                                                        The scientific method is a way of establishing consensus. It is a tool made by humans for other humans. Over time a culture and a way of doing things has developed around it.

                                                                        The two main products of science are theories that explain observed phenomena and observations and experiments that can confirm or refute theories. Because of the values of the culture of science (squishy humans like the things they know), any new theory has to explain existing observations as well or better than the incumbents. A more complex, technically difficult, or simply innovative can only replace existing theories if it explains more known phenomena, or predicts new phenomena that can be verified.

                                                                        This is how, for example, the Copernican view of the solar system won out, or how general relativity replaced Newtonian gravity, a vastly simpler theory. As far as I know, wild imaginative ideas (quantum mechanics, relativity, Newtonian physics, the Copernican view, …) have won out because they have been supported by evidence (the double-slit experiment, the Michelson-Morley experiment, elliptical orbits, phases on Venus, …).

                                                                        When Einstein proposed general relativity, he was literally an Einstein in the current cultural meaning of the term. Nonetheless, he had to provide an extensive list of predictions (gravity lenses, the orbit of Mercury, gravitational redshift) that were not explained by Newton’s theory for his extremely technically complicated new theory to be accepted.

                                                                        This brings us to Wolfram. He has done none of those things. He has not shown how his framework explains existing phenomena. He has not made new predictions that can be verified experimentally. What he has done is make some models and proclaimed himself a genius. He doesn’t want to do the work needed to be accepted within the scientific system, and just new ideas are not enough to move the consensus.

                                                                        The thing is, his ideas are out there. If he explains them well enough, they can be picked up by people who are willing to work within the squishy system of science. If they have genuinely new things to offer, they will be accepted, because they’ll offer a competitive advantage to the people who accept them, who will be able to figure out new things faster.

                                                                        Wolfram has been proclaiming himself a genius since the 80’s, and no one has yet taken him up on his offerings.

                                                                        I approach these kinds of things from a philosophical perspective so for me reading Stephen Hawking and reading the Bhagavad Gita are both valid forms of investigation of the universe.

                                                                        Hey, whatever works for you. Historically, we’ve tried similar approaches to building knowledge consensus (shamanism, ancient Greek philosophy, religion, etc) and when they work they end up much more dogmatic and hostile to outside challenges than the scientific method. If you’re just doing things for yourself you don’t need any consensus.

                                                                        1. 1

                                                                          This brings us to Wolfram. He has done none of those things. He has not shown how his framework explains existing phenomena.

                                                                          Isn’t that what the Physics project is about? Also in this article, he explains several existing phenomena, at least in broad outlines with links to details. I am not in position to verify his claims, but the article offers some explanations and link to details.

                                                                      2. 3

                                                                        I read Wolfram always with some kind of hope. I am kind of biased in that what he aims for most likely won’t work / fail, but on the other hand, I think sometimes there are interesting ideas in between. I’m looking there sometimes for smaller ideas that I can comprehend.

                                                                        But thanks for the critique! I needed that

                                                                        1. 4

                                                                          He definitely has a habit of claiming original insights and not citing prior work. But I think “crank” means something different – it’s someone who doesn’t actually understand the field, has no background in it, but claims original insights (that usually fall down really quickly).

                                                                          I think Scott Aaronson has a good page about how to tell if someone’s a crank without doing a full reading.

                                                                          https://www.scottaaronson.com/blog/?p=304

                                                                          Wolfram goes beyond factual claims and “sells” his stuff pretty hard, and this post seems like a good example of that.

                                                                          I would put him in a different category than “crank” though. He’s more like talented guy who became an “outsider scientist”, and I would say there’s nonzero probability that he’s right about something interesting, even if he is going about it in a very ham-fisted way…

                                                                          It’s definitely impressive he managed to build a profitable company and work on improving the same software for decades… Cranks don’t do that. You can’t be totally “out of it” and accomplish that.

                                                                          1. 2

                                                                            If you read through the article, it covers many of Scott Aarsonson’s concerns.

                                                                          1. 15

                                                                            To quote Marilyn Manson, I wasn’t born with enough middle fingers for this.

                                                                            1. 10

                                                                              It’s a case of Poe’s Law to me. But, because Tau is merely pointless rather than completely bananas, it’s twice as hard to distinguish sincerity from satire. You might even say it’s… 2(Poe’s Law).

                                                                              1. 1

                                                                                Maybe a fear of the following pattern: one pretend to be joking while announcing a loud statement, and when there are enough people showing their actual belief in the “joke”, one change its public opinion from “joking” to “we actually mean it”.

                                                                            1. 1

                                                                              Also in the “weird messaging” department, this comment on preemptible goroutines:

                                                                              [Programs that use syscall] will see more slow system calls fail with EINTR errors. Those programs will have to handle those errors in some way…

                                                                              I’m assuming this change didn’t break compatibility, so this means those programs should already be handling those errors, but getting EINTR on “more” of them may reveal bugs. Or is it saying you’ll get EINTR where you never could before? That “more” is confusing.

                                                                              1. 1

                                                                                A system at $work that’s been running without problems for 2 years broke when we updated to Go 1.14 (and works when we build the exact same code under 1.13). It’ll be fun to find out where the problem is. We don’t do any syscalls directly, and didn’t see error messages, so fun times ahead.

                                                                                1. 1

                                                                                  I think it’s an error code that you already should be handling, but programs may be assuming happy path on accident. Because preemption presumably uses signals to stop a goroutine on a thread you are now basically guaranteed to get occasional eintr.

                                                                                  1. 1

                                                                                    Lots of people do not loop on EINTR, and if their syscalls are fast enough, they never run into it.

                                                                                    This will create lots and lots of bugs in production code IMO. It’s unfortunate because I don’t think their API guaranteed anything else, but behavior of a popular enough API is your API, and that’s it.

                                                                                  1. 5

                                                                                    Could @geoffwozniak give some context here? The last time I knew, repo surgeon was not the top dog in the gcc git conversion race. Did that change, or is esr an unreliable narrator?

                                                                                    1. 9

                                                                                      This was talked about for a long time on the mailing list, but once the GNU Cauldron happened in September 2019, it kind of lit a fire under the whole “let’s get this converted to Git” movement. There was already a mirror that many (including myself) were using and because the whole reposurgeon thing seemed stuck, some argued to just get on with it and use the existing mirror.

                                                                                      Some of the long-time contributors were a little more concerned about the tags and historical aspects of the repo, going back to the CVS days. As a result, the enthusiasm of the mirror and an existing conversion script waned. Personally, I was fine with the mirror.

                                                                                      At any rate, the wiki page lays out the pros and cons of each. It was sometime in December 2019 that the reposurgeon route was chosen. It’s somewhere in this thread (I’m too lazy to find the exact message).

                                                                                      1. 2

                                                                                        In addition, a previous story about this with some more context on why reposurgeon was chosen: https://lobste.rs/s/ykr0ct/gcc_has_really_high_quality_git

                                                                                    1. 11

                                                                                      For those interested in distributed sqlite, you may also want to look into ‘dqlite’, another raft-based distributed sqlite project. It was developed to support LXD’s clustering features, and is in use in that context.

                                                                                      I haven’t used it myself, but I used to work with those guys, which is how I know about it. I know they initially looked at rqlite, but decided they needed to roll their own. I think the reason was related to the first limitation listed in the rqlite README: “Only SQL statements that are deterministic are safe to use with rqlite, because statements are committed to the Raft log before they are sent to each node.”.

                                                                                      The lead dev, Free, gave a detailed talk at FOSDEM last month about it.

                                                                                      1. 4

                                                                                        Rqlite has an open issue about that, solving it will involve parsing incoming SQL statements, executing any time, rand, etc functions once, and modifying the committed statement to use their values. MySQL has been doing that for ages in its statement-based replication afaik, so it’s a solved problem that “just” needs some legwork.

                                                                                      1. 17

                                                                                        So, what’ve you been paid and what are you being paid now?

                                                                                        Here, putting my money where my mouth is: 55K -> 60K -> 125K -> 160K now, not including contracting and consulting and founding and other misadventures. All base, not counting (usually laughable, never worth it) equity.

                                                                                        1. 12

                                                                                          Approximations from memory with some kind of parseable format

                                                                                          year,salary,tc,cause
                                                                                          2008,37000,39000,first dev job
                                                                                          2009,42000,48000,merit raise
                                                                                          2010,53000,62000,merit raise
                                                                                          2011,64000,70000,merit raise
                                                                                          2012,75000,115000,merit raise + acquisition
                                                                                          2013,81000,83000,COL raise
                                                                                          2014,115000,120000,role change
                                                                                          2015,117000,121000,COL raise
                                                                                          2016,124000,127000,merit raise
                                                                                          2017,140000,140000,retention raise
                                                                                          2017,176000,195000,new job with reports
                                                                                          2018,183000,202000,COL raise
                                                                                          2019,140000,170000,laid off in end of 2018 with new job early 2019
                                                                                          2020,140000,174000,new bonus and RSU structure kicks in
                                                                                          
                                                                                          1. 3

                                                                                            Can I ask, what is tc?

                                                                                            1. 8

                                                                                              Total Compensation, which is generally calculated as salary + bonuses + equity if RSUs and not options. Some folks will include 401k in it, but that’s rare because 401k matches are all over the place and are a function of your salary anyway.

                                                                                              1. 3

                                                                                                That helps, thank you both.

                                                                                              2. 7

                                                                                                My guess is “total compensation” i.e. salary + bonuses

                                                                                            2. 4

                                                                                              From 2012 to now: $60k -> €63k -> €68k -> €78k -> €110k -> €98k. A couple of those years I also got around €35k in bonuses, but those will probably prove to be outliers in the long run.

                                                                                              I took a pay cut at the start of the year to have a job with more flexible hours and less stress so I could spend more and better time with my family. It has been 100% worth it and I wish I’d done it sooner.

                                                                                              1. 4

                                                                                                In terms of cash, I’ve gone:

                                                                                                [Pittsburgh]

                                                                                                2010-11: $7.25-$10/hr (I was a high schooler / college freshman)

                                                                                                2012: $15/hr interning where @colindean was at the time

                                                                                                [Chicago]

                                                                                                2013: $25/hr at a startup

                                                                                                2014: $75k/yr + RSUs at my first long-term full-time job

                                                                                                2015: $90k/yr + RSUS (promotion)

                                                                                                2016-2018: $90-150/hr doing freelancing

                                                                                                2018: $95k/yr + a little equity working 3/4 time at a startup

                                                                                                2019: $145k/yr + more equity switching to full-time and also getting a raise

                                                                                                Almost all of this has been full-stack web development in Rails or Clojure.

                                                                                                1. 2

                                                                                                  Oh hai!

                                                                                                  1. 3

                                                                                                    Hope things are going well in your post-IBM life! I miss the burgh!

                                                                                                2. 3

                                                                                                  In US, various places, mainly Kansas City and Phoenix, currently Pittsburgh. The older figures are VERY vague though.

                                                                                                  year,salary,tc,cause
                                                                                                  2008,32000,33000,First job as baby sysadmin tech
                                                                                                  2009,37000,39000,raise + bonuses + overtime
                                                                                                  2010,28000,30000,then absconded to grad school.
                                                                                                  2011,21000,22500,Grad school kinda sucked
                                                                                                  2012,21000,22500,but I finished it with no debt
                                                                                                  2013,24000,25000,though moving to Seattle was a mistake.
                                                                                                  2014,58000,61000,Working in oilfield stuff pays the bills
                                                                                                  2015,46000,47500,but takes its toll in mental health.
                                                                                                  2016,56000,62000,Academia is better
                                                                                                  2017,57000,63000,but the hamster wheel gets awful
                                                                                                  2018,41000,42000,and I should have quit way earlier.
                                                                                                  2019,75000,81000,So here I am at a mid-life startup
                                                                                                  2020,78000,84000,and I love it.
                                                                                                  

                                                                                                  I’m currently rather underpaid, judging by @colindean ‘s awesome survey, but I wouldn’t get to help build flying robots at Facebook or whatever. You don’t get to take money with you after all, and I’m literally posting this during a work trip to a helicopter factory.

                                                                                                  1. 2

                                                                                                    Boston area, software developer, primarily backend.

                                                                                                    • 66 (base, thousands of USD), starting job out of college in 2011, where I had interned before
                                                                                                    • 69, standard raise
                                                                                                    • 88, changed employer, 2013, did not negotiate
                                                                                                    • 99, when manager noticed how little I was paid
                                                                                                    • 103, standard raise
                                                                                                    • 106, standard raise
                                                                                                    • 108, standard raise
                                                                                                    • 118, raise when I pointed out how badly underpaid I was
                                                                                                    • 142, changed employer in 2019 and actually negotiated my salary (although insurance plan not as good, which cuts several thousand out of this)

                                                                                                    I could probably be making 150+ depending on employer, or 180+ if I worked for an employer I hated.

                                                                                                    I’ve tried mentioning my salary to other developers in contexts when it made sense, but they’ve never offered, and I’ve never asked. Not really sure how to get that conversation going.

                                                                                                    1. 1

                                                                                                      A friend of mine did very well on his startup equity 4 startups in a row. But yeah your mileage will vary.

                                                                                                    1. 2

                                                                                                      Why is the response to the Rust community slut shaming a developer into abandoning their project a dress code instead of making clear that en-masse harassment is not ok?

                                                                                                      1. 3

                                                                                                        Because its better to address the root cause? I’d prefer the Rust community remains positive and constructive. The childhood lesson can be left for the developers that misbehaved.

                                                                                                        1. 3

                                                                                                          This already happened enough in other threads. For example https://words.steveklabnik.com/a-sad-day-for-rust And it is very reasonable to decide on how we can handle safety expectations like these, which fuel the mob.

                                                                                                        1. 2

                                                                                                          I don’t understand why people would want 10x the code. More code is not good; code is a liability that needs interest paid on it.

                                                                                                          1. 4

                                                                                                            I think that when people talk about 10x engineers (let’s not worry about whether they exist for now) they don’t mean people who write 10x the code, but deliver more value with the same amount of code. They write “the right stuff”. See for example https://www.google.nl/amp/s/www.newyorker.com/magazine/2018/12/10/the-friendship-that-made-google-huge/amp

                                                                                                          1. 11

                                                                                                            For comparison, this compile leaked 3,861,785 bytes of ram last time. This means that the compiler has overall gained 0.8 megabytes of leak in the last 6 months. This is worrying, given that V claims to not have a garbage collector. I can only wonder how much ram was leaked when building that giant module.

                                                                                                            I may be mistaken, but I believe that the design of the original Go compiler used to leak memory on purpose. It’s a short lived process, where speed is desired. Who cares if it leaks its memory, when the operating system will free it all at once a couple of seconds later?

                                                                                                            1. 17

                                                                                                              Yes, but given that the V compiler is written in V and:

                                                                                                              If your V program compiles, it’s guaranteed that it’s going to be leak free.

                                                                                                              citation

                                                                                                              I get it says “work in progress”, but it looks hypocritical to say “no leaks here” and then have one of the biggest examples of V code leak like a sieve.

                                                                                                              1. 3

                                                                                                                Fair. I didn’t realize there was a claim like that.

                                                                                                              2. 10

                                                                                                                You can’t have double-free bugs if you never free memory. taps head

                                                                                                                1. 9

                                                                                                                  Seems that a big part of the justification in the article is to support small stacks for goroutines. Go is not the only language with green threads but seems fairly atypical in its bypassing of libc, how do other languages with green threads handle this?

                                                                                                                  1. 5

                                                                                                                    I think Go is unusual in that it uses a custom ABI to support the green threads internally, somewhat like Haskell.

                                                                                                                    In typical cases where you’re not doing something like “Cheney on the MTA” style stack manipulation, you can just use setjmp and longjmp for management of the stack, and let the system figure out restoring. Go does quite a bit of stack manipulation in order to handle this stuff.

                                                                                                                    1. 5

                                                                                                                      “Cheney on the MTA” style stack manipulation,

                                                                                                                      Please, please elaborate on this.

                                                                                                                      1. 19

                                                                                                                        sigh I accidentally reloaded the page when I had a bunch of links queued up for you hahaha 😭

                                                                                                                        However, sorry for not elucidating on that reference! “Cheney on the MTA” is a garbage collector style that uses the stack to allocate objects rather than the heap. To do this, Cheney uses a set of function calls and callbacks, so as to “clear” the stack under certain conditions. The original paper by Henry Baker is super interesting, and yes this is yet another Henry Baker creation (if you’re not familiar, Henry Baker is/was a big Lisp and ML-the-language person who designed a number of interesting things for those languages). You can see this in Baker’s paper:

                                                                                                                        object foo(env,cont,a1,a2,a3) environment env; object cont,a1,a2,a3;
                                                                                                                        {int xyzzy; void *sp = &xyzzy; /* Where are we on the stack? */
                                                                                                                         /* May put other local allocations here. */
                                                                                                                         ...
                                                                                                                         if (stack_check(sp)) /* Check allocation limit. */
                                                                                                                            {closure5_type foo_closure; /* Locally allocate closure with 5 slots. */
                                                                                                                             /* Initialize foo_closure with env,cont,a1,a2,a3 and ptr to foo code. */
                                                                                                                             ...
                                                                                                                             return GC(&foo_closure);} /* Do GC and then execute foo_closure. */
                                                                                                                         /* Rest of foo code follows. */
                                                                                                                         ...
                                                                                                                        }
                                                                                                                        

                                                                                                                        That GC call with a closure and such is used to actually clean the stack of Garbage. Chicken Scheme use(s|d) it to great effect, but it meant that calling into Chicken code was slightly more complex, because it’s not exactly the same calling convention: there are extra parameters and such that need to passed in, and many things are actually linked around callbacks. (this is the most hand wavy explanation of this, without going in to details, and if Christian is still on lobste.rs he will likely correct me…)

                                                                                                                        Now, as related to Go, Go also uses it’s own calling convention and ABI internally. This has at times clashed with certain optimization techniques, because it’s not exactly register based, and like Haskell or Chicken Scheme, it’s not exactly trivial to call all code from C sources because of this change in ABI. This document here is one of the better references for Golang’s calling conventions, at least for x86/64; it’s not terrible, and there are reasons for it, but it does make things non-trivial; for example Osiris Lab at NYU just added Golang support to Ghidra, because it is slightly different from what other languages and stacks use.

                                                                                                                        That was a lot, but I hope that made the reference more clear? Basically, there are systems like Cheney and others that manipulate the C stack via various means to make certain things easier, like Garbage collection. Golang does the same, but for purposes of making goroutines lighter weight.

                                                                                                                        1. 5

                                                                                                                          Thank you so much for the explanation!

                                                                                                                          I thought it was going to be some slang/metaphor for like GC as it would be handled by a certain former US vice president trying to use public transportation or something–like, shooting in the face any allocations that weren’t high enough value or something.

                                                                                                                          1. 8

                                                                                                                            ah, no no; Cheney therein is a reference to reference to C.J. Cheney, best known for Cheney’s Algorithm, a stop-and-copy algorithm from the 70’s. Baker was making a song reference (“Charlie on the MTA”) and alluding to Cheney’s algorithm.

                                                                                                                            1. 8

                                                                                                                              I’m a firm believer in that knowing the history and culture of a subject is essential to understanding it, and I do not know of another website where I could get this kind of insight into computing. Thank you.

                                                                                                                              1. 4

                                                                                                                                I also think that, esp. in computer science and to a lesser degree in software engineering, we have a tendency to not “survey the literature” regarding what we’re doing. So we end up very often recreating the same modalities as other pieces of software or algorithms without realizing this.

                                                                                                                                I’m very big into the history of programming languages, since I’ve read so many papers and books on the topic, and it’s always interesting to see how often we recreate things we had in the 70’s for things. A similar comment applies to operating systems, to a lesser degree, since we generally create fewer of them.

                                                                                                                                1. 2

                                                                                                                                  In the large, and the small.

                                                                                                                                  One of the characteristics of the best programmers I’ve worked with is a reflex to check whether the problem they’re dealing with is a solved one.

                                                                                                                                  Another is to have the chops to solve the problem if it isn’t :)

                                                                                                                                  Yet another is to check whether their eventual solution - either their own, or a previously invented wheel - is idiomatic.

                                                                                                                                  All but one are problems solved with a search engine and a few good books, for most of the problems most teams encounter. And yet I lose count of the number of times people haven’t checked, and it’s been a mess, and the inheritors of the mess have wondered why the original implementers reinvented that particular wheel. As an octagon.