Roger Hui has died
jsoftware.comWhen I interviewed Arthur Whitney in 2009[0], Roger came up again and again. (He only appears in the transcript once, but Arthur spoke of him several times, always with great fondness.) Roger clearly had an outsized influence on Arthur -- in addition to his particularly close relationship with computer science pioneer Ken Iverson. Condolences to his family -- and to his close friends like Arthur, who I know must be grieving this loss.
For what it’s worth, Roger felt you did a superb job on this interview with Arthur - he referenced it a number of times in our correspondences. Which is somewhat funny, as him doing so kind of brought my personal computing journey full circle in a weird way; your work and evangelism on Solaris is what convinced me to get involved in POSIX development in the first place.
Wow, I'm deeply honored that he felt I did right by Arthur, and just wish that I had had the opportunity to meet Roger. Thank you very much for sharing that, and may his legacy serve to inspire a rising generation of bold thinkers!
For those of you that are not familiar with Roger Hui, he is the author of "An Implementation of J"[0]. Which is a fantastic resource if you want to know how to implement an array programming language.
> aioj.pdf
Fitting file name, in the spirit of J's terseness.
this is super cool; I wonder if some of the concepts can be applied in building Codex pipeline
just found https://crypto.stanford.edu/~blynn/haskell/jfh.html to cross-ref stuff when I get lost
One of his memorable blog posts was on generating permutations in array languages[1]. In his spoiler explanation he comments about generating permutations of 0..4 starting from permutations of 0..3 and a "magical matrix" to do that, and then discusses:
"What is the “best” perm function I can write in APL? This “best” is a benchmark not only on my own understanding but also on advancements in APL over the years." and then shows one he wrote in 1981, one from 1987, then "I worked on perm from time to time in this period [1990-2007] but in J rather than in APL", then one from 2008, and one from 2015, and where future improvements might be found. In a video talk on it he says "some of these sub-expressions can be improved, but the APL language cannot yet express the thought that I have"[2]. I just like that pattern of returning to the same problems and polishing both the language and solution over multiple decades.
[1] https://www.dyalog.com/blog/2015/07/permutations/
[2] https://youtu.be/e0rywC7-i0U?t=2254
[3] talk is taken from his writing here, I think: https://www.jsoftware.com/papers/50/
This is shattering. I am glad he was able to be with family and friends; Roger was an immense help to me as I learned how to navigate APL/J and build a TSDB in the latter. He never let on that there were any health concerns - I feel guilty now for sending him so many messages over the last half decade.
I hope he gets the recognition he deserves. What he and Iverson have developed is truly unique and powerful.
EDIT: A bit macabre but Ken had his stroke on the 16th of October (2004) and died on the 19th. I know it’s coincidence but my mammalian brain can’t help but ascribe significance.
> I feel guilty now for sending him so many messages over the last half decade.
Knowing geeks, I wouldn't be surprised if part of why he didn't let on was because he didn't want to stop having fun geeking out.
I had the pleasure of working with him for several years. I count the paper we wrote together[0] (well, it was mostly him that wrote it, but we worked out the theory together) as one of my greatest achievements.
Thank you for your work - it was immensely helpful for our J-lang TSDB. I am hopeful that I can get interest/support soon to open source it, as Roger was pushing me to do so. He frequently sent me comments or suggestions that referenced your joint publication. I know he was quite proud of it.
I thought it was interesting that the notice about Roger's death was by Eric Iverson. The name struck me because Ken Iverson was the creator of APL and I wondered if they were related. Looking it up, they are. Eric is Ken's son -- so interest in APL has gone across generations.
Rest in peace. Roger Hui deserves a black bar just about as much as anyone.
A (likely incomplete) list of his talks can be found here; if you have the time, you should watch at least some of them: https://aplwiki.com/wiki/Roger_Hui
He dedicated a substantial portion of his life to the design and implementation of two of the last truly-unique languages in our field.
We all owe him a degree of debt. If you use numpy, for example, you're actually closer to the heritage of his work than you might imagine; about two steps removed. Start from the top of this thread and work your way down (I am sorry for the source of the link, but none of the frontends cover threads this long and with this many authors):
> of two of the last truly-unique languages in our field.
What is the other one?
I met Roger briefly as a presentation on J at SFSU.
He seemed like a mellow, straightforward person and I enjoyed how he explained a one-page long set of c-macros that expanded into the initial J compiler (written by Ken Iverson or someone else).
I remember asking him, "How do you debug something like that" and he said "don't make mistakes".
I wanted to learn more about "J" and this person, it is a nifty language
Some people might enjoy this thread on "A look at the J language: the fine line between genius and insanity (2012)" https://news.ycombinator.com/item?id=16393873
Also this answer here at math stack exchange https://math.stackexchange.com/questions/856153/the-j-progra...
The SO answer is easy to follow right until the final operator “/“ where it just goes “magic”. That’s less than helpful as the rest is quite straightforward aside from the syntax.
Its very short description of the two-arguments version make it sound like a fold, but that wouldn’t generalise to what looks like a cartesian product, would it?
If I understand it right "*/" results in a function that applies "*" between its arguments. "~" takes the function f(x) on its left and the argument y on its right and turns it into f(y, y).
So the right side of the tilde evaluates to a range 1..10. I think the tilde then turns its left and right into "*/"(1..10, 1..10), resulting in 1..10 * 1..10
/ does different things depending on the arity of the preceding function.
'f/ x' is 'insert' - i.e. reduce, so that '+/ 1+i.10' yields 55.
'x f/ y' is 'table', inserting 'f' between each pair to form a generalised multiplication table.
The documentation for j is unsurprisingly terse, but it is complete and very helpful.
Ah so the explanation is pretty much just “magic”.
It's no more magical than anything else. It just turns out that j has an operator that does exactly what you want.
Having such operators and functions is far from an uncommon experience in j.
My problem with this is not “J has an operator that does exactly what you want” it’s “J has operators which do entirely different things depending on the arity”, you can’t intuit the behaviour of the binary / from the unary, they are for all intents and purposes unrelated.
As a result, the original mathexchange answer introducing / by explaining its unary behaviour (despite that being used nowhere in the answer) is solely a source of confusion.
The original description is misleading, yes.
The distinguishing between arities is a consistent feature of all of these languages. I find fluency comes quickly to it.
Edit: as for intuition between the two, this is sometimes not obvious, but I think it's a sensible generalisation from the monadic case to the dyadic. How else would you want to extend a fold to two arguments?
> How else would you want to extend a fold to two arguments?
I don't know that there is one that's useful, but a cartesian product seems like the opposite: a fold is a dimensional reduction (from 1 to 0 at the most basic), a cartesian product is dimensionally preserving (you start with 1 and 1, you end up with 2).
A cartesian product (with a mapping function) might be interpreted as the extension of a map, I don't rightly see how it can be interpreted as the extension of a fold, except in the sense that you can implement essentially any iterative process using folds, but that leads to you every n-dimensional transformation being a possible extension of a fold.
So my answer would mostly be "you would not". You could also define an n-dimensional fold as a fold against a caller-specified dimension, but I don't know how useful that would be (though I guess this sort of folds is used when integrating over time in e.g. reactive interfaces).
> I think the tilde then turns its left and right into "/"(1..10, 1..10), resulting in 1..10 1..10
That is the part which doesn’t make sense to me: `/ v` is `foldl1 () v`, how does that generalise to a cartesian product when applied to >1 sequences?
Dyadic `x / y` is different to monadic `/ y`
Something akin to a map operation maybe?
Roger was a colleague of mine when I worked at IP Sharp. Lovely guy. My condolences to his family. Rest in peace.
To my ignorance, I've never heard of J nor Roger. Learned someone and something new today. You will be remembered. RIP
RIP to a real one. I've played with all the major array langs, but J is the one I keep coming back to. There's still so much more I have to learn from this guy.
Met him a long time ago when J was relatively new, through a friend. Didn’t know anything about him except he was a friend colleague of my friend. And we was such a mellow, soft-spoken, nice guy. Who I learned a few months later was both seriously smart and had made this thing that had inspired me.
Real loss.
Sorry to hear this. I've never met him, but know of his work and blog posts on APL & J.
Roger made a major contribution, in a quiet way.
Thoughts are with all those who miss him.
This is sad news indeed. A couple of things about Roger:
The less important one: his Erdős number is 2, thanks to his coauthoring "A generalization of the fast LUP matrix decomposition algorithm and applications" with Shlomo Moran whose Erdős number is 1. (It's not shown on his Wikipedia page, but he's listed at https://en.wikipedia.org/wiki/List_of_people_by_Erd%C5%91s_n... .)
Roger was a great example of "precision with humanity", like Ken Iverson. This was obvious in many ways, and here's an unusual one: I've managed various technical groups over the decades, and Roger was the only person who, when he said he'd have something done by a particular date, was finished by that date, every single time. When he ran into a snag I would sometimes tell him that it would be okay if it took longer, but no, as far as he was concerned he'd made a commitment and was going to meet it, even if that meant working a lot of extra hours.
Rohan Jayasekera
A fine piece of tribute writing, that.
I first ran into J from their ICFP submission one year. The J implementation did quite well in the contest despite being shockingly terse, and running on an interpreter. That prompted me to figure out why, and I learned a lot of interest if unconventional ideas as a result.
I’ve been seeing more and more of these unfortunate postings lately. I often only hear of these contributions or even the languages themselves after the person passes on, which is unfortunate. Hope his family is ok.
68 years young. Fuck cancer (my father died from it at 71).
RIP.
Sorry to hear that. F cancer.
My Dad is dying now from it. 83 but the time has gone so fast. He was otherwise in top shape.
I have high hopes for the new blood test that can detect several types of cancer at a very early stage. It's in trials now in the UK.
RIP and condolences to the people grieving
What chat would he insist on?
It would be the chat mailing list. See http://jsoftware.com/pipermail/chat/2021-October/thread.html
RIP
Is this the reason for the black stripe on HN? Is there a way to click the stripe or otherwise see the reason for it, other than scanning posts for the sad news?
Black banner posted.
To honor Roger's passing.
A time to reflect.