1. 7

    I’ve got a Nintendo Switch and Breath Of the Wild coming in the mail tomorrow. I’ll also be spending time with my family.

    Not many other plans outside of that.

    1. 1

      BoTW is a fucking amazing game. You’ll have a blast.

      My girlfriend has been watching me play, she legitimately gets excited just watching and always wants me to play. You could definitely make some family time out of it!

      1. 1

        I bought BoTW in December of last year. Through light play sessions, plus some longer ones, I’m about to finish the game.

        Of course I could have finished it earlier but I just didn’t want it to end. Nowadays I’ve almost run out of things to do in the game.

        It’s that good.

      1. 4

        Congratulations, @alynpost! It’ll be fun to see a familiar face in the moderation log.

        1. 3

          I spent yesterday adding $(foo) style backquotes to my Windows based shell, Yori. I expected this to be simple since the traditional backtick style was already there, but nested backquotes make for more sophisticated parsing at execute time, and tab completion wants to determine the currently “active” command in order to know which completion rules apply. And obviously, since you’re still building a command when hitting tab, it can’t assume a well formed expression, sigh.

          Back at work, my boss is back this week. Another sigh.

          1. 2

            Why build Yori, when Powershell and Git bash/mingw both exist and cover a lot of similar ground? (Not to say you shouldn’t, but I’m curious as to the motivation)

            1. 3

              Obviously this is somewhat opinionated, but…

              Powershell, IMO, is a very powerful shell. Its object model provides for quite reliable scripting, and the way it exposes many aspects of the Windows system makes it very useful for system administration. At work we have a requirement to do this type of administration, and it’s the right tool for the job there. As a developer who’s primarily after an interactive shell though, the benefits aren’t readily apparent (my compiler, editor, revision control etc are not Powershell commandlets) and it’s rather verbose/cumbersome.

              Cygwin/msys are useful tools for people who want to use Windows but have a fully Linux-oriented command environment. I say “fully” because integrating Windows tools into a Linux toolchain is a little clumsy due to their different semantics - eg., direction of path separators, which component does wildcard expansion, migrating environment variables between the two, etc. Obviously there are ways to do interop, but using one of these shells to invoke primarily Win32 processes doesn’t seem great.

              So the short answer is that just due to where I am, I’m a developer using predominantly Win32 native code tools, and neither of the above options are really optimal for that. Cmd is just ancient; Yori trying to rethink what a native Win32 shell would be in this decade, and heavily borrows from Linux shells but implements it with a view to invoking native Win32 tools. Some day I probably won’t be a developer working on predominantly Win32 native code tools, and when that day comes, Yori will be a lot less interesting/useful to me. I mean, I certainly don’t see any point porting it to other platforms, for example.

          1. 4

            Home/Personal: I’ve been reading through “Unauthorised Windows 95”, by Andrew Scullman and playing a bit of EXAPUNKS (which is the first Zachtronics game that I’ve printed out the documentation for). I’ve also been reading “A Philosophy of Software Design”, by John Ousterhout, which has been good reading. I’m unsure I agree with it 100%, but it’s the sort of book I think every programmer should read at least once.

            Work: I wrote a tool for walking some of our forms and generate some Python/Selenium code for working on our automated tests, mostly over the weekend, which was kinda fun.

            1. 5

              Computer science clocksteps at the rate of algorithms and discoveries. Languages are always going to come and go, unless the language springs up from a good theory.

              If you want to understand why this would be true, just look at the history of mathematics. Read about algebraic representations, which kind of abacuses have been used, slide rules, mechanical calculators. You will find out that what we have present today is a small fragment of what used to be, and the stuff that still exists was lugged to today because there’s not many obvious better ways to do the same thing.

              By this basis, I’d propose that the current “top 20” by Redmonk cannot form any kind of a long-running status quo. It’s a large list of programming languages rooting to the same theory (Javascript, Java, Python, PHP, C#, C++, Ruby, C, Objective-C, Swift, Scala, Go, TypeScript, Perl, Lua).

              There is going to be only one in 30 years, and I think it’ll be falling to C or Javascript axis. They are syntactically near and lot of software was and gets written with these languages. Although there is even more written with C++, it’s way too contrived to survive without reducing back to something like C.

              CSS may have some chance of surviving, but it’s pretty much different from the rest. About Haskell I’m not sure. I think typed lambda calculus appear or will reappear in a better format elsewhere. The language will be similar to Haskell though, and may bear the same name.

              Unix shell and its commands will probably survive, while Powershell and DOS will wither. Windows seems to have its days counted already by now. Sadly it was not because of open source movement. Microsoft again just botched themselves up.

              R seems like a write-and-forget language. But it roots to Iverson’s notation.. Though perhaps the notation itself will be around, but not the current instances of it.

              I think that hardware getting more concurrent and diverging from linear execution model will do permanent shakeup on this list in a short term. The plethora of programming languages that describe a rigid evaluation strategy will simply not survive. Though I have bit of bias to think this way so I may not be a reliable source for checking into the future.

              But I think this be better than looking at programming language rankings.

              1. 8

                I think, most importantly, we haven’t even seen anything like the one language to rule them all. I expect that language to be in the direction of Conal Elliott’s work compiling to categories.

                A language that is built around category theory from the start, like you have many different syntactic constructs and the ones you use in a given expression determines the properties of the category that the expression lives in. Such a language could locally have the properties of all the current languages and could provide optimal interoperation.

                BTW, I think we won’t be calling the ultimate language a “programming language” because it’ll be as good for describing electrical circuits, mechanical designs and biological systems as for describing programs. So I guess it’ll be called something like a specification language.

                1. 4

                  “we haven’t even seen anything like the one language to rule them all. “

                  That’s exactly what the LISPers always said they had. Their language could be extended to do anything. New paradigms and styles were regularly backported to it as libraries. It’s also used for hardware development and verification (ACL2).

                  1. 3

                    Well, it’s hard to say anything about LISPs in general since the span is so vast and academic, and especially for me, since my contact with any LISP is quite limited. But, from my understanding of the common usage of LISP, it doesn’t qualify.

                    First of all, I think dropping static analysis is cheating, but I don’t intend to tap into an eternal flame war here. What I mean when I say “the properties of the current languages” is no implicit allocations, borrow-checking and inline assembly like in Rust, purity and parametricity like in Haskell, capabilities-security like in Pony etc. etc. , and not only the semantics of these, but also compilers taking advantage of these semantics to provide static assistance and optimizations (like using the stack instead of the heap, laziness & strictness analysis etc.).

                    And I’m also not just talking about being able to embed these into a given language; you should also be able to write code such that if it’s simple enough, it should be usable in many of them. For instance, it’d be hard to come up with some language semantics in which the identity function cannot be defined, so the identifier id x = x should be usable under any local semantics (after all every category needs to have identity morphisms). You should also be able to write code that interfaces between these local semantics without leaving the language and the static analysis.

                    I know you can embed these things in LISP, expose enough structure from your LISP code to perform static analysis, get LISP to emit x86 assembly etc. etc. But, IMHO, this doesn’t make LISP the language I’m talking about. It makes it a substrate to build that language on.

                2. 2

                  I think one major difference between math and computer science, and why we’re not going to see a lot of consolidation for a while (not even in 30 years, I don’t think), is that code that’s on the internet has a way of sticking around, since it’s doing more than just sitting in research papers, or providing a tool for a single person.

                  I doubt we’ll see 100% consolidation any time soon, if for no reason than that it’s too easy to create a new programming language for that to be the case.

                  Hardware changes might shake up this list, but I think it’ll take 30 years for that to be realized, but there will be a lot of programming languages that fall out of that.

                  We’re definitely still going to have COBOL in 30 years, and Java, and C. The rest, I’m unsure of, but I’ll bet that we’ll be able to recognize the lineage of a lot of the top 30 when we look in 30 years.

                  1. 1

                    R seems like a write-and-forget language. But it roots to Iverson’s notation.

                    Did you mean to write J or APL? I understand R as the statistics language.

                  1. 2

                    For personal stuff on my server, I use cron. At work, we have a number of tasks driven by the Windows Task Runner, for things like ticket stress levels, checking servers, and so on.

                    Unless you’re talking about a task queue? That’s a different thing, and one that I’ve yet to make much use of personally. I’ve written some synchronizing programs, specifically for synchronizing calendars back and forth between Exchange and a CRM, which are similar to notion to a task queue, but a bit more specialized.

                    I’ve not set up Celery or similar programs myself as of yet.

                    1. 3

                      I’ll be playing EXAPUNKS, and/or catching up on sleep.

                      1. 2

                        I played a decent amount of this in one night this week so far (staying away from it the other nights in an attempt to keep from losing too much sleep).

                        I really enjoy the effort that went into the setting, and have been finding all the “File Processing” puzzles quite interesting, as that sort of data processing is something I’ve done a fair amount, just not one word at a time.

                        1. 3

                          @SirCmpwn posted an example of what a small window compositor could look like in Wayland https://gist.github.com/SirCmpwn/ae4d1cdcca97ffeb2c35f0878d75dc17

                          (Some commentary added at https://news.ycombinator.com/item?id=17774889 to explain why wlroots is used in the small wayland compositor)

                          1. 5

                            I recently wrote a blog article on factor, and I’m looking forward to playing EXAPUNKS.

                            1. 4

                              I have 3 websites where I publish technical thoughts. My primary blog is Jungle Coder, which is roughly 75% technical and 25% personal. I use Andy Rambles on other occasions, that’s 95% technical, usually around video game related stuff, or things that are more intensely technical. Both of those sites have RSS feeds. Finally, I have a wiki for lists and less polished thoughts at https://idea.junglecoder.com which doesn’t have an RSS feed as of yet (it’s on the list of things I’d like to add to the software, but cobbler’s kids and all), but does arrange the articles from most recently changed to least recently changed.

                              1. 2

                                The built in peg parsing library in factor is super impressive. The tiny C compiler builds a stack while parsing C code and pops it to emit code, since the stack is already there implicitly with factor, I wonder how terse a super tiny C compiler could be written in factor.

                                1. 1

                                  I haven’t played with the PEG parser in Facctor yet, hearing this intrigues me a bit, however.

                                  There is already an implicit stack in factor, but because it does duty as being where the parameters live, it might be a little tricky to use in the way that the Tiny C compiler uses it (I haven’t checked the tcc, so I don’t know for sure), if there’s any off-stack state (though factor does have globals and dynamic/lexical variables that could also be used).

                                  1. 1

                                    Thinking more, you are definitely right that it may be super awkward to do anything tricky, but the code embedded in a peg parser would still help make things compact.

                                1. 7

                                  It’s worth pointing out that there’s other CLI clients for slack: Weechat has weeslack, for example.

                                  I gotta say, the screenshots on this one look pretty impressive, however.

                                  1. 9

                                    I’m not as involved as I used to be, but I’m still on the core team, so feel free to ask me questions if you’ve got any.

                                    1. 3

                                      Would you recommend Factor for production use given that it seems to be reaching a sort of plateau in support and community?

                                      It’s a beautiful language, by the way. Thank you for your work.

                                      1. 5

                                        I have Factor running in production. Although I don’t really maintain the web app much - it just ticks along - Factor runs tinyvid.tv and has for the past few years. I originally wrote it to test HTML 5 video implementations in browsers back when I worked on the Firefox implementation of video.

                                        1. 5

                                          As always, it depends on what you’re doing—I’d definitely be nervous if you told me you were shoving Factor into an automobile, for example—but Factor the VM and Factor the language are both quite stable and reliable. On top of doublec’s comment, the main Factor website runs Factor (and its code is distributed as part of Factor itself for your perusal), and it’s been quite stable. (We do occasionally have to log in and kick either Factor or nginx, but it’s more common that the box needs to be rebooted for kernel updates.) I likewise ran most of my own stuff on Factor for a very long time, including some…maybe not mission-critical, but mission-important internal tooling at Fog Creek. And finally, we know others in the community who are building real-world things with Factor, including a backup/mirroring tool which I believe is being written for commercial sale.

                                          The two main pain-points I tend to hit when using Factor in prod are that I need a vocabulary no one has written, or that I need to take an existing vocabulary in a new direction and have to fix/extend it myself. Examples are our previous lack of libsodium bindings (since added by another contributor) and our ORM lacking foreign key support (not a huge deal, just annoying). Both of these classes of issues are increasingly rare, but if you live in a world where everything’s just a dependency away, you’ll need to be ready for a bit of a change.

                                          You can take a look at our current vocab list if you’re curious whether either of the above issues would impact anything in particular you have in mind.

                                        2. 1

                                          What would you say is Factor’s best application domain, the kind of problem it solves best? I met Slava many years ago when he was presenting early versions of Factor to a local Lisp UG, and am curious to see where the language fits now, both in theory and practice.

                                          1. 4

                                            My non-breezy answer is “anything you enjoy using it for.” There are vocabularies for all kinds of things, ranging from 3D sound to web servers to building GUIs to command-line scripts to encryption libraries to dozens of other things. Most of those were written because people were trying to do something that needed a library, so they wrote one. I think the breadth of subjects covered speaks well to the flexibility of the language.

                                            That all said, there are two main areas where I think Factor really excels. The first is when I’m not really sure how to approach something. Factor’s interactive development environment is right up there with Smalltalk and the better Common Lisps, so it’s absolutely wonderful for exploring systems, poking around, and iterating on various approaches until you find one that actually seems to fit the problem domain. In that capacity, I frequently use it for reverse-engineering/working with binary data streams, exploring web APIs, playing with new data structures/exploring what high-level design seems likely to yield good real-world performance, and so on.

                                            The second area I think Factor excels is DSLs. Factor’s syntax is almost ridiculously flexible, to the point that we’ve chatted on and off about making the syntax extension points a bit more uniform. (I believe this branch is the current experimental dive in that direction.) But that flexibility means that you can trivially extend the language to handle whatever you need to. Two silly/extreme examples of that would be Smalltalk and our deprecated alternative Lisp syntax (both done as libraries!), but two real examples would be regular expressions, which are done as just a normal library, despite having full syntax support, or strongly typed Factor, which again is done at the library level, not the language level. I have some code lying around somewhere where I needed to draft up an elaborate state machine, and I quickly realized the best path forward was to write a little DSL so I could just describe the state machine directly. So that’s exactly what I did. Lisps can do that, but few other languages can.

                                          2. 1

                                            Were native threads added in this release, or are there plans to? And did anything ever come to fruition with the tree shaker that Slava was working on way back when?

                                            Major props on the release. It’s really nice to see the language survive Slava disappearing into Google.

                                            1. 5

                                              The threads are still green threads, if that’s what you’re asking, but we’ve got a really solid IPC story (around mailboxes, pattern matching, Erlang-style message passing, etc.), so it’s not a big deal to fire up a VM per meaningful parallel task and kick objects back and forth when you genuinely need to.

                                              In terms of future directions, I don’t know we’ve got anything concrete. What I’d like to do is to make sure the VM is reentrant, allow launching multiple VMs in the same address space, and then make the IPC style more efficient. That’d make it a lot easier to keep multithreaded code safe while allowing real use of multiple cores. But that’s just an idea right now; we’ve not done anything concrete that direction, as far as I know.

                                              1. 1

                                                Really off-topic, but isn’t Slava at Apple?

                                                1. 1

                                                  He is now. Works on Swift.

                                              2. 1

                                                Where does the core factor team typically communicate these days? #concatenative on freenode seems kinda dead these days. Is there a mailing list, or on the yahoo group?

                                              1. 4

                                                This weekend, I decided to buckle down and try to learn some Factor, and ended up writing a 4-function calculator as an exercise in learning the GUI system.

                                                It went better than the last time I tried to learn factor (which lead to me creating PISC). I think I could use factor for some things going forward. With the right set of additions, I could see it’s GUI system being about as expressive as TCL’s tk, but it takes a lot of getting used to due to the lack of examples. Thankfully, you can muddle through the documents to learn things, and most things are documented somewhere, but where isn’t always obvious, and google is of minimal help.Still, there’s a lot there to work with.

                                                1. 1

                                                  I’ll have to give factor another spin. I previously bounced off of it in favor of making my own stack-based language, since I was very interested in writing any sort of programming language at the time (and getting started on a stack based language seems easy, even though the long work of getting it to a good quality still takes a long time). Factor definitely influenced my early designs in that project, but I’d be interested in revisiting it with I now know about various things.

                                                  1. 4

                                                    I’m in my favorite job of my career so far, doing my best ever work. I had a very reasonable interview loop without a single trivia question. It’s the first time I got referred in by a friend and ex-coworker, through a network of his friends.

                                                    My new rule of thumb for myself is, when possible, work with my friends or their friends. Referrals referrals. Find people you like to work with and stick together. The only way to know if somebody can solve real problems for a real company (with warts and all) is by actually being in the trenches with them for months and years.

                                                    1. 5

                                                      Working only with friends and friends of friends seems wrong to me. The words that come to mind are exclusive and cliquish. To get diverse perspectives and live up to the ideal of equal-opportunity employment, we need to be comfortable working with strangers.

                                                      1. 3

                                                        Traveling between companies as a group of friends doesn’t mean that you’re only working with said friends, since there will almost always be other co-workers involved, but that you’re working with more known quantities. As an employee-side strategy, I don’t think it’s hugely problematic, especially given the amount of information asymmetry that’s often in play in hiring. I’ve also had luck with referrals (I’ve found out about 3 out 4 of my development jobs via some sort of reference or connection, including my current one).

                                                        On the employer side, I could see only working with referrals being somewhat problematic, but I doubt most employers do that.

                                                        1. 2

                                                          I mean, my friend’s friend who I am now working for is roughly 3000 miles away from where I met my friend. I was definitely exposed to diverse perspectives by moving out here, and I necessarily have to interact and learn from all of my new coworkers (who are all diverse strangers to me). What I gained was a pre-selection stamp; somebody vouched that I’m not an idiot.

                                                          It’s also bi-directional preselection. I know that my friend wouldn’t send me off to work for a real dumpster fire of a company - I know that I’ll be working with good people on good projects, and it would benefit my own personal growth.

                                                          Friend networks can span multiple cities, countries, companies, and cultures. It doesn’t have to imply inbreeding.

                                                          The words that come to mind are exclusive and cliquish.

                                                          This sounds fun in practice until you hire a terrible stranger. Then you’re back to square one of “how do you find out if an interview candidate is good?” And it’s a hard question.

                                                      1. 8

                                                        KeePass has clients that work the 3 operation systems in question, and I’ve had good luck using Syncthing to share the password file between computers, but the encryption of the database means that any good sync utility can work with it.

                                                        1. 4

                                                          I KeePassX together with SyncThing on multiple Ubuntus and Androids for two years now. By now I have three duplicate conflict files which I keep around because I have no idea what the difference between the files is. Once I had to retrieve a password from such conflict file as it was missing in the main one.

                                                          Not perfect, but works.

                                                          Duclare, using ssh instead of SyncThing would certainly work since the database is just a file. I prefer SyncThing because of convenience.

                                                          1. 2

                                                            Duclare, using ssh instead of SyncThing would certainly work since the database is just a file.

                                                            Ideally it’d be automated and integrated into the password manager though. Keepass2android does support it, but it does not support passwordless login and don’t recall it ever showing me the server’s fingerprint and asking if that’s OK. So it’s automatically logging in with a password to a host run by who knows. Terribly insecure.

                                                            1. 1

                                                              I had the same situation. 3 conflict files and merging is a pain. I’ve switched to Pass instead now.

                                                            2. 2

                                                              I use Keepass for a few years now too. I tried other Password managers in the meantime but I never got quite satisfied, not even pass though that one was just straight up annoying.

                                                              I’ve had a few conflicts over the years but usually Nextcloud is rather good at avoiding conflicts here and KPXC handles it very well. I think Syncthing might casue more problems as someone else noted, since nodes might take a while to sync up.

                                                            1. 4

                                                              Away from work, I’ve started on a (very WIP) set of documentation for PISC, which has involved:

                                                              • Parsing documentation comments,
                                                              • Editing documentation comments,
                                                              • Adding break and continue to the loops in the language
                                                              • Writing some basic support for writing out a iolist (a nested vector of strings and vectors, inspired by Erlang’s iolist) type, to avoid N^2 string concatenation to PISC’s IO libraries
                                                              • Fixing/expanding the PISC test suite.

                                                              Having these documents built from my Go/PISC source code has demonstrated how poorly a good chunk of the PISC code is documented. Having basic access to the same documents at the command line (names and function signatures) has proved surprisingly useful, reducing the amount of “And I have two code windows open” going on by a lot. I’m considering trying to write a sort of command-line documentation generator for C# that works in a similar fashion, just to have easy access to function/method signatures. Intellisense provides this to some extent, but having this might make it easier to not depend on Intellisense.

                                                              At work, getting ready to be on maintenance for a couple weeks, which should be nice.

                                                              1. 6

                                                                For those intrigued by HyperCard, there is a modern day descendant that is able to produce standalone software for macs, windows, linux, iOS and Android called LiveCode. It is a joy to use, specially when you’re just building tools for your personal use, more focused in solving your own problems than building the next unicorn thing. Nothing is faster, IMHO, than dragging and droping a bunch of controls, writing some glue script, and scratching some itch. It can (and is) used to ship real products in all platforms. I think it shines in Desktop cross-platform development and for internal tools, those are my preferred use-cases for it.

                                                                1. 3

                                                                  It looks great to me. Pricey though, and very clearly targeted at devs. The partially unrealised beauty of Hypercard was anyone could use it, and making Stacks didn’t feel like you were making software.

                                                                  1. 2

                                                                    You can actually have it for free. They have an open source GPL version at https://livecode.org/, it is targeted at professional developers but I know a ton of non-developers using it (I used to be a quite active member of their community) and techers in K12 space using it as well so you can still have that feeling of using stacks in HC.

                                                                  2. 2

                                                                    I’m curious as to what you’ve built with this (just to get an idea of what the sorts of itch-scratching things are easily done with this)

                                                                    1. 1

                                                                      I always use it when I need to transform data for some other stuff I am doing, or to scrape stuff for personal use, or to do some form of batch processing.

                                                                      A recent example, I was building a little API backend server for a project that is not related to LiveCode, just normal web stuff. It was easier for me to cook up a little stack with buttons, fields and some diagnostics and debug my little server while I was building it than use those generic tools such as insomnia.

                                                                      Those generic tools are awesome, pretty and powerful, but my own handmade tools, which I create specifically to a given project have the advantage of being tailored to whatever I am building, so they might be ugly but they are my special-purpose tools that help me develop and debug my own projects. There is a lot of developer ergonomics when you can quickly come up with GUI tools to debug whatever you’re doing.

                                                                      Another example is when I had to do some complex batch renaming of thousand of files. The process involved a little crawler going on disk into the folders, inspecting some configuration files relative to the folders and renaming stuff inside them. I could do this with visual feedback, progress bars, etc…

                                                                      I am quite bad at design but I am scratching my itches, not selling itch scratchers. My little stacks help me a lot.

                                                                      1. 1

                                                                        So is LiveCode a project of your own then?

                                                                        1. 1

                                                                          No, it is not. I am just one of its users.

                                                                    2. [Comment removed by author]

                                                                      1. 7

                                                                        What the hell, @rain1.

                                                                        Find something kinder to do with your time.

                                                                        Bringing other people down while adding nothing to the conversation isn’t something we need here.