1. 10

    It’s beautiful, but it isn’t wget.

    It might be better to call it curl in 50 lines of C: It would still be a lie, but it would be less of a lie, and more descriptive, given that both programs sit on top of HTTP libraries which are intended to be reusable.

    As a piece of more constructive commentary, it would be useful for the library to export a function which parses URIs into their various components. The fact this toy program has to accept them in pre-chewed form indicates it’s precisely the kind of thing you want to hand off to external code.

    1. 6

      make phone calls, view weather data

      These two examples are not very good. You generally do want to use an API for these.

      Weather data is data. You’re not going to set up your own weather stations across the world :D

      Phone calls/SMS is an interaction with a complex external system. Back in the day at work we had a GSM modem attached via some thing to a computer to send internal alerts. It was… not the most reliable thing :) And I have no idea how you would do that at scale — business agreement with a phone carrier? who… would… give you… an API?

      1. 3

        Definitely a good point!

        Just for the sake of argument, wouldn’t it be interesting to set up weather stations around the world — or be part of a company that does?

        As for phone calls, I was initially thinking of Twilio, one of the classic hackathon APIs in my experience. Definitely not saying that they aren’t super useful if that’s what you want to do, just that people might get more out of focusing on building a telephone system prototype rather than hooking together API calls.

        I think in general I’m approaching this from a personal growth sort of viewpoint, if you’re trying to make the coolest product by all means use APIs!

        1. 2

          Just for the sake of argument, wouldn’t it be interesting to set up weather stations around the world — or be part of a company that does?

          Interesting in terms of finding problems to solve, sure. Not so interesting in terms of finding new problems to solve, in that weather stations already exist, systems which aggregate the data they collect already exist, and, in general, all of this work has been done.

          As for phone calls, I was initially thinking of Twilio, one of the classic hackathon APIs in my experience. Definitely not saying that they aren’t super useful if that’s what you want to do, just that people might get more out of focusing on building a telephone system prototype rather than hooking together API calls.

          You should be careful about disambiguating between interoperating with other systems to use resources which are by definition external (such as the public phone system) and interoperating with other systems to do work you could just as easily do internally. I agree that relying on external systems to run a PBX, which is by definition internal, is bad, but there’s literally no way to place an external call without… placing an external call, which necessarily involves an API you use to talk to some phone company.

      1. 1

        I think we should also have some twitch emojis because they help when your doing sarcasm a lot more.

        1. 2

          In my experience, the primary function of sarcasm on the Internet is retroactive: If someone says something which goes over badly, why, it was always sarcastic and you’re wrong for calling them on it!

          Therefore, the onus for sarcasm detection must always be on the other person.

          I’ve come up with two rules, which are obviously false because they give the game away:

          If I’m sarcastic and you fail to see it, you’re horrible at reading.

          If you’re sarcastic and I fail to see it, you’re horrible at writing.

          1. 1

            No your right. it’s up to the other person to figure out if your bring sarcastic or not.

        1. 8

          Is anyone aware of the kind of “slow and subtle” niches the author hopes for? Any slow and simple and modern design philosophies, techniques, tutorials, communities, etc?

          1. 16

            I’ve been doing simple web development on the side off and on. I’ve heard of the handmade network. I also like the how the Go community tends to build things, from an operational standpoint. You have the big things, like Docker, Kubernetes, and Mattermost which are big corporate things, but then you have smaller things, like linx, Hugo, or the various things built on boltdb.

            I’d start by removing “modern” as a hard requirement and look at how older, stable tech works.

            Any community where web development has mostly been in one place over the last 7 years probably has a lot of the basics covered already, and isn’t likely to be piling on the complexity in droves. My experiments in doing websites in Erlang (as opposed to Elixir) suggest that is one place where things seem to move slower. I suspect the Python web development is similar.

            Learn some old, mature tools, like make, bash, python, awk, graphviz or TCL/tk, and use them when you have task that fits them

            Build websites with as little JS as possible, just to see how far you can take forms and pages. Take time to evaluate how it works out over time, how the maintenance holds up, and so on.

            You might see what sorts of things the modern stacks are trying to compensate for, or realize that there is an easier way to solve a certain set of problems. Mining the past for ideas allows you too get a notion of the fundamental vs incidental complexity

            1. 5

              I’d start by removing “modern” as a hard requirement and look at how older, stable tech works.

              “Modern” means having options anyway.

              Back in the Old Days, large computers were the only option. They were great for large institutions with large problems or, at least, large endowments to effectively allow young programmers to build games on them, but if you wanted a small computer for something like process control or home office work or similar, you didn’t have that option. Vacuum tubes, and then discrete transistors, only got so small.

              ICs allowed us to make small computers, but they also allowed us to make big computers more efficient, because some problems require big computers, large amounts of compute concentrated in one location to grind away at a task, or large amounts of RAM or storage to handle huge amounts of data, or both.

              Similarly with graphics: We’ve gone from having command lines as the only option to having command lines coexisting with GUIs, each allowing the other to do what it does.

              Do some older practices get replaced? Yes, particularly in hardware. Nobody but a hobbyist would build a computer out of vacuum tubes these days. Cardstock is no longer a valid input mechanism. CRTs are no longer RAM. But progress is more about having options.

              1. 8

                To be fair, I’m not against using modern tech, just that if you want something simpler, sometimes older stuff is where it’s at. Not always, of course, but by comparing the old against the new, one can find where real progress has been made, and where something might just be the fad of the year.

                React, for example, seems to be acknowledged as a real improvement in the state of SPA in JS. It is certainly unlike most things that came before it on the JS side of things, though it seems kinda similar to IMGUI, and some people have drawn similarities to old Win32 code.

                1. 2

                  Thanks, I’ll check these out.

                2. 3

                  I’ve heard of the handmade network.

                  What does “handmade” mean? I read their manifesto, but I have no idea what criteria would be used to define which software falls under their umbrella. Is metafont handmade? Linux? The front page of Google? What about wordpress the software (and not the innumerable wordpress blogs)? All of these were created by a large amount of human effort over years of development. What would disqualify one of the other?

                  1. 2

                    The way I’ve understood is as a loose analogue for “artisnal”. Projects that can be created by a small team, rather than massive one. But I don’t speak for the group, so YMMV.

              1. 10

                If Firefox starts showing me ads I’m 100% abandoning the browser, period.

                1. 17

                  If Firefox starts showing me ads in the New Tab page, I’m 85% clicking on that little “(?)” icon, clicking “New Tab Preferences”, and un-checking a box or two.

                  But, I hope that if you end up running a browser made by an advertising company, you will at least savor the irony.

                  1. 5

                    Well, I abandoned chrome a long time ago and will certainly never return, if that’s what you’re getting at :)

                    Advertising is a slippery slope. I don’t care to play cat and mouse with a company that thinks it’s OK.

                    The real irony is that I (and probably many others) would be happy to pay for a browser…

                    1. 5

                      I’d be happy to pay for a high-quality browser too. But the industry doesn’t seem to be headed that way.

                      I’m curious where you’ll go. Vivaldi, Opera, and Brave all use the Blink rendering engine from Chromium. All the little WebKit-based browsers are beholden to Apple. Only Firefox has any independence or control of its code base, as far as I can tell.

                    2. 1

                      If Firefox starts showing me ads in the New Tab page, I’m 100% clicking on them, to support Mozilla.

                      But my new tab page is about:blank, I probably won’t see them :(

                      1. 1

                        Eh, given that Firefox has forced adware on its users in the past, I wonder if Mozilla isn’t an ad company at this point, if one which makes somewhat different kinds of deal.

                    1. 1

                      Making something impossible to configure makes it impossible to use if you’re disabled (or even less able) in some key way which hampers your ability to use the defaults. This is a form of bigotry, and must be stamped out wherever possible.

                      1. 3

                        Well, Jobs and Raskin agreed on one thing: They were both utterly opposed to people being able to customize their environments to be more pleasant (or, in fact, possible) for them to work in. That’s what I call the Design Disease: Thinking you know better than your users, and therefore forcing them to do things your way, even when they know a way that’s better for them, given the totality of their environment and workflow. It fits with the Cult of Mac, which can claim things “Just Work” for values of “Just Work” which necessitate building your entire environment out of parts sourced from a single company.

                        When that philosophy works, it works well. When it doesn’t, you’re the one holding it wrong.

                        1. 6

                          Hmm… literally all of the commercially successful platforms I can think of that target non-specialist users have adopted this philosophy to some extent. I mean MacOS (from before it was called that), PalmOS, Windows, iOS, Android… and now ChromeOS, which takes it to an extreme, and is what I usually recommend for young kids and grandparents, even though I really dislike Google the company. It’s just so much less pain for a computer non-specialist to use. In my experience, most people don’t want to “build an environment” at all. They just want a tool that they can understand enough to have it get out of their way while they get on with their work.

                          Meanwhile, the year of the linux desktop never came. The closest we have are big slick distros like Ubuntu, which are still way too complex, have too many breakable moving parts, for “regular folks” to be comfortable with – unless they’re especially motivated to learn the arcana. If they do climb up that learning curve, like you and I did, they inevitably accommodate to a whole bunch of idiosyncratic design decisions that went into things like shells and editors and network config: things that, in practice, nobody can redo.

                          The conclusion that I draw is that it’s a far greater failure to require your users to customize their environment before they can get on with whatever they want to be doing. For most people, computers have always been a means, not an end. I think it’s a pity how easily technical people lose sight of that.

                          1. 1

                            Your bigotry against the disabled is unwelcome here.

                            1. [Comment removed by author]

                              1. 4

                                I have re-read the commend you are replying to and cannot find any bigotry. Can you please highlight the quote where you see it?

                          1. 18

                            Some feedback:

                            I have seen many oil shell posts, but still don’t know what the heck the actual OIL language looks like.

                            1. 4

                              OK thanks, maybe I should link these at the very top of the “A Glimpse of Oil”:

                              http://www.oilshell.org/blog/tags.html?tag=osh-to-oil#osh-to-oil

                              They are linked somewhere in the middle, which is probably easy to miss.

                              It’s sort of on purpose, since Oil isn’t implemented yet, as I mention in the intro. But I think those posts give a decent idea of what it looks like (let me know if you disagree).

                              1. 7

                                I’ve seen your posts and hat around and never really understood what Oil was really about, but this link is really wonderful. The comparison to shell, the simplifications, the 4 different languages of shell vs the two of Oil, it all really clicked. Really cool project.

                                1. 3

                                  I agree with the others. Until I see what’s your vision for the language, I’m not motivated to get involved.

                                  The only example you give contains “if test -z $[which mke2fs]”, which can’t be what you’re aiming at.

                                  IMHO If you really want Oil to be easy to use, you should take as much syntax from Python or Javascript as you can. And use similar semantics too.

                                  1. 11

                                    I’m willing to be convinced that a new syntax would be better for shell programming.

                                    I’m not very confident that moving towards an existing non-shell scripting language will get us there.

                                    The problem I have with writing shell programs in some non-shell language is that I expect to keep using the same syntax on the command line as I do in scripts I save to disk, and non-shell languages don’t have the things that make that pleasant. For example, a non-shell language has a fixed list of “words” it knows about, and using anything not on that list is a syntax error. That’s great in Python, where such a word is almost certainly a spelling error, but in a shell, most words are program names and I don’t want my shell constantly groveling through every directory in my $PATH so it knows all my program names before I try to use them.

                                    I’ve also never seen a non-shell language of any type with piping and command substitution as elegant as bash and zsh, but I’m willing to be convinced. I’m afraid, though, anyone in the “Real Language” mindset would make constructions such as diff <(./prog1 -a -b) <(./prog1 -a -c) substantially more verbose, losing one of the main reasons we have powerful shells to begin with.

                                    1. 3

                                      Yes it has to be a hybrid. I talk a little about “command vs expression” mode in the post. I guess you’ll have to wait and see, but I’m aware of this and it’s very much a central design issue.

                                      Of course “bare words” behave in Oil just as they do in bash, e.g.

                                      echo hi
                                      ls /
                                      

                                      I will not make you type

                                      run(["echo", "hi"])
                                      

                                      :-)

                                      One of the reasons I reimplemented bash from scratch is to be aware of all the syntactic issues. Process substitution should continue to work. In fact I’ve been contemplating this “one line” rule / sublanguage – that is, essentially anything that is one line in shell will continue to work.

                                      Also, OSH and Oil will likely be composed, and OSH already implements the syntax you are familiar with. This is future work so I don’t want to promise anything specific, but I think it’s possible to get the best of both worlds – familiar syntax for interactive use and clean syntax for maintainable programs.

                                      1. 1

                                        For example, a non-shell language has a fixed list of “words” it knows about, and using anything not on that list is a syntax error. That’s great in Python, where such a word is almost certainly a spelling error, but in a shell, most words are program names and I don’t want my shell constantly groveling through every directory in my $PATH so it knows all my program names before I try to use them.

                                        tclsh is an interesting example of not having this problem.

                                        I’m afraid, though, anyone in the “Real Language” mindset would make constructions such as diff <(./prog1 -a -b) <(./prog1 -a -c) substantially more verbose, losing one of the main reasons we have powerful shells to begin with.

                                        You get constructs that look like this in pipey libraries for functional languages (the likes of fs2 or conduit), though they’re controversial.

                                        1. 1

                                          Well put. There’s also loads of muscle memory built up that is hard to leave behind. That point keeps me off of fish; I like almost everything else about it, but I don’t see why it can’t have a separate bash-like syntax.

                                        2. 2

                                          OK that’s fair. I’m on the fence about outside contributions – some people have contributed, but I think most projects have more users and more “bones” before getting major contributions. I’m really looking for people to test OSH on real shell scripts, not necessarily adopt it or contribute. (although if you can figure out the code, I applaud you and encourage your contributions :) )

                                          As I mention in the post, the OSH language is implemented (it runs real shell scripts), but Oil isn’t.

                                          There will be a different way to test if a string is empty, but for the auto-conversions, if you have [ -z foo ], it will become test -z foo. The auto-conversion is going to make your script RUN, not make it idiomatic.

                                          As far as appearance, you can definitely think of Oil as a hybrid between shell and Python/JavaScript.

                                          I can probably write up a cheatsheet for those curious. I haven’t really done so because it feels like promising something that’s not there. But since I’ve written so many blog posts, it might be worth showing something in the style of:

                                          https://learnxinyminutes.com/docs/bash/

                                      2. 0

                                        Yes and I don’t think I’ll care about it until I do. It could look like APL for all we know.

                                      1. 10

                                        Some of us miss native desktop applications that worked well. It’s tragic that desktop platforms are utterly non-interoperable and require near-complete duplication of every app. But at the same time not everyone is satisfied with the solution of “build them all as electron apps starting with a cross-platform browser base plus web technology for the UI”. I can sympathize with app developers who in no way want to sign up to build for 2 or 3 platforms, but I feel like berating dissatisfied users is unjust here. Try comparing a high quality native macOS app like Fantastical with literally any other approach to calendar software: electron, web, java, whatever. Native works great, everything else is unbearable.

                                        1. 8

                                          I think people are just tired of seeing posts like Electron is cancer every other day. Electron is here, people use it, and it solves a real problem. It would be much more productive to talk about how it can be improved in terms of performance and resource usage at this point.

                                          1. 3

                                            One wonders if it really can be improved all that much. It seems like the basic model has a lot of overhead that’s pretty much baked in.

                                            1. 2

                                              There’s a huge opening in the space for something Electron-like, which doesn’t have the “actual browser” overhead. I’m certain this is a research / marketing / exposure problem more than a technical one (in that there has to be something that would work better we just don’t know about because it’s sitting unloved in a repo with 3 watchers somewhere.)

                                              Cheers!

                                              1. 2

                                                There’s a huge opening in the space for something Electron-like, which doesn’t have the “actual browser” overhead.

                                                Is there? Electron’s popularity seems like it’s heavily dependent on the proposition “re-use your HTML/CSS and JS from your web app’s front-end” rather than on “here’s a cross-platform app runtime”. We’ve had the latter forever, and they’ve never been that popular.

                                                I don’t know if there’s any space for anything to deliver the former while claiming it doesn’t have “actual browser” overhead.

                                                1. 1

                                                  “re-use your HTML/CSS and JS from your web app’s front-end”

                                                  But that’s not what’s happening here at all - we’re talking about an application that’s written from the ground up for this platform, and will never ever be used in a web-app front end. So, toss out the “web-app” part, and you’re left with HTML/DOM as a tree-based metaphor for UI layout, and a javascript runtime that can push that tree around.

                                                  I don’t know if there’s any space for anything to deliver the former while claiming it doesn’t have “actual browser” overhead.

                                                  There’s a lot more to “actual browser” than a JS runtime, DOM and canvas: does an application platform need to support all the media codecs and image formats, including all the DRM stuff? Does it need always on, compiled in built-in OpenGL contexts and networking and legacy CSS support, etc.?

                                                  I’d argue that “re-use your HTML/CSS/JS skills and understanding” is the thing that makes Electron popular, more so than “re-use your existing front end code”, and we might get a lot further pushing on that while jettisoning webkit than arguing that everything needs to be siloed to the App Store (or Windows Marketplace, or whatever).

                                                  1. 2

                                                    But that’s not what’s happening here at all - we’re talking about an application that’s written from the ground up for this platform, and will never ever be used in a web-app front end. So, toss out the “web-app” part, and you’re left with HTML/DOM as a tree-based metaphor for UI layout, and a javascript runtime that can push that tree around.

                                                    Huh? We’re talking about people complaining that Electron apps are slow, clunky, non-native feeling piles of crap.

                                                    Sure, there are a couple of outliers like Atom and VSCode that went that way for from-scratch development, but most of the worst offenders that people complain about are apps like Slack, Todoist, Twitch – massive power, CPU, and RAM sucks for tiny amounts of functionality that are barely more than app-ized versions of a browser tab.

                                                    “Electron is fine if you ignore all of the bad apps using it” is a terribly uncompelling argument.

                                                    1. 1

                                                      Huh? We’re talking about people complaining that Electron apps are slow, clunky, non-native feeling piles of crap.

                                                      Sure, there are a couple of outliers like Atom and VSCode that went that way for from-scratch development, but most of the worst offenders that people complain about are apps like Slack, Todoist, Twitch – massive power, CPU, and RAM sucks for tiny amounts of functionality that are barely more than app-ized versions of a browser tab.

                                                      “Electron is fine if you ignore all of the bad apps using it” is a terribly uncompelling argument.

                                                      A couple things:

                                                      1. Literally no one in this thread up til now has mentioned any of Slack/Twitch/Todoist.
                                                      2. “Electron is bad because some teams don’t expend the effort to make good apps” is not my favorite argument.

                                                      I think it’s disingenous to say “there can be no value to this platform because people write bad apps with it.”

                                                      There are plenty of pretty good or better apps, as you say: Discord, VSCode, Atom with caveats.

                                                      And there are plenty of bad apps that are native: I mean, how many shitty apps are in the Windows Marketplace? Those are all written “native”. How full is the App Store of desktop apps that are poorly designed and implemented, despite being written in Swift?

                                                      Is the web bad because lots of people write web apps that don’t work very well?

                                                      I’m trying to make the case that there’s value to Electron, despite (or possibly due to!) it’s “not-nativeness”, not defending applications which, I agree, don’t really justify their own existence.

                                                      Tools don’t kill people.

                                                    2. 1

                                                      we’re talking about an application that’s written from the ground up for this platform, and will never ever be used in a web-app front end.

                                                      I’m really not an expert in the matter, just genuinely curious from my ignorance: why not? If it is HTML/CSS/JS code and it’s already working, why not just uploading it as a webapp as well? I always wondered why there is no such thing as an Atom webapp. Is it because it would take too long to load? The logic and frontend are already there.

                                                      1. 2

                                                        I’m referring to Atom, Hyper, Visual Studio Code, etc. here specifically.

                                                        I don’t think there’s any problem with bringing your front end to desktop via something like Electron. I do it at work with CEFSharp in Windows to support a USB peripheral in our frontend.

                                                        If it is HTML/CSS/JS code and it’s already working, why not just uploading it as a webapp as well?

                                                        I think the goal with the web platform is that you could - see APIs for device access, workers, etc. At the moment, platforms like Electron exist to allow native access to things you couldn’t have otherwise, that feels like a implementation detail to me, and may not be the case forever.

                                                        no such thing as an Atom webapp

                                                        https://aws.amazon.com/cloud9/

                                                        These things exist, the browser is just a not great place for them currently, because of the restrictions we have to put on things for security, performance, etc. But getting to that point is one view of forward progress, and one that I ascribe to.

                                                2. 1

                                                  I can think of a number of things that could be done off top of my head. For example, the runtime could be modularized. This would allow only loading parts that are relevant to a specific application. Another thing that can be done is to share the runtime between applications. I’m sure there are plenty of other things that can be done. At the same time, a lot can be done in applications themselves. The recent post on Atom development blog documents a slew of optimizations and improvements.

                                              2. 4

                                                It’s tragic that desktop platforms are utterly non-interoperable and require near-complete duplication of every app.

                                                It’s a necessarily sacrifice if you want apps that are and feel truly native that belong on the platform; a cross-platform Qt or (worse) Swing app is better than Electron, but still inferior to the app with a UI designed specifically for the platform and its ideals, HIG, etc.

                                                1. 1

                                                  If we were talking about, say, a watch vs a VR system, then I understand “the necessary sacrifice” - the two platforms hardly have anything in common in terms of user interface. But desktops? Most people probably can’t even tell the difference between them! The desktop platforms are extremely close to each other in terms of UI, so I agree that it’s tragic to keep writing the same thing over and over.

                                                  I think it’s an example of insane inefficiency inherent in a system based on competition (in this case, between OS vendors), but that’s a whole different rabbit hole.

                                                  1. 2

                                                    I am not a UX person and spend most of my time in a Terminal, Emacs and Firefox, but I don’t think modern GUIs on Linux (Gnome), OS X and Windows are too common. All of them have windows and a bunch of similar widgets, but the conventions what goes where can be quite different. That most people can’t tell, does not mean much because most people can’t tell the difference between a native app and an electron one either. They just feel the difference if you put them on another platform. Just look how disoriented many pro users are if you give them a machine with one of the other major systems.

                                                    1. 1

                                                      I run Window Maker. I love focus-follows-mouse, where a window can be focused without being on top, which is anathema to MacOS (or macOS or whatever the not-iOS is called this week) and not possible in Windows, either. My point is, there are enough little things (except focus-follows-mouse is hardly little if that’s what you’re used to) which you can’t paper over and say “good enough” if you want it to be good enough.

                                                  2. 2

                                                    It’s tragic that desktop platforms are utterly non-interoperable and require near-complete duplication of every app.

                                                    There is a huge middle ground between shipping a web browser and duplicating code. Unfortunately that requires people to acknowledge something they’ve spent alot of time working to ignore.

                                                    Basically c is very cross platform. This is heresy but true. I’m actually curious: can anyone name a platform where python or javascript run where c doesn’t run?

                                                    UI libraries don’t need to be 100% of your app. If you hire a couple software engineers they can show you how to create business logic interfaces that are separate from the core services provided by the app. Most of your app does not have to be UI toolkit specific logic for displaying buttons and windows.

                                                    Source: was on a team that shipped cross platform caching/network filesystem. It was a few years back, but the portion of our code that had to vary between linux/osx/windows was not that big. Also writing in c opened the door for shared business logic (api client code) on osx/linux/windows/ios/android.

                                                    Electron works because the web technologies have a low bar to entry. That’s not always a bad thing. I’m not trying to be a troll and say web developers aren’t real developers, but in my experience, as someone who started out as a web developer, there’s alot of really bad ones because you start your path with a bit of html and some copy-pasted javascript from the web.

                                                    1. 1

                                                      There’s nothing heretical about saying C is cross-platform. It’s also too much work for too little gain when it comes to GUI applications most of the time. C is a systems programming language, for software which must run at machine speed and/or interface with low-level machine components. Writing the UI in C is a bad move unless it’s absolutely forced on you by speed constraints.

                                                    2. 1

                                                      It’s tragic that desktop platforms are utterly non-interoperable and require near-complete duplication of every app.

                                                      ++ Yes!

                                                      Try comparing a high quality native macOS app like Fantastical with literally any other approach to calendar software: electron, web, java, whatever. Native works great, everything else is unbearable.

                                                      Wait, what? I think there’s two different things here. Is Fantastical a great app because it’s written in native Cocoa and ObjC (or Swift), or is it great because it’s been well designed, well implemented, meets your specific user needs, etc? Are those things orthoganal?

                                                      I think it’s easy to shit on poorly made Electron apps, but I think the promise of crossplatform UI - especially for tools like Atom or Hyper, where “native feeling” UI is less of a goal - is much too great to allow us to be thrown back to “only Windows users get this”, even if it is “only OS X users get this” now.

                                                      It’s a tricky balancing act, but as a desktop Linux user with no plans to go back, I hope that we don’t give up on it just because it takes more work.

                                                      Cheers!


                                                      PS: Thanks for the invite, cross posted my email response if that’s ok :)

                                                      1. 2

                                                        Wait, what? I think there’s two different things here. Is Fantastical a great app because it’s written in native Cocoa and ObjC (or Swift), or is it great because it’s been well designed, well implemented, meets your specific user needs, etc? Are those things orthoganal?

                                                        My personal view is that nothing is truly well designed if it doesn’t play well and fit in with other applications on the system. Fantastical is very well designed, and an integral part of that great design is that it effortlessly fits in with everything else on the platform.

                                                        “Great design” and “native” aren’t orthogonal; the latter is a necessary-but-not-sufficient part of the former.

                                                        1. 1

                                                          “Great design” and “native” aren’t orthogonal; the latter is a necessary-but-not-sufficient part of the former.

                                                          Have to agree to disagree here, I guess. I definitely can believe that there can be well-designed, not-native application experinces, but I think that depends on the success and ‘well-designed-ness’ of the platform you’re talking about.

                                                          As part of necessary background context, I run Linux on my laptop, with a WM (i3) rather than a full desktop manager, because I really didn’t like the design and cohesiveness of Gnome and KDE the last time I tried a full suite. Many, many apps that could have been well designed if they weren’t pushed into a framework that didn’t fit them.

                                                          I look at Tomboy vs. Evernote as a good example. Tomboy is certainly well integrated, and feels very native in a Gnome desktop, and yet if put next to each other, Evernote is going to get the “well-designed” cred, despite not feeling native on really any platform it’s on.

                                                          Sublime Text isn’t “native” to any of the platforms it runs on either.

                                                          Anyway, I feel like I’m losing the thread of discussion, and I don’t want to turn this into “App A is better than App B”, so I’ll say that I think I understand a lot of the concerns people have with Electron-like platforms better than I did before, and thank you for the conversation.

                                                          Cheers!

                                                    1. 4

                                                      Better link: https://web.stanford.edu/~jurafsky/slp3/

                                                      This is a draft, and an incomplete one at that, and it’s generally nicer to link to a webpage instead of a PDF, because webpages have more context.

                                                        1. 5

                                                          I think one of the differences here is that the OP is about how it’s easier for him to analyze his own stuff with plaintext, whereas these are about why plaintext is difficult with user facing stuff.

                                                          1. 3

                                                            There’s an odd tendency for things to get simple, then hard, then simple again:

                                                            Back in the Before-Before, there was no text on computers. Simple.

                                                            A bit later than that, there was text on computers, but, to a first approximation, it never traveled very far. This was the world ASCII was made for: The American Standard Code for Information Interchange. Other countries could (and did) make their own standards, and except for a sad few mailing tapes around, things tended to work. Everyone came around to using ASCII, except for IBM, and the world was fairly happy.

                                                            International networking made things difficult. Latin-1, from 1987, and similar eight-bit standards solved parts of the problem, but not the whole thing. For one thing, it was impossible to automatically detect which standard a document had been written in, which is why web browsers offer a little menu which lets people manually set the encoding the browser will use to display a given page. I got real familiar with that little menu in the 1990s.

                                                            Then Unicode came along and few people cared. 16 bit? Shove it in your ear! That’ll break all my software, you damn dirty hippies. Learn a normal language like the rest of us.

                                                            Then UTF-8 ate the world, except for Microsoft and Java, and things got a lot simpler very quickly.

                                                          1. 37

                                                            More like “LinkedIn considered broken”?

                                                            1. 9

                                                              yes, just because some website doesn’t accept your valid TLD doesn’t mean your valid TLD is badj, it means that website is bad.

                                                              1. 5

                                                                I’d try “cleverness considered stupid”: Had Linkedin gone for the simpler route of not trying to validate something it doesn’t know how to define, it wouldn’t have this problem. Trying to “validate” email addresses works out the same way: foo%bar@3com.com and "I\ Love\ Bees"."Don't\ You"@[127.0.0.1] are both valid email addresses.

                                                                (Or maybe this should be called the “Spinal Tap Axiom”: “It’s such a fine line between stupid and clever.”)

                                                              1. 8

                                                                Since it’s possible to “make it” by working yourself to the bone, it’s essentially your own damn fault if you don’t, and you deserve what pittance you may be left with.

                                                                This is dogmatic revealed truth for some people.

                                                                Take “God never gives you more than you can handle” literally enough, and if you aren’t handling something, well, you must not be trying hard enough, eh? Worse things happen at sea, you know! (That’s called the Fallacy of Relative Privation, for those playing along at home.)

                                                                Add in “God helps those who help themselves” and sprinkle in a bit of “God answers prayer” and you got a nice little philosophy, where nobody who deserves to be brought up can ever, or will ever, be kept down, and everyone who deserves to rise, is going to, as long as they work hard enough.

                                                                And you can prove it all with anecdotes, and if those anecdotes never happened, well, they’re True in a philosophical sense, and that’s what matters.

                                                                1. 6

                                                                  What is rather sad about this pet philosophy is that it isn’t really properly supported by the Bible as such. For instance, “God helps those who help themselves” never appears in the Bible. Prayer isn’t ever guaranteed to make a situation move the way you’d like it to in Scripture either. Popular aphorisms and attitudes are a poor way to approach life, missing out on the more subtle, important details.

                                                                  1. 5

                                                                    nobody who deserves to be brought up can ever, or will ever, be kept down, and everyone who deserves to rise, is going to, as long as they work hard enough

                                                                    The immediate contrapositive, of course, being that if someone isn’t successful, it’s because they didn’t work hard enough; a belief which is all of obviously false on the face of it, incredibly widely believed, and incredibly damaging.

                                                                  1. 2

                                                                    Reminds me of the classic DWIM, a story which comes with a warning:

                                                                    http://www.catb.org/jargon/html/D/DWIM.html

                                                                    Warren Teitelman originally wrote DWIM to fix his typos and spelling errors, so it was somewhat idiosyncratic to his style, and would often make hash of anyone else’s typos if they were stylistically different. Some victims of DWIM thus claimed that the acronym stood for ‘Damn Warren’s Infernal Machine!’.

                                                                    In one notorious incident, Warren added a DWIM feature to the command interpreter used at Xerox PARC. One day another hacker there typed delete *$ to free up some disk space. (The editor there named backup files by appending $ to the original file name, so he was trying to delete any backup files left over from old editing sessions.) It happened that there weren’t any editor backup files, so DWIM helpfully reported *$ not found, assuming you meant 'delete *'. It then started to delete all the files on the disk! The hacker managed to stop it with a Vulcan nerve pinch after only a half dozen or so files were lost.

                                                                    The disgruntled victim later said he had been sorely tempted to go to Warren’s office, tie Warren down in his chair in front of his workstation, and then type delete *$ twice.

                                                                    1. 7

                                                                      Let’s see. The reasons have to do with Τεχ, with those character encodings that were used before utf8 took over, because it’s difficult to find on an unfamiliar keyboard, because of something to do with Spanish and Portuguese, and because people misprint it. Right? That’s a fair summary?

                                                                      I don’t see any point in using tilde. Home directories on multuuser servers have disappeared.

                                                                      But those are hilariously weak reasons to stop. Τεχ is dead, so are those character encodings, most typing is done on familiar keyboards, if I were to stop doing things because they’re difficult in some other language (even just ones I’ve half-learned for a vacation) I’d have to change both my first and last name, and as for misprints the tilde is a minor detail. Many pages today have more difficult URLs. The URL of the page you’re reading includes the character sequence “dlk8d1” and orgies of “…?…=…&q=…” are normal.

                                                                      1. 17

                                                                        Τεχ is dead

                                                                        … what?

                                                                        1. 16

                                                                          Home directories on multuuser servers have disappeared.

                                                                          The first one has been around for a while, while the last two are sort of new and are attempts of taking the Internet back…

                                                                          1. 12

                                                                            Home directories on multuuser servers have disappeared.

                                                                            IME many university/college sites use this. FWIW my university uses this for course sites (e.g. http://___.ca/~csXXX/)

                                                                          1. 4

                                                                            I like that someone named Goetz is advising against taking the law into your own hands.

                                                                            1. 2

                                                                              Wow I would not have gotten that reference if you had posted it earlier than last night!!!

                                                                              I read the chapter of this book about Bernhard Goetz last night:

                                                                              https://en.wikipedia.org/wiki/I_Wear_the_Black_Hat

                                                                              I know there is a name for this phenomena, where once you know about something, you start seeing it around. But that is a little uncanny!

                                                                              1. 3

                                                                                I know there is a name for this phenomena, where once you know about something, you start seeing it around.

                                                                                Frequency Illusion, more commonly called the Baader-Meinhof Phenomenon.

                                                                                https://rationalwiki.org/wiki/Frequency_illusion

                                                                                1. 5

                                                                                  I have the bad feeling that I will start seeing this happening to me more frequently from now on…

                                                                              2. 1

                                                                                Now that’s a reference that not many people will get ;)

                                                                                1. 3

                                                                                  It was a big deal! Billy Joel sang about it! :p

                                                                              1. 5

                                                                                We shouldn’t have to manually disable anything to not have random information sent elsewhere.

                                                                                I expect better from the Mozilla Foundation, and consider this a violation of trust.

                                                                                  1. 10

                                                                                    … how in the world is Microsoft going to extinguish SSH? How can Microsoft extinguish core infrastructure in widely-used OSes they have no control over?

                                                                                    1. 14

                                                                                      Don’t question the meme.

                                                                                      1. 3

                                                                                        There’s lots of potential extensions to standards in CompSci that improve pain points that exist anywhere from individual use to enterprises. They could do an extension for one of those they buy or tweak a bit to slap a patent on. Obfuscate it a bit, too. Then, they deliver that advantageous benefit in their version. It gets widespread after a Windows release or two. Once people are locked into it, they can extend it in some new ways. Maybe some cool tricks like SSH proxies for Microsoft applications, VPN’s into their cloud, or something for Xbox Live like people used to do with LogMeIn Hamachi. They might even be cross-licensing it to third parties. Those might have already built stuff on it since it’s in Windows at no cost to them.

                                                                                        You’re not on open-source SSH any more with those applications. Now, you’re depending on their tech that plays by their rules on their paid platforms. It’s also called SSH so anyone Googling for SSH on Windows might find the “genuine software.” ;)

                                                                                        1. 3

                                                                                          It gets widespread after a Windows release or two.

                                                                                          Here’s the point which doesn’t add up. It won’t become “widespread” beyond the desktop world.

                                                                                          A lot of things are widespread in the Windows world and not really beyond it, so Microsoft could do this to those things, but SSH is not one of them, and is not going to become one of them.

                                                                                          I’m aware of Embrace, Extend, Extinguish. I was alive and aware in the 1990s. I’m also alive and aware in a world where Linux and Open Source in general is so widespread that it isn’t going away.

                                                                                      2. 5

                                                                                        Isn’t that the GNU philosophy? ;)

                                                                                        1. 2

                                                                                          They are pretty similar in mechanism haha.

                                                                                      1. 3

                                                                                        Oh, yes. This is a good article indeed. It’s important to realize that supercomputers are, primarily, very specialized systems, perhaps more specialized than some embedded systems in terms of what kinds of code it makes sense to run on them.

                                                                                        The optimization tips here are still more useful, and I think it’s a shame we don’t teach optimization as its own class. In addition to the practical use, it would complement existing classes in hardware design and OS design, not to mention dovetailing nicely into the algorithmic analysis class.

                                                                                        1. 3

                                                                                          The optimization tips here are still more useful, and I think it’s a shame we don’t teach optimization as its own class. In addition to the practical use, it would complement existing classes in hardware design and OS design, not to mention dovetailing nicely into the algorithmic analysis class.

                                                                                          I think the biggest problem there is that most of these people have learned coding, but never went through CS education (of any notable capacity, inside and outside of university).

                                                                                          I love the focus on back-of-the-envelope calculations. Most programs don’t need to be planned rigidly before implementation, but drawing a rough area where you expect to land helps a lot. This is one of the things I usually teach in the context of database query optimisation: putting rough gauges on all the features of the DB.

                                                                                        1. 1

                                                                                          starting with version 58 Firefox will block attempts to fingerprint users using the HTML5 canvas element.

                                                                                          [snip]

                                                                                          Canvas fingerprinting works by loading a canvas HTML tag inside a hidden iframe and making the user’s browser draw a series of elements and texts. The resulting image is converted into a file hash.

                                                                                          Interesting. I wonder if Chrome will follow suit.

                                                                                          The only downside is that it presents users with a popup. If the answer defaults to “disallow canvas”, a lot of sites using canvas will fail pretty much automatically, as people click the popup out of sheer habit, and if the answer defaults to “allow canvas”, the security fails.

                                                                                          1. 4

                                                                                            Disallow reading from canvas, which is not used by most legitimate usages of canvas. I think they might even soft fail, i.e. return a blank single color image.

                                                                                            1. 2

                                                                                              This is a pretty common thing to do if you’re doing things like an online image editor. Or (for example) if you want to do a “Share” button in your game, you could take a screenshot and use that image in the post.

                                                                                              It would make total sense to have the popup ask “This site is trying to screenshot your window”-style things.

                                                                                              1. 1

                                                                                                Disallow reading from canvas, which is not used by most legitimate usages of canvas.

                                                                                                Interesting. I didn’t know that.