APL Style: Patterns/Anti-patterns
sway.com
sway.com
Readability is the amount of money you're willing to bet that a change you make to the code will work the first time, without breaking anything, without testing it mechanically first.
In the same fashion, I update my design, architecture, and implementation documents concurrently with implementing a prototype if I need to make modifications or add complexity on the fly. They aren't for me, now. They're for the junior engineers I'm going to hand the project over to who need to be able to flesh out parts of a much larger machine.
Finally, whether or not I can read or understand my code, which I generally can, I test it anyway. I test my code not because it is unreadable (it is generally very readable), but because despite my best efforts to minimize complexity, it is generally too complex to fit inside my head, and because whether or not it fits in my head I'm not the only person working on it.
Most people have this subjective definition of "readable" which is basically something between "I can read it" and "people I work with/like can read it".
This definition is difficult to work with for a number of reasons, but if you are trying to convince someone there's value in reading and writing code sufficiently alien, it's at a minimum a massive barrier to progress.
Disclaimer: I can read code like this, and while I've let Aaron try to teach me Tai Chi, I don't use Dyalog or co-dfns.
If the person who wrote it can't pass the 'readability' test above what are the chances that other people, who are less familiar with the code, will?
https://www.youtube.com/watch?v=9xCJ3BCIudI
Lots of good commentary not in the slides.
And here is a way to download the video without Javascript. I have been meaning to try to rewrite this in k.
# Notes
# Works by brute force and has been reliable for years
# Was easily updated when YouTube made changes (rare)
# Zero dependencies except tr, sed and an https client
# Takes a YouTube URL on stdin
# Example usage:
# echo http://www.youtube.com/watch?v=9xCJ3BCIudI|ytd 22 file
# "ytd" is name of the script
# "22" is itag-no in this case large mp4 ("18" is smaller mp4)
# "file" is optional filename, no extension required
# if no filename given video is saved as "1.mp4"
# UNIX-like: url-filter < file-containing-url|ytd 22
# Caution when copying and pasting: line 2 needs to retain the 4 space indent
# N.B. Will not work with restricted videos; *this is not for downloading music or other commercial crap*; use youtube-download if thats what you are after
# N.B. Some videos may require a few tries, most will work on the first try; if get 403 try again
#!/bin/sh
case $# in [123]);;*)exec echo usage: $0 itag-no \[file\];esac;a=$(exec sed 's/http:/https:/;s/m.youtube/www.youtube/;s/youtu.be./www.youtube.com\/watch?v=/;s/hooktube.com/youtube.com/;s/embed./watch?v=/;#etc.;s/?version.*//;s/;.*//'); n=0;while true;do b=$(curl $a|exec tr -cd '\12\40-\176'|exec sed 's/https%3A/\
&/g;s/ *//;/ https%3A%2F%2F/!d;s/%3A/:/g;s/%2C/,/g;s/%2F/\//g;s/%3D/=/g; s/%3B/;/g;s/%3F/?/g;s/%26/\&/g;s/\\u0026/\&/g;s/%252C/,/g;s/%252F/\//g;s/%22/\"/g; s/%255B/[/g;s/%255D/]/g;'|exec sed '/itag='"$1"'/!d;/video.mp4/!d;/webm/d;/ytplayer/d;s/;+codecs.*//;s/&xtags.*//;/timedtext/d;s/&itag=..//2');test ${#b} = 0||break;test $n -le 9||exit;n=$((n+1));done;case $1 in 18|22)ext=mp4;esac;exec echo curl $3 -4o ${2-1}.$ext $b;1. https://www.youtube.com/watch?v=9xCJ3BCIudI (Dyalog17: Patterns and Anti-patterns in APL: Escaping the Beginner's Plateau)
2. https://www.youtube.com/watch?v=v7Mt0GYHU9A (Design Patterns vs Anti pattern in APL by Aaron W Hsu at FnConf17)
- Did anybody try to use APL (or a derivate) in web development?
- Is the APL job market under-saturated? Or putting it in a different form: is there job opportunities for the 'average Joe'?
I hate verbose, or better, I hate to be distracted by it.
I have never seen a J job posting.
K programmers appear to be in demand, mostly around New York, Connecticut and London (and th occasional posting about a job in Singapore). Salaries are rumored to be low-to-mid six figures.
If you are willing to be much less APLish but still mostly hang around vectors, MATLAB jobs are plentiful but usually require specific experience.
I'd love to see how it handles web dev. It doesn't look like it'd be good at those types of things.
How about just "common mistakes" or "discouraged/deprecated/error-prone/incorrect patterns" or something?
Anti just means "against". The opponent could also fit the suffix (antithesis) or not (antisocial).
Contrast with "non" or "a" or "un'.
Oddly enough the DRY principle seems to discourage patterns, but in the end it seems that it's a matter of moderation.
It's interesting that the author of the article embraces the Write Only code philosophy. If there's an issue - just rewrite it.
Click the “three dots” icon in the top right and it should be obvious from there.
(The “accessibility view”, accessed in the same place, is also worth a try)
ps: this might only work for a while but here's an url
https://sway.com/s/b1pRwmzuGjqB30On/exportstoryget?fileType=...
It's not about the code, it's about transforming between different shapes of information. I suspect this requires a degree of kinesthetic thinking that most people do not have, similar to the phenomenon of aphantasia. Linear, word based thinking is not the best for everyone, and for those averse to it, there's APL.
1000x this. My visual memory is better than my memory for sounds (words). That's why I'm compelled to APL and derivates, Haskell or even Coffeescript.. it's way easier to have a macro understanding of the code.
I feel there's a misunderstanding in how you use "non-transformative" versus how I interpret it. E.g. aren't interactive charts mostly about transformations? (data => aggregation => affine transforms => render the graphics)
In first grade it would probably be identical to traditional notation, and you wouldn't need a computer because learning to evaluate by hand would be the whole point. Then as more operators are added it's a convenient way to not have to worry about operator precedence. And in higher grades where programming classes are increasingly being mandated (despite there being next to no teachers capable of teaching it) they would have already picked up enough of APL to get it for free, making it a mere typing exercise to put it into the computer for execution.