gvgai Updated 2025-12-13
The project kind of died circa 2020 it seems, a shame. Likely they funding ran out. The domain is dead as of 2023, last archive from 2022: web.archive.org/web/20220331022932/http://gvgai.net/ is marked as funded by DeepMind. Researchers really should use university/GitHub domain names!
Similar goals to Ciro's 2D reinforcement learning games, but they were focusing mostly on discrete games.
They have some source at: github.com/GAIGResearch/GVGAI TODO review
From QMUL Game AI Research Group:From other universities:TODO check:
- Simon M. Lucas: gaigresearch.github.io/members/Simon-Lucas, principal investigator
- Diego Perez Liebana www.linkedin.com/in/diegoperezliebana/
- Raluca D. Gaina: www.linkedin.com/in/raluca-gaina-347518114/ from Queen Mary
- Ahmed Khalifa
- Jialin Liu
Paris Updated 2025-12-13
Ciro Santilli lived in Paris for a few years between 2013 and 2016, and he can confirm the uncontroversial fact that "Paris is Magic".
Not just one type of magic though. Every quarter in Paris has its own unique personality that sets it apart and gives it a different mood.
Ciro knows Paris not from its historical facts, but from the raw feeling of endless walks through its streets in different times of the year. Ciro is a walker.
Maybe one day Ciro will expand this section to try and convey into words his feelings of love for the city, but maybe the effort would be pointless. Maybe such feelings can only be felt by other free-roaming walker souls living in the city, and that is both beautiful and a shame.
Ciro had written the following in the past before he lived in smaller cities, started cycling and joined the Street reclamation movement he thought:Perhaps compared to São Paulo City, which is what he knew before that was true. But no, his standards have improved since. Paris has way too many cars. The noise of internal combustion engine vehicles is extremely annoying. And because there are too many personal vehicles, cars have to horn a lot to fight for space. Fuck cars. Paris has been making a big cycling push in the early 2020's, and that is great. But it is still far, far from good.
Paris is a friendly city to walkers, as it is not too large, and does not have too many extremely busy roads, you can basically cross all of it on foot.
ARPA Updated 2026-02-08
How to contact Ciro Santilli Updated 2025-12-25
Ciro Santilli is very happy to meet people with related interests, he really loves his like-minded online friends. Even if you don't have something a specific goal in mind for the contact, please just say hi.
To contact Ciro publicly about any general subject that is not covered in a more specific GitHub repository, including saying hi or suggestions about his website either:
- create a GitHub issue at: github.com/cirosantilli/cirosantilli.github.io/issues/new or Giscus thread
- at mention Ciro's main Twitter account
For comments about China, first read:
and then create a GitHub issue at: github.com/cirosantilli/china-dictatorship/issues/new
Publicly viewable contact is preferred if possible to more effectively share Ciro's wisdom with the world.
But if you feel more comfortable with private contact, no problem, either:
- email: username
cirosantilliwith provider ProtonMail which has domain nameproton.me. Note that Ciro also controls the Gmail address with that same username, and keep in mind that dots are ignored in Gmail addresses. But ProtonMail preferred because why should we give our private minds to the CIA by default? Push notifications disabled. - Signal: username
cirosantilli.89signal.me/#eu/BuJjV0enXYTOnFFc1FZV5LFcWodL1a2Oy9VZ5uyQU7xrYxqw+npIcaHBqghWudrI. 89 is a reference to Ciro Santilli's birth year 1989. Push notifications enabled, but treat like email unless we are actively chatting back and forth.
For other less good methods that will also likely work, use direct messages of the following profiles from under Section "Accounts controlled by Ciro Santilli":Ciro's Twitter DMs are also open, but note that Ciro receives endless Chinese language SPAM there which Twitter is doing nothing to combat, so it's not as reliable.
- LinkedIn: www.linkedin.com/in/cirosantilli
- Reddit: www.reddit.com/user/cirosantilli
- Facebook: www.facebook.com/cirosantilli
- Telegram: telegram.me/cirosantilli. Note that end-to-end encryption is present on secret chats only, which don't have device sync. Ridiculous.
If you are a privacy freak or are going to tell Ciro state secrets Ciro has this GNU Privacy Guard public key: pubkey.gpg, but it's not something that he has ever really used.
Disqus comments were removed from his website in 2019-05-04, a manual dump is available here, removal rationale at: why Ciro Santilli removed Disqus comments from his website in 2019-05-04.
eGroups Updated 2025-07-16
Company co-founded by Scott Hassan, early Google programmer at Stanford University, and Carl Victor Page, Jr., Larry Page's older brother.
The company was sold to Yahoo! in August 2000 for $432m and became Yahoo! Groups. They managed to miraculously dodge the Dot-com bubble, which mostly poppet in 2021. After the acquisition, Yahoo started to redirect them to: groups.yahoo.com as can be seen on the Wayback Machine: web.archive.org/web/20000401000000*/egroups.com The first archive of groups.yahoo.com is from February 2001: web.archive.org/web/20010202055100/http://groups.yahoo.com/ and it unsurprisingly looks basically exactly like eGroups.
eGroups logo
. From the earliest archive of their "about" page: web.archive.org/web/19991004062653/http://www.egroups.com/info/top.html in 1999. Ciro Santilli's 2021 cycling accident Updated 2025-12-25
Ciro had a small accident in 2021. It wasn't ultra serious, a few cuts, but could have been worse. Here's a post mortem.
Ciro was going to cycle 120 km between two locations he had never cycled before. Ciro had cycled this distance before many many times, so he thought he could do it.
What went wrong:
- on both ends were cities, larger than those Ciro is used to
- on the start, was a port city. You do not want to cycle in port areas, ever! Lots of trucks, narrow side-walks, bad road, danger danger!
- on both sides, endless suburbia. This means you have to check your map every 3 seconds to know which little stress to turn, which is very hard without a way to attach your map to your bike. Ciro had his on his pocket. You lose a lot of time like that!
- there wasn't a lot of sunlight at the time of the year. Not critical, but still, less than ideal.
- during the ride, part of the "well documented and safe cycle route" was closed off for repairs. It was unclear what the best alternative would be. Ciro went down a path, but it turned to be horrendous countryside, he had to pull his bike over fences
- by then, Ciro was tired and a bit late. He had only eaten sweets all day long. They give you calories, but there's always something missing in them.
- Ciro arrived at the very very large target city, and it was getting dark, and it was rush hour, lots of cars. This was already back on the official bike path, but even those paths are tortuous in suburbia
- also, Ciro was meant to meet his wife later, and he was in a rush, worried that she would be worried about him
- at one point, Ciro took the wrong turn for a few hundred meters
- he realized, and turned back
- when coming back, now extra impatient because o the wrong turn, the place he had come from was actually one way street for a very short while until the right turn, so Ciro went against the correct direction...
- a car came. It was relatively slow, because the road was slight uphill for the car, and a turn. The slight downhill also meant Ciro was going a bit faster than he realized
- Ciro tried to go into the sidewalk anyways to make sure he was clear off the car (he was already). When he tried, the wheel stuck, and he flew forward, hitting a wall slightly
You have to know when you are tired and hungry and impatient. This is where huge danger lies.
Electronic test equipment Updated 2025-07-16
Electron microscope Updated 2025-07-16
All of them need a vacuum because you can't shoot elecrons through air, as mentioned at Video "50,000,000x Magnification by AlphaPhoenix (2022)".
Electrum Updated 2025-07-16
For the love of God, on Ubuntu install from the official AppImage downloaded from electrum.org/#download, not this random outdated Snap snapcraft.io/electrum:
ELF Hello World Tutorial Backlinks Updated 2025-07-16
ELF Hello World Tutorial Dynamic linking sections Updated 2025-07-16
Noether's theorem Updated 2025-07-16
As mentioned at buzzard.ups.edu/courses/2017spring/projects/schumann-lie-group-ups-434-2017.pdf, what the symmetry (Lie group) acts on (obviously?!) are the Lagrangian generalized coordinates. And from that, we immediately guess that manifolds are going to be important, because the generalized variables of the Lagrangian can trivially be Non-Euclidean geometry, e.g. the pendulum lives on an infinite cylinder.
The most beautiful idea in physics - Noether's Theorem by Looking Glass Universe (2015)
Source. One sentence stands out: the generated quantities are called the generators of the transforms.The Biggest Ideas in the Universe | 15. Gauge Theory by Sean Carroll (2020)
Source. This attempts a one hour hand wave explanation of it. It is a noble attempt and gives some key ideas, but it falls a bit short of Ciro's desires (as would anything that fit into one hour?)The Symmetries of the universe by ScienceClic English (2021)
Source. youtu.be/hF_uHfSoOGA?t=144 explains intuitively why symmetry implies consevation! No-go theorem Updated 2025-07-16
ELF Hello World Tutorial Global file structure Updated 2025-07-16
An ELF file contains the following parts:
- ELF header. Points to the position of the section header table and the program header table.
- Section header table (optional on executable). Each has
e_shnumsection headers, each pointing to the position of a section. - N sections, with
N <= e_shnum(optional on executable) - Program header table (only on executable). Each has
e_phnumprogram headers, each pointing to the position of a segment. - N segments, with
N <= e_phnum(only on executable)
The order of those parts is not fixed: the only fixed thing is the ELF header that must be the first thing on the file: Generic docs say:
In pictures: sample object file with three sections:
+-------------------+
| ELF header |---+
+---------> +-------------------+ | e_shoff
| | |<--+
| Section | Section header 0 |
| | |---+ sh_offset
| Header +-------------------+ |
| | Section header 1 |---|--+ sh_offset
| Table +-------------------+ | |
| | Section header 2 |---|--|--+
+---------> +-------------------+ | | |
| Section 0 |<--+ | |
+-------------------+ | | sh_offset
| Section 1 |<-----+ |
+-------------------+ |
| Section 2 |<--------+
+-------------------+But nothing (except sanity) prevents the following topology:
+-------------------+
| ELF header |---+ e_shoff
+-------------------+ |
| Section 1 |<--|--+
+---------> +-------------------+ | |
| | |<--+ | sh_offset
| Section | Section header 0 | |
| | |------|---------+
| Header +-------------------+ | |
| | Section header 1 |------+ |
| Table +-------------------+ |
| | Section header 2 |---+ | sh_offset
+---------> +-------------------+ | sh_offset |
| Section 2 |<--+ |
+-------------------+ |
| Section 0 |<---------------+
+-------------------+But some newbies may prefer PNGs :-)
ELF Hello World Tutorial Implementations Updated 2025-07-16
- Compiler toolchains generate and read ELF files.
- Operating systems read and run ELF files.
- Specialized libraries. Examples:
ELF Hello World Tutorial Object hd Updated 2025-07-16
Running:gives:
hd hello_world.o00000000 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 |.ELF............|
00000010 01 00 3e 00 01 00 00 00 00 00 00 00 00 00 00 00 |..>.............|
00000020 00 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 |........@.......|
00000030 00 00 00 00 40 00 00 00 00 00 40 00 07 00 03 00 |....@.....@.....|
00000040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000080 01 00 00 00 01 00 00 00 03 00 00 00 00 00 00 00 |................|
00000090 00 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 |................|
000000a0 0d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000000b0 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000000c0 07 00 00 00 01 00 00 00 06 00 00 00 00 00 00 00 |................|
000000d0 00 00 00 00 00 00 00 00 10 02 00 00 00 00 00 00 |................|
000000e0 27 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |'...............|
000000f0 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000100 0d 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00 |................|
00000110 00 00 00 00 00 00 00 00 40 02 00 00 00 00 00 00 |........@.......|
00000120 32 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |2...............|
00000130 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000140 17 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 |................|
00000150 00 00 00 00 00 00 00 00 80 02 00 00 00 00 00 00 |................|
00000160 a8 00 00 00 00 00 00 00 05 00 00 00 06 00 00 00 |................|
00000170 04 00 00 00 00 00 00 00 18 00 00 00 00 00 00 00 |................|
00000180 1f 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00 |................|
00000190 00 00 00 00 00 00 00 00 30 03 00 00 00 00 00 00 |........0.......|
000001a0 34 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |4...............|
000001b0 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000001c0 27 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 |'...............|
000001d0 00 00 00 00 00 00 00 00 70 03 00 00 00 00 00 00 |........p.......|
000001e0 18 00 00 00 00 00 00 00 04 00 00 00 02 00 00 00 |................|
000001f0 04 00 00 00 00 00 00 00 18 00 00 00 00 00 00 00 |................|
00000200 48 65 6c 6c 6f 20 77 6f 72 6c 64 21 0a 00 00 00 |Hello world!....|
00000210 b8 01 00 00 00 bf 01 00 00 00 48 be 00 00 00 00 |..........H.....|
00000220 00 00 00 00 ba 0d 00 00 00 0f 05 b8 3c 00 00 00 |............<...|
00000230 bf 00 00 00 00 0f 05 00 00 00 00 00 00 00 00 00 |................|
00000240 00 2e 64 61 74 61 00 2e 74 65 78 74 00 2e 73 68 |..data..text..sh|
00000250 73 74 72 74 61 62 00 2e 73 79 6d 74 61 62 00 2e |strtab..symtab..|
00000260 73 74 72 74 61 62 00 2e 72 65 6c 61 2e 74 65 78 |strtab..rela.tex|
00000270 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |t...............|
00000280 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000290 00 00 00 00 00 00 00 00 01 00 00 00 04 00 f1 ff |................|
000002a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000002b0 00 00 00 00 03 00 01 00 00 00 00 00 00 00 00 00 |................|
000002c0 00 00 00 00 00 00 00 00 00 00 00 00 03 00 02 00 |................|
000002d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000002e0 11 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 |................|
000002f0 00 00 00 00 00 00 00 00 1d 00 00 00 00 00 f1 ff |................|
00000300 0d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000310 2d 00 00 00 10 00 02 00 00 00 00 00 00 00 00 00 |-...............|
00000320 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000330 00 68 65 6c 6c 6f 5f 77 6f 72 6c 64 2e 61 73 6d |.hello_world.asm|
00000340 00 68 65 6c 6c 6f 5f 77 6f 72 6c 64 00 68 65 6c |.hello_world.hel|
00000350 6c 6f 5f 77 6f 72 6c 64 5f 6c 65 6e 00 5f 73 74 |lo_world_len._st|
00000360 61 72 74 00 00 00 00 00 00 00 00 00 00 00 00 00 |art.............|
00000370 0c 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 |................|
00000380 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000390 ELF Hello World Tutorial Program header table Updated 2025-07-16
Only appears in the executable.
Contains information of how the executable should be put into the process virtual memory.
The executable is generated from object files by the linker. The main jobs that the linker does are:
- determine which sections of the object files will go into which segments of the executable.
- do relocation according to the
.rela.textsection. This depends on how the multiple sections are put into memory.
readelf -l hello_world.out gives:Elf file type is EXEC (Executable file)
Entry point 0x4000b0
There are 2 program headers, starting at offset 64
Program Headers:
Type Offset VirtAddr PhysAddr
FileSiz MemSiz Flags Align
LOAD 0x0000000000000000 0x0000000000400000 0x0000000000400000
0x00000000000000d7 0x00000000000000d7 R E 200000
LOAD 0x00000000000000d8 0x00000000006000d8 0x00000000006000d8
0x000000000000000d 0x000000000000000d RW 200000
Section to Segment mapping:
Segment Sections...
00 .text
01 .dataOn the ELF header, and:
e_phoff, e_phnum and e_phentsize told us that there are 2 program headers, which start at 0x40 and are 0x38 bytes long each, so they are:00000040 01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 |................|
00000050 00 00 40 00 00 00 00 00 00 00 40 00 00 00 00 00 |..@.......@.....|
00000060 d7 00 00 00 00 00 00 00 d7 00 00 00 00 00 00 00 |................|
00000070 00 00 20 00 00 00 00 00 |.. ..... |00000070 01 00 00 00 06 00 00 00 | ........|
00000080 d8 00 00 00 00 00 00 00 d8 00 60 00 00 00 00 00 |..........`.....|
00000090 d8 00 60 00 00 00 00 00 0d 00 00 00 00 00 00 00 |..`.............|
000000a0 0d 00 00 00 00 00 00 00 00 00 20 00 00 00 00 00 |.......... .....|Structure represented www.sco.com/developers/gabi/2003-12-17/ch5.pheader.html:
typedef struct {
Elf64_Word p_type;
Elf64_Word p_flags;
Elf64_Off p_offset;
Elf64_Addr p_vaddr;
Elf64_Addr p_paddr;
Elf64_Xword p_filesz;
Elf64_Xword p_memsz;
Elf64_Xword p_align;
} Elf64_Phdr;Breakdown of the first one:
- 40 0:
p_type=01 00 00 00=PT_LOAD: this is a regular segment that will get loaded in memory. - 40 4:
p_flags=05 00 00 00= execute and read permissions. No write: we cannot modify the text segment. A classic way to do this in C is with string literals: stackoverflow.com/a/30662565/895245 This allows kernels to do certain optimizations, like sharing the segment amongst processes. This member gives the offset from the beginning of the file at which the first byte of the segment resides.
But it looks like offsets from the beginning of segments, not file?- 50 0:
p_vaddr=00 00 40 00 00 00 00 00: initial virtual memory address to load this segment to - 50 8:
p_paddr=00 00 40 00 00 00 00 00: unspecified effect. Intended for systems in which physical addressing matters. TODO example? - 60 0:
p_filesz=d7 00 00 00 00 00 00 00: size that the segment occupies in memory. If smaller thanp_memsz, the OS fills it with zeroes to fit when loading the program. This is how BSS data is implemented to save space on executable files. i368 ABI says onPT_LOAD:The bytes from the file are mapped to the beginning of the memory segment. If the segment’s memory size (p_memsz) is larger than the file size (p_filesz), the ‘‘extra’’ bytes are defined to hold the value 0 and to follow the segment’s initialized area. The file size may not be larger than the memory size.
The second segment (
.data) is analogous. TODO: why use offset 0x0000d8 and address 0x00000000006000d8? Why not just use 0 and 0x00000000006000d8?Then the:section of the
Section to Segment mapping:readelf tells us that:TODO where does this information come from? stackoverflow.com/questions/23018496/section-to-segment-mapping-in-elf-files
Noisy-channel coding theorem Updated 2025-07-16
Setting: you are sending bits through a communication channel, each bit has a random probability of getting flipped, and so you use some error correction code to achieve some minimal error, at the expense of longer messages.
This theorem sets an upper bound on how efficient you can be in your encoding, for any encoding.
The next big question, which the theorem does not cover is how to construct codes that reach or approach the limit. Important such codes include:
But besides this, there is also the practical consideration of if you can encode/decode fast enough to keep up with the coded bandwidth given your hardware capabilities.
news.mit.edu/2010/gallager-codes-0121 explains how turbo codes were first reached without a very good mathematical proof behind them, but were still revolutionary in experimental performance, e.g. turbo codes were used in 3G/4G.
But this motivated researchers to find other such algorithms that they would be able to prove things about, and so they rediscovered the much earlier low-density parity-check code, which had been published in the 60's but was forgotten, partially because it was computationally expensive.
No-Nonsense Quantum Field Theory by Jakob Schwichtenberg (2020) Updated 2025-07-16
This book really tries to recall basic things to ensure that the reader will be able to understand the more advanced ones.
But Ciro Santilli really prefers it when authors error on the side of obvious.
Normal subgroup Updated 2025-07-16
Ultimate explanation: math.stackexchange.com/questions/776039/intuition-behind-normal-subgroups/3732426#3732426
Only normal subgroups can be used to form quotient groups: their key definition is that they plus their cosets form a group.
One key intuition is that "a normal subgroup is the kernel" of a group homomorphism, and the normal subgroup plus cosets are isomorphic to the image of the isomorphism, which is what the fundamental theorem on homomorphisms says.
Therefore "there aren't that many group homomorphism", and a normal subgroup it is a concrete and natural way to uniquely represent that homomorphism.
The best way to think about the, is to always think first: what is the homomorphism? And then work out everything else from there.
Unlisted articles are being shown, click here to show only listed articles.

