Xah Programing Blog
syntactic obsession, imperative despisal, hacker hate, unicode love ♥
what's an operator in computer language?
in js, comma is an operator, but not the comman in array. here's the spec ECMAScript 2015 §ECMAScript Language: Expressions#sec-comma-operator
=, such as
x = 4, is also an operator. But it could just be said as syntax.
new Date(), and
delete obj.prop and
typeof obj, and
prop in obj,
are all considered as operators in js spec.
(test ? true_expr : false_expr)
ECMAScript 2015 §ECMAScript Language: Expressions#sec-conditional-operator
var x; is considered a statement.
ECMAScript 2015 §ECMAScript Language: Statements and Declarations#sec-ecmascript-language-statements-and-declarations
there does not seem to be a absolute definition that qualify something to be operator or just syntax or “statement”.
on the rectification of programing language spec by formal language
0 it's time, for, Xah Edu Corner Extempore! Episode 20161205145300, on the rectification of programing language spec by formal language
1 i've read most of the js spec. let's take a look at this ECMAScript 2015 §Indexed Collections#sec-array.prototype.concat
2 you see js spec use algorithms as description. lots steps with abstract operations. To understand them, see ECMAScript 2015 §Abstract Operations#sec-abstract-operations
3 using algorithm to describe thing is hard to understand. like, read code, and you have to figure out what it's doing, and all side effects.
4 here's example of description by how to: gcd(a,b)=a, gcd(a,b)=gcd(b, mod(a,b)), mod(a,b)=a-b*floor(a/b). what's gcd?
5 example of description by what-is: gcd(a,b), returns the largest positive integer that divides the numbers without a remainder. a≠0 or b≠0.
6 the what-is form is much easier to understand than the how-to. because, reading doc IS to know what-is. like reading API vs implementation.
7 the what-is is math (including computer science), and how-to is programing.
9 using algorithm as a spec is unfortunate. but using English to do that is worse. js sec is verbosity multiplied by complexity.
11 if we stick with algorithmic approach to spec, might it possible to replace the english by a program? say #haskell, #ocaml #coq?
fundamental diff of math vs comp sci is “what is” vs “how to”
fundamental diff of math vs comp sci is “what is” vs “how to”, and it is theoretically impossible to translate one to the other.
even for simple algorithms, it's difficult to translate it as What IS. (cellular automatic is a hard example) 〔➤see Notes on A New Kind of Science〕
linux speaker test. make sound, beep
# linux speaker test speaker-test -t sine -f 440 -l 1 -p 1000
clojure vs golang
clojure's dependence on java kills it. use golang instead. simpler, equally powerful, 10 times more adoption, no java baggage, faster.
ironically, reason clojure is used in industry is mostly because it depends on java. it's the escape route of existing Java systems.
python 3 vs JS ES6
if you look at js es6 Grammar, it's extremely complex. I suppose C C++ java etc at the same level of complexity. ECMAScript 2015 §ECMAScript Language: Lexical Grammar#sec-ecmascript-language-lexical-grammar
using libraries increases engineering convenience, but software reliability for user may actually go down
Unix Idiots Panel Index. ancient articles, new index.
Perl Idiocy Panel Index. ancient articles, new index.
Microsoft Hatred Panel Index. ancient articles, new index.
Linux: How to Install Font, List Fonts (minor update)
open source hypocrisy
if you are FSF/OpenSource advocate, but uses Mac, iPhone, or work for Google, Apple etc, you are really a hypocrite. matter of fact.
oop and code reuse
a decade ago, the idea that object encourages code reuse is everywhere. now, it's commonly accepted not really. Depends, or OOP decrease code reuse.
Fad in programing is hard to kill. Coding army ten thousand strong calls you a troll.
On Microsoft Hatred (ancient article, new navigation panel)
ban jargon “instance”
hacker news yc website idiocy
the hacker news yc is truly idiotic. when in tablet, need a microscope to read. 1990s html, written in a born dead arc lisp.
Unicode Cross ✙ ✞ ⛨ ♰ 🕈 ✠ 卍 (new page)
OCaml, Haskell, Syntax came from ISWIM
Been reading ISWIM, most idiotic technical writing. baroque, era dependent, complex grammar structure.
ML, ocaml, haskell syntax came from ISWIM. It is truly unfortunate. Particularly bad is the English “where” clause (like in SQL), and the “off side rule” (like python's indentation), which haskell adopted.
the paper was influential, but the idea of syntax algebra isn't there. So, by missing a aspect, it did long lasting damage. Like Knuth's TeX, or the C++.
for details, see
〔Open Source is Ceasing to be Cool By Dr Mark Tarver. @ http://www.marktarver.com/open.html〕
Mark Tarver is the creator of Shen lang.
RethinkDB Shutdown, or, how to make money with open source
SageMath on RethinkDB shutdown. how to make money with open source… http://sagemath.blogspot.com/
i fear that some people will never be successful starting a company regardless of plan. You need 1 thing foremost: a greed mentality, advance yourself.
I interviewed with RethinkDB people about 2 years ago. Sad to seem them shutdown. Best wish to them.
new lang, pyret
see bottom Proliferation of Computing Languages
#remove xfce stupid locker sudo apt purge light-locker
#install classic xscreensaver sudo apt install xscreensaver
Etymology Execute — the most annoying word in tech writing. When you use it, you connote killing and truth-hiding.
new panel index. Collected essays about computer language's syntax.
Syntax Algebra (on its own page)
hum, new python book, Fluent Python
writing a compiler ain't no easy. So much to learn. Lots theory stuff, very different than common programing such as web dev.
yet, parser and compiler is one of the very first programing problem, and practically solved decades ago. You need it to create a language.
however, for vast majority of programers, you'll never need to learn or know anything about parser/compiler. Simply out of the picture.
Why is DRM Not Working?
there are software that costs thousands. but it seems, always available on pirate bay. Can anyone explain this? is DRM tech not robust, or technically / inherently impossible, or what?
Am thinking Microsoft Windows, OS X, PhotoShop, Mathematica, AutoCAD. These are big companies, so that should rule out not doing DRM correctly.
can anyone explain the gist? any articles?
suppose i sell software X. I send to you, you install, it generates a id based on your machine. You send me id, i send you key.
In reply to Xah Lee
Gergely Nagy @algernoone
@xah_lee The id check can be patched out. Or the id generation cracked. Its likely automated, so mitm. Among other things.
In reply to Xah Lee
Gergely Nagy @algernoone
@xah_lee Also, if the id is generated after install, you can pirate, upload, etc the uninstalled installer bundle. And others can crack it.
the utility of in depth tutorial?
when you need to know some painful detail of a lang not covered by basic tutorial, you are on the verge of abusing the lang. Question your need/approach.
well, in depth tutorial is actually still useful, because the spec may be hard to read or doesn't exist. And, for many things, it may be hard to test to find out.
e.g. what happens if you put arg in function syntax here and call it that way, etc.
English writing. I've been trying to get rid of e.g. for years, but just never found a way. “for example” is just annoyingly long.
〔The piracy paradox at Udemy By Troy Hunt. @ https://www.troyhunt.com/the-piracy-paradox-at-udemy/〕
- udemy is a online learning platform. It lets people upload courses, and learner buy them.
- But udemy has a piracy problem.
- That is, you write a tutorial for something, and people steal it and sell it on udemy.
- And this seems to be happening a lot.
- udemy is likened to youtube, that itself doesn't filter or check for quality.
hackers in the 1990s, are interested in literature, linguistics, nerd as walking encyclopedia. Today, i don't seem to see much.
Today's coder gone illiterate? or, perhaps social media and too much info made the real nerd hard to find?
selected collection of lisp essays.
Revamped index. Collected criticism of computer lang docs.
Xah Python Tutorial Accolade
MiniKanren relational language, name origin
MiniKanren relational language. The name “kan ren” came from Japanese 関连, which is Chinese, meaning “relations”. lol
html navigation panel implementation redone
redone navigation panel for all my sites.
2601 files changed.
and the following files created
The change shouldn't be visible to user. It's implementation changed, for the side panel.
For those curious, here's the deal.
before, each page contains the whole static html side panel. That is, a list of links is duplicated in every file. The problem is, if you want to change the navigation bar, you have to change every file. You also have to make sure that every file's text is exactly the same. And, if one file happens to have a extra space, that causes problem in your find/replace script when you change the side panel.
now, the new implementation, the nav panel is a file by itself, and is embedded in each page as iframe.
The disadvantage using iframe is that each page now needs to make an extra http request. (but it's cached, good if the nav panel contains several images)
on the whole, i think with iframe is much better. The iframe solves a major issue about navigation panel i had, that is, it's not possible to keep the side panel code identical when articles are in different directories. (and the consequence of that is you cannot use find/replace anymore when you want to change side panel.)
here's a sampling, hope it's interesting.
- Python Doc Problem Example: sort()
- Idiocy of Computer Language Docs: Unix, Python, Perl, Haskell
- Once upon a troll…
- Paul Graham's Infatuation with the Concept of Hacker
- The Jargon Automata in Finite State Automata
- On the Question of Too Many Programing Libraries
- OOP's Jargons and Complexities
- Netiquette Anthropology: Tales of Tech Geekers
- Clojure Instaparse Parser Tutorial
- Curves and Their Properties: Catenary, p012
- How Compiler Works
after Shakespeare 〔➤see The Tragedy Of Titus Andronicus by Shakespeare〕 , Sir Richard Burton's arabian nights is the most fascinating literature and style i've read.
here's a story of The Arabian Nights, where girls fight to suck… The Arabian Nights: 70. ABU AL-ASWAD AND HIS SLAVE-GIRL
and this is the most wondrous scifi. finish in couple hrs, understand 4th dimension.
best short scifi. FLATLAND: A Romance of Many Dimensions
can finish in few hours. You'll understand 4th dimension. It's also a social philosophy, mock history, and a tragedy.
Weird Unicode Math Symbol: DIFFERENCE BETWEEN
- name: DIFFERENCE BETWEEN
- codepoint 8783, x224f
unicode symbol becomes pictograph, a problem
wow, unicode “U+FE0E: VARIATION SELECTOR-15”. Add that char after another char to select the variation you want.
Microsoft release PowerShell on Linux and Open Source!
〔PowerShell on Linux and Open Source! By Microsoft. @ https://blogs.msdn.microsoft.com/powershell/2016/08/18/powershell-on-linux-and-open-source-2/〕
for a quick tutorial, see PowerShell Tutorial
pure speculation, but i suspect, any math proof related work/software traditionally done with #ocaml or #haskell can be done with golang easily.
in other words, i don't think there's any critical or foundational stuff in OCaml related to theorem proving.
〔Category Theory for the Working Hacker By Philip Wadler. @ https://www.infoq.com/presentations/category-theory-propositions-principle?utm_source=twitter&utm_medium=link&utm_campaign=calendar〕
why random number is critical in encryption?
yesterday i had a question answered that puzzled me for years. thanks to @johnkitchin @bren_fdez
Q: why random number is critical in encryption?
A: because symmetric cypher is used for payload, and the key is a random number.
understand Public-key Cryptography in 5 minutes Public-key Cryptography Tutorial; What's SSH, SSL, TLS, AES, SHA-1, MD5
learn Julia in y minutes. https://learnxinyminutes.com/docs/julia/
functional programers and Golang
i've heard a few functional programers in my circle criticize golang. I think it's more like “it's not my clan” type of thing
i've also heard a few functional programers in my circle loving rustlang. I think it's “i don't want golang to win cuz its from skynet”
golang is fantastic. It's spec The Go Programming Language Specification - The Go Programming Language is shorter than Scheme Lisp now.
the best golang tutorial is https://gobyexample.com/ by @mmcgrana , simple, concrete, by example, no more.
line diff and semantic diff
recently there's idea of semantic diff. not line diff. Note that, line diff originates from unix brain damage of line truncation.
actually, the very concept of diff should be ban'd, line or semantic. Am not sure the detail, but a haunch
when programers use math jargons
when programers talk about math, such as git directed acyclic graph, or haskell monad, or some http ideompotency, or lisp homoiconicity, they dunno which side is mouth, which side is ass.
see also Jargons of Software Industry
ocaml haskell are not math language, julia is
am beginning to see, ocaml haskell isn't my thing. like C, they are still computer engineer's by-product, not mathematician's thing.
i want a lang that's Wolfram Language in design principle but efficient. A mathematician's lang. I think, Julia is my hope.
what's this math lang i speak of? it's a lang where concepts of computer engineering by-product does not surface in the lang. if so, it's explicit.
are there such lang? yes. APL, Matlab, Wolfram Language, Julia.
whatever relation of ocaml haskell has with math, is only a historical happenstance. As lisp is.
the major concepts of comp engineering by-product are: int float double long reference pointer. They should be ban'd.
one of the most garish by-product of computer engineering in languages is: main()!
you can judge if a computer language is stupid by whether it has the “main”. Surprise of surprise, haskell has it! no wonder.
Do KNOW, that the origin of ocaml is ML, which is from 1973. Ancient. haskell's concepts and demeanors, belongs to the same lineage.
see also Is Math Important for Programers?
Agile is a cancer that we have to eliminate from the industry. — Erik Meijer
What's Disjoint Union, Sum Type? (on its own page)
Seymour Papert died, 88. Inventor of non-paren lisp: Logo
Seymour Papert died, 88. Invented “logo”, probably first non-paren lisp. Logo pioneered “turtle graphics”, we see in Scratch and Processing languages today.
I never learned logo, but ~1992 read a lot story about it, fascinated. I was busy doing Mathematica, this Visual Dictionary of Special Plane Curves
particularly interesting about logo is that there's a 3 volumes book 〈Computer Science Logo Style〉 amazon by Brian Harvey, another lisp pillar.
Brian Harvey is another lisp pillar.
History of OCaml Syntax, and The Next 700 Programming Languages
OCaml Syntax Sucks (heavily expanded, on its own page.)