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?

                                            1. 8

                                              This problem would have been avoided if Unreal Engine had fail-fast behavior in class remappings. Some discussion on Reddit. Seems that converting errors to warnings is popular in culture of gamedev (and was popular in web too in PHP era). Almost every game emits lots of creepiest warnings.

                                              By looking at screencasts, this game reminded me of E.T. for Atari and non-bugged AI would not save it. Hollywood movie franchise games are almost always of extremely poor quality in all aspects, not only code, but gameplay, assets and art style too.

                                              1. 7

                                                Hollywood movie franchise games are almost always of extremely poor quality in all aspects, not only code, but gameplay, assets and art style too.

                                                While I agree with that in general, the Alien franchise is an exception, having multiple high-quality games like Alien Trilogy, Aliens vs. Predator (not related to the film, with all races playable and an incredibly great Alien movement system), AvP 2 and Alien: Isolation (with its extremely faithful level design modelled after the first movie).

                                                Colonial Marines was an extreme let-down, especially with such an experienced shooter studio as Gearbox behind it.

                                                1. 1

                                                  What are innovations of this system? It has DHT and it allows to download file by knowing its hash, but bittorrent and edonkey has this functionality for more than a decade. I don’t understand “Development Strategy” section but seems that it’s about testing and simulating rather than new features.

                                                  1. 2

                                                    I don’t think they were trying to innovate. I think they wanted to describe the process for the uninitiated.

                                                  1. 21

                                                    Stylus is using the same theme database without collecting your history:

                                                    1. 7

                                                      +1

                                                      But the problem is: how to ensure that Stylus (or any alternative) won’t become the next “Stylish”?

                                                      1. 7

                                                        I’ve written a couple of my own extensions, partly for this reason. For certain complicated or common needs (like ad-blocking) I have no choice but to find an extension I trust and use it. But in other cases I just end up writing my own because I can’t find something that doesn’t feel sketchy.

                                                        Ironically, one of my extensions was recently removed from the Firefox store because there was some incidental code in a dependency (that isn’t used at runtime) that makes a network request.

                                                        1. 1

                                                          I’ve written a couple of my own extensions, partly for this reason.

                                                          This is the “hacker’s approach” that I prefer.
                                                          Everyone should be able to hack software for his own need.

                                                          For certain complicated or common needs (like ad-blocking) I have no choice but to find an extension I trust and use it.

                                                          Well, actually you can also review them, if the sources are available.

                                                          1. 6

                                                            Well, actually you can also review them, if the sources are available.

                                                            Certainly an important part of the process, but both major browsers push updates to extensions silently, and there’s no guarantee that the code my browser runs is the same code that was in the OSS repository. It’s a crap situation all-around, really.

                                                            1. 4

                                                              This is the “hacker’s approach” that I prefer.

                                                              I prefer it too, but as far as I can tell webextensions goes out of its way to make this tedious and annoying.

                                                              I’ve tried building webextensions from source, and as far as I can tell there is no way to permanently install them. You can only install them for a single session at a time. (Hopefully there’s a workaround someone can suggest, but I didn’t find one at the time.) It was pretty appalling from a hackability/software-freedom perspective, so I was pretty surprised to see it coming from Mozilla.

                                                              1. 2

                                                                Idk about mozilla, but I made my own permanently installed extension for an appliance with chromium. Precisely to avoid the risk of updates or unavailability due to internet outages.

                                                          2. 4

                                                            Consumers should demand that extensions don’t improperly use personal info, and that the browser vendors only allow extensions that adhere to these rules.

                                                            1. 17

                                                              Consumers should demand that extensions don’t improperly use personal info

                                                              Do you know any consumer that want extensions to sell their personal info?
                                                              I mean, it’s like relying on consumers’ demand for pencils that do not explode.

                                                              Yes, they might ask for it… if only they knew they should!
                                                              (I’m not just sarcastic: perfect symmetric information is the theoretical assumption of free market efficiency)

                                                              1. 2

                                                                I was being half sarcastic. Marketing is basically information arbitrage, after all.

                                                                But as a practical matter I believe voluntary regulation is the way forward for this. Laws are struggling to catch up, although it would be interesting to see how GDPR applies here.

                                                                1. 5

                                                                  I believe voluntary regulation is the way forward for this.

                                                                  Gentlemen agreements work in a world of gentlemen.
                                                                  In a world wide market cheating is too easy. It’s too easy to hide.

                                                                  GDPR reception shows how much we can trust companies “voluntary regulations”.

                                                                  Laws are struggling to catch up

                                                                  True. This is basically because many politics rely on corporate “experts” to supply for their ignorance.

                                                              2. 3

                                                                In theory the permissions system should govern this. For example, I can imagine a themeing extension needing permission to access page content; but it should be easy to make it work without any external communication, e.g. no network access, read-only access to its own data directory (themes could be separate extensions, and rely on the extension manager to copy them into place), etc.

                                                                1. 2

                                                                  It can leak data to its server by modifying just css, not even touching DOM, by adding background images for example. I don’t know if it’s even possible to design browser extensions system so extension effects are decently isolated.

                                                                  However, these exfiltration hacks might attract attention easier than plain XHR.

                                                                  1. 1

                                                                    Hmm, yes. I was mistakenly thinking of a theme as akin to rendering given HTML to a bitmap; when in fact it’s more like a preprocessor whose result is sent to the browser engine. With no way of distinguishing between original page content and extension-provided markup, you’re right that it’s easy to exfiltrate data.

                                                                    I can think of ways around this (e.g. setting a dirty bit on anything coming from the theme, or extending cross domain policies somehow, etc.) but it does seem like I was being a bit naive about how hard it would be.

                                                              3. 2

                                                                Theoretically, you could audit the GitHub repo (https://github.com/openstyles/stylus) and build it yourself. Unfortunately that doesn’t seem too feasable.

                                                                1. 1

                                                                  For this reason I install the absolute minimum extensions. I usually only have privacy badger installed as I’m fairly sure the EFF won’t sell out.

                                                              1. 1

                                                                I wouldn’t tell this “storytelling”, just a marketing trick to induce discussions in social media and to make the game look like it’s ever-changing and not static. “Battle royale” games are, perhaps, the most soulless things in the industry, after mobile games with in-app purchases. Moreover, Fortnite’s look-and-feel is directly borrowed from such mobile games.

                                                                1. 1

                                                                  Unfortunately, there are no details in this blog post how it’s used for GUI. Desktop GUI is non-standard use of clojure. I’m curious, what widget toolkit they are using, how they manage state, how they deal with boundary between imperative API in most GUI toolkits with (almost) pure core of app logic (hopefully). According to screenshots on the website, editor looks like it’s based on Eclipse or just using Eclipse’s SWT. Even binary download of their game toolkit is under login-gate.

                                                                  1. 6

                                                                    What are key differences between ActivityPub and RSS+WebSub/pubsubhubbub? Its spec is long and verbose, I can’t tell at a glance what does it represent. I see that it supports likes and subscription lists, but what are other differences to RSS? Does it support comments? Is it just for twitter-like websites, or suitable for blogs and reddit-like websites too?

                                                                    What I like in ActivityPub is that it’s RDF-based. It’s cool technology based on romantic ideas of expert systems, Prolog, rule-based AI, etc.

                                                                    1. 7

                                                                      Besides mastodon and pleroma which are twitter clones using ActivityPub, there’s also peertube for videos, PixelFed for images and Plume for blogging. Those projects are all pretty new though, so it’s too early to say whether ActivityPub works well for this kind of stuff, but it looks promising imo

                                                                      1. 1

                                                                        RSS+Webmention can be used to realize a very rudamentary version of federation (I’m currently developing a platform and testing simple federation using RSS+WM).

                                                                        However, ActivityPub allows much more versatility and provides the endpoint with a low-overhead, machine-readable version of actions (AP is not like RSS in that stuff operates as feeds, rather, it’s actors doing actions on other actors or objects)

                                                                      1. 3

                                                                        I experience pain of using it every time I have to edit i18n strings in Rails project. Even XML would be more convenient.

                                                                        Other markup formats with the same philosophy (multiple ways to represent things, indentation-based, concise) has similar problems.

                                                                        1. 6

                                                                          Can your editor not fold YAML? If not I highly recommend finding one that can.

                                                                        1. 4

                                                                          Stateless cryptography-based login tokens are also popular outside of JWT, for example Rails’s default session storage uses this approach (it also has handy MessageVerifier). So almost everything described in article applies to these session stores as well.