Xah Programing Blog

Windows Open File Dialog Slash Problem
for programers. here are few critical article for programing language syntax designers. and if you are a lisp fan or WolframLang fan. you get an in-depth understanding of syntax issues.
- What Are Good Qualities of Computer Language Syntax?
- Why Syntax is More Important Than Semantics
- Concepts and Confusions of Prefix, Infix, Postfix and Lisp Notations
- Fundamental Problems of Lisp
- LISP vs WolframLang
- How Purely Nested Notation Limits the Language's Utility
repost
AI is Unstoppable, Tech is Unstoppable

lol. but the thing with tech is, it's not pausable. If you pause, for ethic or other reasons, others will do it. Then, u will follow or perish. That's what technology is. (AI, robotics, genetics, bio, nano, gigagun, clones, chimera, borg, all's coming.)
on GPU vs CPU algorithms compilation, C++, parallel computation, Wolfram Physics


ChatGPT, Turing Test, Sentient AI?
The chatGPT opened a chapter in AI, but we learned that, a machine that can write human quality poem, is not intelligent, nor is passing turing test.
After a while, you learned that chatgpt is dumb as hell. It just synthesize web text, and fails everytime when asked a math question. It has no understanding at all.
This really presses the question, that if AGI, will develop a mind of its own, at all.
It seems to me, we are even more remote from developing a Sentient AI. But also, we realized, AI needs not to reach sentient to be destructive.
damn stupid twitter card.
twitter under jack dorsey, created twitter card, so that your site will have a preview image and title and short summary etc when link is posted to twitter. by adding a bunch of meta tags.
but the tech exist, from the facebook zukerbug skum, and is call “open graph”. of course, jack dorsey refuse to use it so he create something special just for twitter, and is called “twitter card”.
and but, twitter card spec is idiotic. it requires a title tag, and a “type” tag (type being “summary” which contains a image thumbnail, or large image, or app, or for video)
get sha256 hash of a file
Get-FileHash -Algorithm SHA256 filename
# get sha256 hash of a file Get-FileHash filename

misc updates
updated.
Programing Exercise: Show Difference of Sorting Unicode Characters by Code Point vs Code Unit
/* unicode exercise. 2023-04-04 come up with example to demonstrate sorting by code unit and code point */ const xx = ["fi","😆"]; console.log( xx.sort() ) // [ "😆", "fi" ] const yy = ["﷽","😆"]; console.log( yy.sort() ) // [ "😆", "﷽" ] /* 😆 codepoint 128518 name: SMILING FACE WITH OPEN MOUTH AND TIGHTLY-CLOSED EYES fi codepoint 64257 name: LATIN SMALL LIGATURE FI ﷽ codepoint 65021 name: ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM */
JavaScript. the other example to demonstrate sorting by code unit and code point, is bismilla ﷽ . Unicode Arabic ش Unicode Arabic ش

Microsoft Windows snip and sketch problems and shareX
on Microsoft Windows, the screenshot software snip n sketch sucks. it has multiple problems. 10% of time you got error saying app cannot open. does not auto-save. and when you manually save, it takes a whopping second to popup a save dialog. and then with offensive “please wait while we let ink dry”.
shareX been using for 2 years, but also have sundry problems. major problem is that it has a delay when you start to drag a region with touchscreen or drawing tablet. this means, you cannot select a precise region. (workaround is to double click on the starting point then drag) but it's builtin drawing tool also does not support stylus or touchscreen well. also a delay problem, so you cannot use it to write anything. (it's also using jagged bitmap lines.) its user interface is extremely complex and sucks donkey ass, with tiny font you cannot read.
currently trying flameshot. ok, flameshot also got the delay problem. in flameshot, no delay when starting to select a region. great. but when u start to write notes, there's a 0.3 sec delay. e.g. try to write the word “with” in cursive, the dot and horizontal line for letter t won't appear, unless you wait for a fraction of sec before each stroke. much better than sharex and simpler, but still sucks.
one major problem i found with the elaborate setup i eventually did with sharex and have it launch paint.net is that, after u write something in paint.net, it won't copy result into clipboard. u have to do select all and copy, if u want the screenshot with notes u've written on it, to paste somewhere. this select all and copy, is a major problem when u on a tablet sans keyboard
gosh. some a simple need, no satisfactory solution.
here's a summary. all i want, is do a screenshot, select region of interest, and write some notes on it with touchscreen or drawing tablet, and have the final result auto saved and auto copied to clipboard. all this done on a tablet (Microsoft surface pro 4), sans a keyboard.
actually, Microsoft snip and sketch is the solution. except Microsoft is pretty lousy, that the app fails to start 1 in 20 times or so. and once a month, it completely fail to start, unless u restart windows. but so far, all other complex solutions, seems require more work.
ai bot chats a hogwash.

xtodo review/repost
Steve Yegge has a new blog
- [Cheating is All You Need By Steve Yegge. At https://about.sourcegraph.com/blog/cheating-is-all-you-need ]
- great to know steve yegg has a new blog.
- though, yegg is dramatic, and his blog is in this style of dramatic babbling.
- instead of getting down to business, he babbles a lot in the bleeding-edge-sillicon-valley-start-up teen mindset, presuming you too knows the mindset of make-money-and-change-the-world startups disruptive.
- the main point of his this blog, is about how chatgpt is gonna revolutionize programing or get coders jobless. i no think so.
- ai will have major impact starting this year, i believe, as big as say, smart phone changed how we live, or internet in general, and vast more later. but as for coders worrying about their job, well, programer's job is the least thing it affects.
minor updates and new
- Object Oriented Programing (OOP) Jargons and Complexities
- understand oop in terms of functions. jargons e.g.
- Classe, Method, Obj, Static, Instance
- Constructor
- Accessor
- Access Specifier
- Inheritance
- Class Hierarchy
- Mutation of “Interface”
- Abstract Class
- Abstract Method
- Rise of Iterator, Enumerator
- Polymorphism
- Official Java Tutorial on Interface, the Inanity
- Java Array Syntax Soup: Syntactic Irregularity and Ad Hoc Logic
- Java: Arrays
- A Functional Programing Architecture on JavaScript and Object Oriented Document Object Model
- Java problem: no Java runtime present, requesting install
- Java Doc Idiocy: -cp -classpath Not in Man Page
some old articles.
- Practical Aspect of Expressiveness of a Language
- What is Function, What is Operator?
- Abuse of Logic Operators (Short-Circuit) as Control Flow
- Variable Naming: English Words Considered Harmful
- My Impression Of Lisp from Mathematica
- Why Python's Documentation Sucks
- Why You Should Avoid the Jargon Tail Recursion
What is functional programing
Let me give u a quick guide about functional programing. There's an academic definition. Basically, ur code mostly are just function calls. Function here means like mathematical function. The important thing is, no side effects, means, the function's behavior purely depends on its arguments. Same args, same output, always. And this practically means, don't use global vars, etc in ur subroutine. That's the academic def of fp. Which then can get more complex. This is when, u hear currying, first class citizen, monad, referential transparency, and faaks like that.
the above is academic view of functional programing. which often is a math based view.
now, let me give practical view, which is more or less how i began it. the practical view, is that, when you write a subroutine, any lang, you notice, usually it's better if you no use global vars inside it. because that makes your subroutine behavior less predicable, more bug prone, etc.
i notice, it's nice, if you always write your subroutine such that the behavior just depends on the parameters. aka known as no-side effects, or, pure function.
this also makes your subroutine independent, you can move it from code to code. and, once you write subroutines that way, it becomes widely usable across, aka code-reuse.
once you started to write your code this way, in any lang, after a few years, gradually, you'll notice other things you tend to do. e.g. you want the lang to be able to take a subroutine as arg, or output a subroutine. (this is known as function being 'first class' object, academic speak a la scheme lisp)
also now, if most or all your subroutines are side-effect free, that's called referential transparency, academic speak. meaning, you can just move any function to any other place.
once you are used to moving function around, you notice, why not other things, such as if statements.
i.e.
you want if statement to be expression, e.g.
like c's
(test ? doTrue : doFalse)
so that you can move if expression just like you mave functions about.
and then, why not make for-loop as expression, or any other. basically, you started to want all statement being expressions. this is why, in many functional programing languages, everything are expressions.
The AI Threat, Year 2023

File path functions in various langs. You can compare their design.
Short History of Ocaml
- in the beginning there's meta lang, aka ML.
- in 80s or 70s.
- it's in proof theory background.
- over the years it got many branches. Alice, SML (standard ML), CAML (category something meta lang), then OCaml (Object). Then in 2000, Microsoft Windows created fSharp from ocaml.
- of these, ocaml is the most popular. (not sure about fsharp)
- haskell is created in 80s, a decade or so after ML.
- haskell is pure FL. i.e. does not allow mutation at all, and forces lazy eval, and also forces you into monad or other academic shit.
- ML is more practical, faster.
- ocaml since 90s, has a lot major industrial software written in it.
- LIME or whatsthename i forgot the most popular peer-to-peer client of 2000s, unison, and lots others.
- and, most proof systems lang are written in ocaml. e.g. coq, hol, etc.
major updates.
Windows terminal wt not found
updated.
reposts and minor updates
updates and repost
- 🆕 Web Badges 2005
- 🆕 Reddit User Interface Forcing Random Topics (2018)
- 🆕 What is a Browser
- Google Screws Microsoft Browser
- Google AdSense Ban on Ancient Asian Goddess Sculpture Page
- Google AMP Scam
- Google Do Evil
- Google Chrome Browser Login Scam
- Brave Search
- Apache Rewrites History: Why is it Named Apache?
misc updates.
- 🆕 The Original Jargon File (Year 1983) (The Hacker's Dictionary)
- 🆕 Meaning of Bug in Computer Programing
added new images
misc minor updates
updated.
updated.
misc updates
how much you make on YouTube

updated or new
more js updates. worked in past week.
- JavaScript: Object Overview
- JavaScript: Object.prototype.isPrototypeOf
- JavaScript: Prototype and Inheritance
- JavaScript: Use Object.create to Emulate Constructor
- JavaScript: Property Key "prototype"
- JavaScript: Property Key "constructor"
- JavaScript: Reflect.get
- JavaScript: Reflect.has
- JavaScript: “in” Operator
- JavaScript: Symbol Tutorial
- JavaScript: Access Property
- JavaScript: Optional Chaining Operator
- JavaScript: typeof Operator
- JavaScript: Determine Type of Object
- JavaScript: Object.prototype.toString
massive update on my JavaScript tutorial in past week
JavaScript Regex Functions, major rewrite. they are very confusing, badly designed.
- JavaScript: Regex Functions
- JavaScript: String.prototype.matchAll
- JavaScript: String.prototype.replace
- JavaScript: String.prototype.replaceAll
- 🆕 JavaScript: Regex Replacement String Dollar Sign Sequence
- 🆕 JavaScript: Regex Replacement Function Arguments
- JavaScript: RegExp Flags
some new custom functions
one example of the worst JavaScript function design. Cannot say which is worse, JavaScript or Python. JavaScript: String.prototype.match (tech writing aspect: page rewritten with clarity. compare it to mozilla mdn (i have not looked))
updates
lots JavaScript in depth updates.
- JavaScript: Object.create
- JavaScript: Object Literal Expression
- JavaScript: ES2015 Object Literal Expression Extensions
- JavaScript: Operator “new”
- JavaScript: Create/Delete Property
- JavaScript: “delete” Operator
- JavaScript: Reflect.deleteProperty
- JavaScript: Reflect.set
- JavaScript: Reflect.get
- JavaScript: Set.prototype.clear
- JavaScript: true/false (boolean)
- JavaScript: Boolean Object
- JavaScript: Boolean Constructor
- JavaScript: Branch Control: if then else, switch
- JavaScript: null
- JavaScript: NaN
- JavaScript: Object.prototype.valueOf
- JavaScript: Object.getOwnPropertySymbols
- JavaScript: Array.prototype.forEach
- JavaScript: Property Key
biggest xmas gift.

xtodo review
xtodo draft
Principle of regularity, in programing language design
i really want to love JavaScript, because its functional programing features. but, JavaScript is truly worst lang, too many big warts. it's inferior to python and ruby.
the worst part that makes js unworkable, is lacking comparison of object/array, and array isn't really array. and no builtin lib, even with js 2022. its lib system is complex shit, even with deno.
ruby is a far superior lang than python and JavaScript. also far better than emacs lisp, Common Lisp, and perl. and in particular with respect to functional programing, but also for object oriented programing
ruby is one of those lang, that is systematic. like WolframLang. you learn a handful of principles, and you understand the entire language. golang is similar.
this, i would call, the PRINCIPLE OF REGULARITY, in programing language design. it has 2 parts. regularity of syntax, and regularity of semantics.
What constitutes a functional programing language?
first and most fundamental, is that the lang must support:
- function expression. i.e. all functions are expressions. (python fails this. it has lambda, but limited to simple functions.)
- function must be able to take f as arg
- function must be able to return f as value.
- function application can be done syntactically inline. e.g. f(x), where f is a function expression not necessarily named. (emacs lisp, Common Lisp, python, fails this.)
- it's branching construct e.g. if, loop construct, must have a functional form. (e.g. python's lisp comprehension fails.)
- Ruby: Learn Ruby in 1 Hour
- Ruby: File Name Extension
- Ruby: Run Script
- Ruby: Print
- Ruby: Newline and Indentation
- Ruby: Type Conversion
- Ruby: List Object Methods
- Ruby: List All Classes
- Ruby: Function Name Ending in Exclaimation or Question Mark
- Ruby: Value Types
- Ruby: Variable
- Ruby: Case Conditional
- Ruby: Array
- Ruby: Call Shell Command
- Ruby: Define Function
- Ruby: Sigils (Function and Variable Name Conventions)
What Object-Oriented Programming Was Supposed to Be: Two Grumpy Old Guys' Take on Object-Oriented Programming
cites my website

updates
- AutoHotkey Tutorial
- 🆕 AutoHotkey: File Name Extension
- 🆕 AutoHotkey: Launch App
- 🆕 AutoHotkey: Insert Text
- AutoHotkey: Toggle Maximize Window
- 🆕 AutoHotkey: Insert Bracket Pairs
- AutoHotkey: Disable Capslock
- 🆕 AutoHotkey: Disable Windows Key
- AutoHotkey: Useful Scripts
- 🆕 AutoHotkey: Remap Keys and Key Macro
- 2022-10-20 write git commit multi line. use single quote, or multi -m
when you do
git commit -m"multi message"
the git may merge your lines into a singe line.
this happens if you are using the bash shell.
works in PowerShell (xtodo test)
updates and new
lots git tutorial update.
more unicode updates.
new panel and updates
go thru ur browser settings, turn off auto anything. no autofill no autopswd no sync nothing. and no themes whatsoever. turn off spellchecking too. off any auto suggestion. off with their heads.
- yeah.
- let me explain extempore what's currying, the why, the gist.
- in theoretical comp sci, u no need function with more than 1 arg.
- cuz, function with 2 arg, can be rewritten as nested apply of functions each with 1 single arg.
- so, in theoretical work, we just consider all functions is just 1 single arg.
- much simpler framework.
- this is why, this idea, went into ml and then haskell.
- what they do is that, when u have a function of more than 1 arg, they auto decompose into functions with just 1 arg.
- important and critical: this is done automatically.
- technically speaking, these langs do not allow even, functions with multi args.
- simply impossible.
- but, they do provide a syntax, aka sugar syntax, so that it is convenient to define f with arity of 2 or more.
- this is simply a sugar syntax, added, so that the lang becomes usable for coding.
- now, a better name for currying, is auto decomposition of functions of multi args.
- this makes it vastly easy to understand, and demystify the curry fuck.
- the fp people uses the term currying, is similar to other's use of jargons, eg the unix folks and oop or other, to signal in-group ness. e.g. much like gangsters with their jargons, or zoomer with theirs.
- e.g. zoomer: say coomer, not masterbater. cuz the former signify u r in-group. the latter signify u r outsider -- a normy.
- similar for unix heads with unix jargons, linux, perl, python, emacs with its meta buffer scratch, etc.
- now back to curry.
- ok, so now, let's call it, auto decompose function arity.
- now, there's important distinction or nuance of what this is.
- what most think of currying, as some sorta string together function sequentially. this is WRONG and major misleading.
- because, if currying is simply separate multi arg into 2 functions, then, every lang can do it. u simply define a new f as old f with 1 arg filled.
- but currying, is, if u take the decompose name: automatic decomposition of function with multi arity, all becomes clear.
- ie it is a programing language feature. not a programing style.
- as a programing style, u gain nothing.
- as a programing lang feature, there's significance, as mentioned before, theoretical significance. cuz now, ALL, ur functions, are just 1 arg. ALL.
- there no exist, monsters that's function with more than 1 arg.
- that's the key. and is so, in ml and haskell.
- with this, it's also much easier to handle types. which these langs's foundation is based on.
- cuz, if u have a f with multi parms, u have a combinatorial problem of type explosion.
- but, now, with currying (the auto decompose), they are simply transformation of values, from type to type.
- end of xah edu corner extempore. episode 202210260827
- --------
- and ps: there's a large idiot, goes by the name of john something, a big troll, fanatic of ocaml, used to spread large fakenews and stirup things and diss haskell
- !info currying
- bot down. ☹
- 🆕 Unicode: Bank OCR ⑆
- 🆕 Unicode Look-Alike Math Symbols
- 🆕 Unicode Lambda λ
- Unicode: Punctuations • ✓ ™
- Common Unicode Characters ✓ © § ❦
- Unicode: Brackets, Quotes «»「」【】《》
- Unicode IPA æ
- Unicode Latin é ö ñ æ ß ð
- Unicode Math Symbols ∑ ∫ π² ∞
- Unicode: Slash, Solidus / ⫽ ⫻
- Unicode: Reference Marks † ‡ ¶ § ☛ ⁂
- Unicode Symbols for ASCII Control Characters ␀
- Unicode Blog
misc updates:
Brave browse now has vertical tabs now
- goto
brave://flags/#brave-vertical-tabs
to turn it on. Thanks to https://www.robinwils.com/
- Safari also have vertical tabs now.
- Firefox, bookmark all tabs: Ctrl + Shift + d
now on own pages. easier to search.
xtodo read
- [After self-hosting my email for twenty-three years I have thrown in the towel. The oligopoly has won. By Carlos Fenollosa. At https://cfenollosa.com/blog/after-self-hosting-my-email-for-twenty-three-years-i-have-thrown-in-the-towel-the-oligopoly-has-won.html ]

lots updates.

in WolframLang the square bracket is always used as a function argument. it has a systematic grammar. almost no exceptions. x[y] while x is not a function nor x[y] a transformation rule, eval to something, breaks it.
lots updates.
added extracting lzip
- 🆕 Unicode: Byte Order (Endianness)
- 🆕 Endian_war_1980_Danny_Cohen.txt
- Unicode: BOM, Byte Order Mark
- Unix Shell Shebang Hack #!
more related updates:
ruby install on windows, almost 1 gigabytes.

massive updates and new
- WolframLang: Print Version
- WolframScript Tutorial
- WolframLang: Find/Replace Script
- Wolfram Language File Encoding
- WolframLang: List of Char Encodings ($CharacterEncodings)
$CharacterEncodings
- a builtin variable. value is a list of character encoding that WolframLang supports. $CharacterEncodings
$CharacterEncoding
-
a builtin variable. value specifies the default encoding to use by input and output functions.
Default value is
$SystemCharacterEncoding
$CharacterEncoding $SystemCharacterEncoding
-
a builtin variable that specifies the default encoding.
on Microsoft Windows 10 as of 2022-10-19, value is
"WindowsANSI"
$SystemCharacterEncoding CharacterEncoding
- an option for some input output functions. CharacterEncoding

new and updates
- 🌟 JavaScript: Get UTF-8 Encoding🚀
- 🌟 JavaScript: Get UTF-16 Encoding 🚀
- JavaScript: String.fromCharCode
- JavaScript: Convert Decimal/Hexadecimal
- JavaScript: Number.prototype.toString
- JavaScript: Number.parseInt
- JavaScript: Unicode Escape Sequence
- JavaScript: Count Chars in String 🚀
- JavaScript: Xah Functions
misc updates
- JavaScript: Test Array Equality
- JavaScript: Array.prototype.flat
- JavaScript: Array Basics
- JavaScript: Array-Like Object
- JavaScript: the Set Object Tutorial
- JavaScript: Property Overview
- JavaScript: Property Attributes: enumerable, configurable, writable, value
- JavaScript: Reflect.defineProperty
- JavaScript: Function Parameters
- JavaScript: instanceof Operator
updated.
updates.
updates
- What is Binary Number
- What is Byte
- ASCII Characters
- What is Codepoint (Character ID)
- Unicode: Whitespace Characters Representation ⇄ ⇥ ↦ ▷ ␣ ¶ ⏎
- Golang: Rune
- Golang: String, Byte Slice, Rune Slice
- Golang: Print String as Sequence of Byte/Char/Codepoint
- Golang: Printf Verbs
- Golang: String Backslash Escape