1.  

    you may not: work around any technical limitations in the software;

    So you can’t install extensions from their store, most of which “work around technical limitations”?

    1.  

      Sounds like a clever catch, but isn’t really. The plug-in system is a feature of the software proper, so it does not stand in contradiction with this clause.

    1. 1

      For this reason we use GH- prefix, not only rebaser, but commit message editor also use # as a comment character.

      1. 1

        It’s worth noting that — for some rather legacy reasons — you can use the prefix GH- instead of # when autolinking issues/PRs in GitHub comments, commit messages, etc.

      1. 4

        The “map” view (or whatever it was called) would actually be pretty nice to have today since static sites have come back into fashion and we use things like wikis that are intended to form “webs” of hyperlinked content. Funny how things like that are cyclical.

        1. 5

          I imagine today’s version of Frontpage: semi-wysiwyg markdown editor, deployment to web hosting with git, jekyll for templating/theming engine, dialog to add analytics/trackers/ads/anti-adblockers/subscription popups, letsencrypt configuration wizard.

          Of course, based on Electron and with front command-line tool.

        1. 7

          It’s all cool and æsthetical, but I remember Frontpage being completely unusable and full of WordArt-style gimmicks, generating trashy HTML code on the same level of complexity as HTML generated by Word. Probably properly viewable only in Internet Explorer.

          Macromedia Dreamweaver, on the contrary, had really “professional” feel and allowed to make real websites for a long time. Maybe it’s still used today. Its UI is “photoshopish” and looks like it’s really intended for website designers and not dreamy salesmans like Frontpage and many other Microsoft products.

          1. 4

            Macromedia Dreamweaver

            Macromedia anything. They were kicking all kinds of ass. More learning curve, though. FrontPage’s selling point was, like author says, it was extremely easy to use. They taught it to most people at a local school. Those that didn’t get HTML did get some or all of FrontPage’s basics.

            1. 2

              Macromedia’s stuff was pretty incredible before Adobe bought them. Over the next decade they’d take Flash, an incredible tool that was very light weight (compared to Shockwave and Java) for vector art, programming, animation and slowly make it unwieldy and terrible.

              Now we have so many games written in Flash that we won’t be able to ever play again after 2020 (unless you don’t care about security updates or people make inbrowser Flash-to-HTML5/JS players).

              1. 1

                Macromedia is one of those things I think about when people making web apps tell me a chat app or banner has to use up a ton of CPU and memory. Things like the Deep Blue Sea website navigating parts of the sea vessel took up less space.

            2. 2

              Maybe it’s still used today

              Adobe acquired Macromedia a few years back, and still publish Dreamweaver. I don’t know how the current versions compare to the late-90s versions, though.

            1. 16

              It also breaks double-click selection in address bar. For example, I’m trying to copy issue number from Github and double-click number in the end of URL to select it. On first click it reveals full URL, with www, which enlarges it, on second click it selects wrong part.

              1. 3

                Everything, except “If you’re coming from JavaScript-land, the syntax doesn’t feel very foreign” applies to plain Ocaml too. But some languages such as Coffeescript are designed just to get rid of Javascript’s horrible syntax so “familiar syntax” argument is not convincing.

                So I still not convinced, why Reason and not plain Ocaml.

                1. 2

                  So I still not convinced, why Reason and not plain Ocaml.

                  My understanding is that Reason’s syntax is a direct result of trying to get Facebook engineers to work with OCaml. The syntax has moved to be ever more JS-like based on the feedback of those engineers. They’re lowering the barrier to entry for JS developers.

                  1. 1

                    Interesting. Is there anything written up on specific bits of syntax that newcomers found unintuitive, or is it just a general “looks foreign” feeling? My first languages were all C-like ones (C, C++, Java), and I don’t remember feeling the ML syntax was particularly difficult when I first encountered it— unlike, say, Scheme or Prolog, where I definitely remember finding the syntax to be weird & different at first.

                    1. 1

                      Interesting. Is there anything written up on specific bits of syntax that newcomers found unintuitive, or is it just a general “looks foreign” feeling?

                      I’m sure I read this somewhere; I’ve been trying to find it. There’s a hint in the blog post announcing v3.0:

                      I’m writing this post while coincidentally sitting next to the Reason team manager’s manager who’s trying out the new Reason syntax; his first impression is “this is exactly how I think it works!”. I think this alone made all our effort worthwhile.

                      But I thought there was an elaboration somewhere, too. I’ll post it if I can dig it up.

                1. 3

                  At first I thought “wow, that’s like Nix, but homebrew-based”, but

                  Homebrew does not support installing specific versions of a library, only the most recent one, so there is no good mechanism for storing installed versions in a .lock file.

                  If your software needs specific versions then perhaps you’ll want to look at using Vagrant to better match your development and production environments.

                  To uninstall all Homebrew formulae not listed in Brewfile:

                  $ brew bundle cleanup

                  Seems that it just installs packages listed in dependencies file system-wide :(

                  1. 3

                    I think the most depressing thing about dependency-resolution in general, is how nobody seems to learn from each others’ mistakes.

                  1. 5

                    Purpose of ORMs is not to make SQL “easier” or “cleaner” but to make SQL composable. Otherwise you have to compose SQL queries by concatenating strings.

                    The problem is that SQL itself is the most garbage query language. If it was based on data structures such as json or s-expressions or whatever, instead of “fake natural language”, ORMs would be mostly unnecessary.

                    1. 3

                      Honey SQL uses s-expressions to represent SQL, and it maps directly to SQL syntax so there’s no additional indirection. The semantics are preserved, and you’re just using a different syntax to express them.

                    1. 2

                      TIL it’s just a Rails app and not based on some fancy tech stack.

                      1. 4

                        I recently gave a presentation with an overview of the community and technical stack for the site. The slide deck makes for a short summary of the moving parts.

                        Lobsters is no more complicated than it needs to be. It makes it easier to contribute to, debug, and understand.

                        1. 2

                          Heck, we don’t even serve any js unless you’re logged in. (And I’m sloooowly making sure all the functionality works without js.)

                          And the first commit in the repo points to the Lobsters codebase being, briefly, even less fancy than Rails.

                        1. 3

                          I’ve been using iOS for about 2 years and only today learned about this feature from this article. It’s really hard to invoke, you need to shake phone with decent force, so I never invoked it accidentally. Very weird feature.

                          1. 1

                            For task runner, we use queue_classic. Despite “database as message queue” is considered classical antipattern, it’s suitable for our load and our use cases (also postgres has notify so polling is not required).

                            For scheduler we use cron configured with whenever, which is not very convenient. Looking for replacement for it, but everything else is too complex.

                            1. 4

                              On macOS, brew cask install docker will install Docker for Mac automatically.

                              1. 1

                                Also there’s appcast.xml, which is used for auto-update, that contains URL of latest version.

                              1. 7

                                This is a chance to get familiar with a newer and exciting language in the compile to Javascript world.

                                Why Reason is always marketed as “language that compiles to javascript”? I thought it’s just alternative syntax for Ocaml (i.e. it rather compiles to Ocaml or its internal representation than JS), and that compilation to javascript is performed by Bucklescript, not Reason.

                                What js-specific functionality it has, compared to plain Ocaml with Bucklescript? Maybe better integration with npm mentioned on website? Or [% … ] quasi-quotations allowing to embed raw js?

                                Even Bucklescript website shows code examples in Reason. I’m confused.

                                1. 5

                                  ReasonML is both a syntax and a default build chain relying on Bucklescript. You can use the syntax rewriter to build normal, binary libraries and executables via ocamlc and your build tool of choice.

                                  Bucklescript heavily integrates with the Javascript runtime - depending on your needs, you can cast directly between a javascript object and a type safe OCaml value. This is why ReasonML uses Bucklescript as the compiler: it makes it much easier to interop with existing JS. Compare to js_of_ocaml which compiles the OCaml runtime to JS (more or less) and makes no attempt to reconcile the difference.

                                  The only feature specific to ReasonML is the JSX rewriter (AFAIK) - that only works on ReasonML source, not OCaml.

                                  OCaml + Bucklescript + npm = (default ReasonML toolchain) - jsx

                                  1. 2

                                    Most tooling and libraries seem to build on the nodejs side of the ecosystem, meaning npm packages instead of opam, build scripts which only address javascript output, no native binaries.

                                    (I only glance over ReasonML documentation from time to time, not an active user)

                                  1. 7

                                    Often necessity to use deep copy (in any language) signals bad design: when you don’t know for sure that some code to which you pass that object will not mutate it and its deep sub-parts. That’s overly defensive programming. I rarely encounter even shallow copy in practice (almost always it’s right before mutating such objects) and almost never encounter need for deep copy.

                                    1. 4

                                      I’m not an FP zealot, but I work with Elixir these days, and “deep copy” is an alien concept there. If you add an item to a list, you get a new copy of the list with the new item added. It’s impossible to affect any other bit of code that had the old list.

                                      It’s nice not to have to think about that.

                                      1. 3

                                        I agree it’s bad practice. My moment of enlightenment was realizing the problem is isomorphic to serializing/deserializing an object graph. Example if you have machinery to completely serialize the state of an object (or an object graph), just use that for a “deep copy” ie deserialize multiple times.

                                        1. 1

                                          I don’t agree that is bad design. Let’s say that you have a method that updates an Entity and at the end, you emit an event with the new Entity and the old one. One solution is to fetch the entity from database clone it to a $previousEntity variable and use the $entity to perform the replaces you need and then emit the event. However does not mean you should have mutable VOs but from my experience at every place I have been there are always exceptions for certain reason and it can be very easy to start having bugs and very difficult to understand where they are coming from ;)

                                        1. 6

                                          https://www.youtube.com/watch?v=EJGrl4gJxx4

                                          This is track 3 from the CD. It’s cheesy soft synth video game muzak. It’s in high quality on YouTube. Awesome insight in the process of ripping, but why for this particular track?

                                          1. 4

                                            Nostalgia is a powerful drug

                                            1. 2

                                              Oh, that music! I never been a fan of Ragnarok Online and even only played it on my own local bootleg server, alone, in 2005, but I somewhat liked this game because it felt very weird. Lots of nostalgia feelings when I listened to this music now.

                                            1. 9

                                              This brings up the question if .NET brings any advantages to startups, say over Ruby or Node.js. My personal point of view is definitely.

                                              Currently it lacks ecosystem badly. Over its history, almost everything in .NET world was exclusively made by Microsoft. Java has Apache Software Foundation and Spring, which are attractive to startups. .NET basically has only Weblogic/Websphere-like stuff. Even its build system (msbuild) is based on scary Visual Studio xml stuff which is hard to manage without Visual Studio GUI (there is better tooling on top of this from F# community such as Paket).

                                              .NET/Mono is, however, became popular in indie gamedev because of Monogame (based on Microsoft’s XNA framework) and, later, Unity.

                                              C# language is also not so attractive, being basically slightly better Java but still Java. F# might be more attractive than Scala, though, but it lacks ad-hoc polymorphism and has weird mix of OO and non-OO (only OO part of language has interfaces), I didn’t find this language very pleasant.

                                              1. 2

                                                But is Java’s BigDecimal really noticeably slower than Cobol’s? Benchmark in this article compares Java’s floats with Java’s BigDecimals, not Java’s BigDecimals with Cobol’s BigDecimals. Uniquesoft’s article also didn’t come to conclusion: they were migrating from mainframes to common x86 hardware.

                                                I thought primary use of Cobol is legacy banking and business data applications, not rocket engines and physics simulations (unlike Fortran), so why performance of fixed-point numbers have such importance?

                                                Python (and for that matter Java) do not have fixed point built in and COBOL does. In order to get Python to do fixed point I needed to import the Decimal module.

                                                Does this really matter? Moving features from core language to standard library is usually considered good thing.

                                                1. 3

                                                  In a related part of the article, it’s mentioned the systems in this are dealing with millions/billions of ops/second. any Decimal operation in Python requires at least 2 dict lookups because you have to pierce the instance attribute dict and class attribute dict to get to most operations.

                                                  That’s not to say you shouldn’t measure things, but I wouldn’t be surprised at order of magnitude differences here.

                                                  At $WORK, we’ve had to deal with similar sorts of math-related issues (order-dependent calcs and global rounding state make stuff pretty hard). What we end up doing is trying to isolate the math so we can work on the surounding code. So you have doMathStuff(blackBoxData). This let us clear the way for refactoring and cleanup around this.

                                                  I don’t know the COBOL FFI story, but if I were in charge of handling some legacy COBOL transition I would likely go a similar route. Ultimately the math is important, but a small/isolated part. So trying to replace the top layer of these aplications with more modern languages (and the tooling that comes with), and avoiding the math stuff would let us get some very nice advantages.

                                                  By the end, if you’ve isolated just the math, you could have a bunch of in-process COBOL VMs just running calculations, and your other tooling calling out to it via some pointers or w/e. And by that point you now have a stable foundation to actually replace with some custom C code or the like to replicate fixed point logic. Plus infrastructure to let you make your systems a bit more decentralized.

                                                  I bet the undercurrent is a lot of the COBOL machines are running tasks that are hard to parallelize simply because the tooling isn’t present. Hence the need for speed/one machine to run millions of ops a second.

                                                1. 8

                                                  We use Hipchat and it’s completely awful. Web version silently logs out every few days, after that I stop to receive messages and can’t notice that it’s logged out until switching to its tab. Desktop client (based on Electron and having huge size) stopped receiving messages after sleep mode in older versions. In newer versions it uses http polling to receive messages (not long polling, just regular periodic requests, like in 90s web chats). When pasting blocks of code, it replaces multiple spaces with non-breaking spaces, so if you copy it back, you’ll get invisible surprise.

                                                  Still better than Skype, though, and is cheaper than Slack.

                                                  But I fear that if it will be replaced with Slack, our team will use chat more (instead of Github and Basecamp comments), and chat notifications make me nervous.

                                                  1. 3

                                                    Welcome to my hell… Slack is an awful channel to coordinate teams.

                                                    Things get lost in a hundred unrelated conversations. People assume everyone knows once they’ve dumped their minds into a chat.

                                                    It degrades communication quality. The pace of a chat conversation is short-term memory based. On a medium/long written form, you can consider previous context. Review your explanations.

                                                    Don’t really like it. :/

                                                  1. 2

                                                    Suing abandonware archives is too meanly. Personally I found Nintendo franchises like all these marios and zeldas as disgusting as Hollywood stuff. They had done lots of aggressive marketing in social networks recently to ensure “geek culture” is associated with their silly characters targeted to 5-year-old kids. I hope if all these ROMs would be removed from internets, this will lower popularity of Nintendo brands.

                                                    1. 12

                                                      It’s not abandonware when they’re maintaining their titles for virtual console on recent platforms. It’s not targeted at just 5-year-olds, it’s family entertainment that plenty of adults enjoy. Your comparison with Hollywood is far-fetched, and the adjectives you use are very trollish.

                                                      1. 3

                                                        when they’re maintaining their titles for virtual console

                                                        Except they’re not? On a switch only VC Mario title is an arcade one. No Zelda except BOTW (the latest one). DS Zelda titles are only available second-hand as cartridges.

                                                        1. 4

                                                          They’re available on the 3DS VC. I’ve been playing through them all. And I’m in my thirties, FWIW. :)

                                                          1. 4

                                                            This was not the case at one point if memory serves. It is also no guarantee going forward.

                                                            1. 2

                                                              I think the point that people have been making is that Nintendo had no interest in re-releasing these games until they discovered how popular they were in the ROM scene and second hand markets.

                                                      1. 30

                                                        Other important political aspect of Material Design (and some other UI/web styles that are popular now) is “minimalism”. Your UI should have few buttons. User should have no choices. User should be consumer of content, not a producer. Having play and pause buttons is enough. User should have few choices how and what to consume — recommender system (“algorithmic timeline”, “AI”) should tell them what to consume. This rhetoric is repeated over and over in web and mobile dev blogs.

                                                        Imagine graphics editor or DAW with “material design”. It’s just nearly impossible. It’s suitable only for scroll-feed consumption and “personal information sharing” applications.

                                                        Also, it’s “mobile-first”, because Google controls mobile (80% market share or something like that). Some pages on Google itself (i.e. account settings) look on desktop like I’m viewing it on giant handset.

                                                        P.S. compared with “hipster” modernist things of ~2010, which often were nice and “warm”, Material Design looks really creepy for me even when considering only visual appearance.

                                                        1. 10

                                                          A potentially interesting challenge: What does a design language for maker-first applications look like?

                                                          1. 17

                                                            Not sure if such design languages exist, but from what I’ve seen, I have feeling that every “industry” has its own conventions and guidelines, and everything is very inconsistent.

                                                            • Word processors: lots of toolbar buttons (still lots of them now, but in “ribbons” which are just tabbed widgets). Use of ancient features like scroll lock key. Other types of apps usually have actions in menus or in searchable “run” dialogs, not toolbar button for each feature.
                                                            • Graphics editors: narrow toolbars with very small buttons (popularized by both Adobe and Macromedia, I think). Various non-modal dialogs have widgets of nonstandard small size. Dark themes.
                                                            • DAWs: lots of insane skeuomorphism! Everything should look like real synths and effects, with lots of knobs and skinning. Dark themes. Nonstandard widgets everywhere. Single program may have lots of multiple different styles of widgets (i.e. Reason, Fruity Loops).
                                                            • 3D: complicated window splits, use of all 3 mouse buttons, also dark themes. Nonstandard widgets, again. UI have heritage from Silicon Graphics workstations and maybe Amiga.

                                                            I thought UI guidelines for desktop systems (as opposed to cellphone systems) have lots of recommendations for such data editing programs, but seems that no, they mostly describe how to place standard widgets in dialogs. MacOS guidelines are based on programs that are included with MacOS, which are mostly for regular consumers or “casual office” use. Windows and Gnome guidelines even try to combine desktop and mobile into one thing.

                                                            Most “editing” programs ignore these guidelines and have non-native look and feel (often the same look-and-feel on different OSes).

                                                            1. 3

                                                              3D: complicated window splits, use of all 3 mouse buttons, also dark themes. Nonstandard widgets, again. UI have heritage from Silicon Graphics workstations and maybe Amiga.

                                                              Try Lisp machines. 3D was a strong market for Symbolics.

                                                            2. 9

                                                              I’d suggest–from time spent dealing with CAD, programming, and design tools–that the biggest thing is having common options right there, and not having overly spiffy UI. Ugly Java swing and MFC apps have shipped more content than pretty interfaces with notions of UX (notable exceptions tend to be music tools and DAW stuff, for reasons incomprehensible to me). A serious tool-user will learn their tooling and extend it if necessary if the tool is powerful enough.

                                                              1. 0

                                                                (notable exceptions tend to be music tools and DAW stuff, for reasons incomprehensible to me)

                                                                Because artists demand an artsy-looking interface!

                                                              2. 6

                                                                We had a great post about two months back on pie menus. After that, my mind goes to how the Android app Podcast Addict does it: everything is configurable. You can change everything from the buttons it shows to the tabs it has to what happens when you double-click your headset mic. All the good maker applications I’ve used give me as much customization as possible.

                                                                1. 2

                                                                  It’s identical to the material design guidelines but with a section on hotkeys, scripts, and macros.

                                                                2. 5

                                                                  P.S. compared with “hipster” modernist things of ~2010

                                                                  What do you mean by this

                                                                  1. 4

                                                                    Stuff like Bootstrap mentioned there, early Instagram, Github. Look-and-feels commonly associated with Silicon Valley startups (even today).

                                                                    These things usually have the same intentions and sins mentioned in this article, but at least look not as cold-dead as Material Design.

                                                                    1. 3

                                                                      Isn’t this like… today? My understanding was: web apps got the material design feel, while landing pages and blogs got bootstrappy.

                                                                      I may be totally misinterpreting what went on though

                                                                    2. 3

                                                                      Bootstrap lookalikes?