master
Miloslav Ciz 3 months ago
parent 47a191f63e
commit a508d177e9

@ -6,4 +6,8 @@ There's a concern that's still a matter of discussion about the dangers of devel
By about 2020, "AI" has become a [capitalist](capitalism.md) [buzzword](buzzword.md). They try to put machine learning into everything just for that AI label -- and of course, for a [bloat monopoly](bloat_monopoly.md).
By 2023 neural network AI has become extremely advanced in processing visual, textual and audio information and is rapidly marching on. Networks such as [stable diffusion](stable_diffusion.md) are now able to generate images (or modify existing ones) with results mostly indistinguishable from real photos just from a short plain language textual description. Text to video AI is emerging and already giving nice results. AI is able to write computer programs from plain language text description. Chatbots, especially the proprietary [chatGPT](chatgpt.md), are scarily human-like and can already carry on conversation mostly indistinguishable from real human conversation while showing extraordinary knowledge and intelligence -- the chatbot can for example correctly reason about advanced mathematical concepts on a level much higher above average human. AI has become [mainstream](mainstream.md) and is everywhere, normies are downloading "AI apps" on their phones that do funny stuff with their images while spying on them. In games such as [chess](chess.md) or even strategy video [games](game.md) neural AI has already been for years far surpassing the best of humans by miles.
By 2023 neural network AI has become extremely advanced in processing visual, textual and audio information and is rapidly marching on. Networks such as [stable diffusion](stable_diffusion.md) are now able to generate images (or modify existing ones) with results mostly indistinguishable from real photos just from a short plain language textual description. Text to video AI is emerging and already giving nice results. AI is able to write computer programs from plain language text description. Chatbots, especially the proprietary [chatGPT](chatgpt.md), are scarily human-like and can already carry on conversation mostly indistinguishable from real human conversation while showing extraordinary knowledge and intelligence -- the chatbot can for example correctly reason about advanced mathematical concepts on a level much higher above average human. AI has become [mainstream](mainstream.md) and is everywhere, normies are downloading "AI apps" on their phones that do funny stuff with their images while spying on them. In games such as [chess](chess.md) or even strategy video [games](game.md) neural AI has already been for years far surpassing the best of humans by miles.
# See Also
- [artificial life](artificial_life.md)

@ -23,4 +23,5 @@ The first BBS was CBBS (computerized bulletin board system) created by Ward Chri
- [multi user dungeon](mud.md)
- [imageboard](imageboard.md)
- [textboard](textboard.md)
- [SDF](sdf.md)
- [SDF](sdf.md)
- [FidoNet](fidonet.md)

@ -2,6 +2,8 @@
The word binary in general refers to having [two](two.md) choices; in [computer science](compsci.md) binary refers to the base 2 numeral system, i.e. a system of writing numbers with only two symbols, usually [1](one.md)s and [0](zero.md)s. We can write any number in binary just as we can with our everyday [decimal](decimal.md) system, but binary is more convenient for computers because this system is easy to implement in [electronics](electronics.md) (a switch can be on or off, i.e. 1 or 0; systems with more digits were tried but unsuccessful, they failed miserably in reliability -- see e.g. [ternary](ternary.md) computers). The word *binary* is also by extension used for non-textual computer [files](file.md) such as native [executable](executable.md) programs or asset files for games.
Operations with binary values are very often handled with so called **[Boolean](bool.md) algebra**, which is originally a type of algebra that works with [sets](set.md) and their operations such as conjunction, disjunction etc. It's just a kind of abstract algebra, i.e. a set of values, operations and rules that are consistent and can be used in many situations; a Boolean algebra can generally operate with more than just two values, however as programmers only deal with 1s and 0s, they adopted the binary Boolean algebra, so in context of computers we understand Boolean algebra to be the one working with 1s and 0s and we interpret the operations of the algebra as [logic](logic.md) operations ([AND](and.md), [OR](or.md), NOT, ...). Boolean operations are so widely used that the word "boolean" is oftentimes used synonymously with "binary", i.e. many programming languages have e.g. a [data type](data_type.md) called `bool` that allows two values (*true* and *false*).
One binary digit can be used to store exactly 1 [bit](bit.md) of [information](information.md). So the number of places we have for writing a binary number (e.g. in computer memory) is called a number of bits or bit width. A bit width *N* allows for storing 2^N values (e.g. with 2 bits we can store 4 values: 0, 1, 2 and 3, in binary 00, 01, 10 and 11).
At the basic level binary works just like the [decimal](decimal.md) (base 10) system we're used to. While the decimal system uses powers of 10, binary uses powers of 2. Here is a table showing a few numbers in decimal and binary:

@ -1,6 +1,6 @@
# Brainfuck
Brainfuck is an extremely simple, [minimalist](minimalism.md) untyped [esoteric programming language](esoland.md); simple by its specification (consisting only of 8 commands) but very hard to program in (it is so called [Turing tarpit](turing_tarpit.md)). It works similarly to a pure [Turing machine](turing_machine.md). In a way it is kind of [beautiful](beauty.md) by its [simplicity](minimalism.md), it is very easy to write your own brainfuck [interpreter](interpreter.md) (or [compiler](compiler.md)) -- in fact the Brainfuck author's goal was to make a language for which the smallest compiler could be made.
Brainfuck is an extremely simple, [minimalist](minimalism.md) untyped [esoteric programming language](esolang.md); simple by its specification (consisting only of 8 commands) but very hard to program in (it is so called [Turing tarpit](turing_tarpit.md)). It works similarly to a pure [Turing machine](turing_machine.md). In a way it is kind of [beautiful](beauty.md) by its [simplicity](minimalism.md), it is very easy to write your own brainfuck [interpreter](interpreter.md) (or [compiler](compiler.md)) -- in fact the Brainfuck author's goal was to make a language for which the smallest compiler could be made.
There exist **[self-hosted](self_hosting.md) Brainfuck interpreters and compilers** (i.e. themselves written in Brainfuck) which is pretty fucked up. The smallest one is probably the one called [dbfi](dbfi.md) which has only slightly above 400 characters, that's incredible!!! (Esolang wiki states that it's one of the smallest self interpreters among imperative languages). Of course, **Brainfuck [quines](quine.md)** (programs printing their own source code) also exist, but it's not easy to make them -- one example found on the web was a little over 2100 characters long.

@ -8,7 +8,7 @@ C is an [old](old.md) [low level](low_level.md) structured [statically typed](st
It is usually **not considered an easy language to learn** because of its low level nature: it requires good understanding of how a [computer](computer.md) actually works and doesn't prevent the programmer from shooting himself in the foot. Programmer is given full control (and therefore responsibility). There are things considered "tricky" which one must be aware of, such as undefined behavior of certain operators and raw pointers. This is what can discourage a lot of modern "coding monkeys" from choosing C, but it's also what inevitably allows such great performance -- undefined behavior allows the compiler to choose the most efficient implementation. On the other hand, C as a language is pretty simple without [modern](modern.md) bullshit concepts such as [OOP](oop.md), it is not as much hard to learn but rather hard to master, as any other true art.
Some of the typical traits of C include great reliance on and utilization of **[preprocessor](preprocessor.md)** ([macros](macro.md), the underlying C code is infamously littered with "`#ifdefs`" all over the place which modify the code just before compiling -- this is mostly used for compile-time configuration and/or achieving better performance and/or for [portability](portability.md)), **[pointers](pointer.md)** (direct access to memory, used e.g. for memory allocation, this is infamously related to "shooting oneself in the foot", e.g. by getting [memory leaks](memory_leak.md)) and a lot of **[undefined behavior](undefined_behavior.md)** (many things are purposefully left undefined in C to allow compilers to generate greatly efficient code, but this sometimes lead to weird [bugs](bug.md) or a program working on one machine but not another, so C requires some knowledge of its specification).
Some of the typical traits of C include great reliance on and utilization of **[preprocessor](preprocessor.md)** ([macros](macro.md), the underlying C code is infamously littered with "`#ifdefs`" all over the place which modify the code just before compiling -- this is mostly used for compile-time configuration and/or achieving better performance and/or for [portability](portability.md)), **[pointers](pointer.md)** (direct access to memory, used e.g. for memory allocation, this is infamously related to "shooting oneself in the foot", e.g. by getting [memory leaks](memory_leak.md)) and a lot of **[undefined behavior](undefined_behavior.md)** (many things are purposefully left undefined in C to allow compilers to generate greatly efficient code, but this sometimes lead to weird [bugs](bug.md) or a program working on one machine but not another, so C requires some knowledge of its specification). You can also infamously meet complicated type declarations like `void (*float(int,void (*n)(int)))(int)`, these are frequently a subject of [jokes](jokes.md) ("look, C is simple").
{ Though C is almost always compiled, there have appeared some C interpreters. ~drummyfish }

@ -1,6 +1,6 @@
# Computer
The word *computer* can be defined in many ways and can also take many different meanings; a somewhat common definition may be this: computer is a machine that automatically performs mathematical computations. We can also see it as a machine for processing [information](information.md) or, very generally, as any tool that helps computation, in which case one's fingers or even a [mathematical](math.md) formula itself can be considered a computer. Here we are of course mostly concerned with electronic [digital](digital.md) computers.
The word *computer* can be defined in many ways and can also take many different meanings; a somewhat common definition may be this: computer is a machine that automatically performs mathematical computations. We can also see it as a machine for processing [information](information.md), manipulating symbols or, very generally, as any tool that helps computation, in which case one's fingers or even a [mathematical](math.md) formula itself can be considered a computer. Here we are of course mostly concerned with electronic [digital](digital.md) computers.
We can divide computers based on many attributes, e.g.:

@ -2,7 +2,7 @@
WORK IN PROGRESS
Central processing unit (CPU, often just *processor*) is the main, most central part of a [computer](computer.md), the one that performs the computation by following the instructions of the main program; CPU can be seen as the computer's brain. It stands at the center of the computer design -- other parts, such as the main [memory](ram.md), [hard disk](hdd.md) and [input/output](io.md) devices like keyboard and monitor are present to serve the CPU, CPU is at the top and issues commands to everyone else. A CPU is normally composed of [ALU](alu.md) (arithmetic logic unit, the circuit performing calculations), CU ([control unit](control_unit.md), the circuit that directs the CPU's operation), a relatively small amount of memory (e.g. its registers and [cache](cache.md), the main [RAM](ram.md) memory is NOT part of a CPU!) and possibly some other parts. A specific model of CPU is characterized by its [instruction set](isa.md) (ISA, e.g. [x86](x86.md) or [Arm](arm.md), which we mostly divide into [CISC](cisc.md) and [RISC](risc.md)), which determines the [machine code](machine_code.md) it will understand, then its [transistor](transistor.md) count (nowadays billions), operation [frequency](frequency.md) or **clock rate** (defining how many instructions per second it can execute, nowadays typically billions; the frequency can also be increased with [overclocking](overclocking.md)), number of cores (determining how many programs it can run in parallel) and also other parameters and "features" such as amount of cache memory, possible operation modes etcetc. We also often associate the CPU with some **number of bits** (called e.g. *[word](word.md) size*) that's often connected to the data [bus](bus.md) width and the CPU's native integer size, i.e. for example a 16 bit CPU will likely have 16 bit integer registers, it will see the memory as a sequence of 16 bit words etc. (note the CPU can still do higher bit operations but they'll typically have to be emulated so they'll be slower, will take more instructions etc.) -- nowadays most mainstream CPUs are 64 bit (to allow ungodly amounts of RAM), but 32 or even 16 and 8 bits is usually enough for [good programs](lrs.md). CPU in form of a single small integrated circuit is called *microprocessor*. CPU is not to be confused with [MCU](mcu.md), a small single board computer which is composed of a CPU and other parts.
Central processing unit (CPU, often just *processor*) is the main, most central part of a [computer](computer.md), the one that performs the computation by following the instructions of the main program; CPU can be seen as the computer's brain. It stands at the center of the computer design -- other parts, such as the main [memory](ram.md), [hard disk](hdd.md) and [input/output](io.md) devices like keyboard and monitor are present to serve the CPU, CPU is at the top and issues commands to everyone else. A CPU is normally composed of [ALU](alu.md) (arithmetic logic unit, the circuit performing calculations), CU ([control unit](control_unit.md), the circuit that directs the CPU's operation), a relatively small amount of memory (e.g. its registers, temporary buffers and [cache](cache.md), the main [RAM](ram.md) memory is NOT part of a CPU!) and possibly some other parts. A specific model of CPU is characterized by its [instruction set](isa.md) (ISA, e.g. [x86](x86.md) or [Arm](arm.md), which we mostly divide into [CISC](cisc.md) and [RISC](risc.md)), which determines the [machine code](machine_code.md) it will understand, then its [transistor](transistor.md) count (nowadays billions), operation [frequency](frequency.md) or **clock rate** (defining how many instructions per second it can execute, nowadays typically billions; the frequency can also be increased with [overclocking](overclocking.md)), number of cores (determining how many programs it can run in parallel) and also other parameters and "features" such as amount of cache memory, possible operation modes etcetc. We also often associate the CPU with some **number of bits** (called e.g. *[word](word.md) size*) that's often connected to the data [bus](bus.md) width and the CPU's native integer size, i.e. for example a 16 bit CPU will likely have 16 bit integer registers, it will see the memory as a sequence of 16 bit words etc. (note the CPU can still do higher bit operations but they'll typically have to be emulated so they'll be slower, will take more instructions etc.) -- nowadays most mainstream CPUs are 64 bit (to allow ungodly amounts of RAM), but 32 or even 16 and 8 bits is usually enough for [good programs](lrs.md). CPU in form of a single small integrated circuit is called *microprocessor*. CPU is not to be confused with [MCU](mcu.md), a small single board computer which is composed of a CPU and other parts.
CPU is meant for **general purpose computations**, i.e. it can execute anything reasonably fast but for some tasks, e.g. processing HD video, won't reach near optimum speed, which is why other specialized processing units such as [GPU](gpu.md)s (graphics processing unit) and sound cards exist. As a general [algorithm](algorithm.md) executing unit CPU is made for executing **linear** programs, i.e. a series of instructions that go one after another; even though CPUs nowadays typically have multiple cores thanks to which they can run several linear programs in parallel, their level of parallelism is still low, not nearly as great as that of a GPU for example. However CPUs are [good enough](good_enough.md) for most things and they are extremely fast nowadays, so a [suckless](suckless.md)/[LRS](lrs.md) program will likely choose to only rely on CPU, knowing CPU will be present in any computer and so that our program will be [portable](portability.md).

@ -1,6 +1,6 @@
# Fixed Point
Fixed point arithmetic is a simple and often [good enough](good_enough.md) method of computer representation of [fractional](rational_number.md) numbers (i.e. numbers with higher precision than [integers](integer.md), e.g. 4.03), as opposed to [floating point](float.md) which is a more complicated way of doing this which in most cases we consider a worse, [bloated](bloat.md) alternative. Probably in 99% cases when you think you need floating point, fixed point will do just fine. Fixed point arithmetic is not to be confused with fixed point of a function in mathematics, a completely unrelated term.
Fixed point arithmetic is a simple and often [good enough](good_enough.md) method of computer representation of [fractional](rational_number.md) numbers (i.e. numbers with higher precision than [integers](integer.md), e.g. 4.03), as opposed to [floating point](float.md) which is a more complicated way of doing this which in most cases we consider a worse, [bloated](bloat.md) alternative. Probably in 99% cases when you think you need floating point, fixed point will do just fine. Fixed point arithmetic is not to be confused with fixed point of a function in mathematics (fixed point of a function *f(x)* is such *x* that *f(x) = x*), a completely unrelated term.
Fixed point has at least these advantages over floating point:

@ -2,7 +2,7 @@
In programming floating point (colloquially just *float*) is a way of representing [fractional](rational_number.md) numbers (such as 5.13) and approximating [real numbers](real_number.md) (i.e. numbers with higher than [integer](integer.md) precision), which is a bit more complex than simpler methods for doing so (such as [fixed point](fixed_point.md)). The core idea of it is to use a radix ("decimal") point that's not fixed but can move around so as to allow representation of both very small and very big values. Nowadays floating point is the standard way of [approximating](approximation.md) [real numbers](real_number.md) in computers (floating point types are called *real* in some programming languages, even though they represent only [rational numbers](rational_number.md), floats can't e.g. represent [pi](pi.md) exactly), basically all of the popular [programming languages](programming_language.md) have a floating point [data type](data_type.md) that adheres to the IEEE 754 standard, all personal computers also have the floating point hardware unit ([FPU](fpu.md)) and so it is widely used in all [modern](modern.md) programs. However most of the time a simpler representation of fractional numbers, such as the mentioned [fixed point](fixed_point.md), suffices, and weaker computers (e.g. [embedded](embedded.md)) may lack the hardware support so floating point operations are emulated in software and therefore slow -- remember, float rhymes with [bloat](bloat.md). Prefer fixed point.
**Floating point is tricky**, it works most of the time but a danger lies in programmers relying on this kind of [magic](magic.md) too much, some new generation programmers may not even be very aware of how float works. Even though the principle is not so hard, the emergent complexity of the math is really complex. One floating point expression may evaluate differently on different systems, e.g. due to different rounding settings. One possible pitfall is working with big and small numbers at the same time -- due to differing precision at different scales small values simply get lost when mixed with big numbers and sometimes this has to be worked around with tricks (see e.g. [this](http://the-witness.net/news/2022/02/a-shader-trick/) devlog of The Witness where a float time variable sent into [shader](shader.md) is periodically reset so as to not grow too large and cause the mentioned issue). Another famous trickiness of float is that you shouldn't really be comparing them for equality with a normal `==` operator as small rounding errors may make even mathematically equal expressions unequal (i.e. you should use some range comparison instead).
**Floating point is tricky**, it works most of the time but a danger lies in programmers relying on this kind of [magic](magic.md) too much, some new generation programmers may not even be very aware of how float works. Even though the principle is not so hard, the emergent complexity of the math is really complex. One floating point expression may evaluate differently on different systems, e.g. due to different rounding settings. Floating point can introduce [chaotic](chaos.md) behavior into linear systems as it inherently makes rounding errors and so becomes a nonlinear system (source: http://foldoc.org/chaos). One common pitfall of float is working with big and small numbers at the same time -- due to differing precision at different scales small values simply get lost when mixed with big numbers and sometimes this has to be worked around with tricks (see e.g. [this](http://the-witness.net/news/2022/02/a-shader-trick/) devlog of The Witness where a float time variable sent into [shader](shader.md) is periodically reset so as to not grow too large and cause the mentioned issue). Another famous trickiness of float is that you shouldn't really be comparing them for equality with a normal `==` operator as small rounding errors may make even mathematically equal expressions unequal (i.e. you should use some range comparison instead).
And there is more: floating point behavior really depends on the language you're using (and possibly even compiler, its setting etc.) and it may not be always completely defined, leading to possible [nondeterministic](determinism.md) behavior which can cause real trouble e.g. in physics engines.

@ -6,6 +6,9 @@ TODO: brief history
Fractals are the [beauty](beauty.md) of mathematics that can easily be seen even by non-mathematicians, so are probably good as a motivational example in [math](math.md) education.
Fractal geometry is a kind of [geometry](geometry.md) that examines these intricate shapes -- it turns out that unlike "normal" shapes such as circles and cubes, whose attributes (such as circumference, volume, ...) are mostly quite straightforward, perfect fractals (i.e. the mathematically ideal ones whose structure is infinitely complex) show some greatly unintuitive properties -- basically just as anything involving [infinity](infinity.md) they can get very tricky. For example a 2D fractal may have **finite area but infinite circumference** -- this is because the border is infinitely complex and swirls more and more as we zoom in, increasing the length of the border more and more the closer we look.
This was famously notice e.g. when people tried to measure lengths of rivers or coastlines (which are sort of fractal shapes) -- the length they measured always depended on the length of the ruler they used; the shorter ruler you use, the greater length you get because the meanders of the details increase it. For this reason it is impossible to exactly and objectively give an exact length of such a shape.
Fractal is formed by [iteratively](iteration.md) or [recursively](recursion.md) (repeatedly) applying its defining rule -- once we repeat the rule infinitely many times, we've got a perfect fractal. [In the real world](irl.md), of course, both in nature and in computing, the rule is just repeat many times as we can't repeat literally infinitely. The following is an example of how iteration of a rule creates a simple tree fractal; the rule being: *from each branch grow two smaller branches*.
```

@ -52,7 +52,7 @@ October 22 1925 has seen the invention of **[transistor](transistor.md)** by Jul
In 1931 [Kurt Gödel](kurt_godel.md), a genius mathematician and logician from Austria-Hunagry (nowadays Czech Republic), published revolutionary papers with his [incompleteness theorems](incompleteness.md) which proved that, simply put, mathematics has fundamental limits and "can't prove everything". This led to [Alan Turing](turing.md)'s publications in 1936 that nowadays stand as the **foundations of [computer science](compsci.md)** -- he introduced a theoretical computer called the **[Turing machine](turing_machine.md)** and with it he proved that computers, no matter how powerful, will never be able to "compute everything". Turing also predicted the importance of computers in the future and has created several [algorithms](algorithm.md) for future computers (such as a [chess](chess.md) playing program).
In 1938 [Konrad Zuse](konrad_zuse.md), a German engineer, constructed **[Z1](z1.md), the first working electric mechanical [digital](digital.md) partially programmable computer** in his parents' house. It weighted about a ton and wasn't very reliable, but brought huge innovation nevertheless. It was programmed with punched film tapes, however programming was limited, it was NOT [Turing complete](turing_complete.md) and there were only 8 instructions. Z1 ran on a frequency of 1 to 4 Hz and most operations took several clock cycles. It had a 16 word memory and worked with [floating point](float.md) numbers. The original computer was destroyed during the war but it was rebuilt and nowadays can be seen in a Berlin museum.
In 1938 [Konrad Zuse](konrad_zuse.md), a German engineer, constructed **[Z1](z1.md), the first working electric mechanical [digital](digital.md) partially programmable computer** in his parents' house. It weighted about a ton and wasn't very reliable, but brought huge innovation nevertheless. It was programmed with punched film tapes, however programming was limited, it was NOT [Turing complete](turing_complete.md) and there were only 8 instructions. Z1 ran on a frequency of 1 to 4 Hz and most operations took several clock cycles. It had a 16 word memory and worked with [floating point](float.md) numbers. The original computer was destroyed during the war but it was rebuilt and nowadays can be seen in a Berlin museum. Zuse also soon created what's regarded as the **first [programming language](programming_language.md)**, [Plankalkul](plankalkul.md).
From 1939 to 1945 there was **[World War II](ww2.md)**.

@ -2,6 +2,8 @@
Internet is the grand, [decentralized](decentralization.md) global network of interconnected [computer](computer.md) [networks](network.md) that allows advanced, cheap, practically instantaneous intercommunication of people and computers and sharing of large amounts of [data](data.md) and [information](information.md). Over just a few decades since its birth in 1970s it changed the society tremendously, shifted it to the information age and stands as possibly the greatest technological invention of our society. It is a platform for many services and applications such as the [web](www.md), [e-mail](email.md), [internet of things](iot.md), [torrents](torrent.md), phone calls, video streaming, multiplayer [games](game.md) etc. Of course, once Internet became accessible to normal people and has become the largest public forum on the planet, it has also become the biggest dump of retards in history.
Sometimes we distinguish between lowercase *i* "internet", meaning a large computer network, and capital *I* "Internet", meaning the one, biggest worldwide internet. As many networks just become part of the great Internet, we see this distinction less often and without saying otherwise, in normal speech both "internet" or "Internet" typically stand for the big Internet.
Internet is built on top of [protocols](protocol.md) (such as [IP](ip.md), [HTTP](http.md) or [SMTP](smtp.md)), standards, organizations (such as [ICANN](icann.md), [IANA](iana.md) or [W3C](w3c.md)) and infrastructure (undersea cables, satellites, [routers](routers.md), ...) that all together work to create a great network based on **[packet switching](packet_switching.md)**, i.e. a method of transferring digital data by breaking them down into small [packets](packet.md) which independently travel to their destination (contrast this to [circuit switching](circuit_switching.md)). The key feature of the Internet is its **[decentralization](decentralization.md)**, i.e. the attribute of having no central node or authority so that it cannot easily be destroyed or taken control over -- this is by design, the Internet evolved from [ARPANET](arpanet.md), a project of the US defense department. Nevertheless there are parties constantly trying to seize at least partial control of the Internet such as governments (e.g. China and its [Great Firewall](great_firewall.md), [EU](eu.md) with its "anti-pedophile" chat monitoring laws etc.) and corporations (by creating centralized services such as [social networks](social_network.md)). Some are warning of possible de-globalization of the Internet that some parties are trying to carry out, which would turn the Internet into so called [splinternet](splinternet.md).
Access to the Internet is offered by [ISPs](isp.md) (internet service providers) but it's pretty easy to connect to the Internet even for free, e.g. via free [wifis](wifi.md) in public places, or in libraries. By 2020 more than half of world's population had access to the Internet -- most people in the first world have practically constant, unlimited access to it via their [smartphones](smartphone.md), and even in [poor countries](shithole.md) [capitalism](capitalism.md) makes these devices along with Internet access cheap as people constantly carrying around devices that display [ads](ad.md) and spy on them is what allows their easy [exploitation](leading_the_pig_to_the_slaughterhouse.md).
@ -24,4 +26,5 @@ TODO: https://www.zakon.org/robert/internet/timeline/, https://www.freesoft.org/
- [splinternet](splinternet.md)
- [Kwangmyong](kwangmyong.md) (North Korean intranet)
- [SNET](snet.md) (large computer network on Cuba)
- [interplanetary internet](interplanetary_internet.md)
- [interplanetary internet](interplanetary_internet.md)
- [books](books.md)

@ -1,6 +1,6 @@
# Linux
Linux is a partially "[open-source](open_source.md)" [unix-like](unix_like.md) [operating system](operating_system.md) [kernel](kernel.md), probably the most successful "mostly FOSS" kernel. **Linux is NOT an operating system**, only its basic part -- for a whole operating system more things need to be added, such as some kind of [user interface](ui.md) and actual user programs (so called [userland](userland.md)), and this is what [Linux distributions](linux_distro.md) do (there hundreds of these) -- Linux distributions, such as [Debian](debian.md), [Arch](arch.md) or [Ubuntu](ubuntu.md) are complete operating systems (but beware, most of them are not fully [FOSS](foss.md)). Linux is one of the biggest collaborative programming projects, as of now it has more than 15000 contributors. Despite popular misconceptions **Linux is [proprietary](proprietary.md) software** by containing binary blobs -- completely free distributions have to use forks that remove these (see e.g. [Linux-libre](linux_libre.md)). Linux is also [tranny software](tranny_software.md), abusing technology as a vehicle for promoting [harmful politics](sjw.md).
Linux (also Lunix or Loonix) is a partially "[open-source](open_source.md)" [unix-like](unix_like.md) [operating system](operating_system.md) [kernel](kernel.md), probably the most successful "mostly FOSS" kernel. One of its greatest advantages is support of a lot of [hardware](hardware.md); it runs besides others on [x86](x86.md], [PowerPC](ppc.md), [Arm](arm.md), has many [drivers](driver.md) and can be compiled to be very minimal so as to run well even on very weak computers. **Linux is NOT an operating system**, only its basic part -- for a whole operating system more things need to be added, such as some kind of [user interface](ui.md) and actual user programs (so called [userland](userland.md)), and this is what [Linux distributions](linux_distro.md) do (there hundreds of these) -- Linux distributions, such as [Debian](debian.md), [Arch](arch.md) or [Ubuntu](ubuntu.md) are complete operating systems (but beware, most of them are not fully [FOSS](foss.md)). Linux is one of the biggest collaborative programming projects, as of now it has more than 15000 contributors. Despite popular misconceptions **Linux is [proprietary](proprietary.md) software** by containing binary blobs -- completely free distributions have to use forks that remove these (see e.g. [Linux-libre](linux_libre.md)). Linux is also greatly [bloated](bloat.md) (though not anywhere near [Windows](windows.md) and such) and [tranny software](tranny_software.md), abusing technology as a vehicle for promoting [harmful politics](sjw.md).
[Fun](fun.md) note: there is a site that counts certain words in the Linux source code, https://www.vidarholen.net/contents/wordcount. For the lulz in 2019 some word counts were: "fuck": 16, "shit": 33, "idiot": 17, "retard": 4, "hack": 1571, "todo": 6166, "fixme": 4256.
@ -10,16 +10,16 @@ Linux is typically combined with a lot of **[GNU](gnu.md)** software and the [GN
Linux is sometimes called "[free as in freedom](free_software.md)", however that's a lie, it is at most a partially "[open-source](open_source.md)" or "[FOSS](foss.md)" project. **Linux is in many ways bad**, especially lately. Some reasons for this are:
- It actually includes [proprietary](proprietary.md) software in the form of [binary blobs](blob.md) ([drivers](drivers.md)). The [Linux-libre](linux_libre.md) project tries to fix this.
- It is [tranny software](tranny_software.md) and has a fascist [code of conduct](coc.md) (`linux/Documentation/process/code-of-conduct.rst`). Recently it started to even incorporate [Rust](rust.md), getting shitty also by the technological side.
- Its development practices are [sus](sus.md), it is involved with many unethical corporations (through the [linux foundation](linux_foundation.md)) including [Microsoft](microsoft.md) (one of the greatest enemies of free software) who is trying to take control over it ([EEE](eee.md)), [Google](google.md), [Intel](intel.md), [IBM](ibm.md) and others. Such forces will inevitably shape it towards corporate interests.
- It is a monolithic kernel which goes against the [KISS](kiss.md) philosophy.
- It is [bloat](bloat.md) and [bloat monopoly](bloat_monopoly.md) and in some ways [capitalist software](capitalist_software.md) (just try to fork Linux on your own, maintain it and add/modify actual features).
- It uses a restrictive [copyleft](copyleft.md) [GPL](gpl.md) license as opposed to a permissive one.
- It actually includes **[proprietary](proprietary.md) software** in the form of [binary blobs](blob.md) ([drivers](drivers.md)). The [Linux-libre](linux_libre.md) project tries to fix this.
- It is **[tranny software](tranny_software.md)** and has a fascist [code of conduct](coc.md) (`linux/Documentation/process/code-of-conduct.rst`). Recently it started to even incorporate [Rust](rust.md), getting shitty also by the technological side.
- Its development practices are [sus](sus.md), it is **involved with many [corporations](corporation.md)** (through the [linux foundation](linux_foundation.md)) including [Microsoft](microsoft.md) (one of the greatest enemies of free software) who is trying to take control over it ([EEE](eee.md)), [Google](google.md), [Intel](intel.md), [IBM](ibm.md) and others. Such forces will inevitably shape it towards corporate interests.
- It is **[bloat](bloat.md)** and [bloat monopoly](bloat_monopoly.md) and in some ways [capitalist software](capitalist_software.md). It currently has **more than 10 million [lines of code](loc.md)**. Just try to fork Linux on your own, maintain it and add/modify actual features.
- It uses a **restrictive [copyleft](copyleft.md)** [GPL](gpl.md) license as opposed to a permissive one.
- It is a monolithic kernel which goes against the [KISS](kiss.md) philosophy. { Or does it? Maybe it's not as clear as it sounds, TODO. ~drummyfish }
Nevertheless, despite its mistakes and inevitable shitty future (it's just going to become "Windows 2.0" in a few years), nowadays (2023) GNU/Linux still offers a relatively comfy, powerful [Unix](unix.md)/[POSIX](posix.md) environment which means it can be drop-in replaced with another unix-like system without this causing you much trouble, so using GNU/Linux is at this point considered OK (until Microsoft completely seizes it at which point we migrate probably to [BSD](bsd.md), [GNU Hurd](hurd.md), [HyperbolaBSD](hyperbolabsd.md) or something). It can be made fairly [minimal](minimalism.md) (see e.g. [KISS Linux](kiss_linux.md) and [Puppy Linux](puppy.md)) and [LRS](lrs.md)/[suckless](suckless.md) friendly. It is in no way perfect but can serve as an acceptable temporary boat on the sail towards freedom, until it inevitably sinks by the weight of [capitalism](capitalism.md).
Linux is so called monolithic kernel and as such is more or less [bloat](bloat.md). However it "[just works](just_works.md)" and has a great [hardware](hardware.md) support so it wins many users over alternatives such as [BSD](bsd.md).
Linux is so called monolithic kernel (oppose to [microkernel](microkernel.md)) and as such tries to do many things at once, becoming quite [bloat](bloat.md)ed. However it "[just works](just_works.md)" and has a great [hardware](hardware.md) support so it wins many users over alternatives such as [BSD](bsd.md).
Some alternatives to Linux (and Linux-libre) are:

@ -41,7 +41,7 @@ WORK IN PROGRESS
| job | slavery |
| "left" | [pseudoleft](pseudoleft.md), SJW |
| [LGBT](lgbt.md) | FGTS, TTTT |
| "[Linux](linux.md)" | [GNU](gnu.md), loonix |
| "[Linux](linux.md)" | [GNU](gnu.md), lunix, loonix |
| Macintosh | Macintoy, Macintrash, Maggotbox |
| [Microsoft](microsoft.md) | Microshit |
| [microtransaction](microtransaction.md) | microtheft |
@ -61,6 +61,7 @@ WORK IN PROGRESS
| plug and play | plug and pray |
| "science" | [soyence](soyence.md) |
| software as a service ([SAAS](saas.md)) |service as a software substitute (SAASS)|
| [Steve Jobs](steve_jobs.md) | Steve Jewbs |
| subscription | [microrape](microrape.md) |
| [systemd](systemd.md) | shitstemd, soystemd |
| United States of America |United Shitholes of America, burgerland |

@ -8,7 +8,7 @@ Over time, being written solely by drummyfish without much self censorship and "
The wiki can also additionally be seen as a dirty collection of drummyfish's cheatsheets, links, code snippets, [jokes](jokes.md), attempts at [ASCII art](ascii_art.md), vent rants etcetc. So the whole thing is like a digital swamp that one might see as a kind of retarded [art](art.md) that combines many things together: technical, cultural, personal, objective and subjective, beautiful and ugly. It might also be viewed as a shitpost or [meme](meme.md) taken too far. It's just its own thing.
The wiki is similar to other wikis, for example in its topics and technical aspects it is similar to the earliest (plain HTML) versions of [Wikipedia](wikipedia.md) and [wikiwikiweb](wikiwikiweb.md) (by which it was partly inspired). In tone and political incorrectness it is similar to [Encyclopedia Dramatica](dramatica.md), but unlike Dramatica LRS is a "serious" project.
The wiki is similar to and was inspired by other wikis and similar works, for example in its topics and technical aspects it is similar to the earliest (plain HTML) versions of [Wikipedia](wikipedia.md) and [wikiwikiweb](wikiwikiweb.md). In tone and political incorrectness it is similar to [Encyclopedia Dramatica](dramatica.md), but unlike Dramatica LRS is a "serious" project.
LRS wiki is currently written as a collection of [Markdown](markdown.md) files that use a few [shell scripts](shell_script.md) that convert the whole thing to HTML for the web, i.e. it doesn't use any wiki engine or bloated static site generator. There is a plan to rewrite the wiki in [comun](comun.md).

@ -197,6 +197,6 @@ Whether the use of fluids/gases (water, air, steam, maybe even sand, ...) is sti
### Other
Don't forget there exist many other possible components and concepts a mechanical computer can internally use -- many things we leave out above for the questionability of their practical usability can be used to in fact carry out computation, for example dominoes or slinkies. Furthermore many actually useful things exist, e.g. teethed **cylinders/disks** may be used to record plots of data over time or to store and deliver read/only data (e.g. the program instructions) easily, see music boxes and gramophones; **[punch card](punch_card.md)** have widely been used for storing read-only data too. Sometimes deformed cylinders were used as an analog **2D [look up table](lut.md)** for some mathematical [function](function.md) -- imagine e.g. a device that has input *x* (rotating cylinder along its axis) and *y* (shifting it left/right); the cylinder can then at each surface point record function *f(x,y)* by its width which will in turn displace some stick that will mark the function value on a scale. To transfer movement **strings, chains and belts** may also be used. [Random number generation](rng.md) may be implemented e.g. with [Galton board](galton_board.md). If timing is needed, pendulums can be used just like in clock. Some mechanical computers even use pretty complex parts such as mechanical arms, but these are firstly hard to make and secondly prone to breaking, so try to avoid complexity as much as possible. Some old mechanical calculators worked by requiring the user to plug a stick into some hole (e.g. number he wanted to add) and then manually trace some path -- this can work on the same principle as e.g. the marble computer, but without needing the marbles complexity and size are drastically reduced. Another ideas is a "combing" computer which is driven by its user repeatedly sliding some object through the mechanism (as if combing it) which performs the steps (sequential computation) and changes the state (which is either stored inside the computer or in the combing object).
Don't forget there exist many other possible components and concepts a mechanical computer can internally use -- many things we leave out above for the questionability of their practical usability can be used to in fact carry out computation, for example dominoes or slinkies. Furthermore many actually useful things exist, e.g. teethed **cylinders/disks** may be used to record plots of data over time or to store and deliver read/only data (e.g. the program instructions) easily, see music boxes and gramophones; **[punch card](punch_card.md) and paper tapes** have widely been used for storing read-only data too. Sometimes deformed cylinders were used as an analog **2D [look up table](lut.md)** for some mathematical [function](function.md) -- imagine e.g. a device that has input *x* (rotating cylinder along its axis) and *y* (shifting it left/right); the cylinder can then at each surface point record function *f(x,y)* by its width which will in turn displace some stick that will mark the function value on a scale. To transfer movement **strings, chains and belts** may also be used. [Random number generation](rng.md) may be implemented e.g. with [Galton board](galton_board.md). If timing is needed, pendulums can be used just like in clock. Some mechanical computers even use pretty complex parts such as mechanical arms, but these are firstly hard to make and secondly prone to breaking, so try to avoid complexity as much as possible. Some old mechanical calculators worked by requiring the user to plug a stick into some hole (e.g. number he wanted to add) and then manually trace some path -- this can work on the same principle as e.g. the marble computer, but without needing the marbles complexity and size are drastically reduced. Another ideas is a "combing" computer which is driven by its user repeatedly sliding some object through the mechanism (as if combing it) which performs the steps (sequential computation) and changes the state (which is either stored inside the computer or in the combing object).
BONUS THOUGHT: We have gotten so much used to using our current electronic digital computers for everything that sometimes we forget that at simulating actual physical reality they may still fail (or just be very overcomplicated) compared to a mechanical simulation which USES the physical reality itself; for example to make a simulation of a tsunami wave it may be more accurate to build an actual small model of a city and flood it with water than to make a computer simulation. That's why aerodynamic tunnels are still a thing. Ancient NASA flight simulators of space ships did use some electronics, but they did not use computer graphics to render the view from the ship, instead they used a screen projecting view from a tiny camera controlled by the simulator, moving inside a tiny environment, which basically achieved photorealistic graphics. Ideas like these may come in handy when designing mechanical computers as simulating reality is often what we want to do with the computer; for example if we want to model a [sine](sin.md) function, we don't have to go through the pain of implementing binary logic and performing iterative calculation of sine approximation, we may simply use a pendulum whose swinging draws the function simply and precisely.

@ -16,7 +16,7 @@ There are many terms that are very similar and can many times be used interchang
- **[binary](binary.md)** vs **[boolean](boolean.md)**
- **[black](black.md) [race](race.md)** vs **[nigger](nigger.md)** vs **[negro](negro.md)**
- **[brute force](brute_force.md)** vs **[heuristic search](heuristic_search.md)**
- **[bug](bug.md)** vs **[error](error.md)** vs **[exception](exception.md)** vs **[fault](fault.md)** vs **[failure](fail.md)** vs **[defect](defect.md)**
- **[bug](bug.md)** vs **[glitch](glitch.md)** vs **[error](error.md)** vs **[exception](exception.md)** vs **[fault](fault.md)** vs **[failure](fail.md)** vs **[defect](defect.md)**
- **[causation](causation.md)** vs **[correlation](correlation.md)**
- **[cepstrum](cepstrum.md)** vs **[spectrum](spectrum.md)**
- **[chaos](chaos.md)** vs **[randomness](random.md)** vs **[pseudorandomness](pseudorandom.md)** vs **[entropy](entropy.md)** vs **[statistics](statistics.md)** vs **[probability](probability.md)** vs **[stochasticity](stochastic.md)**

@ -1,6 +1,6 @@
# Operating System
Operating System (OS) is usually a quite complex [program](program.md) that's typically installed on a [computer](computer.md) before any other user program and serves as a platform for running other programs as well as managing resources ([CPU](cpu.md) usage, [RAM](ram.md), [files](file.md), [network](network.md), ...) and offering services, protection and interfaces for humans and programs. As with most things, the definition of an OS can differ and be stretched greatly -- while a typical OS will include features such as [graphical interface](gui.md) with windows and mouse cursor, [file system](file_system.md), [multitasking](multitasking.md), [networking](network.md), [audio](audio.md) system, safety mechanisms or user accounts, there exist OSes that work without any said feature. Though common on mainstream computers, operating system isn't necessary; it may be replaced by a much simpler program (something akin a program loader, BIOS etc.) or even be absent altogether -- programs that run without operating system are called "[bare metal](bare_metal.md)" programs (these can be encountered on many simple computers such as [embedded](embedded.md) devices).
Operating System (OS) is usually a quite complex [program](program.md) that's typically installed on a [computer](computer.md) before any other user program and serves as a platform for running other programs as well as handling [low level](low_level.md) functions, managing resources ([CPU](cpu.md) usage, [RAM](ram.md), [files](file.md), [network](network.md), ...) and offering services, protection and [interfaces](interface.md) for humans and programs. If computer was a city, an OS is its center that was built first and where its government resides. As with most things, the definition of an OS can differ and be stretched greatly -- while a typical OS will include features such as [graphical interface](gui.md) with windows and mouse cursor, [file system](file_system.md), [multitasking](multitasking.md), [networking](network.md), [audio](audio.md) system, safety mechanisms or user accounts, there exist OSes that work without any said feature. Though common on mainstream computers, operating system isn't necessary; it may be replaced by a much simpler program (something akin a program loader, BIOS etc.) or even be absent altogether -- programs that run without operating system are called "[bare metal](bare_metal.md)" programs (these can be encountered on many simple computers such as [embedded](embedded.md) devices).
There is a nice [CC0](cc0.md) wiki for OS development at https://wiki.osdev.org/.

@ -1,6 +1,6 @@
# Pi
Pi is one of the most important and famous [numbers](number.md), equal to approximately 3.14, most popularly defined as the ratio of a circle's circumference to its diameter (but also definable in other ways). It is one of the most fundamental mathematical constants of our universe and appears extremely commonly in [mathematics](math.md), nature and, of course, [programming](programming.md). When written down in traditional decimal system, its digits go on and on without end and show no repetition or simple pattern, appearing "random" and [chaotic](chaos.md) -- as of 2021 pi has been evaluated by [computers](computer.md) to 62831853071796 digits. In significance and properties pi is similar to another famous number: [e](e.md). Pi day is celebrated on March 14.
Pi (normally written with a Greek alphabet symbol with [Unicode](unicode.md) value U+03C0) is one of the most important and famous [numbers](number.md), equal to approximately 3.14, most popularly defined as the ratio of a circle's circumference to its diameter (but also definable in other ways). It is one of the most fundamental mathematical constants of our universe and appears extremely commonly in [mathematics](math.md), nature and, of course, [programming](programming.md). When written down in traditional decimal system, its digits go on and on without end and show no repetition or simple pattern, appearing "random" and [chaotic](chaos.md) -- as of 2021 pi has been evaluated by [computers](computer.md) to 62831853071796 digits. In significance and properties pi is similar to another famous number: [e](e.md). Pi day is celebrated on March 14.
{ Very nice site about pi: http://www.pi314.net. ~drummyfish }

@ -17,7 +17,7 @@ At high level programming becomes [spiritual](spirituality.md). Check out e.g. [
At first you have to learn two basic rules that have to be constantly on your mind:
1. **You cannot be a good programmer if you're not good at [math](math.md)** -- real programming is pure math.
2. **[minimalism](minimalism.md) is the most important concept in programming.** If you don't like, support or understand minimalism, don't even think of becoming a programmer.
2. **[Minimalism](minimalism.md) is the most important concept in programming.** If you don't like, support or understand minimalism, don't even think of becoming a programmer.
OK, now the key thing to becoming a programmer is learning a [programming language](programming_language.md) very well (and learning many of them), however this is not enough (it's only enough for becoming a [coding](coding.md) monkey), you additionally have to have a wider knowledge such as general knowledge of [computers](computer.md) ([electronics](electronics.md), [hardware](hardware.md), theory or [computation](computation.md), [networks](networking.md), ...), tech [history](history.md) and culture ([free software](free_software.md), [hacker cutlure](hacking.md), [free culture](free_culture.md), ...), [math](math.md) and [science](science.md) in general, possibly even society, philosophy etc. Programming is not an isolated topic (only coding is), a programmer has to see the big picture and have a number of other big brain interests such as [chess](chess.md), voting systems, linguistics, physics, [music](music.md) etc. Remember, becoming a good programmer takes a whole life, sometimes even longer.

@ -45,7 +45,7 @@ Sometimes the distinction here may not be completely clear, for example Python i
Another common division is by **level of [abstraction](abstraction.md)** roughly to (keep in mind the transition is gradual and depends on context, the line between low and high level is extremely fuzzy):
- **[low level](low_level.md)**: Languages which are so called "closer to [hardware](hardware.md)" ("glorified [assembly](assembly.md)"), using little to no abstraction (reflecting more how a computer actually works under the hood without adding too many artificial concepts above it, allowing direct access to memory with [pointers](pointer.md), ...), for this they very often use plain [imperative](imperative.md) paradigm), being less comfortable (requiring the programmer to do many things manually), less flexible, less safe (allowing shooting oneself in the foot). However (because [less is more](less_is_more.md)) they have great many advantages, e.g. being [simple](kiss.md) to implement (and so more [free](freedom.md)) and **greatly efficient** (being fast, memory efficient, ...). One popular definition is also that "a low level language is that which requires paying attention to the irrelevant". Low level languages are **typically compiled** (but it doesn't have to be so). Where exactly low level languages end is highly subjective, many say [C](c.md), [Fortran](fortran.md), [Forth](forth.md) and similar languages are low level (normally when discussing them in context of new, very high level languages), others (mainly the older programmers) say only [assembly](assembly.md) languages are low level and some will even say only [machine code](machine_code.md) is low level.
- **[low level](low_level.md)**: Languages which are so called "closer to [hardware](hardware.md)" ("glorified [assembly](assembly.md)"), using little to no abstraction (reflecting more how a computer actually works under the hood without adding too many artificial concepts above it, allowing direct access to memory with [pointers](pointer.md), ...), for this they very often use plain [imperative](imperative.md) paradigm), being less comfortable (requiring the programmer to do many things manually), less flexible, less safe (allowing shooting oneself in the foot). However (because [less is more](less_is_more.md)) they have great many advantages, e.g. being [simple](kiss.md) to implement (and so more [free](freedom.md)) and **greatly efficient** (being fast, memory efficient, ...). One popular definition is also that "a low level language is that which requires paying attention to the irrelevant"; another definition says a low level language is that in which one command usually corresponds to one machine instruction. Low level languages are **typically compiled** (but it doesn't have to be so). Where exactly low level languages end is highly subjective, many say [C](c.md), [Fortran](fortran.md), [Forth](forth.md) and similar languages are low level (normally when discussing them in context of new, very high level languages), others (mainly the older programmers) say only [assembly](assembly.md) languages are low level and some will even say only [machine code](machine_code.md) is low level.
- **[high level](high_level.md)**: Languages with higher level of abstraction than low level ones -- they are normally more complex (though not always), interpreted (again, not necessarily), comfortable, dynamically typed, beginner friendly, "safe" (having various safety mechanism, automatic checks, automatic memory management such as [garbage collection](garbage_collection.md)) etc. For all this they are typically slower, less memory efficient, and just more [bloated](bloat.md). Examples are [Python](python.md) or [JavaScript](js.md).
We can divide language in many more ways, for example based on their **[paradigm](paradigm.md)** (roughly its core idea/model/"philosophy", e.g. [impertaive](imperative.md), [declarative](declarative.md), [object-oriented](oop.md), [functional](functional.md), [logical](logical.md), ...), **purpose** (general purpose, special purpose), computational power ([turing complete](turing_complete.md) or weaker, many definitions of a programming language require Turing completeness), [typing](data_type.md) (strong, weak, dynamic, static) or function evaluation (strict, lazy).
@ -59,6 +59,12 @@ A computer language consists from two main parts:
**Can you use multiple programming languages for one project?** Yes, though it may be a burden, so don't do it just because you can. Combining languages is possible in many ways, e.g. by embedding a [scripting](scripting.md) language into a compiled language, linking together object files produces by different languages, creating different programs that communicate over network etc.
## History
The first higher level programming language was probably Plankalkul made by Konrad Zuse in 1942.
TODO
## More Details And Context
What really IS a programming language -- is it software? Is it a standard? Can a language be [bloated](bloat.md)? How does the languages evolve? Where is the exact line between a programming language and non-programming language? Who makes programming languages? Who "owns" them? Who controls them? Why are there so many and not just one? These are just some of the questions one may ask upon learning about programming. Let's try to quickly answer some of them.

@ -6,7 +6,7 @@ If an "intellectual work" (song, book, computer program, ...) is in the public d
Public domain is the ultimate form of freedom in the creative world. In public domain the creativity of people is not restricted. Anyone can study, remix, share and improve public domain works in any way, without a fear of being legally bullied by someone else.
Public domain is NOT the same thing as [free (as in freedom) software](free_software.md), [free culture](free_culture.md) or freeware (gratis, free as in beer) software. The differences are these:
The term "public domain" is sometimes used vaguely to mean anything under a free license, however this use is incorrect and greatly retarded. **Public domain is NOT the same thing as [free (as in freedom) software](free_software.md), [free culture](free_culture.md) or freeware (gratis, free as in beer) software**. The differences are these:
- Unlike public domain, **[free software](free_software.md) and [free cultural](free_culture.md) works are usually still "owned" by someone**, they just try to relax the rules and make them less oppressive. A public domain work is completely unlimited and belongs to everyone and no one, while free software/culture may still require and legally enforce certain freedom-compatible conditions such as giving credit to the author or [copyleft](copyleft.md).
- **Public domain software is not always [free software](free_software.md)** -- PD software is free (as in freedom) only if its source code is available and also in the public domain (without source code freedoms 1 and 2 in the definition of free software are violated).

@ -2,16 +2,26 @@
Quine is a nonempty [program](program.md) which prints its own source code. It takes no input, just prints out the [source code](source_code.md) when run (without [cheating](cheating.md) such as reading the source code file). Quine is basically a [self-replicating](self_replication.md) program, just as [in real world](irl.md) we may construct robots capable of creating copies of themselves (afterall we humans are such robots). The name *quine* refers to the philosopher Willard Quine and his paradox that shows a structure similar to self-replicating programs. Quine is one of the standard/[fun](fun.md)/[interesting](interesting.md) programs such as [hello world](hello_world.md), [compiler bomb](compiler_bomb.md), [99 bottles of beer](99_bottles.md) or [fizzbuzz](fizzbuzz.md).
From [mathematical](math.md) point of view quine is a fixed point of a [function](function.md) (not to be confused with [fixed_point arithmetic](fixed_point.md)) represented by the [programming language](programming_language.md). I.e. if we see the programming language as a function f(x), where *x* is source code and the function's output is the program's output, quine is such *x* that *f(x) = x*.
From [mathematical](math.md) point of view quine is a fixed point of a [function](function.md) (not to be confused with [fixed_point arithmetic](fixed_point.md)) represented by the [programming language](programming_language.md). I.e. if we see the programming language as a function f(x), where *x* is source code and the function's output is the program's output, quine is such *x* that *f(x) = x*. **A quine can be written in any [Turing complete](turing_completeness.md) [language](programming_language.md)**, the proof comes from the *fixed point theorem* (which says functions satisfying certain conditions always have a fixed point, i.e. a quine).
Similar efforts include e.g. making self matching [regular expressions](regex.md) (for this task to be non-trivial the regex has to e.g. be enclosed between `/`s). Yet another similar challenge is a [polyglot](polyglot.md) program -- one that is a valid program in several languages -- some programs can be quines and polyglots at the same time, though these are super hard to make.
Similar efforts include e.g. making self matching [regular expressions](regex.md) (for this task to be non-trivial the regex has to e.g. be enclosed between `/`s). Yet another similar challenge is a [polyglot](polyglot.md) program -- one that is a valid program in several languages -- some programs can be quines and polyglots at the same time, i.e. **polyglot quines**.
Quine can be written in any [Turing complete](turing_completeness.md) [language](programming_language.md) (according to [Wikipedia](wikipedia.md)), the challenge is in the [self reference](self_reference.md) -- normally we cannot just single-line print a string literal containing the source because that string literal would have to contain itself, making it [infinite](infinity.md) in length. The idea commonly used to solve this problem is following:
The challenge of creating quines is in the [self reference](self_reference.md) -- normally we cannot just single-line print a string literal containing the source because that string literal would have to contain itself, making it [infinite](infinity.md) in length. The idea commonly used to solve this problem is following:
1. On first line start a definition of string *S*, later copy-paste to it the string on the second line.
2. On second line put a command that prints the first line, assigning to *S* the string in *S* itself, and then prints *S* (the second line itself).
This is a quine in [C](c.md):
Yet a stronger quine is so called **radiation hardened quine**, a quine that remains quine even after any one character from the program has been deleted (found here in [Ruby](ruby.md): https://github.com/mame/radiation-hardened-quine). Other plays on the theme of quine include e.g. a program that produces a bigger program which will again produce yet bigger program etc.
Another extension of a quine is **multiquine** -- this is NOT a polyglot quine! Multiquine is a quine written in some programming language *L0*; under normal circumstances this program behaves like a normal quine, but it has an extra feature: when passed a parameter *N* (e.g. through [CLI](cli.md) flag or through standard input), it will print a program in another language, *LN*, which itself is this multiquine (so it can again be used to get back the program in *L0* and so on). I.e. a multiquine is a quine which can switch between several languages.
In the [Text](plaintext.md) [esoteric programming language](esolang.md) every program is a quine (and so also a radiation hardened one).
## List Of Quines
**Brainfuck**: not short, has over 2100 characters.
**[C](c.md)**:
```
#include <stdio.h>
@ -19,24 +29,26 @@ char s[] = "#include <stdio.h>%cchar s[] = %c%s%c;%cint main(void) { printf(s,10
int main(void) { printf(s,10,34,s,34,10,10); return 0; }
```
This is a quine in [Python](python.md):
**[comun](comun.md)**:
```
s="print(str().join([chr(115),chr(61),chr(34)]) + s + str().join([chr(34),chr(10)]) + s)"
print(str().join([chr(115),chr(61),chr(34)]) + s + str().join([chr(34),chr(10)]) + s)
0 46 32 34 S 34 32 58 83 S --> S: "0 46 32 34 S 34 32 58 83 S --> " .
```
This is a quine in [comun](comun.md):
**[Python](python.md)**:
```
0 46 32 34 S 34 32 58 83 S --> S: "0 46 32 34 S 34 32 58 83 S --> " .
s="print(str().join([chr(115),chr(61),chr(34)]) + s + str().join([chr(34),chr(10)]) + s)"
print(str().join([chr(115),chr(61),chr(34)]) + s + str().join([chr(34),chr(10)]) + s)
```
TODO: more langs?
**text**:
Yet a stronger quine is so called *radiation hardened quine*, a quine that remains quine even after any one character from the program has been deleted (found here in [Ruby](ruby.md): https://github.com/mame/radiation-hardened-quine). Other plays on the theme of quine include e.g. a program that produces a bigger program which will again produce yet bigger program etc.
```
This is a quine in text.
```
In the [Text](plaintext.md) [esoteric programming language](esolang.md) every program is a quine (and so also a radiation hardened one).
TODO: more, make biquine of C and comun
## See Also

File diff suppressed because it is too large Load Diff

@ -4,13 +4,9 @@ Shit is something that's awfully bad.
[Unicode](unicode.md) for pile of shit is U+1F4A9.
## List of Things That Are Shit
- [MS Windows](windows.md)
- [OOP](oop.md) (the ugly overused kind)
- [systemd](systemd.md)
- ...
Some **things that are shit** include [systemd](systemd.md), [capitalism](capitalism.md), [Feminism](feminism.md), [Windows](windows.md), [Linux](linux.md), [Plan9](plan9.md), [OOP](oop.md), [LGBT](lgbt.md), [security](security.md), [encryption](encryption.md), [military](military.md), [laws](law.md), [liberalism](liberalism.md), [USA](usa.md), [money](money.md), [cryptocurrencies](crypto.md) and many more.
## See Also
- [cancer](cancer.md)
- [harmful](harmful.md)

@ -2,7 +2,7 @@
*"I'm not glad he'd dead, but I'm glad he's gone."* -- [Richard Stallman](rms.md)
Steve Jobs was the prototypical evil [CEO](ceo.md) and co-founder of one of the worst [corporations](corporation.md) in the world: [Apple](apple.md). He was a psychopathic entrepreneur with a cult of personality that makes Americans cum. He was mainly known for his ability to manipulate people and he worsened technology by making it more consumerist, expensive and incompatible with already existing technology. All americans masturbate daily to Steve Jobs so he can also be considered the most famous US porn star.
Steve Jobs (also Steve Jewbs) was the prototypical evil [CEO](ceo.md) and co-founder of one of the worst [corporations](corporation.md) in the world: [Apple](apple.md). He was a psychopathic entrepreneur with a cult of personality that makes Americans cum. He was mainly known for his ability to manipulate people and he worsened technology by making it more consumerist, expensive and incompatible with already existing technology. All americans masturbate daily to Steve Jobs so he can also be considered the most famous US porn star. Someone once said that there are essentially two types of men in technology: those who understand what they don't manage and those who manage what they don't understand. Jobs was the latter.
{ LOL how come in the American movies the villain is always some rich boss of a huge corporation clearly resembling Steve Jobs, doing literally the same things, it's almost as if the average American actually somehow KNOWS and feels deep inside these people are pure evil, but suddenly outside of a Hollywood movie their brain switches to "aaaaah, that guy is amazing" and they just eat all his bullshit. I just can't comprehend this. ~drummyfish }

@ -22,8 +22,8 @@ h1:first-of-type:after
.nav:before { content: ">>> "; }
.nav:after { content: " <<<"; }
a:before { content: ">"; }
a:after { content: "<"; }
a:before { content: "["; }
a:after { content: "]"; }
.dead:before, .dead:after { content: "~"; }

@ -144,4 +144,5 @@ Search for Usenet archives, I've found some sites dedicated to this, also [Inter
- [BBS](bbs.md)
- [modem world](modem_world.md)
- [multi user dungeon](mud.md)
- [mailing list](mailing_list.md)
- [mailing list](mailing_list.md)
- [FidoNet](fidonet.md)

File diff suppressed because one or more lines are too long

@ -2,9 +2,9 @@
This is an autogenerated article holding stats about this wiki.
- number of articles: 558
- number of commits: 696
- total size of all texts in bytes: 3030740
- number of articles: 559
- number of commits: 697
- total size of all texts in bytes: 3031771
longest articles:
@ -24,6 +24,14 @@ longest articles:
latest changes:
```
Date: Sun Feb 18 01:42:30 2024 +0100
dog.md
jokes.md
oop.md
pseudorandomness.md
random_page.md
wiki_pages.md
wiki_stats.md
Date: Sat Feb 17 23:25:58 2024 +0100
avpd.md
backgammon.md
@ -41,18 +49,6 @@ random_page.md
wiki_pages.md
wiki_stats.md
Date: Sat Feb 17 10:47:29 2024 +0100
4chan.md
acronym.md
brainfuck.md
comun.md
esolang.md
history.md
how_to.md
julia_set.md
license.md
lrs_dictionary.md
monad.md
often_confused.md
```
most wanted pages:

@ -60,6 +60,8 @@ Don't!
*see also [incel](incel.md)/[volcel](volcel.md)*
Any girl that has ever seen the [Internet](internet.md) is spoiled beyond grave, avoid these for any cost. If you seriously want to live with a woman, it's best to consider diving into the jungle and find some half ape indigenous girl not touched by capitalism yet, those may be unironically cool.
Jerking off is the easiest solution to satisfying needs connected to fucking women. If you absolutely HAVE to get laid, save up for a prostitute, that's the easiest way and most importantly won't ruin your life. Or decide to become [gay](gay.md), that may make matters much easier. You may also potentially try to hit on some REAL ugly girl that's literally desperate for sex, but remember it has to be the ugliest, fattest landwhale that you've ever seen, it's not enough to just find a 3/10, that's still a league too high for you that will reject you unless you pay her. Also consider that if you don't pay for sex, there is a 50% chance you will randomly get sued for rape sometime during the following 30 year period. If you want a girlfriend, then rather don't. The sad truth is that to make a woman actually "love" you, as much as one is capable of doing so, you HAVE TO be an enormously evil ass that will beat her to near death, abuse her, rape her and regularly cheat on her -- that's how it is and that's what every man has to learn the hard way -- as we know, the older generation's experience cannot be communicated by words, the young generation always thinks it is somehow different and will never listen. Sadly this is simply how it is -- even if you think you have found the "special one", the one that's different, the intelligent introverted one that's nice and friendly to you, nope, she is still a woman, she won't love you unless you're a murderer dickass beating her daily (NOTE: we don't advocate any violence, our advice here is to simply avoid women). If you think getting close to her, being nice and listening to her will make her love you, you're going to hit a brick wall very hard -- this road only ever leads to a friendzone 100% of the times, you will end up carrying her purse while she's shopping without her letting you touch her ever. If you just want a nonsexual girl friend, then it's fine, but you will never make a girlfriend this way. This is not the girl's fault, she is programmed like that, blaming the girl here would be like blaming a child for overeating on candy or blaming a cat for torturing birds for fun; and remember, THE GIRL SUFFERS TOO, she is literally attracted only to those who will abuse her, it is her curse. If anyone's to blame for your suffering, it is you for being so extremely naive -- always remember you are playing with fire. You may still get a girl to stay with you or even marry you and have kids if you have something that will make her want to be with you despite not loving you, which may include being enormously rich, being so braindead to have million subscribers on YouTube, having an enormous 1 meter long dick or literally giving up all dignity and succumbing to being her lifelong slave dog doing literally everything she says when she says it, but that will still get you at most 4/10 and is probably not worth it. { From my experience this also goes for trans girls somehow, so tough luck. Maybe it's so even for gay men in the woman role. ~drummyfish } All in all rather avoid all of this and pay for a prostitute, buy some sex toys, watch porn and stay happy <3
## Notable Women In History

Loading…
Cancel
Save