1. 7

    In preparation for tax season, I’m tweaking my plaintext accounting setup. I recorded all of 2017: every transaction that touched my bank or credit cards is queryable. I’m switching processors for 2018 to a setup that’s already saved me about two hours per month. I’d love to get to a point where I can do make irs1040 and it spits out the content of all of the boxes that my transaction data can reflect.

    I’ve already got make networth and make cashflow working, complete with nice graphs in the terminal courtesy of iTerm2’s imgcat.

    I’m hoping to generalize my setup so that I can release it eventually. I’ve found very few examples of workflows so I want to contribute mine to the world so that the plaintext accounting ecosystem is more approachable.

    1.  

      Some friends and me collected quite a few interesting ledger-cli graphs (using GNUplot and a pie-charting tool of mine) on Github: https://github.com/cbdevnet/ledger-reports

      Though some of them break when using them with multiple commodities… Might have to get around fixing that some time after my exams :)

      1.  

        This looks really awesome! Any chance you could throw up some example images?

        1.  

          Good suggestion, thanks! I’ve just opened an issue for that. As I’m not quite comfortable with using my own data for presentation purposes, this will include generating a somewhat-random example ledger file and generating the demo statistics from that :)

      2. 1

        I’d be very interested in seeing your setup when you’re done. The notion of using a CLI program for doing this sort of accounting intrigues me a bit.

        1. 3

          A good start is to watch a recording of one of my talks and those of some others who have produced some content about it: https://www.youtube.com/results?search_query=plaintext+accounting&page=&utm_source=opensearch

          I’m probably still a few months away from having my stuff sufficiently abstracted.

          1. 1

            “The notion of using a CLI program for doing this sort of accounting intrigues me a bit.”

            It was the default on most cash registers of big chains for a long time. The ones in my area I shop at just now all got the graphical apps. It was mainframe, terminal-style stuff on backend for some. So, CLI on each side. Here is one for UNIX I found when I looked up that stuff.

            1. 3

              There’s a difference between CLI and TUI. Most cash registers I’ve seen were TUI, IIRC.

              Still, there’s a certain Spartan flavor to TUIs, such that they can be quite efficient for their tasks.

              1. 1

                Ok, yeah, TUI was more what I was thinking of. The ones I dealt with were usually more efficient than their GUI replacements. Way more reliable, too.

        1. 6

          Work:

          • More ticketing, as per usual
          • Working on a little TCL script that has buttons for copy/pasting text on it, since there’s a lot of reuse (especially of ticket numbers)

          Personal:

          • Had a very laid-back weekend
          • Played a lot of Heat Signature (maybe too much)
          • Started work on switching my wiki to include created/updated times. When I’m done, I plan on adding three sort modes for the wiki: One by created, one by id, and one by most-recently modified. In this process, I’ve discovered that Erlang’s date/time support isn’t super straightforward. It’s not horrible, but it’s not straightforward either.

          EDIT:

          • Ported my syntax highlighting snippet (based on google’s prettify.js) to my wiki repository (Not the change but an example of it in action)
          1. 5

            It seems odd to spend so much space discussing the complexities of software development, only to conclude that the answer is empiricism. Surely the number of variables and their non-linear effects make experimentation difficult. I think $10M is an extremely tiny fraction of what a reproducible experiment would cost, and it would take a long time to run. You need a huge scale in number of projects and also lengthy longitudinal studies of their long-term impacts. And after you did all that the gigantic experiment would be practically certain to perturb what it’s trying to measure: programmer behavior. Because no two projects I’m on get the same me. I change, mostly by accumulating scar tissue.

            Empiricism works in a tiny subset of situations where the variables have been first cleaned up into orthogonal components. I think in this case we have to wait for the right perspective to find us. We can’t just throw money at the problem.

            1. 6

              What else can we do? Our reason is fallible, our experiences are deceitful, and we can’t just throw our hands up and say “we’ll never know”. Empiricism is hard and expensive, but at least we know it works. It’s gotten us results about things like n-version programming and COCOMO and TDD and formal methods. What would you propose we do instead?

              1. 4

                Empiricism is by no means the only thing that works. Other things that work: case studies, taxonomies, trial and error with motivation and perseverance. Other things, I’m sure. All of these things work some of the time – including empiricism. It’s not like there’s some excluded middle between alchemy and science. Seriously, check out that link in my comment above.

                I’m skeptical that we have empirically sound results about any of the things you mentioned, particularly TDD and formal methods. Pointers? For formal methods I find some of @nickpsecurity’s links kinda persuasive. On some mornings. But those are usually case studies.

                Questions like “static or dynamic typing” are deep in not-even-wrong territory. Using empiricism to try to answer them is like a blind man in a dark room looking for a black cat that isn’t there.

                Even “programming” as a field of endeavor strikes me as a false category. Try to understand that domain you’re interested in well enough to automate it. Try a few times and you’ll get better at it – in this one domain. Leave the task of generalization across domains to future generations. Maybe we’ll eventually find that some orthogonal axis of generalization works much better. Programming in domain X is like ___ in domain X more than it is like programming in domain Y.

                You ask “what else is there?” I respond in the spirit of Sherlock Holmes: “when you have excluded the impossible, whatever is left, however unlikely, is closer to the answer.” So focus on your core idea that the number of variables is huge, and loosen your grip on empiricism. See where that leads you.

                1. 5

                  I think we’re actually on the same page here. I consider taxonomies, ethnographies, case studies, histories, and even surveys as empirical. It’s not just double blind clinical studies: as Making Software put it, qualitative findings are just as important.

                  I reject the idea that these kinds of questions are “not even wrong”, though. There’s no reason to think programming is any more special than the rest of human knowledge.

                  1. 2

                    Ah ok. If by empiricism you mean, “try to observe what works and do more of that”, sure. But does that really seem worth saying?

                    It can be hard psychologically to describe a problem well in an article and then not suggest a solution. But sometimes that may be the best we can do.

                    I agree that programming is not any more special than the rest of human knowledge. That’s why I claim these questions are not even wrong. Future generations will say, “sure static typing is better than dynamic typing by about 0.0001% on average, but why did the ancients spend so much time on that?” Consider how we consider ancient philosophers who worried at silly questions like whether truth comes from reason or the senses.

                    Basically no field of human endeavor had discovered the important questions to ask in its first century of existence. We should spend more time doing and finding new questions to ask, and less time trying to generalize the narrow answers we discover.

                    1. 3

                      Ah ok. If by empiricism you mean, “try to observe what works and do more of that”, sure. But does that really seem worth saying?

                      It’s not quite that. It’s all about learning the values and limitations of all the forms of knowledge-collection. What it means to do a case study and how that differs from a controlled study, where ethnographies are useful, etc. It’s not “observe what works and do more of that”, it’s “systematically collect information on what works and understand how we collect and interpret it.”

                      Critically in that is that the information we collect by using “reason” alone is minimal and often faulty, but it’s how almost everybody interprets software. That and appealing to authority, really.

                      Basically no field of human endeavor had discovered the important questions to ask in its first century of existence. We should spend more time doing and finding new questions to ask, and less time trying to generalize the narrow answers we discover.

                      The difference is that we’ve already given software control over the whole world. Everything is managed with software. It guides our flights and runs our power grid. Algorithms decide whether people go to jail or go free. Sure, maybe code will look radically different in a hundred years, but right now it’s here and present and we have to understand it.

                      1. 2

                        It is fascinating that we care about the same long-term problem but prioritize sub-goals so differently. Can you give an example of a more important question than static vs dynamic typing that you want to help answer by systematically collecting more information?

                        Yes, we have to deal with the code that’s here and present. My answer is to reduce scale rather than increase it. Don’t try to get better at running large software projects. Run more small projects; those are non-linearly more tractable. Gradually reduce the amount of code we rely on, and encourage more people to understand the code that’s left. A great example is the OpenBSD team’s response to Heartbleed. That seems far more direct an attack on existing problems than any experiments I can think of. Experiments seem insufficiently urgent, because they grow non-linearly more intractable with scale, while small-scale experiments don’t buy you much: if you don’t control for all variables you’re still stuck using “reason”.

                        1. 2

                          Can you give an example of a more important question than static vs dynamic typing that you want to help answer by systematically collecting more information?

                          Sure. Just off the top of my head:

                          • How much does planning ahead improve error rate? What impacts, if any, does agile have?
                          • What are the main causes of cascading critical failures in systems, and what can we do about them?
                          • When it comes to maximizing correctness, how much do intrinsic language features matter vs processes?
                          • I don’t like pair programming. Should I be doing it anyway?
                          • How do we audit ML code?
                          • How much do comments help? How much does documentation help?
                          • Is goto actually harmful?

                          Obviously each of these have ambiguity and plenty of subquestions in them. The important thing is to consider them things we can investigate, and that investigating them is important.

                          1. 0

                            Faced with Cthulhu, you’re trying to measure how the tips of His tentacles move. But sometimes you’re conflating multiple tentacles! Fthagn!

                            1. 1

                              As if you can measure tentacles in non-Euclidean space without going mad…

                              1. 1

                                Now you’re just being rude. I made a good faith effort to answer all of your questions and you keep condescending to me and insulting me. I respect that you disagree with me, but you don’t have to be an asshole about it.

                                1. 2

                                  Not my intention at all! I’ll have to think about why this allegory came across as rude. (I was more worried about skirting the edge when I said, “is that really worth talking about?”) I think you’re misguided, but I’m also aware that I’m pushing the less likely theory. It’s been fun chatting with you precisely because you’re trying to steelman conventional wisdom (relative to my more outre idea), and I find a lot to agree with. Under it all I’ve been hoping that somebody will convince me to return to the herd so I can stop wasting my life. Anyway, I’ll stop bothering you. Thanks for the post and the stimulating conversation.

                        2. 2

                          “try to observe what works and do more of that”

                          That is worth saying, because it can easily get lost when you’re in the trenches at your job, and can be easy to forget.

                    2. 2

                      What else can we do?

                      If describing in terms of philosophies, then there’s also reductionism and logic. The hardware field turning analog into digital lego’s and Oberon/Forth/Simula for software come to mind for that. Maybe model-driven engineering. They break software into fundamental primitives that are well-understood which then compose into more complex things. This knocks out tons of problems but not all.

                      Then, there’s logical school that I’m always posting about as akkartik said where you encode what you want, the success/failure conditions, how you’re achieving them, and prove you are. Memory safety, basic forms of concurrency safety, and type systems in general can be done this way. Two of those have eliminated entire classes of defects in enterprise and FOSS software using such languages. CVE list indicates the trial-and-error approach didn’t works as well. ;) Failure detection/recovery algorithms, done as protocols, can be used to maintain reliability in all kinds of problematic systems. Model-checking and proof has been most cost-effective in finding protocol errors, esp deep ones. Everything being done with formal methods also falls into this category. Just highlighting high impact stuff. Meyer’s Eiffel Method might be said to combine reductionism (language design/style) and logic (contracts). Cleanroom, too. Experimental evidence from case studies showed Cleanroom was very low defect, even on first use by amateurs.

                      Googled a list of philosophies. Let’s see. There’s the capitalism school that says the bugs are OK if profitable. The existentialists say it only matters if you think it does. The phenomenologists say it’s more about how you perceived the failure from the color of the screen to the smell of the fire in the datacenter. The emergentists say throw college grads at the problem until something comes out of it. The theologists might say God blessed their OS to be perfect with criticism not allowed. The skeptics are increasingly skeptical of the value of this comment. The… I wonder if it’s useful to look at it in light of philosophy at all given where this is going so far. ;)

                      I look at it like this. We have most of what we want out of a combo of intuition, trial-and-error, logic, and peer review. This is a combo of individuals’ irrational activities with rational activity on generating and review side of ideas. I say apply it all with empirical techniques used to basically just catch nonsense from errors, bias, deception, etc. The important thing for me is whether something is working for what problems at what effort. If it works, I don’t care at all whether there’s studies about it with enough statistical algorithms or jargon used in them. However, at least how they’re tested and vetted… the evidence they work… should have rigor of some kind. I also prefer ideological diversity and financial independence in reviewers to reduce collusion problem science doesn’t address enough. A perfectly-empirical study with 100,000+ data points refusing my logic that Windows is insecure is less trustworthy when the people who wrote it are Microsoft employees wanting a NDA for the data they used, eh?

                      I’ll throw out another example that illustrates it nicely: CompCert. That compiler is an outlier where it proves little to nothing about formal verification in general most empiricists might tell you. Partly true. Skepticism’s followers might add we can’t prove that this problem and only this problem was the one they could express correctly with logic if they weren’t misguided or lying to begin with. ;) Well, they use logical school of specifying stuff they prove is true. We know from testing vs formal verification analysis that testing or trial-and-error can’t ensure the invariants due to state space exploration. Even that is a mathematical/logical claim because otherwise you gotta test it haha. The prior work with many formal methods indicate they reduce defects a lot in a wide range of software at high cost with simplicity of software required. Those generalizations have evidence. The logical methods seem to work within some constraints. CompCert pushes those methods into new territory in specification but reuses logical system that worked before. Can we trust claim? Csmith throws CPU years of testing against it and other compilers. Its defect rate bottoms out, mainly spec errors, unlike about any compiler ever tested that I’ve seen in the literature. That matches prediction of logical side where errors in proven components about what’s proven should be rare to nonexistent.

                      So, the empirical methods prove certain logical systems work in specific ways like ensuring proof is at least as good as the specs. We should be able to reuse logical systems proven to work to do what they’re proven to be good at. We can put less testing into components developed that way when resources are constrained. Each time something truly new is done like that we review and test the heck out of it. Otherwise, we leverage it since things that logically work for all inputs to do specific things will work for the next input with high confidence since we vetted the logical system itself already. Logically or empirically, we can therefore trust methods ground in logic as another tool. Composable, black boxes connected in logical ways plus rigorous testing/analysis of the box and composition methods are main ways I advocate doing both programming and verification. You can keep applying those concepts over and over regardless of tools or paradigms you’re using. Well, so far in what I’ve seen anyway…

                      @derek-jones, tag you’re it! Or, I figure you might have some input on this topic as a devout empiricist. :)

                      1. 2

                        Googled a list of philosophies. Let’s see. There’s the capitalism school that says the bugs are OK if profitable. The existentialists say it only matters if you think it does. The phenomenologists say it’s more about how you perceived the failure from the color of the screen to the smell of the fire in the datacenter. The emergentists say throw college grads at the problem until something comes out of it. The theologists might say God blessed their OS to be perfect with criticism not allowed. The skeptics are increasingly skeptical of the value of this comment. The… I wonder if it’s useful to look at it in light of philosophy at all given where this is going so far. ;)

                        Awesome, hilarious paragraph.

                        We have most of what we want out of a combo of intuition, trial-and-error, logic, and peer review. This is a combo of individuals’ irrational activities with rational activity on generating and review side of ideas. I say apply it all with empirical techniques used to basically just catch nonsense from errors, bias, deception, etc. The important thing for me is whether something is working for what problems at what effort. If it works, I don’t care at all whether there’s studies about it with enough statistical algorithms or jargon used in them.

                        Yes, totally agreed.

                      2. 2

                        What else can we do? Our reason is fallible, our experiences are deceitful, and we can’t just throw our hands up and say “we’ll never know”.

                        Why not? The only place these arguments are questioned or really matter is when it comes to making money and software has ridiculous margins, so maybe it’s just fine not knowing. I know high-risk activities like writing airplane and spaceship code matter, but those folks seem to not really have much contention about about if their methods work. It’s us folks writing irrelevant web services that get all uppity about these things.

                    1. 7

                      This post is really short, and yet, not quite short or long enough, IMO.

                      tl;dr: Learn how to how solve hard problems, rather than just farming out all the work to closed APIs.

                      To be fair, it is a good insight to gather. I’d be interested to see what you end up doing in your rage against APIs, but I’d also be interested in how you came to this conclusion. Sometimes the journey is as insightful as the conclusion

                      1. 2

                        Thanks for the thoughtful feedback! I agree and will definitely think about that going forward :)

                      1. 6

                        we don’t hire junior developers because we can’t afford to have our senior developers mentor them

                        That’s not why we don’t do it: our issue is that junior developers simply aren’t productive enough to warrant the expense.

                        1. 16

                          The other consideration is; expend resources (ie seniors time) training entry level, only to see them leave in a year or two for large pay raises. It’s nearly impossible for business leaders to understand that 100% pay increases are required after a couple of years in this field.

                          1. 4

                            So how does one break the cycle? Junior developers will have to learn somewhere. Are we in a situation similar to the video game industry, where we actually have too many programmers on the market?

                            You can certainly learn a lot outside of work, but there are a lot of things that are best learned on a job.

                            1. 4

                              where we actually have too many programmers on the market?

                              Yes. Absolutely. And every programmer is a special snowflake which makes it impossible for anyone except another programmer to read their CV.

                              1. 0

                                The fact that pay is high is probably an indicator that that isn’t true.

                                1. 2

                                  Pay is high in some areas. It’s crap in others. It’s mediocre in others. I think it says more about the practices of businesses in a given industry and geographical area than anything else.

                                  1. 2

                                    Adjusted for that it’s nearly double the median wage. I would say there are not too many developers.

                                    1. 2

                                      Depends on the area. In the Mid-South, there’s plenty of IT people, including programmers, making $12-15 an hour. Minimum wage is just over $7. We obviously have many move from this area but steady stream to fill those positions from colleges. Things that vary this much by area I usually talk about in terms of the area. Otherwise, the generalizations can be meaningless.

                                      Except for when you say there aren’t too many developers. I agree with that if we factor in skill or tech they know about. There’s just not so many companies wanting to invest in junior ones or pay senior ones well.

                                      1. 5

                                        As a southerner I can anecdotally say that’s caused by a lack of labor organization and not a glut of programmers. Low willingness to pay is because they’re hoping to pick up someone who is willing to work for peanuts, not because there are too many developers. In fact they frequently take on business impact because of unfilled positions.

                                        1. 1

                                          That makes sense to me as well (having worked in those sorts of jobs during college in the south and southeast)

                                          1. 1

                                            That sounds about right. You bet I call them out for it, too, if they get high and mighty with the politics. ;)

                            1. 5

                              Work:

                              I’ll be working on learning Angular in preperation for an upcoming burst of work on a new thing at work. Today was starting to write the Angular version of this TCL script. I’ll probably be polishing that off tomorrow.

                              Not work: I exercised (as defined by my fitbit) 4 days last week (all walking), I’ve done a few quality of life changes to my personal wiki, and have been enjoying some new video games. I’ve also been participating on this site a bit more, which has been fun.

                              1. 10

                                Helpful hint: you can turn slack notifications off.

                                1. 9

                                  When I did this my coworkers got super mad I wasn’t answering things promptly.

                                  1. 3

                                    Do they get mad when you try to negotiate for “Do No Distract” times in the day?

                                    1. 4

                                      We didn’t have a culture where people actually followed that. You could have a do not disturb time but people would interrupt you anyway. A couple of us started making fake meetings just to get some time to code.

                                      1. 3

                                        Ouch. It’s telling when things get that bad.

                                        1. 2

                                          A couple of us started making fake meetings just to get some time to code.

                                          It’s a good trick, I’ve been doing this for years so I could make sure I got lunch and time to do work.

                                          1. 3

                                            Wow. These comments, and the recent thread about maybe not working long hours, paint a bleak picture of current work practices in the US.

                                      2. 4

                                        get better co-workers

                                        1. 1

                                          I actually got the different answer. I was using slack as a message queue, when I saw a coworker that I wanted to distract, I’d slack them (via the app) and wait for an answer, but they actually prefered me to come to talk to them and bother them.

                                          I found this weird but complied…

                                        2. 7

                                          If you read the article, notifications are only a very small part of the problem. The author was speaking about wide scale effects happening at the organization level.

                                          1. 3

                                            This. So much this. I know that the discussion can take different forms and sometimes there are also larger organizational issues at play. But with that said, I think people often forget that they can disable notification on devices. I’ve seen co-workers across two companies leave notifications on for every single message in a channel (yes, you read that correctly) and with sound nonetheless. It baffles me.

                                            macOS comes with a built-in Do Not Disturb mode. Slack lets you configure your notifications so that you’re not getting notifications for each single message across a bajillion channels.

                                            [Slack] normalizes interruptions, multitasking, and distractions, implicitly permitting these things to happen IRL as well as online. It normalizes insanely short reply times for questions. In the slack world people can escalate from asking in a room to @person to @here in a matter of minutes. And they’re not wrong to – if your request isn’t handled in 5 minutes it’s as good as forgotten.

                                            Somewhere along the way we forgot that interruptions are toxic to real work. It wasn’t always this way. On day 1 of my first trading job the only instruction I received was ‘when the market is open, mute your phone.’ The subtext was ‘or else’. If someone said this to me today I’d give them a hug, and I’m not a hugger.

                                            I think people need this reminder today. Outside of work I see people with group chats on their phones (be it Facebook, Twitter, Hangouts, whathaveyou) that bleeps and bloops without rest. I can’t imagine living in that world.

                                          1. 8

                                            Is anyone aware of the kind of “slow and subtle” niches the author hopes for? Any slow and simple and modern design philosophies, techniques, tutorials, communities, etc?

                                            1. 16

                                              I’ve been doing simple web development on the side off and on. I’ve heard of the handmade network. I also like the how the Go community tends to build things, from an operational standpoint. You have the big things, like Docker, Kubernetes, and Mattermost which are big corporate things, but then you have smaller things, like linx, Hugo, or the various things built on boltdb.

                                              I’d start by removing “modern” as a hard requirement and look at how older, stable tech works.

                                              Any community where web development has mostly been in one place over the last 7 years probably has a lot of the basics covered already, and isn’t likely to be piling on the complexity in droves. My experiments in doing websites in Erlang (as opposed to Elixir) suggest that is one place where things seem to move slower. I suspect the Python web development is similar.

                                              Learn some old, mature tools, like make, bash, python, awk, graphviz or TCL/tk, and use them when you have task that fits them

                                              Build websites with as little JS as possible, just to see how far you can take forms and pages. Take time to evaluate how it works out over time, how the maintenance holds up, and so on.

                                              You might see what sorts of things the modern stacks are trying to compensate for, or realize that there is an easier way to solve a certain set of problems. Mining the past for ideas allows you too get a notion of the fundamental vs incidental complexity

                                              1. 5

                                                I’d start by removing “modern” as a hard requirement and look at how older, stable tech works.

                                                “Modern” means having options anyway.

                                                Back in the Old Days, large computers were the only option. They were great for large institutions with large problems or, at least, large endowments to effectively allow young programmers to build games on them, but if you wanted a small computer for something like process control or home office work or similar, you didn’t have that option. Vacuum tubes, and then discrete transistors, only got so small.

                                                ICs allowed us to make small computers, but they also allowed us to make big computers more efficient, because some problems require big computers, large amounts of compute concentrated in one location to grind away at a task, or large amounts of RAM or storage to handle huge amounts of data, or both.

                                                Similarly with graphics: We’ve gone from having command lines as the only option to having command lines coexisting with GUIs, each allowing the other to do what it does.

                                                Do some older practices get replaced? Yes, particularly in hardware. Nobody but a hobbyist would build a computer out of vacuum tubes these days. Cardstock is no longer a valid input mechanism. CRTs are no longer RAM. But progress is more about having options.

                                                1. 8

                                                  To be fair, I’m not against using modern tech, just that if you want something simpler, sometimes older stuff is where it’s at. Not always, of course, but by comparing the old against the new, one can find where real progress has been made, and where something might just be the fad of the year.

                                                  React, for example, seems to be acknowledged as a real improvement in the state of SPA in JS. It is certainly unlike most things that came before it on the JS side of things, though it seems kinda similar to IMGUI, and some people have drawn similarities to old Win32 code.

                                                  1. 2

                                                    Thanks, I’ll check these out.

                                                  2. 3

                                                    I’ve heard of the handmade network.

                                                    What does “handmade” mean? I read their manifesto, but I have no idea what criteria would be used to define which software falls under their umbrella. Is metafont handmade? Linux? The front page of Google? What about wordpress the software (and not the innumerable wordpress blogs)? All of these were created by a large amount of human effort over years of development. What would disqualify one of the other?

                                                    1. 2

                                                      The way I’ve understood is as a loose analogue for “artisnal”. Projects that can be created by a small team, rather than massive one. But I don’t speak for the group, so YMMV.

                                                1. 7

                                                  Quite a good article. For me, building things on the web has been very much a “looking it up as I go along” process, even to this day. I do like building simple things, however

                                                  1. 2

                                                    The article is worth it if only for pointing out this tweet

                                                    1. 1

                                                      It’s funny, I think that, too. But what is this adding beyond that? I’d like to read better ideas. I believe people are trying a lot ideas like staging, containers, reproducable builds, … We also have to consider what kind of software a ompany is creating: software that ships to customers or software that is pushed to a server.j

                                                    1. 8

                                                      A humorous one is Wat.

                                                      I also like to watch videos from GDC. Those aren’t often CS related, but do cover a wide variety of interesting topics in video games, from animation to AI. I’ll have to come back and compile a list of favorites later.

                                                      1. 1

                                                        How does “programming as taxonomies” compare and contrast with OOP?

                                                        1. 2

                                                          Well, it depends on what you consider OOP to be. I suspect the author was referring to Smalltalk at least a little there, but there are other possibilities.

                                                          1. 3

                                                            I’ve actually started writing a full response, and one of the ideas I’m trying to explore is how a lot of what we think of as “normal” OOP is just what survived the method wars, and before that we had much more diversity in our object taxonomies.

                                                            1. 1

                                                              is there a way I can already bookmark this post before you’ve written it please? I’m excited!

                                                              1. 3
                                                            2. 1

                                                              I think so. This idea of restrictive paradigms (of research and thought, rather than ‘programming paradigms’) seems commensurate with Alan Kay’s description of the pink and blue planes. The pink plane represents advances made within the current paradigm, the blue plane is accessible by asking incommensurable questions.

                                                            3. 1

                                                              I always start with a big list of programming paradigms when wondering about this stuff. Aside from fun discoveries, such lists keep us from building categories or explanations that are too narrow for the field as a whole.

                                                            1. 6

                                                              You’ll need to work without documentation

                                                              The advice in this section has summed up the majority of my professional life. Granted, SQL and C# are usually documented, but the majority of other things I work with from a business perspective often aren’t. Debugging and code reading and talking to coworkers has been very helpful.

                                                              1. 1

                                                                This hit me as well. I’m just starting out, but I find myself in a more challenging position once the documentation runs out. Getting more comfortable in the source us a priority for me.

                                                              1. 2

                                                                The contents of all Mumps variables are stored as varying length character strings. The maximum string length permitted is determined by the implementation but this number is usually at least 512 and often far larger (normally 4096 in Open Mumps).

                                                                Why would you need anything more?!

                                                                1. 2

                                                                  How am I going to put dank meme images into 4096 bytes?

                                                                  1. 1

                                                                    Upgrade to MS-DOS — 640K will be enough for dank meme images!

                                                                    1. 1
                                                                      ░░░░░░░░░░░░░░░░░░░░░░█████████
                                                                      ░░███████░░░░░░░░░░███▒▒▒▒▒▒▒▒███
                                                                      ░░█▒▒▒▒▒▒█░░░░░░░███▒▒▒▒▒▒▒▒▒▒▒▒▒███
                                                                      ░░░█▒▒▒▒▒▒█░░░░██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
                                                                      ░░░░█▒▒▒▒▒█░░░██▒▒▒▒▒██▒▒▒▒▒▒██▒▒▒▒▒███
                                                                      ░░░░░█▒▒▒█░░░█▒▒▒▒▒▒████▒▒▒▒████▒▒▒▒▒▒██
                                                                      ░░░█████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
                                                                      ░░░█▒▒▒▒▒▒▒▒▒▒▒▒█▒▒▒▒▒▒▒▒▒█▒▒▒▒▒▒▒▒▒▒▒██
                                                                      ░██▒▒▒▒▒▒▒▒▒▒▒▒▒█▒▒▒██▒▒▒▒▒▒▒▒▒▒██▒▒▒▒██
                                                                      ██▒▒▒███████████▒▒▒▒▒██▒▒▒▒▒▒▒▒██▒▒▒▒▒██
                                                                      █▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█▒▒▒▒▒▒████████▒▒▒▒▒▒▒██
                                                                      ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
                                                                      ░█▒▒▒███████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
                                                                      ░██▒▒▒▒▒▒▒▒▒▒████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█
                                                                      ░░████████████░░░█████████████████
                                                                      

                                                                      source

                                                                1. 4

                                                                  I find my work meaningful insomuch as it allows me to work with people I get along with, gives me opportunities to learn and improve the lives of my co-workers, and it enables other more meaningful things in my life. Things like spending time with family, not having to worry about paying the bills, being able to work on side-projects, and not having to rush every moment.

                                                                  For me, I’ve noticed that meaningfulness of work gets removed most when I’m isolated from being able to interact with my co-workers on a meaningful level.

                                                                  I work at a tax and payroll software company, where the mission is, among other things, to reduce the amount of paperwork in play for organizations. There’s a little bit of meaning there, I suppose, but by far the better aspect of is that I get to work with competent co-workers who care about the health of the team on multiple fronts.

                                                                  1. 1

                                                                    For me, I’ve noticed that meaningfulness of work gets removed most when I’m isolated from being able to interact with my co-workers on a meaningful level.

                                                                    This happens for me, too. I’m very much a social coder.

                                                                  1. 4

                                                                    I finally doped out an issue in my wiki/notebook software that was keeping me from being able to simply make run to get it up and going. I’ve also added and edited that wiki some, though not quite as much as I was doing in the first few days after setting it up.

                                                                    1. 1

                                                                      Based on last weeks post - I’ve been brainstorming based on the advice you had given. I’m still trying to think of something either I can build or something I can just run on my Digital Ocean VPS (aside from ZNC).

                                                                    1. 1

                                                                      “there will be less comment deletion when users become inactive by deactivating or being banned”

                                                                      This is a great improvement since we’ve had some great comments deleted as a side effect of deactivation. Since you said you didnt undelete, does that mean the comments “removed by author” or whatever it says are still there where they could be restored if account owner chose? Or am I misunderstanding?

                                                                      1. 2

                                                                        Yes, users can undelete comments unless they were deleted by a moderator. Lobsters does “soft” comment deletion via a boolean is_deleted on the comments table.

                                                                        1. 1

                                                                          Would it be possible to make the removed by author delete hide the username as well?

                                                                          1. 1

                                                                            Yes, but overwriting the data prevents a lot of very easy-to-make future bugs that present it.

                                                                            1. 1

                                                                              Does’t have to be overwritten from the database. Just has to show [deleted] or something on the frontend.

                                                                        2. 0

                                                                          there will be less comment deletion when users become inactive by deactivating or being banned

                                                                          At least for the being banned part I dislike the decision. A ban expresses the wish that someone should no longer be part of the community, this should include all of his statement. For one because most bans will most likely happen because of comments and secondly I think this to be good style to not use the work of someone with whom I don’t want any interaction. At the very least the non-deletion should be an opt-in feature so the banned user can decide about the fate of his contributions.

                                                                          1. 7

                                                                            The rationale behind here (I guess) is that when comments are deleted (even bad ones) context for comments around is lost. Some users (like me) are reading lobsters comments weeks after the last comment has been posted, by removing some comments, the threads start to be a big mess and you have to become and expert at guessing what’s missing.

                                                                            I totally agree that if someone has been banned, it’s probably because of his comments, but as you’ll note, when such bad comments are written, there is often very good replies that are often very informed and really nice for the threads.

                                                                            There are some pros and cons about it and, to me, when there is a doubt, better to keep more information than to trash it.

                                                                            1. 2

                                                                              Ha! Thank you for better expressing my thoughts than I was able to do myself 😀

                                                                            2. 2

                                                                              That sounds like an all or nothing decision. Nuance would require considering that a person might do good or bad things (in eyes of community) on a site with ours concerned about getting rid of the bad things. The good things they do, esp in terms of insightful comments, can still have benefit for people at that time and future readers. @pushcx previously said something along the lines of this site becoming a treasure trove of discussions worth archiving, sharing, or Googling. That’s what I hope as well. His seems to be supporting that goal by only throwing out the trash (negative scores) of banned users while keeping the treasure (neutral or good scores).

                                                                              On top of this, you might also not want to use those comments in light of your preference to avoid further interactions with such people. I can see the sense in it. Them just being here without the person being here is probably not going to hurt us in general case, though. Far as opt-in to non-deletion, two things come to mind:

                                                                              (a) That’s giving extra privileges and developer time for codebase to someone we’ve already decided to punish severely. Are they even worth the time? And do we want to let them take back any good stuff they gave after they’ve annoyed us enough for a ban? As in, we’d get nothing versus something out of whatever time we put into them.

                                                                              (b) Copyright Law. Depending on country (esp in US though), whoever publishes something has rights to how their content is shown and distributed. There may be some copyright consideration here. A preemptive solution would be modifying the site’s terms so that all comments are Creative Commons by default. Whatever is most permissive. It would be on invite page with a notice to current Lobsters that it applies from now on and retroactively to all comments. People leaving for legal reasons could fully delete their comments.

                                                                              1. 2

                                                                                All or nothing it is but I am in favor of keeping them all if the banned user is ok with it because:

                                                                                o I think it is fair after being banned to have a say in this. I don’t think this gives somebody power over something besides his own contributions. Also it’s easy to do, all you need is a single SQL statement to flip the is_deleted flag mentioned by @pushcx above or am I misunderstanding something? Also there is zero dev time, an e-mail from the banned user to the sysop if he feels like it’s ok to keep his comments should suffice

                                                                                o only deleting negative comments is also harmful as it removes context and it might lead to stories being only told by the winners. Especially as I didn’t see a threshold being mentioned. So -1 is enough to be eradicated…

                                                                                o I don’t think a single ban happened because of the majority of the community requested a ban. I also don’t think a single comment got the majority of votes from the users following the chosen tags. Most people are quiet. So I find it hard to justify the decision with “it’s better for the community”

                                                                                If I have to choose between keeping or deleting my actual preference would be to keep all unless law forbids to or the banned user asks for deletion of all of his comments. This would mean that all voices are being heard and we are adults and should be able to deal with unpleasant stuff.

                                                                                I hope banning is something that’s happening very seldomly and I’d rather deal with the blanks than starting to make arbitrary decisions about good and bad.

                                                                                1. 1

                                                                                  If this site is going to become a treasure trove of good conversations worth archiving, I’d like to see what some of the good threads we’ve had so far are.

                                                                                  1. 1

                                                                                    I consider those anything where I see something really interesting or well-explained here that I usually don’t see elsewhere that’s worth passing on. I’ve seen quite a few over the year you’ve been here. You really haven’t learned anything or saw a unique comment you enjoyed here?

                                                                                    1. 1

                                                                                      I probably phrased that poorly.

                                                                                      I’ve seen and enjoyed a lot of conversations here. What I’m wondering about is being able to discover said conversations as a new user, or after the fact. A “Best of Lobsters”, if you will. They don’t happen quite every day, and I’m not aware of any lists of those. I’ll probably start tracking them in my wiki, but yeah.

                                                                                      The fact that your ability to dig into the history of your threads only goes back a couple of months, for example, keeps me from being able to reminisce without basically writing a program to scrape the whole site.

                                                                                      I do think this site can be a treasure, but I’d kinda like a map. :)

                                                                                      1. 1

                                                                                        “What I’m wondering about is being able to discover said conversations as a new user, or after the fact. A “Best of Lobsters”, if you will.”

                                                                                        I see what you mean now. I’ve been wondering same thing recently. It would probably have to be us curating the best that we post somewhere over time. HN added a feature for it at the site level called “favorites” where you just click that button on a story or comment to add it to your favorites page. For our site, lists might be made for each user, integrated from many users, or even done on a per tag basis. I don’t have a specific recommendation for now past bookmarking/saving good stuff to hand to people later when appropriate.

                                                                                        “The fact that your ability to dig into the history of your threads only goes back a couple of months, for example, keeps me from being able to reminisce without basically writing a program to scrape the whole site.”

                                                                                        (@pushcx might find this interesting, esp second paragraph)

                                                                                        Oh yeah, that’s a great point that reminds me of something. It is hard versus some other sites to find an older conversation due to limits of how far I can go back. On HN, I’ve been able to help people who replied late (i.e. work/family reasons) by opening a chain of older posts in new tabs that I quickly use “Find” on. I found our conversation in just a few minutes that way. There probably should be no limit past a rate limit either in general or when the site has significant activity. Basically, one user not DDOSing another.

                                                                                        Now, one might say just search for the info. That doesn’t work. The site search is very unreliable for me. That would be OK given I usually do a site-specific search on DuckDuckGo or Google for these sites that gets close to conversation I need. Even worse, those either find no threads or only a few since they don’t seem to index Lobsters at all. I mean, even Google doesn’t know much of this site exists. I’m not sure why since web tech and SEO isn’t my thing. If this is to be an archive, then it’s imperative that be fixed because something invisible to Google is asking to be overlooked or forgotten over time.

                                                                                        In my case, there were actually people asking for my comments or mini-essays on certain topics. I also wanted to revisit some from others. I couldn’t find them in Lobsters search or Google. One gave me threads with little relevance. One gave me “no results.” So, I just gave up on those prior writings until Google indexes the site or some other solution is found.

                                                                            1. 2

                                                                              Would you crowd source design of an everyday object? Reaching a quorum means having an average solution, pretty much by definition. I think that languages should be designed by a small group of people, which ensures a strong vision and consistency. It’s interesting, though, to see a radically different approach being explored.

                                                                              1. 2

                                                                                So in this case, from what I’ve seen, they’re not so much having an average design, so much as verifying that their design choices are actually effectively understood, and changing them if they aren’t. It’s certainly not going to come up with something radical, but it might be an interesting way to make radical ideas more easy to understand.

                                                                                1. 2

                                                                                  COBOL, Visual Basic 6, and PHP are the closest things to that where design was for average user. Lots of code was certainly written. The problems the languages brought are inescapable for many due to the legacy code effect. That’s a warning sign to get the foundations right upfront in case your language is successful enough people get stuck with it.

                                                                                  Also, one can assess what was achieved with prior work using metrics like code conciseness, compile speed, run speed, whether it’s statically analyzable, and so on. Also, prior studies on these comparing languages on productivity and defects. At least one person saying they’re involved in Quorum project rejected that when I brought it up on HN. I’m not sure how far one can get on a good language if not designing for balancing those metrics from the beginning using prior work as a guide. As shown by their studies, they will probably come up with some good evidence on usability or productivity of specific mechanisms, though. That’s the value I see in the project.

                                                                                  1. 3

                                                                                    I would say Go is a language designed to be good on average.

                                                                                    1. 2

                                                                                      I would say that, more specifically, Go is designed to raise the floor for programmers of a certain type, with no real thought given to raising their ceiling, or for how it would be received by programmers who aren’t C/Python people. Which is fine, of course, and I’m sure some acceptable software will be written with it. But it doesn’t have much appeal otherwise, as far as I’m concerned.

                                                                                      1. 2

                                                                                        Rob Pike’s talk From Parallel to Concurrent discusses the target audience for Go.

                                                                                        The key point here is our programmers are Googlers, they’re not researchers. They’re typically, fairly young, fresh out of school, probably learned Java, maybe learned C or C++, probably learned Python. They’re not capable of understanding a brilliant language but we want to use them to build good software. So, the language that we give them has to be easy for them to understand and easy to adopt.

                                                                                        (Edited to name the Go language explicitly)

                                                                                      2. 2

                                                                                        It started with Oberon-2 per Pike which is a family of languages designed for educating the masses. They added other stuff to make it more practical and C-like. So, that would make sense.

                                                                                        1. 1

                                                                                          I intended to reply to a different comment so I have removed the text that was here.

                                                                                    1. 1

                                                                                      If I understood correctly they tried to design a language according to the research on usuability of existent programming language

                                                                                      1. 1

                                                                                        As I understand it, the design effort is ongoing, in that they are still doing studies on different features and the syntax for them.

                                                                                      1. 12

                                                                                        I just wrote a personal wiki in Erlang (it’s currently a little over 400 lines, and is designed for a single trusted admin, but public facing ideas). That project was motivated by me wanting to pick up the basics of Erlang (I picked up Learn You some Erlang when it was part of a Humble Bundle, and wanted to try to put it to use), and to expose a list of ideas I’d been collecting in a markdown file.

                                                                                        Features include

                                                                                        • Single Trusted Admin, which means I can use any HTML/JS I want on indiviual pages.
                                                                                        • Writing everything in HTML.
                                                                                        • Tag based navigation
                                                                                        • Being very Artisnal software(TM).

                                                                                        Pages that might be interesting:

                                                                                        Once I get a couple of hard-coded values removed from the code, I’ll stand up a fossil repository for the code. (Though it’s not especially good code, being the first big ball of Erlang I’ve written).

                                                                                        1. 3

                                                                                          So did you essentially re-write your website (jungle coder) in Erlang? When reading through your blog it mentioned being written in Go.

                                                                                          I also quite enjoyed your blog :)

                                                                                          1. 2

                                                                                            No, this isn’t a rewrite of my blog. For one, this is way more simplistic. It has a lot less styling, for one, no comments, no markdown parsing(yet), not much linking to/from tag and home pages, and it outsources auth to nginx. Another difference is that the bar for content on this wiki isn’t going to be super high (since it’s mostly for me, with occasional sharing to friends), whereas on the blog I usually try to write content that others would find useful or interesting. Actually, once I have a chance to sit down with it and polish it up, I’ll be moving the retrospective to my blog, for example.

                                                                                            For me, they serve distinct purposes. My blog is a place for me to talk to the world, the other is built to be a place for me gather my thoughts.

                                                                                            1. 1

                                                                                              Oh! My apologies I clicked on the first link in your OP which took me to your blog site ( In a green and white color - I’m getting an invalid cert on my end too for what it’s worth)

                                                                                              By removing ‘https’ it correctly took me to the actual idea.junglecoder.com (the wiki) - that’s why I was confused.

                                                                                              Any tips in learning Go with a C# background? I’ve been trying to think of things to build or work on.

                                                                                              1. 5

                                                                                                No, thanks for pointing out the broken link. It should be fixed now.

                                                                                                As far as learning Go from a C# background goes, (bear in mind, my path on this has been meandering)

                                                                                                • Go Standard library documentation is excellent. It’s your new MSDN, but the source is also included
                                                                                                • Read the source to the standard library if you’re curious about how something works
                                                                                                • Go has two major strengths: Servers and command line tools. If you want to learn go for what it’s good at, these are the types of things you’ll want to start with.
                                                                                                • If you can afford it and haven’t already, look into getting a VPS, if you’re interested in Go servers. There are a lot of nice single-purpose servers like linx, Syncthing, Mattermost and gitea. I’ve administered all of these servers for work (mattermost, gitea’s upstream gogs) or personal use (linx, syncthing), and if you know some basic nginx, they’re very low effort. The operational simplicity in getting most of these set up is an awesome thing. It’s not 100% unique to Go, but it’s more common in Go programs. You’ll want to learn nginx and nohup if you do this.
                                                                                                • If you want to also learn fossil, and check out something rather curious, I have been working on a programming language called PISC.
                                                                                                1. 1

                                                                                                  Thanks so much for the links!

                                                                                                  Getting a personal VPS is actually one of the things that sparked my interest in Go. One of my small goals is to write a CLI tool or a server of sorts. Coming up with a decently useful idea is the more challenging part. Or writing something I can run/leave running on my VPS.

                                                                                                  I’ve been reading bits and pieces about PISC on your blog - I’ll keep thinking as well.

                                                                                                  1. 6

                                                                                                    One of the really different things about go is that other people’s badly written code is pretty easy to follow (assuming they haven’t done anything especially clever with reflection, which go makes very hard to do).

                                                                                                    I’d recommend finding a small go project to use & modify (I’m hacking on a wiki I found called cowyo)

                                                                                                    1. 1

                                                                                                      I’ll try that :)

                                                                                                      Is your background anything close to Go? I’ve been reading a few different books when I have spare time to be go over the language.

                                                                                                      1. 1

                                                                                                        I’ve done mostly ruby and frontend; I’ve done a year of go professionally and prefer to use software written in it on my servers (because it tends to be very stable and requires less frequent patching).

                                                                                                        As far as language specific stuff: you shouldn’t use any of the go-specific stuff (goroutines, channels) in most applications code; let that wait until your app mostly works.

                                                                                                    2. 1

                                                                                                      You can always go with the classic yak shaves in terms of servers: Blogs, wikis and task-trackers.

                                                                                                      For the first task, I’d focus on something that’s been done before, but that you might have a personal spin on. That’s why I wrote blogserv, the software behind the main Jungle Coder blog. It was a complete yak-shave, and the code isn’t super pretty or super correct. (As of right now, it doesn’t check HTTP methods when routing, for example. Thankfully, anything administrative has to be authenticated).

                                                                                                      There are lot of fun little things I’ve done with my server and domains over the years, if nothing else, throwing up a basic web page and static files directory allows me to serve content from my server during events like game jams.

                                                                                                      1. 1

                                                                                                        I’ll have to try out some of the ideas I have had with yak shaving - I’ve been wanting to “do it all myself” but haven’t come up with much.

                                                                                                        Thanks for the suggestion! I’m always open to more.

                                                                                            2. 2

                                                                                              A page for tracking where I am in each of the webcomics I currently read.

                                                                                              Have you tried Piperka? I’ve used it for like a decade now and it’s great for this.

                                                                                              1. 1

                                                                                                I have not. I’ll give it a spin if I get frustrated with my wiki page (though I kinda want an excuse to use my wiki on a regular basis)