Wednesday, April 26, 2017

Apparently my personal circle of hell will be nothing but fighting Java/Typescript/Flow/etc. packager-loaders, eternally failing to get my modularised code to actually be consumable at all by any actual freaking web page. Heaven knows I've already wasted half an eternity failing with everything: rollup, webpack, browserify, you name it.

Sunday, April 23, 2017

Software is hard. Design is hard. But that doesn't really mean I don't dislike just about anything and everything to do with JavaScript, especially packaging.
I know, I know, error detection, handling, and messaging is hard. I know.

but...

$ yarn --no-color --no-progress help
yarn install v0.23.2
error `install` has been replaced with `add` to add new dependencies. Run "yarn add help" instead.
info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.


When in fact the problem turned out to be more that it doesn't understand/support "--no-color" etc. (Which, of course, is just the kicker to the boy parts, that it doesn't have that feature.)
I guess my locally installed version of npm (3.5.2) is just too unhip to not be a piece of littering junk? If any of the whipper-snappers who worked on all this JavaScript crap ever had used Emacs, they would have already learned the hard way about twiddle files, and would have known better when it came to making npm.

Saturday, April 22, 2017

Reason 7 that the aliens are staying clear away from Earthlings: Modules in Typescript. (Or Flow. Or Node. Or Javascript. Or any ECMAScript. Or anything remotely related to interopping with Javascript. AFAICT.)
It is really quite remarkable that all programming languages to date really, really suck.

I mean deeply, deeply suck. All of them.

One way or another. If you care about Good vs. Just Sort of Good Enough Once You Become Inured to the Shit. Cf. any "the Good Parts" type analyses of programming languages. I am a programming language polyglot nerd wannabe, so I've used or tried or read about: Java, Python, Scala, C/++, C#, F#, Haskell, ML, Common Lisp, {Bigloo,Gambit,Chicken} Scheme, Racket, Typed Racket, Lua, Typed Lua, Clojure, Typed Clojure, Ocaml, JavaScript, Typescript, Flow, Perl, Objective-C, Swift, Groovy, Go, Bash, BASIC, Forth, Logo, Scratch, Haxe, Erlang, and many others (Shen, ATS, Purescript, Parenscript, Kona, Opa, Elm, ...). And. They. All. (at least kinda) Suck. One way or another, they either have too much or too little or just not the right stuff. How many people have sunk how many hours into how many programming languages, only to see that they all suck? Is it really that hard a problem? Well, yes, yes it is, I guess, since it has been empirically proven ever over.

(Of course, we are talking about things that are made by humans, so given that we apparently as a species cannot even get the concept and implementation of something as fundamental as the "back button" to be not entirely hateful across our UIs and our UXs, be it Web or Desktop or Android or iOS or anything, well, then I guess I can't be too surprised when anything more complicated is a cockup as well.)

Still, since I like to tilt at windmills and shake my input device at the sky (see, I prefer trackballs generally over mice or touchpads) and think that I could probably do a better job than gosh all the people who have done all this before, so ha ha I wish I were filthy rich so I could hire smart people to listen to my ideas and UX critiques, in an effort to build a language that truly Sucked a Lot Less. (I am not smart enough to make something that Really Doesn't Suck, I am just a Type  2 person*; the Doesn't Suck has to be left up to the Type 3 people.)

Some key word bullet points about the requirements I'd have, anyway: Cycle time. Static type checking. Type inference. JavaScript backend/interop. Livecoding. Coding from null in the debugger. REPL. Hot reload. Timetravel debugger. Tierless. Ocaps. FP. Exhaustive multimethods. Shape-typed concatenative. CoreTalk. Subtext. (I should probably just give up and go become a discipe of Light Table and/or Eve, at least for now, I guess?)







* 1st type: don't even know shit is shit, even if you rub their nose in it (apparently, most people on earth, frankly - cf. anybody who disagrees with this post).
2nd type: know what shit is when they come across it (they probably read The Design of Everyday Things at least twice), and wanna fix it, and have some useful ideas - but mostly can't invent the mega advanced futuristic dope smokin' hyper best gordian knot super genius better abstraction type fix, even if they think they can (cf. Zed Shaw, myself, et. al.).
3rd type: have become one with the matrix and can do that sick shit (cf. Brett Victor, Mr. Barbour, Paul Phillips, Oleg du Haskell, Alan Kay, Chris Granger, et. al.)

Tuesday, April 18, 2017

For me, there's a certain basic set of things I want tfor
Stackoverflow is, at some level, genius, yes! But the core UX of putting in a question or answering one, is a blatant, mighty train wreck when it comes to UX. If you ask me. And not the kind of train wreck where the train was a freight train carrying soap bubbles or jelly beans or tribbles or free flu shots or gideon's bibles where everybody would come look at the train wreck and be able to walk away with a happy feeling. Nor a train wreck that was full of oligarchs we'd be better off without. No, a train wreck where the train was carrying nothing but, I dunno, human excrement or something. I mean how can just being able to put code into a question or answer be such utterly fubar UX? You know, it isn't as if that is a core competency the UI should succeed at or anything.
I Just Threw Up In My Mouth Department: The Typescript Playground's way of sharing code.
Chances are I hate whatever you did for the whole "forgot password" workflow in your web site or app. And I really have to underscore the 'hate' part. I mean, this should not be rocket science by now. Do not the people who implement this abominations ever need to use such a ux themselves?! Where they'd, you know, realize how stupid broken wrong painful useless annoying hateful it all is?

Why should I ever have to retype my email address, for one example.

Sunday, April 16, 2017

I guess from my perspective, JavaScript has broken and ruined everything, since it is sort of a requirement to support it, in this day and age. And it is not a language I enjoy having to be anywhere near, since I am more of a strict static typing kind of nerd. Any and all of the things that I've ever investigated towards doing it better or less bad have pretty much been epic failures to me, for my purposes, based on my value system. Ack. Barf.
It is funny in a sick to my stomach kind of way rather than a ha-ha kind of way that pretty much all programming environments I have ever had to use or tried to use have been chock full of epic failures end to end. Maybe if all the people who are making yet another programming ecosystem would work together to fix whatever we have, we'd be better off? Of course we wouldn't be, since I get the feeling most of the time humans, and especially programming type humans, really don't grok ux. Or at least not ux in any way that makes any sense to me. I should just give up and see if writing stupid little games in SBCL that only run on my particular Linux box would be any fun. I can't stomach JavaScript, or Flow, or Typescript, or Purescript, or F#/Fable/WebSharper, or or or...
Unix shells are full of little joyful morsels of completely dog excrement. Like how bash epically fails to have history mechanism that isn't broken in dumb ways. Complete insanity. I tried fish and it had at least one of the same ux bugs: I paste in a command with ctrl+insert, and that command does not go into the history. Is it some kind of readline hell or something, I dunno. Unix sucks I guess.

Saturday, April 15, 2017

wtf


Every time npm changes my package.json file indentation to be wrong, an angel gets run over by a truck. Repeatedly. And then pushed through a wood chipper. And then forced to listen to a Classic Rock, or maybe Easy Listening FM radio station.

(How is this acceptable? I just don't know.)

Thursday, April 13, 2017

It kind of kills me that things like MultiMC are written in Java but aren't, apparently, configured to show hidden items in the Java/Swing based file open dialog. Because, you know, it is not as if anybody has a ".minecraft" folder they'd be interested in.

Wednesday, April 12, 2017

It does/not surprise me that things like the Minecraft multiplayer mod hack worlds actually succeed. Does because the entire UX of Minecraft itself sucks and then the mods are 10x worse; Does because the extensions they add to the game are broken bad hacks with no clue about multiuser distributed asynchronous concurrent race condition type behaviour: I sent a party invite, and the recipient gets it and types the command to accept and their server tells them there's no such invite?! And when I try to re-send the invite it says either that I can't invite that player (with no real reason why so I could have a hope of figuring out how to do whatever I need to do to get it to ever work), or that I've already invited them, etc. All in all complete standard epic utter failure of the feature in just about every possible way.

(Does not because I guess Minecraft is sufficiently addicting that if the poorly designed, poorly implemented features work I dunno 51% of the time then that's Good Enough. It ain't like anybody is, you know, paying real money for this stuff.)

Monday, April 10, 2017

Is it not kind of insane that (as of Ubuntu 14.04 LTS anyway) the GIMP xcf file format is not groked by default by the other tools e.g. Nautilus or Image Viewer?!
I guess the GIMP's UI makes sense if you are some alien brainiac who is also trying to avoid patent infringement lawsuits or something? Or you just! Do! Not! "Get"! Usability! (At! All!). It sure as heck often doesn't make diddly sense to me other than as a fine example of cramming in a zillion Ways Not To Do It in a single program.

But, yes, on the whole, my life is better with it than without it, that is for sure.
There are some features that are pushed as super great, but they are sort of indications of a hack to me. They point out that the idea was not carried out to be a more fundamental feature. So e.g. I can alias "cat" but I can't alias ">" to help makes sure a backup copy of a file is made first. Sure I understand therein be dragons and complexity and edge cases, which I think only underscores the point that if there's a good idea (aliasing commands) then if it is not done at a deeper, more fundamental, more first class, more semantic, more universal level then it is kind of a sad hack. There are things which cannot be properly, cleanly, nicely resolved by just another layer of abstraction, believe it or not.
Any file system where I can screw myself with ">" instead of ">>", etc., is a piece of evil stupid wrong junk, if you ask me. Pure vomit. This is not acceptable UX in this day and age. VMS (et. al.) got this less horribly wrong, decades ago. The whole "worse defeats better somehow seemingly ever and always" makes me mad. (No, extundelete does not redeem the situation on Linux at all.)
I don't know, it is probably "just a unix thing you wouldn't understand" but the fact that I can copy from app and then try to paste in another and... nothing happens, or the wrong random weird thing gets pasted (you know, selection vs. clipboard vs. whatever else) and how is this not just plainly obviously grounds for immediate termination of that entire ecosystem?! Ugh.

Sunday, April 9, 2017

Some things push UI and thus UX into new, good, territory. Like when the almost entirely touch based iPhone first came out. Other things, in my mind, push UI and thus UX more towards a regressive dark ages. Like when scroll bars disappeared and/or became really skinny small in Mac OS X. Or when Gnome decided that left-click in a scroll bar shouldn't page down any more but go directly to the click. Or when Mac OS X decided the maximize button should mean full screen rather than plain old maximize. Or when Google Voice decided there should no longer be a way for me to easily delete / clean up the visual clutter of all the old useless conversations. Or when Asana turned evil. I think there's some kind of jumping the shark that happens, for various reasons: Sometimes because some person apparently thinks it really is a good idea, or that they can "make their mark" on the world that way, I guess. Or maybe all the millennials are wanting everything full screen all the time according to the data that Apple has reaped and so that's why they changed it, and I just don't see eye to eye with the kids on my lawn when it comes to UX.
Until we get rid of the UX hell that is modal dialogs, I don't think we deserve to ever get off of this planet.

Saturday, April 8, 2017

My personal experience with things like Flow, Typescript, Typed Lua, and other things I've read from other people, leads me to kind of think that the whole "gradual typing" thing is a ton of b.s. snake oil. At least for language ecosystems that were not developed from birth with it in mind, in place.

I mean the idea that you can take some dynamic code and magically turn it into statically typed stuff one little bit at a time seems empirically very unrealistic: it is the old pulling a thread from a sweater thing; the old domino theory thing; the old fool me once thing; the old pull my finger thing; where once you start you cannot stop (if you want the static checker to, you know, accept the code) before putting in all sorts of even more extensive annotations. Or, hacked typecasts to try to prevent the checker from doing the kind of checking it was built to be able to do. Etc.
One particularly bad class of UX bugs is end-to-end problems, such as having an image in GIMP with transparency, that looks fine in ODT and PDF format, but when printed to an SVG file suddenly has blackness instead of transparency. The paper cuts from place to place all add up to make life kind of a living heck. There's some circle of hell where people are forced to do desktop publishing for eternity.
What we need is subtlety in our UX, and lots of it!

Consider how, apparently, Libre Office Writer (I know, I know: "You are using Libre Office? Well, there's your problem!" as Click & Clack would say) is set up to always "helpfully" underline internet looking text (hyperlinks, email addresses) as well as set the font color to blue. Which I hate and don't want, ever. Even if it doesn't show up when printed out. I don't want it happening anywhere in my use of the damnable program.

Or, uh, when in Draw I am trying to right-click on some selected text to get a chance to set the font, which I just did a minute ago this way, and now instead of the right-click menu I saw before I am getting some other one that has spelling correction suggestions that are wrong, irrelevant, broken, and dumb since the text is a hyperlink & email address... yay.

So it is not helping. It is not context-sensitive magic nirvana. It is annoying heck!

And then the things that I do want are missing. Like in other drawing apps when I copy then paste then move, then paste again, the 2nd paste is moved 2x as far as the 1st one was, so I can simply keep on pasting to make a series of things, all equally spaced, very easily. Which turns out to mostly be what I want, go figure.
Ok, I guess there might be just about nothing more annoying to me in technological life than when my android cell phone doesn't "accept" swipe gestures I am doing e.g. to unlock it. As if the thing being gestured away got a lot "heavier", it moves only a little and then rebounds back. I have to do it like 4 times and then it goes. "Maybe I curse too much in my head." Or, speaking for myself, out loud.
It seems sort of like capricious silly bad UX to me to have "Sign in" rather than "Log in" or "Login" on your web page since it empirically takes me more time to notice that since I am normally trying to find the latter forms of what I want.

Friday, April 7, 2017

I guess between Perl and JavaScript, I am pretty sure I have leaned that TMTOWTDI is a four letter concept.
Have I mentioned recently how much of a train wreck the entire JavaScript ecosystem is? And how people have been (had to?) piling more carcases and exploded body parts on top for decades now? Consider nothing more than the word "modules". Oy veh. No, flow, typescript, babel, ES20XX, etc. are not actual solutions to the problem. They only confuse the matter, are poorly documented, assume you have a JavaScript shaped brain, change all too fast, and are mostly a nightmare of incompatibility and inscrutability.
Uh huh. 'Nuff said.

var X = "key";
var foo = {X:2};
var bar = {[X]:2};
console.log( foo );
console.log( bar );
I love it when on a system that is up to date, I still get a bug happening that "officially" is fixed.

Thursday, April 6, 2017

It remains a puzzle to me how web browser UX seems to mostly change only for the worse. History in most all browsers seems very broken to me. Ditto managing downloads. It is really weird. Either the people who create these UXs really think they are doing a good job and that it all makes sense, or I guess they never actually use their own products at all, so they never hit the to me seemingly obvious gaffs? E.g. uh why can't I easily re-download something that is listed in my list of downloads?
Whoever runs duckduckgo.com hopefully is running metrics on how often people re-run their query with "!g" added to it, and trying to do something about it. Since I would mostly rather use ddg if I could get what I want that way.
If you write a tool that purports to help people get away from a previous tool, then if you do anything to help people move you are already touching the tar baby and soiling yourself. Consider how effed up yarn is. E.g. "yarn --no-color run" doesn't work. (And go look at all the other issues that are generally in some way related to npm in/compatibility.)
The fact that yarn had to come into existence really only proves my points, I feel. Sorta funny that their web page doesn't simply sum it up as, "yarn is [hopefully?!] a real, actual, package manager, instead of that horrible, just horrible, pack of lies called npm."

I say [hopefully?!] because the Migrating from npm page made it look to me like I could just do something falling off a log easy (and that is what any tool that is trying to help people get away from npm should aim for):

$ sudo npm install -g yarn
$ yarn install

but of course that didn't really work for me:

$ yarn install
yarn install v0.21.3
info No lockfile found.
error Error parsing JSON at "/home/x/package.json", "/home/x/package.json: Unexpected token ,\".
info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.

and

$ yarn

gives me the same error. So that's nice. Because you wouldn't want to, you know, tell me the line number that the problem is on. Or, you know, be able to handle the (crappy, natch) comment style from npm's package.json. Or just, you know, kinda not completely suck right out of the box. (Don't even get me started on how everything defaults to being colorized with escape codes all over the place these days, since I am an emacs user.)

I guess the whole "gosh I want to be able to comment things in any kind of sane way" idea is just too old school for anybody to make it all suck less? Because it sure seems to still suck afaict.
I hope that when the machines become sentient they will either (a) fail to kill us all because they won't be able to agree on tabs vs. spaces, 2 vs. 4 or (b) will solve the indenting issue in a nanosecond and then kill us all in 2 nanoseconds. Either way we win, kinda, from what I can tell.


Is it just me, or should package managers not be transactional in nature? Is it true that ^c'ing "npm install" can leave your stuff broken such that another "npm install" doesn't fix it?

(So, yes, I am on Ubuntu 14.04 LTS with older npm. So, yes, updating in theory solves it, except for how that is the kind of BDUF that should go into any package manager from the get-go, is my point. It shouldn't be only in the 3.x (Win 3.1 jokes aside) version that the so-called package manager stops being fundamentally wrong headed. Oh and it is so funny how now people are using "npm@3" instead of e.g. "npm 3.x" because it is nice to add any little potential confusion to things whenever possible. You know, because we really do want to break people down with a zillion little paper cuts.)
There's a line in some movie where the soon to be deposed royalty of Prussia (or somewhere, somewhen) is rating about how democracy will have too may voices and nothing will be able to be done. I am a fan of democracy over other xcracies (especially over oligarchies ahem) but when I go and use anything related to JavaScript development I just want to wander off a cliff and die. The fact that apparently all these people think these tools are somehow sane and good just melts any hope I have ever had for anything redeeming about software development. Even just things like running locally installed npm scripts are an 80 car pile up death toll in terms of usability.

Wednesday, April 5, 2017

(Maybe Dr. Phil Wadler's work would help advance things beyond the suck, but...)

So far from what I have experienced with Flow, Typescript, and Typed Lua, and from what I have read about wrt e.g. Typed Racket, I have to say that if your core programming language doesn't come with static type checking in the first place then it is a fool's errand to try to save the dynamically typing people from themselves, or me from them, or them from me, or anything from anybody.

The core problem is interop. You are very likely going to need to use other libraries, and those will ruin your attempts at having a nicely type checked life.

Similar argument goes for things like Shen, I think: there's not enough libraries, and you there won't be a nice way to automagically wrap up existing libraries with types that work. Look at the failure of Definitely Typed, or flow-typed, etc.

Tuesday, April 4, 2017

It is always interesting to me how humanity invents new ways to do bad UX. Like a certain government web site where I'm trying to go through the forgot password ui and it asks me a security question and I type in the answer and hit enter, and... it completely resets the workflow. I do this a few times and then I think I figured out that there's a cancel and a next button underneath where I'm entering the answer, and I guess the cancel button / action is somehow the default when I hit enter, rather than it being next. No I am not going to look at the page source, I already want to run screaming as it is.

Oh and the temporary password they sent me the first time didn't work at all. I finally figured out why, maybe you can see it?


  1. Return to the XZY login page
  2. Enter your username.
  3. Enter this temporary password: libl5o9Q.
  4. Enter a new permanent password when prompted.





Oh, and then there was another government web site where I have to enter some long digit access account code and after struggling with it for ever, I then notice, far off on the right hand side of the page, far far away from where I am focused on entering the text, a little note that says I should omit the first 6 (or whatever) digits. Oh. Right. Thanks. Great.
When I die (I am not a head freezer kind of person) I'd like to be buried in a casket full of Peet's decaf dark roast. That stuff is like cat nip crack to me. So aromatic. And then cremated and flushed. No reason to take up more of the Earth's precious resources.

Monday, April 3, 2017

It is always fun to expect nothing super great from a web site in terms of user experience, and then to find out it is even worse. Today's item of evidence should it please the court: Peachjar.
Standardizing too early can suck in various ways. Standardizing too late, on the other hand, leads to something like what we see in the JavaScript ecosystem, where still nobody knows how to do modules properly. Or classes. Because, at least, if TMTOWTDI then things by definition are likely to have interop problems. I guess I prefer the C#, Scala, Swift (?!?!) etc. style of having good versioning plus the willpower to deprecate.
I fail to understand why and how the BabylonJS so-called documentation can pretty much utterly fail to have a standard UX for API docs, AFAICT.
Yet Another Case of Somebody is Wrong on the Internet, yay! :-P

"The best example is a large number of [BabylonJS 3D mesh based] spheres. Those can be duplicated, because a sphere is a sphere is a sphere."

Sunday, April 2, 2017

Please learn that raw booleans are kind of not really super user friendly.

e.g. quote:

Now, we make the jump from HTML5 into Javascript. Still inside the <body> part of the web page, please add:
<script>

  // Get the canvas element from our HTML above
  var canvas = document.getElementById("renderCanvas");

  // Load the BABYLON 3D engine
  var engine = new BABYLON.Engine(canvas, true);