1. 2

    I tried to run it but I got:

    [./vip:10] !? (265364 $177775301332572 $177775301332574 $177775301332576)
    [DLL] /usr/lib/x86_64-linux-gnu/libncurses.so: file too short
    ?
    

    Followed by a PicoLisp REPL.

    1. 2
      1. 1

        I installed libncurses5 as in your link, and did what was instructed, but then I got a segfault when running vip :(

    1. 1

      This really does not belong on Lobsters. User stories are the antithesis of technical excellence.

      1. 3

        Ow man. Flag and move on. This comes off like pushing politics.

        (And I suggest'ed this submission to have the “show” tag. Also, I agree with you for other reasons. Specifically because I’m eyeing potential promptworks spam under the @nicholaides invite tree.)

        1. 1

          I had a much harsher post, but then I noticed that she(?) was a new poster, decided to assume good faith, and dialed it back.

          It is true that “user stories” don’t belong on a forum for serious discussion of technology.

          1. 2

            Would a link entitled User Stores, Standups, and Agile in General is a Fucking Scam tagged under practices belong?

            1. 1

              Why is technical excellence viewed by some as a “political” stance?

              1. 4

                I would say the claim that user stories are the antithesis of technical excellence could use some sort of supporting evidence.

                1. 1

                  I would say the claim that user stories are the antithesis of technical excellence could use some sort of supporting evidence.

                  Anyone who doesn’t see it this way is welcome to join the software industry and find out first-hand.

        2. 2

          I don’t see how breaking down a complex project into a list of small tasks (“user stories”) that can each be verified and tested is the antithesis of technical excellence.

        1. 10

          Last week I wrote a server for the extensible nREPL protocol in Lua which allows you to connect to a Lua program over a socket and evaluate code inside a sandbox: https://gitlab.com/technomancy/jeejah

          I’ve already added it into my spaceflight/programming game (https://gitlab.com/technomancy/bussard), and tonight I’m working on extending the protocol to go beyond simply evaluating code into game-specific things like keeping you updated on nearby planets, ships, stations, etc, and interacting with the ship’s onboard filesystem.

          The plan is that once you get to a certain point in the game, you’ll be able to operate it entirely from Emacs or another editor of your choosing. You’ll have to implement autopilot routines since the external interfaces are unlikely to provide quick enough feedback to support piloting your ship manually, but by then the point of the game has moved beyond the spaceflight bits into the juicy story-driven and programming-centric parts.

          Trailer for the previous beta here: https://p.hagelb.org/bussard-1.3.webm

          1. 3

            I just watched the trailer, and will give the gameplay a try when I have some time. Job hunt, family coming in a couple of days (with the requisite “honey-do” list) and some freelancing type work have all got me fairly busy. The trailer reminded me of Rodina (Mostly the font/fadeout at the end). Intentional?

            1. 1

              Cool; would love to hear what you think. The story/missions so far only really last 20 minutes or so; I have a lot of plans for more but haven’t gotten a chance to work it in yet.

              The font choice comes from http://typesetinthefuture.com/fontspots-eurostile/; Jura Demibold is just the closest thing in Debian to Eurostile Extended. I hadn’t seen the Rodina trailer, but it looks cool. The fading text is really just because I’ve never done any video editing before and had to just do the simplest thing that could work. The music is taken from the soundtrack to Singularity: https://github.com/singularity/singularity-music/tree/master/music (Through Space) which is CC-licensed.

            2. 2

              I tried your game a bit. As someone who liked to play Escape Velocity as a teenager, I’m really excited by the concept, except that the control aren’t so nice - I couldn’t manage to get closed enough to a target to connect to it, so I had to use the ‘cheat’ keys in ‘ship’ to get where I wanted. But I guess it’s on purpose since you’re making the game programmable…

              1. 1

                Thanks. I still haven’t done enough playtesting with new players to make sure the learning experience is smooth, so it’s good to get feedback like that. The ship.cheat table is really just there for debugging and probably going away once the game gets more playable. (Though there will be ways to escape the sandbox later on, they just won’t be so obvious.)

                But the comparison with Escape Velocity can only really go so far–piloting in EV is challenging because of combat; it’s drastically simplified by the removal of gravitation, but it’s still fun because there are ships trying to blow you up. For my game I didn’t want to make another murder/capitalism simulator, so some of the challenge comes from learning to pilot a ship in a gravity well.

                Were you able to get the two blue trajectory projections and see that matching course requires firing the engines in such a way as to get the two trajectories to line up, rather than firing the engine so that you accelerate in the direction of the current position of the target? If there are glitches in the controls then I would love to get a bug report, but if it’s more “I don’t understand how to match orbit with a target” then a different approach is needed.

                1. 2

                  Were you able to get the two blue trajectory projections and see that matching course requires firing the engines in such a way as to get the two trajectories to line up, rather than firing the engine so that you accelerate in the direction of the current position of the target? If there are glitches in the controls then I would love to get a bug report, but if it’s more “I don’t understand how to match orbit with a target” then a different approach is needed.

                  Yes, I was able to do that, but not always… if I’m far from the target it’s hard to change direction as well, and can be frustrating (hence my use of the cheat).

                  I humbly suggest that you should explain your API a bit more, like “try to change your speed by entering this command…” in the help of the game, in order to guide the players a bit more. I haven’t managed to track my target programmatically (well I didn’t put too much effort) and I’m a seasoned programmer, so someone with no programming experience will have a hard time.

                  1. 2

                    Thanks for the feedback.

                    I think I was a little unclear; I want to make auto-piloting functionality one of the mid-game programming challenges; at the outset of the game it will rely on manual piloting, and I need to find a better way to explain how that works. I want to make it so that by the time you figure out how to write the auto-pilot, it feels like a huge achievement because it allows for much smoother travel. (I think you’ll have access to a device that speeds time up by that point too.)

                    I am thinking of increasing the mass of the targets in the initial systems in order to make them a bit easier to match orbits with, but I’d be happy to hear other suggestions too. There are little things like “always fly around the star in the same rotation as the orbits of the planets” that help a lot, but I’m not sure the best way to explain.

                    I definitely plan on a more gradual introduction to the kind of coding that would allow auto-piloting, but it’s still a ways off at this point. I’ve written basic auto-piloting, and it’s no joke; it’s tricky and easy to get wrong.

            1. 5

              The french movement Nuit Debout needs help for their infrastructure, my goal is to add a CAS, i18n and some small optimizations.

              Also working on indexing the source code of 90k chrome extensions.

              1. 3

                By CAS, do you mean “Computer Algebra System” or something else? If it’s “Computer Algebra System”, I am very curious to find out what it has to do with Nuit Debout.

                1. 2

                  Nope, Central Authentication Service. See gh issue here: https://github.com/nuitdebout/wordpress/issues/144

              1. 8

                I would like to mention Paradigms of Artificial Intelligence Programming since I haven’t seen it here. It’s a bit old but I am really impressed by the clarity of Peter Norvig when he explains AI concepts.

                1. 2

                  Okay, so lisp is great for symbolic expressions because of homoiconicity… how come Maxima hasn’t come to dominate Mathematica, then?

                  Although I suppose Mathematica is a lisp, just one implemented with mexps instead of sexps…?

                  1. 2

                    That seems like a strange argument to make. Mathematica is a lot more polished than Maxima, and you have a lot more resources to make something polished if you charge each user $1,095 a year :)

                    1. 1

                      It’s not an argument, it’s just that lisp advocates routinely use CASes as an example of where lisp is absolutely amazing. If so, how come the actual CAS that was built on common lisp isn’t amazing? In fact, Maxima’s source code is kinda considered write-only and very hard to understand.

                      1. 1

                        Repeating what I said, if your software costs $1095/user/year, you can do amazing things. I’m not saying Lisps are absolutely amazing, but you’re making a very unfair (and strawman) comparison.

                        1. 2

                          Macsyma was expensive. It’s not just the money. Nobody has made a significant attempt to make a CAS in lisp again since then. Yacas is in C++, Sympy is in Python, Sage is mostly in Python too. If lisp is the natural language for CASes, why isn’t it being used for CASes?

                          1. 1

                            Please note that I never said that Lisp was better to build CASes. I just said that with Lisp the CASes could be embedded in the language, while with other languages it has to be a separate program.

                  1. 2

                    R is a terrible language. It’s not like Haskell or (to go further down the rabbit hole) Idris, which reward your initial difficulty with something new that most languages don’t give you (in the case of static typing, compile-time bug squashing and formal verification). R is over-complex, sloppily designed, and ugly. There, I said it. Hadley is brilliant, but he will not be able to save it. Despite the considerable merits of many tools in R, the language itself is a borked Lisp that supports four (yes, four) varieties of OOP.

                    There are a lot of great statistical libraries in R, sure. I don’t think, at least not yet, you can be a true data scientist (as much as I hate that pompous term, “data science” hits on a certain useful skill set) without coming in contact with it. It’s what academics write prototype code in when they come up with new machine learning approaches, so if you want to be on the cutting edge– most data scientists shouldn’t be there, but that’s another debate– you need to be able to work with R.

                    R wasn’t designed by language designers, and it has included a number of features that put convenience of use over infrastructural simplicity. Swiss Army Knives make great tools, but terrible infrastructure: you’d built a house out of bricks instead. The problem with software is that there’s no clear delineation between what is a tool and what is infrastructure. Dynamically typed languages legitimately have a better UX, because hammering out explicit conversions at the REPL is a drag, but they’re a really poor choice when you have long-lived code that’s going to have be read many times by a large number of different people.

                    Ultimately, though, I take R as a source of lessons: * very smart people, without organizational and design sense, will build monstrosities. The badness is a faster-than-linear function of the number of such people. * terseness is overrated. Sure, the multiple ways of indexing dataframes make terser code– I’d bet that R’s actually terser than Haskell– but I’d much rather have explicitly named functions that force me to acknowledge and understand what I am actually doing. * cleverness is extremely overrated. But I think everyone already knew that.

                    For my part, I doubt I’d hire a “data scientist” who could only code in R. I’d expect him to be willing to use (at least) Python for any code that would be read by other people, and I’d encourage him toward Haskell or C (depending on needs pertaining to performance, timeframe, correctness and complexity) for long-lived infrastructural code.

                    1. 2

                      R’s sweet spot to me is in interactive data exploration / fiddling. I haven’t found a better environment for doing that yet - I prefer R’s lisp-y flavour to Python’s imperative style, though I occasionally do ‘data science’ in Python as well. It also beats using bash + an army of unix tools on the interactive front.

                      I always felt like mastering J would yield a great interactive experience. When you’re in the swing of things, manipulating data in J almost feels as easy and unconscious as manipulating text in Vim.

                      But yeah, my preferred use of R is in research. Often I’ll generate data elsewhere and then explore/analyze it in R (using coda, ggplot2, etc.).

                      1. 1

                        Have you looked into Clojure? I worked with it a bit back in 2013. The ecosystem didn’t seem quite “there yet” on data science but it was close. One of the main issues was the lack of sparse matrix support in the JVM. This picture may have improved.

                      2. 2

                        Dynamically typed languages legitimately have a better UX, because hammering out explicit conversions at the REPL is a drag, but they’re a really poor choice when you have long-lived code that’s going to have be read many times by a large number of different people.

                        Do you really need Static typing for code doing data stuff, even in production? I expect your code to do data stuff will only couple of data structure (say, time series, matrix, vectors, right now I might forget some but I doubt they are that many), so you will know which kind of inputs your function expects and what it should return. Granted you will have to deal manually with bad data (time series with no data or not enough data to calculate correlation matrix for example) but it’s not so bad if you are rigorous - I did it - and you get to the benefit of having lots of machine learning libraries of the languages (R and python) that are the most used for that.

                        Probably in the future we will have Julia that gives the benefit of static typing combined with nice libraries but I wouldn’t count on it yet.

                        1. 1

                          Do you really need Static typing for code doing data stuff, even in production?

                          Well, you don’t need static typing for production code. There are plenty of success stories with Erlang and Lisps. The quality of the programmers matters more than the language itself, and there certainly are great programmers in dynamic languages. I’m strongly in favor of static typing, but the lack thereof isn’t a deal breaker. You’d probably guess (and correctly so) that I’m not satisfied with C’s type system, but I’m not going to argue that C “didn’t work”.

                          Static typing is great and, at a typical corporate pace, it’s indispensable for multi-developer projects. That said, dynamic typing can be used to build reliable systems. It’s not even that rare. But you need to develop at a sustainable pace, as opposed to “Agile” corporate haste.

                          I expect your code to do data stuff will only couple of data structure (say, time series, matrix, vectors, right now I might forget some but I doubt they are that many), so you will know which kind of inputs your function expects and what it should return.

                          So, it gets complicated. Do you let DataFrame be a single type, or do you refine according to the contents thereof? First you need extensible record/row types (which Haskell doesn’t have, yet). Then you can define a data frame type in two ways:

                          • (column based) a record of vectors, e.g. {name :: Vector String, age :: Vector Int, isMember :: Vector Bool}
                          • (row based) a vector of a record type, e.g. Vector {name :: String, age :: Int, isMember :: Bool}

                          It gets thicker. A lot of data processing involves data-dependent transformations, e.g. removing highly-correlated (or just collinear) columns. So now you have dependent types by necessity… all for something that will probably be converted into a numerical matrix (possibly with dummy variables for categorical items) later.

                          It does seem more appealing just to work with n-dimensional numerical arrays (which are not hard to put types on) and to just accept that dataframe errors will happen at runtime.