Sunday, December 27, 2015

Just in case anybody was wondering: I do not expect 2016 to be the year that most UX stops being horrible.

Random e.g. (not that Fotoxx is anything new to 2016, of course) is the very first thing I see when running Fotoxx for the very first time. And the kicker is I clicked 'Cancel' and while it dismissed the 'Synchronize Files' dialog, it brought up another that said something about how I was doing things wrong.

Monday, December 21, 2015

So I figured out what the root cause of the issues is with Android 5 on the Moto E (2015) I have. In the beginning the whole thing was faster better than most Androids I've had (since I am broke/cheap). But I guess it has gotten slightly more poky over time. So now it is basically thrashing now and then, often & slow enough to eff up the UI and UX. So that swipes don't work, or happen to the wrong thing, etc. Overall there's the rule that anything over, what, 25 msec is basically not interactive, and I guess it has gone over that.

I guess what seems sort of lame to me overall is that Google + Moto haven't actually planned this out together? I understand there's price/cost involved. But why would you design the interaction to be something that literally cannot work out well on the phones you intend to produce?! And that you know full well people are making e.g. the old low-end Hauweis or FoxConns or whatever. It just seems like if you know the low-end cheap shit is part of your entire game plan, you should design the user experience to not turn to kind of hateful shyte when running in those kinds of contexts.

Sunday, December 20, 2015

If you ask me, forced arbitration is evil. Forced arbitration is evil. Forced arbitration is eeeeevil.

What are we going to do about it?

What are you going to do about it?

http://constitution.laws.com/7th-amendment

Friday, December 18, 2015

I'm using an Android 5.x Moto E 2nd gen / 2015. I'm using the Gmail app. When I select text in it (well, when I try to select text, don't get me started...) and then press the "search" magnifying glass icon at the top right of the display, I get a tab/sheet for the search. And it turns out that the sheet doesn't appear in the "show all tabs" / "recent apps" list. At all. Ever. No matter what. As far as I can tell. So once I've lost it by going to some other app, I've lost whatever work I was doing hunting through the web from that search. So, like, that's kind of annoyingly stupid ux?!

While I'm on the subject, I'll mention that the ordering of the tabs/sheets in the recent apps list is not a good UX for me. Several times I've closed the wrong things due to how animations moved tabs around. And the gestalt around "which tab I was just looking at full screen" / which app I was using is not good. For example, if I'm shopping craigslist for a bargain on a sewing machine (real world use case) I open a bunch of tabs. As I try to look at each one, it is hard to know which ones I've already looked at, and which I haven't.

There's a buhzillion other things about Android 5 that drive me batty, too. I'm trying to just let go, let go, let go right now... ;-P

Thursday, December 17, 2015

It seems downright weird to me that I am using Google Chrome and yet all the Google things in the drop-down history menu are pretty much uselessly labeled. Some just say, "Google" with nothing else. Others are raw URLs so it is hard to see/know what they were about.

Wednesday, December 16, 2015

I guess there is some kind of collusion in ecommerce. Because every time I figure I should just boycott any store that has a terrible ux for eshopping, I end up not having *any* store left that I can buy from. How's that for a 1st world problem?

Tuesday, December 15, 2015

Gift giving season is a chance for me to renew my confusion, puzzlement, distaste, frustration, and all 'round hyper extremely filth-curse-word-laden BAH HUMBUG. Why is it as if every, and I mean nigh literally every, eCommerce UI/X is apparently purposefully designed to push me away from buying anything?
Oh, wait! I guess I already am in the particular circle of hell that is full of little snickering terrible usability jabs!
I did a search. I got a Wikipedia hit. I clicked. I went to Wikipedia. They showed a big banner asking for money. I went through the process of giving them money. They put up a "thank you page" ... and now I'm nowhere near the page I actually wanted to see. The page that I was coming to Wikipedia for in the first place. Would it really have been so hard to have redirected me? Could even have been the page with a smaller "thank you" banner in place of the "donate" one.

The kicker? When I go back to the page I want by using the browser history, the banner for donating still shows up.

Monday, December 14, 2015

The way shift-arrow works on selected text regions in old Xcode is like how it works in every other app on earth. Newer Xcodes change it to be really, really weird. And evil. No, sir, I don't like it.

Friday, December 11, 2015

If you search for comp.risks on Google, one of the hits is

https://catless.ncl.ac.uk/Risks/

and on that page if you click

Subscriptions, contributions and archives

then I get a certificate error. If I accept the "bad" certificate once time, then it goes through to a connection failure.

So that's impressive.
 Using the search in Google Play Store, crashes the app on a Moto E (2nd gen), for me, today, at any rate. That sorta seems like a sad thing.

The extra sad thing is that apparently the GPS app has a long history of being sorta crashy?

Of course, the Apple app store on e.g. iOS 5 was also pretty bad and crash at times, too. I just cannot really fathom how you can let such blatant bugs through for the conduit by which you make money?
 
D/AndroidRuntime(25467): Shutting down VM
E/AndroidRuntime(25467): FATAL EXCEPTION: main
E/AndroidRuntime(25467): Process: com.android.vending, PID: 25467
E/AndroidRuntime(25467): java.lang.NullPointerException: Attempt to read from field 'java.lang.String com.google.android.finsky.protos.SearchSuggest$NavSug
gestion.docId' on a null object reference
E/AndroidRuntime(25467):        at com.google.android.finsky.providers.SearchSuggestionFetcherLegacy.getIconUri(SearchSuggestionFetcherLegacy.java:90)
E/AndroidRuntime(25467):        at com.google.android.finsky.providers.SearchSuggestionFetcherLegacy.access$200(SearchSuggestionFetcherLegacy.java:34)
E/AndroidRuntime(25467):        at com.google.android.finsky.providers.SearchSuggestionFetcherLegacy$2.onResponse(SearchSuggestionFetcherLegacy.java:170)
E/AndroidRuntime(25467):        at com.google.android.finsky.providers.SearchSuggestionFetcherLegacy$2.onResponse(SearchSuggestionFetcherLegacy.java:153)
E/AndroidRuntime(25467):        at com.google.android.finsky.api.DfeRequest.deliverResponse(DfeRequest.java:546)
E/AndroidRuntime(25467):        at com.google.android.finsky.api.DfeRequest.deliverResponse(DfeRequest.java:51)
E/AndroidRuntime(25467):        at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99)
E/AndroidRuntime(25467):        at android.os.Handler.handleCallback(Handler.java:739)
E/AndroidRuntime(25467):        at android.os.Handler.dispatchMessage(Handler.java:95)
E/AndroidRuntime(25467):        at android.os.Looper.loop(Looper.java:135)
E/AndroidRuntime(25467):        at android.app.ActivityThread.main(ActivityThread.java:5343)
E/AndroidRuntime(25467):        at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime(25467):        at java.lang.reflect.Method.invoke(Method.java:372)
E/AndroidRuntime(25467):        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
E/AndroidRuntime(25467):        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
W/ActivityManager(  812):   Force finishing activity 1 com.android.vending/.AssetBrowserActivity

Thursday, December 10, 2015

"The authorization systems we depend on to keep everything secure just cannot be understood by humans." It is to weep.
I have yet to come across a UX for managing software updates that isn't blatantly full of rather sadly bad emergent properties.

Monday, December 7, 2015

"Jeffries: In a way, the point of the book is that the things we can measure are not the things of value."
"Jeffries: Value is what you want. Features are the bits that deliver value. Feature teams build complete features. When you use feature teams, everyone builds features. Features are what deliver value. Value is what you want. That’s really all there is to it: any other organization of the work puts more levels and more stages between you, and what you want."
Web based productivity tools seems to often be a bit of a lie to me. Right now I'm waiting for Chrome on a powerful MacBook Pro to stop spinning the "I'm wedged" colorful beachball spinner, so I can keep working on the Google Docs I have open. No indication of what is causing the lock up. Probably no hint even if/after it ever comes back.
it really is greenhouse gases. from us.

http://www.bloomberg.com/graphics/2015-whats-warming-the-world/
It always amazes me when I hear about how bad company job application systems are. Why would you make the UX so bad that people turn away from the job, and even the entire company? I guess the theory is "WELL, if people REALLY wanted to work here, they'd walk uphill both ways through bad UX just to get here!" Somehow that just doesn't compute for me.
I sometimes do wish all apps that had user photos gave me a way to turn off all the user photos.

Wednesday, December 2, 2015

There has very rarely been an e-commerce experience of any sort that I've ever had, that wasn't somehow blatantly a UX train wreck. I just do not understand how the world can be run by the kind of people who make these kinds of decisions. I also cannot understand how/why the buying public doesn't boycott all these utterly horrible things and companies. The way I see it, e-commerce should pretty much have tanked capitalism by now.

Tuesday, December 1, 2015

I am very much a fan of advanced static typing; and purity, immutability, referential transparency, linearity, etc.

"Please note that data is returned by reference, this means that modifications to returned objects may change the database. To avoid such behaviour, you need to use .cloneDeep()."

(So I guess I really should be diving whole-hog into, like, Rust?)
Given that some filesystems do not use "/" as their directory separator, I would generally like APIs to filesystems to not deal in strings for paths. Rather arrays of strings. And not really arrays of strings, but arrays of pathname's or somesuch. That way I never have to worry about knowing what magical characters to have to escape or unescape. I hope.
So I tried to actually buy something on Cyber Monday. Target, Khols, Macys, etc., were all a living hell of usability and ux. I just don't grok how these things can be considered okay.

Monday, November 30, 2015

There's something to be learned from this.

http://www.cnet.com/news/usb-type-c-one-cable-to-connect-them-all/

(Namely, I wouldn't bet a lot of money on there never being another kind of new USB connector.)
For me, one of the biggest problems with computers and software development is that it is so easy for something and somebody else to make your own life into a living heck. If you count all the times we have to try to work around something else, it boggles my mind. I can really appreciate where Arthur Whitney, or Niklaus Wirth, is coming from when they want to do the whole effin' stack. (Even if I do not have 1/100th their acumen or raw talent or weird alternate business reality, so I probably can't really take the same approach.) I shoulda been a farmer. :-)
"Simply calling imperative code during function evaluation is not embedding imperative in functional. It's poisoning functional with imperative. You lose the ability to reason functionally about modules you don't understand very well. FP isn't half as useful without purity of reasoning. FP couldn't even mature as a paradigm while held back by this poison in its original implementations (Lisp, ML, etc.)."

Wednesday, November 25, 2015

Here is my Free Reduce The UX Suck idea of the moment: History menus in browsers should support scroll wheels, rather than making me have to laboriously open up another tab/window to see all history. And/or they should support searching of full history like the aforementioned laboriously opened tab/window often does. I mean, WTF already!

Tuesday, November 17, 2015

I am a UX weenie. I <heart> Don Norman's The Design of Everyday Things. I <heart> just about anything by Edward Tufte (and got to attend one of his sessions once at Stanford). I <heart> Richard Saul Wurman. etc. etc. etc.

So I have to say that it is pretty much a daily thing that Android drives me batty.

The UX for contacts?

The UX for just taking a call?

All utterly, utterly, blatantly, stupendously, in your face bad. As if nobody at Google has ever even used their own stuff. I guess they all use iPhones. (That's a joke -- I know people who have been in the Android teams. They do not, generally speaking, use iPhones.)

p.s. yeah, and iOS has problems too, believe me.

Sunday, November 15, 2015

I grew up on BASIC and 6502. I did Pascal, C, Scheme, ML, etc. in college. I did C, C++, Java, Perl, Python, Ruby, Objective-C, etc. in industry.

Every time I go to do anything remotely C based on my machines, I cannot fathom how (a) anything ever got done back before bytecode vm style languages (b) how anybody can condone having anything to do with C/++ today. Trying to build anything is a freaking nightmare of broken stupid badness.

Friday, November 13, 2015

"Always design for the team even if technically inferior."
empirically, the output of
git stash show
is different than e.g.
git stash show | cat
which makes me... sad.
"I'm partial to the BBB over the Raspberry Pi because of its core processor. Both are ARM engines; the BBB one is made by Texas Instruments, the RPi one by Broadcom. The crucial difference is that TI publishes a full manual for that chip on-line free for the download (5000 or so pages!!!) while Broadcom treats the documentation as a deep secret and refuses to release it to anyone who doesn't sign a confidentiality agreement."
Death, taxes, and computer resource management.

http://www.qnx.com/developers/docs/6.4.0/neutrino/prog/hat.html#CommonErrors
Today is one of those Bad UI days. First, Google Maps on my Android phone goes nuts and sees every kind of pinch/zoom I do as only being zoom-out. Then, somehow in a hurry in Gmail I manage to star every conversation in my inbox. And there isn't an undo for that, so I have to unstar everything, which means now the things I did originally have starred are no longer thus.

Thursday, November 12, 2015

"The whole point of DevOps is really to get your software developers to share in the pain that certain design / development choices can cause."

Wednesday, November 11, 2015

We are lacking a principled approach to JavaScript performance. On the one hand, we're supposed to ignore any issues and just write our code and leave it up to the automagic runtime to make things just work. On the other hand, people are constantly writing articles about JS performance, and also inventing things like asm.js. So performance does matter. Apparently.

What I want is a report in a regular (automatically parsable) format that the JIT vendors provide, which tells us what and when they do/not optimize.

Then people who are writing JavaScript from scratch, or who are writing static checker tools for JS, or who are writing compilers from some other source language to JS, can all consume those reports and use it to figure out how they want to go about writing/generating the final JS.

(The report could get arbitrarily complex, adding more data that is hopefully useful to the consumers. How much an optimization saves; Summary data based on some test suites; etc.)
I really cannot fathom why it is, apparently, that nigh most every single person on Earth doesn't grok UX. Either that or I'm just in one of those people in a bubble universe where all the people who think sanely like me have been voided?! (Yes, on occasion I see signs of intelligent life elsewhere on the Internet / on Earth, but damn and blast it seems so rare.)
I wish that all docs, commentary, whatever, that have code in them would always be fully working code, not just random snippets that every reader has to put back together in their own head. Because entirely too often there's something missing. E.g. some variable name that is used in the snippet, but was never declared let alone defined, etc.
"In Gödel's case, the really deep insight was that types can't protect a formal system against the incompleteness/inconsistency problem because types, unless they actually cripple the power of the system, can only prevent the system from acknowledging that it has a problem, they don't prevent the problem from being there."
There's only N hard things in software development. Like, say... resource usage. http://lambda-the-ultimate.org/node/5277#comment-90666

Monday, November 9, 2015

I was going to let my old Win 7 upgrade itself to Win 10, just to try it all out. But the installer says something like, "briefly checking your system!" and then never ever gets past that dialog box. With utterly no information about what it is doing. Or if it is making any progress at all. For all I know it is just sniffing my entire network layout, and uploading everything it can to MSFT. I mean, even if I didn't already completely distrust Win 10 based on all the privacy / data issues that have been buzzing in the nerd news, the UX alone reaffirms my choice to try to be as much of a Linux head as much as possible.

(Do not get me wrong. Desktop Linux is an utterly terrible UX itself as well. And things like the Ubuntu-Amazon integration stuff make me strongly distrust at least some significant parts of the Linux world. But at least it isn't MSFT or Apple.)

Thursday, November 5, 2015

I love to make and use abstractions. I am probably most happy to use them when they are mine (ha ha), because then I'm steeped in them. Well, unless I leave the code alone for 6 months - then I might have no freaking idea what my past-self was doing. Grn.

I find some of Other People's Abstractions to be interesting and possibly even good.

But I do get the feeling, overall, that Scala has gone a tad off the deep end. Cf. https://groups.google.com/d/msg/scala-user/qkIUJW_2mhw/q_8_GnzfBwAJ
I, for one, do not hail our new TPP overlords. I vote nay.

Tuesday, November 3, 2015

I laughed. (In a good way.)

http://www.slideshare.net/kenbot/imagine-a-world-without-mocks
"Wherever you look in good Smalltalk code to see how something is done, it always seems like the work must be being done somewhere else."

Monday, November 2, 2015

Snowballs are merrily melting in hell.

http://www.oracle.com/technetwork/articles/java/jf14-nashorn-2126515.html
A really nice overview, and hopeful look forward regarding error handling.
I'd like to know what the subset of JavaScript is that causes the least performance problems. Like, I wish all programming languages came with a big wall chart of onion layers, showing "oh this core kernel nugget is the fastest (and probably least expressive) subset; and then this next outer layer adds a feature that when used incurs a penalty; and then the next layer out from that; and then 'eval' just dooms us utterly." Then we could as humans better understand our own code, and we could also try to train our compilers to know.

Sunday, November 1, 2015

so far, this has been a good book for us: Secret Coders. i do recommend the book!

but -- and, oh lordy, why does there always have to be a but? -- things kinda go pear shaped from there:
  • They say they have videos. As in, plural. Uh, yeah - no. Not really. And they don't say when any more will appear. That's just bad user experience.
  • They suggest you use UCB's Logo. Which is all broken links, since apparently the site's server no longer supports https. Or something. So that's genius.
  • If you figure out the trick of removing the "s" from the https in the urls, you can get the program...
  • ...only to find out it is sort of a piece of junk, frankly. Just a completely terrible UX overall, and it also gets thrashy and hoggy and just plain broken.
  • Then I went out to try to find other versions of Logo, and I gotta tell ya, it is a wasteland out there. Just a complete UX wasteland.

Thursday, October 29, 2015

a great part of Doug Crockford's Seif project presentation:
  • Difficulty of software security:
    • Does what it should
    • Doesn't do what it shouldn't
    • No software is initially secure
    • Only a minimal approach can produce software that is eventually secure

Friday, October 23, 2015

"At the time it [E-lang] was the only language that provided first-class support for simple, capability-secure distributed programming (first language to provide transparent persistent event loops, first language to seriously adopt promises and promise pipelining, first language to seriously tackle the principle of least authority via capabilities). Other languages have since adopted some of its principles."

Wednesday, October 14, 2015

> At some point Sussman expressed how he thought AI was on the wrong track. He explained that he thought most AI directions were not interesting to him, because they were about building up a solid AI foundation, then the AI system runs as a sort of black box. "I'm not interested in that. I want software that's accountable." Accountable? "Yes, I want something that can express its symbolic reasoning. I want to it to tell me why it did the thing it did, what it thought was going to happen, and then what happened instead." He then said something that took me a long time to process, and at first I mistook for being very science-fiction'y, along the lines of, "If an AI driven car drives off the side of the road, I want to know why it did that. I could take the software developer to court, but I would much rather take the AI to court."

Thursday, October 8, 2015

"But what still seems paradoxical is why Cocoa programmers advocate Objective-C in the first place if such a technology was originally created to discipline and their work? There are some possible explanations. First, although object oriented programming disciplines a programmer, such discipline is seen as beneficial to the programmer to avoid bad habits, ultimately freeing the programmer from tedious debugging and allowing for more creative, artistic work to take place. Second, our examination of Alan Kay’s motivations in creating Smalltalk suggests an ideological component to advocacy of object-orientation. Kay’s project was part of a larger “personal computing” movement associated with the 1960’s counterculture and with Doug Engelbart’s human augmentation project. Through Stewart Brand’s Whole Earth Catalog, a countercultural re-appropriation of cybernetics and small-scale digital calculators as tools not for military-industrial-bureaucratic control but for personal liberation and transcendence through information mastery lived on in the personal computing movement, replacing LSD with PCs as mind expanding tools. Two key features of the Smalltalk system, the graphical user interface and object-oriented programming, both were intended to bring computing power to the masses. Seen in this light, advocacy of dynamic object-oriented programming, and Cocoa in particular, is an ideological project of conversion."
"I do not imagine a world with fewer exploitable bugs.
I imagine a world in which much less is at risk to most bugs."

-Mark Miller, on Capability based approaches to security.

Monday, September 21, 2015

I liked this paper about how CAP 'doesn't mean what you think it means'. Not that it has all sunk into my brain, enough, yet.

Wednesday, June 17, 2015

'Our neo-Piagetian perspective leads us to view the curriculum for programming as comprising two dimensions. On one dimension are the nuts and bolts of how programming languages work. That dimension is emphasised in today’s classroom. The other and more neglected dimension comprises the skills for reasoning about programs, sometimes referred to as the notional machine (du Boulay, 1989), but which we think of in neo-Piagetian terms. This dimension is often not explicitly taught, especially in the first few weeks learning to program. We believe that, with every increment along the “nuts and bolts” dimension (i.e. with every new programming construct taught), all the neo-Piagetian stages of reasoning need to be explicitly reprised.'

Wednesday, April 22, 2015

Things like MISRA C make me sad. I wish we were all using better things, be it Ada, or formal methods, or whatever.

Tuesday, April 21, 2015

Hah! My horrible (truly, truly horrible) code. I mean, the graph output was nice compared to what it replaced, but when I went to rewrite it later (a project that never got fully released, oh well) I wanted to go back in time and back-handed slap myself in the face.

https://metacpan.org/pod/Bio::GMOD::Blast::Graph

P.S. I am a little annoyed that the list could be interpreted as meaning I am not "first author" when in fact I wrote pretty much literally all the code, and was the one who had the idea for the whole project in the first place. Oh well. :-)

Wednesday, April 8, 2015

I want

"Abstraction without visualization"

to become a software engineering complaint mantra along the lines of

"Taxation without representation"

as an evil to be abhorred.

Abstraction (in the software development sense) kills, in the "news at 11!" sense.

Of course, the lack of it does, too.

Friday, March 27, 2015

sorta stating the obvious, but sad that we tangle them up so.

http://webcache.googleusercontent.com/search?q=cache:lZganwsmysEJ:tal.forum2.org/static/cv/Shakeins.pdf+&cd=1&hl=en&ct=clnk&gl=us

2.1 The Five Facets of a Class

As early as 1971, Parnas made the classical distinction between the interface and the materialization perspectives of a software component. It is only natural to apply this distinction to class definitions in JAVA and other mainstream object oriented languages. In this section we do so, while taking into notice that, unlike the software components of the seventies, classes are instantiable.

Accordingly, the interface of a class presents two facets: the forge of the class, be- ing the set of non-private constructor signatures; and its type, the set of externally- accessible fields and methods as well as available cast operations. The materialization of a class has three facets: the implementation, i.e., the method bodies; the mill, being the implementation of the forge; and the mold, which is the memory layout used for creating objects.

The forge
public Point(int x, int y);
public Point();
public Point(Point other);
 
The class’s mold
int x
32 bits
int y
32 bits
Fields inherited from Object
Hidden fields added by the JVM 
 
The resulting type
int x, y;
public int getX(); public int getY();
public void setX(int);
public void setY(int);
// From Shape:
public void moveBy(int, int);
// From java.lang.Object:
public boolean equals(Object);
public int hashCode();
// ... etc.
// Upcast operations:
public (Shape)(); public (Object)();
 
I would like to coin a phrase, a term, an idea in (software) project management: The Curve of Depression.

The idea is that we try to make things, and we inevitably have some bugs. Now, depending on all sorts of variables we each have a subjective reaction to each bug. It ranges from something like "oh good find, QA, thanks!" (the 'good' side) over to "whichever programmer did that should be summarily executed, post haste - even if it was myself!" (the 'bad' side). So there, that's the vertical axis.

The horizontal axis of the Curve is how much improved the thing is when it goes through another round. Did it get resolved in one go? Or has it been dragging on for ever? If there's something really complicated/complex, then (I guess, in some non-Agile sense, anyway) it is OK for that thing to not make much progress so the curve is flatter. Other things that should not have been broken in the first place, or which should really only take 1 more try to get right ought to have a curve that looks like the downward majority of the Winter Olympic's ski jump.

I'd like to know what people's subjective Curve of Depression is that they follow; how they rank things; etc. And then how their projects seem to go. Do they follow the curve(s) well? Do they blow out past them? Do they come in tighter?