1. 3

    I remember at an Erlang conference, there was a question to Robert Virding and Mike Williams (co-creators of the lang) about how do they deal with `imposter syndrome.’ They were dumbfounded; they had no idea what that concept could even mean.

    1. 1

      I had that happen once with a co-founder. Had to explain the concept. In retrospect that explained a lot of things about them and our relationship (both the good and the bad).

      1. 1

        I’ve never had impost syndrome, it’s a mystery to me. But then I got started in programming during the 80’s with 8 bit micros. In those days tech was hugely uncool (in my area), and there was more of a culture among enthusiast around sharing knowledge and knowhow. I have noticed there tends in todays coders there seems to be a lot more one upsmanship and showing off which I try to discourage any chance I get.

      1. 1

        My first thought was DarkBasic and the follow on Java like language they had although I can’t find any reference to it now.

        https://en.wikipedia.org/wiki/The_Game_Creators#DarkBASIC

        1. 2

          IBM seems to have really believed in Smalltalk in the 90s, then suddenly turned to Java, effectively killing Smalltalk as a serious contender. Why was that?

          1. 2

            One can speculate a lot of reasons, I’m interested to hear what others think. For me the Smalltalk deployment story was always lacking in that the “image” of the smalltalk system is the deployment unit, not the source code and compiled artifacts. Another thing was that Sun pushed the “run Java anywhere on the network” angle that was really compelling in the 90’s but turned out to be not what anyone really wanted. I don’t think Smalltalk had an answer for that. Those are just two things I recall.

            1. 1

              This reminds me of how IBM made an object oriented version of its scripting language REXX, called oRexx (now ooRexx, open source at https://www.oorexx.org/ ), using the message-passing model of Smalltalk. Just a few years later, they release another object-oriented REXX, running in the JVM using the Java model of object orientation: http://netrexx.org/

          1. 1

            The “limit” parameter needs a default and sensible upper value so users can’t just dump the tables. Presumably more complex queries requiring joins, group by, etc would be implemented as views, given the limited filter syntax? I don’t really care to install dot net as dependency to generate some go code, that if I edited, my edits would be wiped out the next time I regenerated the project.

            1. 1

              The “limit” parameter needs a default and sensible upper value so users can’t just dump the tables.

              Yep, good idea. Easy enough to do.

              Presumably more complex queries requiring joins, group by, etc would be implemented as views, given the limited filter syntax?

              That is such an obvious idea and I had never thought of doing this. I built up some really complicated column/json-field mappings in the past because I wasn’t thinking of views. Thank you!

              I don’t really care to install dot net as dependency to generate some go code

              I haven’t spent much time on packaging of the CLI yet but I imagine it will be a binary or Docker image you can use.

              that if I edited, my edits would be wiped out the next time I regenerated the project.

              You could use this project in two ways: 1) generated boilerplate that you use once and edit directly or 2) templates that you extend as needed. The two things I’m looking into are template file overrides and also hooks for you to add non-generated code alongside generated code.

            1. 5

              SWT (from Eclipse) was the least sucky of the non-web cross-platform options I’ve tried. Top-notch accessibility is an absolute requirement for any project I do, and SWT has that covered pretty well. It uses platform-native controls as much as possible, and implements platform accessibility APIs for its custom controls. Still, it kind of sucked, particularly on Mac. For some reason, SWT’s wrapper over the file picker dialog didn’t work for me on Mac, so I had to drop down to AppKit for that. I also had to drop down to AppKit to set up a global menu bar only on Mac the way I wanted it. (I didn’t want a menu bar on Windows.)

              wxWidgets takes the same general approach as SWT, but it doesn’t implement platform accessibility APIs for its custom controls. Also, there are some platform-specific gotchas. I’ve never done a major project with wx myself, but I have a friend who has done several. The biggest problem that he ran into is that to get an accessible, native list view control, you have to use wxListView on Windows, but wxDataViewCtrl on Mac. That’s a major divergence for an application that relies heavily on a list view in its main UI.

              Edit: I realize I didn’t exactly answer the question. But what I enjoy using is a bit beside the point. If I’m developing a cross-platform application, what matters to me is providing a good user experience (with a special focus on accessibility) while trying to reuse code across platforms. That’s work, not fun.

              1. 1

                I had an SWT app many years ago. I used JFaces, not raw SWT. It wasn’t too bad. Deployment with SWT always seemed like a major PITA, due to requiring the user to have Java installed. The cleanest option seemed to be bundling a jre with with the install. And if you’re bundling Java, why not use Swing? Or Exelsior Jet native compiler. How did you handle it?

                1. 2

                  if you’re bundling Java, why not use Swing?

                  Accessibility. Particularly on Windows, Swing uses something called the Java Access Bridge, which IIUC is kind of second-class with screen readers compared to native controls.

                  As for how I handled deployment, I used Avian. Actually it’s more complicated than that. I wanted to write my application in Python, using CPython, so I could re-use some existing code from a previous project. So I used Avian with its own classpath library as just enough JVM to run SWT, then added pyjnius to bridge Java and Python. It was hacky but worked well enough.

              1. 5

                I like python, I even like javascript but java is just “easy”. Strong, static typing saves me so much time and mental effort it’s phenomenal. I tried becoming more of frontend focused “full stack” developer for a few years but I found I worked far harder, expended more mental effort with dynamic languages than I ever did with java. Of course javascript isn’t python but I experienced that same thing with a python application as well. I tend to work more on extending and maintaining existing applications than green field development. Even then if one takes the time to learn Spring, it’s really really good to.

                I’m at the point in my life where “easy” counts for a lot. And as the fine article says, java is pretty nice nowadays. The tooling is exceptional. I’m glad for it.

                1. 1

                  I heard Python can do static types with an extension or something. Found this that shows how. Also claims PyCharm IDE catches the type errors for you. Some info might be out of date since it’s from 2017.

                  Maybe try some of that tooling with Python to see if it gets better.

                  1. 3

                    Yes, type checking with mypy is quite good nowadays, and provides quite a bit of peace of mind. It’s not perfect, and it’s nowhere near the level of what static types in Java give you, but it’s a good middle-ground, and it improves the Python dev experience noticeably. You loose some of the readability of Python (if you are not used to type hints), but I think it’s worth it, esp. for libraries.

                1. 17

                  Perhaps it’s just me, but running CLI apps with docker run seems rather weird. I tried using the semgrep-v0.6.1-ubuntu-16.04.tgz from the releases page, but can’t get that to work. Could probably figure that out, but having to figure out how to even run it for a quick test to see if I like it is a bit of a turn-off IMO.

                  1. 4

                    Hey, I’m on the semgrep team, sorry it’s been giving you trouble! If you just wanna give it a quick go, semgrep.live might be to your liking. As for the installation woes, we provide an install script[0] (warning, will download) for the time being.

                    [0]: The install script’s needed cause the fastest way we could get things working was to do the parsing and heavy lifting in OCaml, and write the more feature-packed and user-friendly CLI in Python, so we have two binaries to ship together. I assume your preferred way here would be to just install a .deb package?

                    1. 17

                      heavy lifting in OCaml, and write the more feature-packed and user-friendly CLI in Python,

                      Is writing a featureful cli in ocaml really that hard? Shipping a single binary would be much more palatable than docker imo,

                      1. 2

                        Daniel Buenzli made a reasonable arg parsing library for OCaml but I can’t remember the name. It’s pretty good, though.

                        EDIT: It’s cmdliner

                      2. 12

                        My preferred way would be to install a single binary with a simple build into $PATH. Packaging would be nice, but I’m using OpenBSD, so a deb package (or a docker container) doesn’t really help.

                        (Docker as a part of someone’s build has become a red flag for “hellish to get building” – it’s led me to steer away from a whole bunch of packages when I was doing stuff that had to run on Android, as well as for my personal computing environment.)

                        1. 11

                          I think you’re insanely undervaluing this by saying “like grep, but for code.” This is a linter language language for writing linters that can target multiple languages, and has “one liner” support for ad hoc searching. Don’t sell yourself short.

                          1. 1

                            Did you write your own parser for all 5 languages currently supported?

                            1. 1

                              Yes, Debian package would be great.

                          1. 8

                            This has been posted a couple times, but I think is too long to get much traction, which is a shame, since it’s a great read - some highlights:


                            Checking code deeply requires understanding the code’s semantics. The most basic requirement is that you parse it. Parsing is considered a solved problem. Unfortunately, this view is naïve, rooted in the widely believed myth that programming languages exist.


                            Many (all?) compilers diverge from the standard. Compilers have bugs. Or are very old. Written by people who misunderstand the specification (not just for C++). Or have numerous extensions. The mere presence of these divergences causes the code they allow to appear. If a compiler accepts construct X, then given enough programmers and code, eventually X is typed, not rejected, then encased in the code base, where the static tool will, not helpfully, flag it as a parse error.

                            The tool can’t simply ignore divergent code, since significant markets are awash in it. For example, one enormous software company once viewed conformance as a competitive disadvantage, since it would let others make tools usable in lieu of its own. Embedded software companies make great tool customers, given the bug aversion of their customers; users don’t like it if their cars (or even their toasters) crash. Unfortunately, the space constraints in such systems and their tight coupling to hardware have led to an astonishing oeuvre of enthusiastically used compiler extensions.


                            If divergence-induced parse errors are isolated events scattered here and there, then they don’t matter. An unsound tool can skip them. Unfortunately, failure often isn’t modular. In a sad, too-common story line, some crucial, purportedly “C” header file contains a blatantly illegal non-C construct. It gets included by all files. The no-longer-potential customer is treated to a constant stream of parse errors as your compiler rips through the customer’s source files, rejecting each in turn. The customer’s derisive stance is, “Deep source code analysis? Your tool can’t even compile code. How can it find bugs?”


                            The award for most widely used extension should, perhaps, go to Microsoft support for precompiled headers. Among the most nettlesome troubles is that the compiler skips all the text before an inclusion of a precompiled header. The implication of this behavior is that the following code can be compiled without complaint:

                            I can put whatever I want here. It doesn’t have to compile. If your compiler gives an error, it sucks. #include <some-precompiled-header.h>


                            Do bugs matter? Companies buy bug-finding tools because they see bugs as bad. However, not everyone agrees that bugs matter. The following event has occurred during numerous trials. The tool finds a clear, ugly error (memory corruption or use-after-free) in important code, and the interaction with the customer goes like thus:

                            “So?”

                            “Isn’t that bad? What happens if you hit it?”

                            “Oh, it’ll crash. We’ll get a call.” [Shrug.]

                            If developers don’t feel pain, they often don’t care. Indifference can arise from lack of accountability; if QA cannot reproduce a bug, then there is no blame. Other times, it’s just odd:

                            “Is this a bug?”

                            “I’m just the security guy.”

                            “That’s not a bug; it’s in third-party code.”

                            “A leak? Don’t know. The author left years ago…”

                            1. 3

                              This is a good one too:

                              “Why is it when I run your tool, I have to reinstall my Linux distribution from CD?”

                              This was indeed a puzzling question. Some poking around exposed the following chain of events: the company’s make used a novel format to print out the absolute path of the directory in which the compiler ran; our script misparsed this path, producing the empty string that we gave as the destination to the Unix “cd” (change directory) command, causing it to change to the top level of the system; it ran “rm -rf *” (recursive delete) during compilation to clean up temporary file

                              I recall Mozilla seemed to put a lot support into Elsa/Elkhound and some of McPeeks other stuff (a static analyzer something to do with pork?). I often wondered about that. Lately I’ve been forced to use a static analysis service to scan binaries, has the industry given up on source code static analysis?

                              1. 1

                                Well, Mozilla created Rust because they felt it was the only viable way forward I guess.

                                Oh, also Facebook created Infer: https://fbinfer.com/

                                1. 1

                                  Rust started as a personal project that then eventually got funded by Mozilla Research. Not sure that counts as “created”.

                                  1. 1

                                    I think it counts. Rust in its current form, influenced by Mozilla’s needs, is pretty far from GH’s original Rust which was (my impression) a C-ified OCaml.

                                    EDIT: although I should correct myself on Infer, technically FB acquired it when they bought Monoidics.

                                2. 1

                                  has the industry given up on source code static analysis?

                                  If anything, there’s more going on in that field than there used to be. There’s lots of products to choose from. The number that have low noise is higher than before. Now, we also have tools like RV-Match built on a formal semantics of C, tools like Facebook’s Infer that work on massive codebases, and academics continuing to build better prototypes. The latter were converging on common foundations, too. Other than algorithms, powerful hardware that can scale up or out is cheaper than ever with clouds having some, too.

                                  It’s the golden age of static analysis. Building on above combined with automated, test generation is what I’d have focused my work on had not the crisis shifted my priorities a bit.

                              1. 1

                                For an experience software engineer wanting to explore some data modelling and statistics, do you recommend Python or R? Why or why not?

                                1. 1

                                  This is a good question, but I am not qualified to answer it - I have never used Python.
                                  And I am afraid not many people will see it here on this thread.

                                  Maybe you should post it as a separate question with [ask] tag?

                                1. 1

                                  Running COBOL requires legacy IBM hardware? But COBOL is a fairly simple language? Then someone should write a COBOL-to-XXX transpiler, where XXX is some mainstream language, and make a fortune selling it to all these governments and businesses. If they pay some attention to readability of the generated code, the customers could retire the COBOL source and do future maintenance in a language lots of people know.

                                  1. 4

                                    This was in fact done. Multiple times. The one I know is NACA, a COBOL-to-Java transpiler. It was used to migrate 4 million lines of COBOL in production.

                                    1. 3

                                      Very impressive project, particularly the CICS support. Looking through the github I didn’t see anything related to JCL, was that supported also? Did you participate in the migration of the code base?

                                      I worked at a company that had similarly migrated a legacy system to java using a cobol to java transpiler. This company attempted to continue developing the app using the transpiled java source code. The java source code read like assembler. After a few years the converted version was dropped and they had reverted back to the mainframe cobol version, which luckily (for them) had not been decommissioned yet.

                                    2. 3

                                      Any programmer can pick up COBOLin a few weeks. It is a much simpler language than Java, which is routinely used to replace COBOL systems, despite being a poor fit for the domain.

                                      1. 2

                                        For mainframe hosted apps, Cobol as the language is incidental; it’s the hosting environment that’ really locks them in; Jcl for batch processes and CICS for interactive green screen applications. Microfocus has had a mainframe rehosting solution that’s remarkably complete for many years now (10-15 years that I know of). There are options out there, but they require will and financing to implement.

                                        1. 1

                                          NACA includes CICS emulation. It’s an entirely solvable problem.

                                      1. 2

                                        I was hoping “CBM” stood for Commodore Business Machines and was not disapointed, here is a video of the live performance:

                                        https://roberthenke.com/concerts/cbm8032av.html

                                        1. -1

                                          Came to comments to find the “this isn’t about machine learning!” subthread. Did not find one. Am I disapointed or surprised? Pleasantly surprised this audience is more informed than I’ve come to expect lately!

                                          1. 2

                                            There’s also Avian JVM, but it’s no longer maintained https://github.com/ReadyTalk/avian

                                            1. 1

                                              Does anyone know what happened to this project? It was a commercial product at one time, I’m shocked it’s abandoned now!

                                              1. 1

                                                I’d be curious to know as well, seemed like an interesting project. Perhaps they decided to develop it as closed source going forward?

                                              1. 2

                                                My spontaneous reaction is “meh, 5.3”. And yes, that’s the latest version, but as long as the upstream Lua is so slow compared to LuaJIT, the LuaJIT version is the important one for me and a lot of other people.

                                                1. 8

                                                  Considering the application to a boot loader, I think in this case it’s understandable to prefer the slower, simpler interpreter - remember this environment is so simple that it doesn’t attempt to support floating point.

                                                  1. 3

                                                    Looks like this is intended to scipt some things for the bootloader. Just curious what you’re particular application of luajit is?

                                                    1. 2

                                                      LuaJIT doesn’t seem to be maintained anymore. The last official release is 2.1.0-beta3 from 2017-05. And only this beta supports newer architectures like aarch64. There are several forks of LuaJIT now but.. OS distributions aren’t exactly happy about random forks, are they?

                                                      Plus, there’s no need for JIT performance when what you’re replacing is shell, an embedded Forth, VimScript…

                                                      I always prefer upstream Lua because I don’t do high-performance things and I wish LuaJIT didn’t divide the ecosystem by sticking to an old language version >_<

                                                      1. 1

                                                        I see what you’re saying and I handwaved all LuaJIT forks away and should’ve said “LuaJIT etc. (Raptor looks good so far) - and I know as much as the next person that languages shouldn’t just stagnate but are evolving. But as someone who has only ever used Lua either “embedded” as a scripting language or deployed in an appliance-like setting (it won’t be touched or upgraded except security fixes) I really don’t need any progression and want stability. Lua on its own is a nice language, but if it’s so slow it’s not helping me. For (and this probably unfair to the Lua team) since LuaJIT was on the market, that’s what I wanted to use. It’s more upstream Lua’s fault for not being as fast, not LuaJIT’s fault for being unmaintained. And yes, this is close to a fork situation, but for me it’s clear on which side I am.

                                                    1. 1

                                                      These data science / ML blog posts give me a distinct “ad hoc reporting hell” feel I had at an especially dysfunctional company. By that I mean getting data in a form you need for any given task is messy, always has been? Must it be? Seems so….

                                                      1. 1

                                                        Good overview.

                                                        In this tutorial you will improve the performance of the FAMP stack by changing the default multi-processing module from pre-fork to event and by using the PHP-FPM process manager to handle PHP code instead of the classic mod_php in Apache HTTP.

                                                        Some numbers to back this claim would be nice. My guess it’s no better than mpm-worker because fpm is still blocking, as well as all the php code.

                                                        1. 1

                                                          When you go shopping online, you may click checkboxes to limit your search to shirts, pants, and boots, but you may not provide an arbitrary filter condition.

                                                          In my experience that type of UI is a frontend for Lucen/Solr/Elastisearch backend that has the data apropriately categorized, so the result is in fact defunctionalization on the backend to allow rapid search using text/document based storage as opposed to building arbitrarily complex sql to do the same thing.

                                                          Or maybe I read that wrong.

                                                          1. 1

                                                            OP here.

                                                            Yes, you read that right. In that case, the primordial defunctionalization would indeed by on the backend.

                                                          1. 4

                                                            This is a good article, I made most of the same mistakes with a failed SAAS I worked on a few years ago. You’ve really really got to keep things simple for the MVP.

                                                            1. 2

                                                              Does anyone know the status of Elementary and Vala? I seem to recall there being some question if gtk 3 was going to be supported or not, and Vala was no longer being actively developed?

                                                              Edit; ah they’ve had releases just this month! Nice!

                                                              1. 1

                                                                Hiya. Just joined the Elementary community, and yes, Vala is their preferred programming language of choice.