This commit is contained in:
Miloslav Ciz 2023-12-16 20:32:58 +01:00
parent f850c6c59b
commit 3eaceb1bb7
23 changed files with 125 additions and 65 deletions

View file

@ -4,25 +4,27 @@ Assembly (also ASM) is, for any given hardware computing platform ([ISA](isa.md)
**Assembly is NOT a single language**, it differs for every architecture, i.e. every model of CPU has potentially different architecture, understands a different machine code and hence has a different assembly (though there are some standardized families of assembly like x86 that work on wide range of CPUs); therefore **assembly is not [portable](portability.md)** (i.e. the program won't generally work on a different type of CPU or under a different [OS](os.md))! And even the same kind of assembly language may have several different [syntax](syntax.md) formats which may differ in comment style, order of writing arguments and even instruction abbreviations (e.g. x86 can be written in [Intel](intel.md) and [AT&T](at_and_t.md) syntax). For the reason of non-portability (and also for the fact that "assembly is hard") you shouldn't write your programs directly in assembly but rather in a bit higher level language such as [C](c.md) (which can be compiled to any CPU's assembly). However you should know at least the very basics of programming in assembly as a good programmer will come in contact with it sometimes, for example during hardcore [optimization](optimization.md) (many languages offer an option to embed inline assembly in specific places), debugging, reverse engineering, when writing a C compiler for a completely new platform or even when designing one's own new platform. **You should write at least one program in assembly** -- it gives you a great insight into how a computer actually works and you'll get a better idea of how your high level programs translate to machine code (which may help you write better [optimized](optimization.md) code) and WHY your high level language looks the way it does. **Assembly is NOT a single language**, it differs for every architecture, i.e. every model of CPU has potentially different architecture, understands a different machine code and hence has a different assembly (though there are some standardized families of assembly like x86 that work on wide range of CPUs); therefore **assembly is not [portable](portability.md)** (i.e. the program won't generally work on a different type of CPU or under a different [OS](os.md))! And even the same kind of assembly language may have several different [syntax](syntax.md) formats which may differ in comment style, order of writing arguments and even instruction abbreviations (e.g. x86 can be written in [Intel](intel.md) and [AT&T](at_and_t.md) syntax). For the reason of non-portability (and also for the fact that "assembly is hard") you shouldn't write your programs directly in assembly but rather in a bit higher level language such as [C](c.md) (which can be compiled to any CPU's assembly). However you should know at least the very basics of programming in assembly as a good programmer will come in contact with it sometimes, for example during hardcore [optimization](optimization.md) (many languages offer an option to embed inline assembly in specific places), debugging, reverse engineering, when writing a C compiler for a completely new platform or even when designing one's own new platform. **You should write at least one program in assembly** -- it gives you a great insight into how a computer actually works and you'll get a better idea of how your high level programs translate to machine code (which may help you write better [optimized](optimization.md) code) and WHY your high level language looks the way it does.
**OK, but why doesn't anyone make a portable assembly?** Well, people do, they just usually call it a [bytecode](bytecode.md) -- take a look at that. [C](c.md) is portable and low level, so it is often called a "portable assembly". **OK, but why doesn't anyone make a portable assembly?** Well, people do, they just usually call it a [bytecode](bytecode.md) -- take a look at that. [C](c.md) is portable and low level, so it is often called a "portable assembly", though it still IS significantly higher in abstraction and won't usually give you the real assembly vibes.
The most common assembly languages you'll encounter nowadays are **[x86](x86.md)** (used by most desktop [CPUs](cpu.md)) and **[ARM](arm.md)** (used by most mobile CPUs) -- both are used by [proprietary](proprietary.md) hardware and though an assembly language itself cannot (as of yet) be [copyrighted](copyright.md), the associated architectures may be "protected" (restricted) e.g. by [patents](patent.md). **[RISC-V](risc_v.md)** on the other hand is an "[open](open.md)" alternative, though not yet so wide spread. Other assembly languages include e.g. [AVR](avr.md) (8bit CPUs used e.g. by some [Arduinos](arduino.md)) and [PowerPC](ppc.md). The most common assembly languages you'll encounter nowadays are **[x86](x86.md)** (used by most desktop [CPUs](cpu.md)) and **[ARM](arm.md)** (used by most mobile CPUs) -- both are used by [proprietary](proprietary.md) hardware and though an assembly language itself cannot (as of yet) be [copyrighted](copyright.md), the associated architectures may be "protected" (restricted) e.g. by [patents](patent.md) (see also [IP cores](ip_core.md)). **[RISC-V](risc_v.md)** on the other hand is an "[open](open.md)" alternative, though not yet so wide spread. Other assembly languages include e.g. [AVR](avr.md) (8bit CPUs used e.g. by some [Arduinos](arduino.md)) and [PowerPC](ppc.md).
To be precise, a typical assembly language is actually more than a set of nicknames for machine code instructions, it may offer helpers such as [macros](macro.md) (something aking the C preprocessor), pseudoinstructions (commands that look like instructions but actually translate to e.g. multiple instructions), [comments](comment.md), directives, named labels for jumps (as writing literal jump addresses would be extremely tedious) etc. To be precise, a typical assembly language is actually more than a set of nicknames for machine code instructions, it may offer helpers such as [macros](macro.md) (something akin the C preprocessor), pseudoinstructions (commands that look like instructions but actually translate to e.g. multiple instructions), [comments](comment.md), directives, named labels for jumps (as writing literal jump addresses would be extremely tedious) etc.
Assembly is extremely low level, so you get no handholding or much programming "safety" (apart from e.g. CPU operation modes), you have to do everything yourself -- you'll be dealing with things such as function [call conventions](call_convention.md), [interrupts](interrupt.md), [syscalls](syscall.md) and their conventions, how many CPU cycles different instructions take, memory segments, [endianness](endianness.md), raw addresses/[goto](goto.md) jumps, [call frames](call_frame.md) etc. Assembly is extremely low level, so you get no handholding or much programming "safety" (apart from e.g. CPU operation modes), you have to do everything yourself -- you'll be dealing with things such as function [call conventions](call_convention.md), [interrupts](interrupt.md), [syscalls](syscall.md) and their conventions, counting CPU cycles of individual instructions, looking up exact hexadecimal memory addresses, defining memory segments, dealing with [endianness](endianness.md), raw [goto](goto.md) jumps, [call frames](call_frame.md) etc.
Note that just replacing assembly mnemonics with binary machine code instructions is not yet enough to make an executable program! More things have to be done such as [linking](linking.md) [libraries](library.md) and converting the result to some [executable format](executable_format.md) such as [elf](elf.md) which contains things like header with metainformation about the program etc. Note that just replacing assembly mnemonics with binary machine code instructions is not yet enough to make an executable program! More things have to be done such as [linking](linking.md) [libraries](library.md) and converting the result to some [executable format](executable_format.md) such as [elf](elf.md) which contains things like header with metainformation about the program etc.
## Typical Assembly Language ## Typical Assembly Language
Assembly languages are usually unstructured, i.e. there are no control structures such as `if` or `while` statements: these have to be manually implemented using labels and jump ([goto](goto.md)) instructions. There may exist macros that mimic control structures. The typical look of an assembly program is however still a single column of instructions with arguments, one per line, each representing one machine instruction. Assembly languages are usually unstructured, i.e. there are no control structures such as `if` or `while` statements: these have to be manually implemented using labels and jump ([goto](goto.md), branch) instructions. There may exist macros that mimic control structures. The typical look of an assembly program is however still a single column of instructions with arguments, one per line, each representing one machine instruction.
The working of the language reflects the actual [hardware](hardware.md) architecture -- most architectures are based on [registers](register.md) so usually there is a small number (something like 16) of registers which may be called something like R0 to R15, or A, B, C etc. Sometimes registers may even be subdivided (e.g. in x86 there is an *eax* 32bit register and half of it can be used as the *ax* 16bit register). These registers are the fastest available memory (faster than the main RAM memory) and are used to perform calculations. Some registers are general purpose and some are special: typically there will be e.g. the FLAGS register which holds various 1bit results of performed operations (e.g. [overflow](overflow.md), zero result etc.). Some instructions may only work with some registers (e.g. there may be kind of a "[pointer](pointer.md)" register used to hold addresses along with instructions that work with this register, which is meant to implement [arrays](array.md)). Values can be moved between registers and the main memory (with instructions called something like *move*, *load* or *store*). In assembly it is also common to blend program instructions and data, i.e. sometimes you create a label after which you just put bytes that will represent e.g. text strings or images and after that you start to write program instructions that work with these data, which will likely physically be placed this way (after the data) in the final program. This may cause quite nasty bugs if you by mistake jump to a place where data reside and try to treat them as instructions.
The working of the language reflects the actual [hardware](hardware.md) architecture -- most architectures are based on [registers](register.md) so usually there is a small number (something like 16) of registers which may be called something like R0 to R15, or A, B, C etc. Sometimes registers may even be subdivided (e.g. in x86 there is an *eax* 32bit register and half of it can be used as the *ax* 16bit register). These registers are the fastest available memory (faster than the main RAM memory, they are literally INSIDE the CPU, even in front of the [cache](cache.md)) and are used to perform calculations. Some registers are general purpose and some are special: typically there will be e.g. the FLAGS register which holds various 1bit results of performed operations (e.g. [overflow](overflow.md), zero result etc.). Some instructions may only work with some registers (e.g. there may be kind of a "[pointer](pointer.md)" register used to hold addresses along with instructions that work with this register, which is meant to implement [arrays](array.md)). Values can be moved between registers and the main memory (with instructions called something like *move*, *load* or *store*).
Writing instructions works similarly to how you call a [function](function.md) in high level language: you write its name and then its [arguments](argument.md), but in assembly things are more complicated because an instruction may for example only allow certain kinds of arguments -- it may e.g. allow a register and immediate constant (kind of a number literal/constant), but not e.g. two registers. You have to read the documentation for each instruction. While in high level language you may write general [expressions](expression.md) as arguments (like `myFunc(x + 2 * y,myFunc2())`), here you can only pass specific values. Writing instructions works similarly to how you call a [function](function.md) in high level language: you write its name and then its [arguments](argument.md), but in assembly things are more complicated because an instruction may for example only allow certain kinds of arguments -- it may e.g. allow a register and immediate constant (kind of a number literal/constant), but not e.g. two registers. You have to read the documentation for each instruction. While in high level language you may write general [expressions](expression.md) as arguments (like `myFunc(x + 2 * y,myFunc2())`), here you can only pass specific values.
There are also no complex [data types](data_type.md), assembly only works with numbers of different size, e.g. 16 bit integer, 32 bit integer etc. Strings are just sequences of numbers representing [ASCII](ascii.md) values, it is up to you whether you implement null terminated strings or Pascal style strings. [Pointers](pointer.md) are just numbers representing addresses. It is up to you whether you interpret a number as signed or unsigned (some instructions treat numbers as unsigned, some as signed). There are also no complex [data types](data_type.md), assembly only works with numbers of different size, e.g. 16 bit integer, 32 bit integer etc. Strings are just sequences of numbers representing [ASCII](ascii.md) values, it is up to you whether you implement null terminated strings or Pascal style strings. [Pointers](pointer.md) are just numbers representing addresses. It is up to you whether you interpret a number as signed or unsigned (some instructions treat numbers as unsigned, some as signed, some don't care because it doesn't matter).
Instructions are typically written as three-letter abbreviations and follow some unwritten naming conventions so that different assembly languages at least look similar. Common instructions found in most assembly languages are for example: Instructions are typically written as three-letter abbreviations and follow some unwritten naming conventions so that different assembly languages at least look similar. Common instructions found in most assembly languages are for example:

View file

@ -4,6 +4,8 @@
Censorship means intentional effort towards preventing exchange of certain kind of information among other individuals, for example suppression of [free speech](free_speech.md), altering old works of art for political reasons, forced takedowns of [copyrighted](copyright.md) material from the [Internet](internet.md) etc. Note that thereby censorship does **NOT** include some kinds of data or information filtering, for example censorship does not include filtering out [noise](noise.md) such as [spam](spam.md) on a forum or static from audio (as noise is a non-information) or PERSONAL avoidance of certain information (e.g. using [adblock](adblock.md) or hiding someone's forum posts ONLY FOR ONESELF). Censorship often **hides under euphemisms** such as "[moderation](moderation.md)", "[safe space](safe_space.md)", "[filter](filter.md)", "protection", "delisting", "review" etc. **Censorship is always [wrong](bad.md)** -- in a [good society](less_retarded_society.md) there is never a slightest reason to censor anything, therefore whenever censorship is deemed the best solution, something within the society is deeply fucked up. In current society censorship, along with [propaganda](propaganda.md), brainwashing and misinformation, is extremely prevalent and growing -- it's being pushed not only by [governments](government.md) and [corporations](corporation.md) but also by harmful terrorist groups such as [LGBT](lgbt.md) and [feminism](feminism.md) who force media censorship (e.g. that of [Wikipedia](wikipedia.md) or search engines) and punishment of free speech (see [political correctness](political_correctness.md) and "[hate speech](hate_speech.md)"). Censorship means intentional effort towards preventing exchange of certain kind of information among other individuals, for example suppression of [free speech](free_speech.md), altering old works of art for political reasons, forced takedowns of [copyrighted](copyright.md) material from the [Internet](internet.md) etc. Note that thereby censorship does **NOT** include some kinds of data or information filtering, for example censorship does not include filtering out [noise](noise.md) such as [spam](spam.md) on a forum or static from audio (as noise is a non-information) or PERSONAL avoidance of certain information (e.g. using [adblock](adblock.md) or hiding someone's forum posts ONLY FOR ONESELF). Censorship often **hides under euphemisms** such as "[moderation](moderation.md)", "[safe space](safe_space.md)", "[filter](filter.md)", "protection", "delisting", "review" etc. **Censorship is always [wrong](bad.md)** -- in a [good society](less_retarded_society.md) there is never a slightest reason to censor anything, therefore whenever censorship is deemed the best solution, something within the society is deeply fucked up. In current society censorship, along with [propaganda](propaganda.md), brainwashing and misinformation, is extremely prevalent and growing -- it's being pushed not only by [governments](government.md) and [corporations](corporation.md) but also by harmful terrorist groups such as [LGBT](lgbt.md) and [feminism](feminism.md) who force media censorship (e.g. that of [Wikipedia](wikipedia.md) or search engines) and punishment of free speech (see [political correctness](political_correctness.md) and "[hate speech](hate_speech.md)").
Sometimes you can actually exploit censorship to get to good content -- look up a block list (e.g. https://en.wikipedia.org/wiki/Category:Blocked_websites_by_country), then you have a list of interesting places you probably want to visit :)
Sometimes it is not 100% clear which action constitutes censorship: for example categorization such as moving a forum post from one thread to another (possibly less visible) thread may or may not be deemed censorship -- this depends on the intended result of such action; moving a post somewhere else doesn't remove it completely but can make it less visible. Whether something is censorship always depends on the answer to the question: "does the action prevent others from information sharing?". Sometimes it is not 100% clear which action constitutes censorship: for example categorization such as moving a forum post from one thread to another (possibly less visible) thread may or may not be deemed censorship -- this depends on the intended result of such action; moving a post somewhere else doesn't remove it completely but can make it less visible. Whether something is censorship always depends on the answer to the question: "does the action prevent others from information sharing?".
**Modern censorship is much more sophisticated**; in old days, e.g. those of [USSR](ussr.md) pseudocommunist regimes, it was simple: stuff was reviewed and it either got censored or it passed, governments even openly admitted to censorship and stated it was simply necessary for the advancement of society. People wanted to talk but the government didn't want to let them. Not so nowadays, it got much advance in several ways: **Modern censorship is much more sophisticated**; in old days, e.g. those of [USSR](ussr.md) pseudocommunist regimes, it was simple: stuff was reviewed and it either got censored or it passed, governments even openly admitted to censorship and stated it was simply necessary for the advancement of society. People wanted to talk but the government didn't want to let them. Not so nowadays, it got much advance in several ways:

View file

@ -74,7 +74,7 @@ For **images** we usually exploit the fact that human sight is less sensitive to
- Reduce the number of possible colors -- traditional RGB uses 8 bits for each R, G and B component and so each pixel takes 3 bytes, which allows for about 6 million colors. However using just 2 bytes (65 thousand colors) many times [suffices](good_enough.md) and saves 1/3rd of the size -- see [RGB565](rgb565.md). We may also utilize an image-specific [palette](palette.md) and save the image in indexed mode, i.e. compute a palette of let's say 256 most common colors in the image, then encode the image as the palette plus pixels, of which each will only take one byte! This saves almost 2/3rds of the size. The drop of quality can further be made less noticeable with [dithering](dithering.md). - Reduce the number of possible colors -- traditional RGB uses 8 bits for each R, G and B component and so each pixel takes 3 bytes, which allows for about 6 million colors. However using just 2 bytes (65 thousand colors) many times [suffices](good_enough.md) and saves 1/3rd of the size -- see [RGB565](rgb565.md). We may also utilize an image-specific [palette](palette.md) and save the image in indexed mode, i.e. compute a palette of let's say 256 most common colors in the image, then encode the image as the palette plus pixels, of which each will only take one byte! This saves almost 2/3rds of the size. The drop of quality can further be made less noticeable with [dithering](dithering.md).
- Reduce resolution -- plain simple. However this can be made smarter by e.g. trying to detect areas with few details and only reducing the resolution there. - Reduce resolution -- plain simple. However this can be made smarter by e.g. trying to detect areas with few details and only reducing the resolution there.
In **video** compression we may reuse the ideas from image compression and further employ exploiting temporal redundancy, i.e. the fact that consecutive video frames look similar, so we may only encode some kind of delta (change) against the previous (or even next) frame. The most common way is to fully record only one key frame in some time span (so called I-frame, further compressed with image compression methods), then divide it to small blocks and estimate the movement of those blocks so that they approximately make up the following frames -- we then record only the motion vectors of the blocks. This is why videos look "blocky". In the past [interlacing](interlacing.md) was also used -- only half of each frame was recorded, every other row was dropped; when playing, the frame was interlaced with the previous frame. In **video** compression we may reuse the ideas from image compression and further employ exploiting temporal redundancy, i.e. the fact that consecutive video frames look similar, so we may only encode some kind of delta (change) against the previous (or even next) frame. The most common way is to fully record only one key frame in some time span (so called I-frame, further compressed with image compression methods), then divide it to small blocks and estimate the movement of those blocks so that they approximately make up the following frames -- we then record only the motion vectors of the blocks. This is why videos look "blocky". In the past [interlacing](interlacing.md) was also used -- only half of each frame was recorded, every other row was dropped; when playing, the frame was interlaced with the previous frame. Another cool idea is keyframe [superresolution](superresolution.md): you store only some keyframes in full resolutions and store the rest of them in smaller size; during decoding you can use the nearby full scale keyframes to upscale the low res keyframes (search for matching subblocks in the low res image and match them to those in the big res image).
In **audio** we usually straight remove frequencies that humans can't hear (usually said to be above 20 kHz), for this we again convert the audio from spatial to frequency domain (using e.g. [Fourier transform](fourier_transform.md)). Furthermore it is very inefficient to store sample values directly -- we rather use so called *differential PCM*, a lossless compression that e.g. stores each sample as a difference against the previous sample (which is usually small and doesn't use up many bits). This can be improved by a predictor, which tries to predict the next values from previous values and then we only save the difference against this prediction. *Joint stereo coding* exploits the fact that human hearing is not so sensitive to the direction of the sound and so e.g. instead of recording both left and right stereo channels in full quality rather records the sum of both and a ratio between them (which can get away with fewer bits). *Psychoacoustics* studies how humans perceive sound, for example so called *masking*: certain frequencies may for example mask nearby (both in frequency and time) frequencies (make them unhearable for humans) so we can drop them. See also [vocoders](vocoder.md). In **audio** we usually straight remove frequencies that humans can't hear (usually said to be above 20 kHz), for this we again convert the audio from spatial to frequency domain (using e.g. [Fourier transform](fourier_transform.md)). Furthermore it is very inefficient to store sample values directly -- we rather use so called *differential PCM*, a lossless compression that e.g. stores each sample as a difference against the previous sample (which is usually small and doesn't use up many bits). This can be improved by a predictor, which tries to predict the next values from previous values and then we only save the difference against this prediction. *Joint stereo coding* exploits the fact that human hearing is not so sensitive to the direction of the sound and so e.g. instead of recording both left and right stereo channels in full quality rather records the sum of both and a ratio between them (which can get away with fewer bits). *Psychoacoustics* studies how humans perceive sound, for example so called *masking*: certain frequencies may for example mask nearby (both in frequency and time) frequencies (make them unhearable for humans) so we can drop them. See also [vocoders](vocoder.md).

View file

@ -6,7 +6,7 @@ Copyleft has been by its mechanisms likened to a virus because once it is applie
For free/open-source software the alternative to copyleft is so called **[permissive](permissive.md)** licensing which (same as with copyleft) grants all the necessary freedom rights, but, unlike copyleft, does NOT require further modified versions to grant these rights as well. This allows free software being forked and developed into [proprietary](proprietary.md) software and is what copyleft proponents criticize. However, both copyleft and permissive licensing are free as in freedom. For free/open-source software the alternative to copyleft is so called **[permissive](permissive.md)** licensing which (same as with copyleft) grants all the necessary freedom rights, but, unlike copyleft, does NOT require further modified versions to grant these rights as well. This allows free software being forked and developed into [proprietary](proprietary.md) software and is what copyleft proponents criticize. However, both copyleft and permissive licensing are free as in freedom.
In the [FOSS](foss.md) world there is a huge battle between the copyleft camp and permissive camp (our [LRS](lrs.md) advocates permissive licenses with a preference for 100% [public domain](public_domain.md)). These debates go beyond mere technology and law for the basic disagreement lies in whether freedom should be forced and if forced freedom really is freedom, thereby getting into questions of politics, ideologies, philosophy, morality and [ethics](ethics.md). In the [FOSS](foss.md) world there is a huge **battle between the copyleft camp and permissive camp** (our [LRS](lrs.md) advocates permissive licenses with a preference for 100% [public domain](public_domain.md)). These debates go beyond mere technology and law for the basic disagreement lies in whether freedom should be forced and if forced freedom really is freedom, thereby getting into questions of politics, ideologies, philosophy, morality and [ethics](ethics.md). Some groups opposing copyleft include [copyfree](copyfree.md), [GNG](gng.md) and [LRS](lrs.md).
## Issues With Copyleft ## Issues With Copyleft
@ -21,3 +21,9 @@ In the great debate of copyleft vs permissive free licenses we, as technological
- **Copyleft prevents not only inclusion in proprietary software but also in permissive FREE software.** I.e. as a consequence of denying code to corporations collateral damage is done by also denying code to ethical free software that wishes to be distributed without copyleft conditions. Similarly to how proprietary software forces free software programmers to reinvent wheels by rewriting software as free, copyleft forces permissive free software programmers to reinvent wheels and rewrite copylefted code as permissive. In this way copyleft [fights](fight_culture.md) not only proprietary software, but also other kinds of free software. - **Copyleft prevents not only inclusion in proprietary software but also in permissive FREE software.** I.e. as a consequence of denying code to corporations collateral damage is done by also denying code to ethical free software that wishes to be distributed without copyleft conditions. Similarly to how proprietary software forces free software programmers to reinvent wheels by rewriting software as free, copyleft forces permissive free software programmers to reinvent wheels and rewrite copylefted code as permissive. In this way copyleft [fights](fight_culture.md) not only proprietary software, but also other kinds of free software.
- **There are currently no nice copyleft licenses** -- this of course isn't argument against copyleft itself but it's a practical argument nevertheless. Copyleft nowadays basically means GPL and GPL has a shitton of burdening stuff like requiring credit etc. If you want pure copyleft without anything on top, good luck looking for a license (keep in mind that making your own license or using some obscure, legally untested license is mostly a bad idea). - **There are currently no nice copyleft licenses** -- this of course isn't argument against copyleft itself but it's a practical argument nevertheless. Copyleft nowadays basically means GPL and GPL has a shitton of burdening stuff like requiring credit etc. If you want pure copyleft without anything on top, good luck looking for a license (keep in mind that making your own license or using some obscure, legally untested license is mostly a bad idea).
- ... - ...
## See Also
- [permissive](permissive.md)
- [copyfree](copyfree.md)
- [copyright](copyright.md)

View file

@ -31,3 +31,4 @@ Free culture has become a relative success, the free Creative Commons licenses a
- [free software](free_software.md) - [free software](free_software.md)
- [free universe](free_universe.md) - [free universe](free_universe.md)
- [copyfree](copyfree.md)

View file

@ -18,7 +18,7 @@ Though unknown to common people, the invention and adoption of free software has
# Definition # Definition
Free software was originally defined by [Richard Stallman](rms.md) for his [GNU](gnu.md) project. The definition was subsequently adopted and adjusted by other groups such as [Debian](debian.md) and so nowadays there isn't just one definition, even though the GNU definition is usually implicitly supposed. However, all of these definition are very similar and are basically variations and subsets of the original one. The GNU definition of free software is paraphrased as follows: Free software was originally defined by [Richard Stallman](rms.md) for his [GNU](gnu.md) project. The definition was subsequently adopted and adjusted by other groups such as [Debian](debian.md) or [copyfree](copyfree.md) and so nowadays there isn't just one definition, even though the GNU definition is usually implicitly assumed. However, all of these definition are very similar and are quite often variations and subsets of the original one. The GNU definition of free software is paraphrased as follows:
Software is considered free if all its users have the legal and [de facto](de_facto.md) rights to: Software is considered free if all its users have the legal and [de facto](de_facto.md) rights to:
@ -33,7 +33,7 @@ To make it clear, freedom 0 (use for any purpose) covers ANY use, even commercia
[Source code](source_code.md) here means the preferred form in which software is modified, i.e. things such as [obfuscated](obfuscation.md) source code don't count as true source code. [Source code](source_code.md) here means the preferred form in which software is modified, i.e. things such as [obfuscated](obfuscation.md) source code don't count as true source code.
The developers of Debian operating system have created their own guidelines (Debian Free Software Guidelines) which respect these points but are worded in more complex terms and further require e.g. non-functional data to be available under free terms as well ([source](https://people.debian.org/~bap/dfsg-faq.html#not_just_code)) which GNU doesn't ([source](https://www.gnu.org/distros/free-system-distribution-guidelines.en.html#non-functional-data)). The definition of open source is yet more complex even though in practice legally free software is eventually also open source and vice versa. The developers of Debian operating system have created their own guidelines (Debian Free Software Guidelines) which respect these points but are worded in more complex terms and further require e.g. non-functional data to be available under free terms as well ([source](https://people.debian.org/~bap/dfsg-faq.html#not_just_code)), respecting also [free culture](free_culture.md), which GNU doesn't ([source](https://www.gnu.org/distros/free-system-distribution-guidelines.en.html#non-functional-data)). The definition of "[open source](open_source.md)" is yet more complex even though in practice legally free software is eventually also open source and vice versa. The [copyfree](copyfree.md) definition tries to be a lot more strict about freedom and forbids for example [copyleft](copyleft.md) (which GNU promotes) and things such as [DRM](drm.md) clauses (i.e. a copyfree license mustn't impose technology restrictions, even those seen as "justified", for similar reasons why we don't prohibit any kind of use for example).
# History # History
@ -52,3 +52,5 @@ After some years dealing with software freedom (in serious ways, making money do
- [free hardware](free_hardware.md) - [free hardware](free_hardware.md)
- [open source](open_source.md) - [open source](open_source.md)
- [free culture](free_culture.md) - [free culture](free_culture.md)
- [creative commons](creative_commons.md)
- [copyfree](copyfree.md)

7
fsf.md
View file

@ -9,3 +9,10 @@ TODO
In September 2019 Richard Stallman, the founder and president of the FSF, was cyberbullied and [cancelled](cancel_culture.md) by SJW fascists for simply stating a rational but unpopular opinion on child sexuality and was forced to resign as a president. This might have been the last nail in the coffin for the FSF. The new president would come to be [Geoffrey Knauth](geoffrey_knauth.md), an idiot who spent his life writing [proprietary](proprietary.md) software in such shit as [C#](c_sharp.md) and helped built military software for killing people (just read his cv online). What's next, a porn actor becoming the next Pope? Would be less surprising. In September 2019 Richard Stallman, the founder and president of the FSF, was cyberbullied and [cancelled](cancel_culture.md) by SJW fascists for simply stating a rational but unpopular opinion on child sexuality and was forced to resign as a president. This might have been the last nail in the coffin for the FSF. The new president would come to be [Geoffrey Knauth](geoffrey_knauth.md), an idiot who spent his life writing [proprietary](proprietary.md) software in such shit as [C#](c_sharp.md) and helped built military software for killing people (just read his cv online). What's next, a porn actor becoming the next Pope? Would be less surprising.
After this the FSF definitely died. After this the FSF definitely died.
## See Also
- [GNU](gnu.md)
- [OSI](osi.md)
- [EFF](eff.md)
- [Creative Commons](creative_commons.md)

View file

@ -2,14 +2,15 @@
*[UwU](uwu.md)* *[UwU](uwu.md)*
Furriness is a weird mental disorder (dolphi will forgive :D) and fetish that makes people dig and/or identify as human-like furry animals, e.g. [cats](cat.md), foxes or completely made up species. To a big degree it's a sexual identity but these people just pretend they're animals everywhere, they have furry conventions, you see their weird furry talk in issue trackers on programming websites etc. You cannot NOT meet a furry on the [Internet](internet.md). Furriness is a serious mental disorder (dolphi will forgive :D) and fetish that makes people extremely creepily obsessed and/or identify with anthropomorphic animals (usually those with fur) far beyond any line of acceptability as a healthy personality trait, they often identify e.g. with [cats](cat.md), foxes or even completely made up species. To a big degree it's a sexual identity but those people just try to pretend (and possibly even believe) they're animals everywhere; not only do they have furry conventions, you just see furry avatars all over the internet, on issue trackers on programming websites and forums, recently zoomer kids started to even e.g. meow in classes because they identify as cats (this caused some huge drama somewhere in the UK). You cannot NOT meet a furry on the [Internet](internet.md). They usually argue it's "cute" and try to make no big deal of it, however that's a mask beyond which something horribly rotten lies. There is something more to furrydom, it's basically a cult that has taken an idea too far, kind of like anorexia takes losing weight a bit too far -- cuteness is OK, however furries are not really cute, they are CREEPY, they take this beyond healthy passion, you see the psychopathic stares in their faces, they take child cartoon characters and fantasize about them being transsexual and gore raping them and having children with them, some even attempt suicides if you insult their favorite characters etc.
Also the furry community -- it's extremely [toxic](toxic.md), firstly as any big internet-centered group it's mostly completely infected with [wokeness](woke.md), [LGBT](lgbt.md)+[feminazism](feminism.md), which combined with the cult behavior may really lead to the community cyber pushing you to suicide if you e.g. question the gender of some child cartoon character (or even if you for example oppose the idea the character has to have some non-binary gender). A favorite hobby of furries is to destroy software project by pushing ugly woke furry mascots, threatening by suicide if the project doesn't accept them. Furries also seem to have a strong love of [copyright](copyright.md) so as to "protect" their shitty amateur art no one would want to copy anyway. Many create their own "fursonas" or "species" and then prohibit others from using them, they are so emotionally invested in this they may literally try to murder you if you do something to the drawing of their character. Stay away.
Furry [porn](porn.md) is called **[yiff](yiff.md)**.
In the past we might have been wondering whether by 2020 we'd already have cured cancer, whether we'd have cities on Mars and flying cars. Well no, but you can sexually identify as a fox now. In the past we might have been wondering whether by 2020 we'd already have cured cancer, whether we'd have cities on Mars and flying cars. Well no, but you can sexually identify as a fox now.
Furries seem to have a very harmful obsession with [copyrighting](copyright.md) their art, many create their own "fursonas" or "species" and then prohibit others from using them. Stay away.
TODO: links to those furry porn social media etc.
## See Also ## See Also
- [uwu](uwu.md) - [uwu](uwu.md)
- [retardedness](retard.md)

9
git.md
View file

@ -14,9 +14,9 @@ It is generally considered quite a good software, many praise its distributed na
Here are some alternatives to git: Here are some alternatives to git:
- **nothing**: If you don't have many people on the project, you can comfortably just use nothing, like in good [old](old.md) times. Share a directory with the source code and keep regular backups in separate directories, share the source online via [FTP](ftp.md) or something like that. - **[nothing](nothing.md)**: If you don't have many people on the project, you can comfortably just use nothing, like in good [old](old.md) times. Share a directory with the source code and keep regular backups in separate directories, share the source online via [FTP](ftp.md) or something like that, let internet archive back you up.
- **[svn](svn.md)**: The "main", older alternative to git, used e.g. by [SourceForge](sourceforge.md), apparently suffers from some design issues. - **[svn](svn.md)**: The "main", older alternative to git, used e.g. by [SourceForge](sourceforge.md), apparently suffers from some design issues.
- **[mailing list](mailing_list.md)**: Development happens over email, people just keep sending [patches](patch.md) that are review and potentially merged by the maintainers to the main code base. This is how [Linux](linux.md) was developed before git. - **[mailing list](mailing_list.md)**: Development happens over email, people just keep sending [patches](patch.md) that are reviewed and potentially merged by the maintainers to the main code base. This is how [Linux](linux.md) was developed before git.
- **[darcs](darcs.md)**: Alternative to git, written in [Haskell](haskell.md), advertising itself as simpler. - **[darcs](darcs.md)**: Alternative to git, written in [Haskell](haskell.md), advertising itself as simpler.
- **[lit](lit.md)** (previously known as *gut*): WIP [LRS](lrs.md)/[suckless](suckless.md) version control system. - **[lit](lit.md)** (previously known as *gut*): WIP [LRS](lrs.md)/[suckless](suckless.md) version control system.
- ... - ...
@ -64,3 +64,8 @@ git clone http://myserver/myrepo
``` ```
IMPORTANT NOTE: for the HTTP clone to work you need to do `git update-server-info` on the server in the repo directory after every repo update! You can do this e.g. with a git hook or [cronjob](cronjob.md). IMPORTANT NOTE: for the HTTP clone to work you need to do `git update-server-info` on the server in the repo directory after every repo update! You can do this e.g. with a git hook or [cronjob](cronjob.md).
## See Also
- [GitHub](github.md)
- [shithub](shithub.,d)

View file

@ -87,6 +87,14 @@ This is really a bare-minimum testing website -- to expand it see the article on
Now you have to upload this html file to the hosting server -- check out the details of your hosting server on how to do this (you may e.g. need to use [git](git.md) or [ftp](ftp.md) to upload the file). And that's basically it, the rest is just expanding your site, making scripts to automatize uploading etc. Now you have to upload this html file to the hosting server -- check out the details of your hosting server on how to do this (you may e.g. need to use [git](git.md) or [ftp](ftp.md) to upload the file). And that's basically it, the rest is just expanding your site, making scripts to automatize uploading etc.
### How To Make A Wiki Like This One
Do NOT use wikifarms (sites that allow you to easily set up your own wiki) like fandom: all are [bloated](bloat.md) and most importantly censored. Also you will tie yourself to their shitty formats, clouds and databases and won't be able to easily migrate. Just avoid this.
First step to do is set up some kind of independent "online presence" like a website or gopherhole described above. Then you may either go the mainstream way and set up e.g. MediaWiki (the software used by [Wikipedia](wikipedia.md)) OR, better, do something like our [LRS wiki](lrs_wiki.md) does, i.e. [keep it simple](kiss.md) and start writing articles in some super simple format like [Markdown](md.md), plain [HTML](html.md) or even [plain text](plain_text.md). To convert these articles into a wiki you basically just make a small [shell](shell.md) script that just converts the format you write the articles in to a format you publish them in (so for example Markdown to HTML pages) and possibly automatically creates things like a list of all articles or a simple navigation bar on top of each page. You don't have to know any advanced programming at all, the script can literally be like 5 lines that just invoke [CLI](cli.md) utilities that convert formats and copy files.
If you want, just literally take this wiki and make it your own, you can get the source code (there is link to the git repo somewhere nearby) and it's completely legally [public domain](public_domain.md). It works basically as just described -- you write articles in markdown and convert them to HTML or TXT with a bash script, then you just upload this all to you online hosting (possibly with another script) and voila, it's done.
## How To Live, Dos and Don'ts ## How To Live, Dos and Don'ts
This is a summary of some main guidelines on how an LRS supporter should behave in general so as to stay consistent with LRS philosophy, however it is important that this is shouldn't be taken as rules to be blindly followed -- the last thing we want is a religion of brainwashed NPCs who blindly follow orders. One has to understand why these principles are in place and even potentially modify them. This is a summary of some main guidelines on how an LRS supporter should behave in general so as to stay consistent with LRS philosophy, however it is important that this is shouldn't be taken as rules to be blindly followed -- the last thing we want is a religion of brainwashed NPCs who blindly follow orders. One has to understand why these principles are in place and even potentially modify them.

View file

@ -11,27 +11,29 @@ Free licenses are mainly divided into:
At [LRS](lrs.md) we highly prefer [public domain](public_domain.md) [waivers](waiver.md) such as [CC0](cc0.md) instead of licenses, i.e. we release our works without any conditions/restrictions whatsoever (e.g. we don't require credit, [copyleft](copyleft.md) and similar conditions, even if by free software rules we could). This is because we oppose the very idea of being able to own information and ideas, which any license is inherently based on. Besides that, licenses are not as legally [suckless](suckless.md) as public domain and they come with their own issues, for example a license, even if free, may require that you promote some political ideology you disagree with (see e.g. the principle of [+NIGGER](plusnigger.md)). At [LRS](lrs.md) we highly prefer [public domain](public_domain.md) [waivers](waiver.md) such as [CC0](cc0.md) instead of licenses, i.e. we release our works without any conditions/restrictions whatsoever (e.g. we don't require credit, [copyleft](copyleft.md) and similar conditions, even if by free software rules we could). This is because we oppose the very idea of being able to own information and ideas, which any license is inherently based on. Besides that, licenses are not as legally [suckless](suckless.md) as public domain and they come with their own issues, for example a license, even if free, may require that you promote some political ideology you disagree with (see e.g. the principle of [+NIGGER](plusnigger.md)).
Some most notable free licenses for software include (FSF: FSF approved, OSI: OSI approved, LRS: approved by us, short: is the license short?): Some most notable free licenses for software include (FSF: FSF approved, OSI: OSI approved, LRS: approved by us, CF: copyfree approved, short: is the license short?):
| license | type | FSF | OSI | LRS |short| | license | type | FSF | OSI | CF | LRS |short|
| ----------------------- | ----------------------- | --- | --- | --- | --- | | ----------------------- | -------------------------------------------- | --- | --- | --- | --- | --- |
| [Apache 2](apache.md) | permissive, conditions |**+**|**+**| - | - | | [Apache 2](apache.md) | permissive, conditions |**+**|**+**| - | - | - |
| [AGPL](agpl.md) | network copyleft |**+**|**+**| - | - | | [AGPL](agpl.md) | network copyleft |**+**|**+**| - | - | - |
| [BSD (0,1,2,3)](bsdl.md)| permissive |**+**|**+**| - |**+**| | [BSD (0,1,2,3)](bsdl.md)| permissive |**+**|**+**|some | - |**+**|
| [BOML](boml.md) | permissive | - | - | - |**+**| | [BOML](boml.md) | permissive | - | - |**+**| - |**+**|
| [CC0](cc0.md) | [PD](public_domain.md) waiver, 0 conditions |**+**| - |**+**| - | | [CC0](cc0.md) | [PD](public_domain.md) waiver, no conditions |**+**| - |**+**|**+**| - |
| [GPLv2, GPLv3](gpl.md) | copyleft (strong) |**+**|**+**| - | - | | [GPLv2, GPLv3](gpl.md) | copyleft (strong) |**+**|**+**| - | - | - |
| [LGPL](lgpl.md) | copyleft (weak) |**+**|**+**| - | - | | [LGPL](lgpl.md) | copyleft (weak) |**+**|**+**| - | - | - |
| [MIT](mitl.md) | permissive, credit |**+**|**+**|**+**|**+**| | [MIT](mitl.md) | permissive, credit |**+**|**+**|**+**|**+**|**+**|
| [MIT-0](mitl.md) | permissive, 0 conditions| - |**+**|**+**|**+**| | [MIT-0](mitl.md) | permissive, no conditions | - |**+**| +? |**+**|**+**|
|[Unlicense](unlicense.md)| PD waiver, 0 conditions |**+**|**+**|**+**|**+**| |[Unlicense](unlicense.md)| PD waiver, no conditions |**+**|**+**|**+**|**+**|**+**|
| [WTFPL](wtfpl.md) | permissive, fun |**+**| - | - |**+**| | [WTFPL](wtfpl.md) | permissive, fun |**+**| - | ? | - |**+**|
| [zlib](zlib.md) | permissive |**+**|**+**| - |**+**| | [zlib](zlib.md) | permissive |**+**|**+**| - | - |**+**|
| [0BSD](bsdl.md) | permissive, 0 conditions| - |**+**|**+**|**+**| | [0BSD](bsdl.md) | permissive, no conditions | - |**+**| +? |**+**|**+**|
Some most notable free licenses for general artworks include: Some most notable free licenses for general artworks and data (not just programs) include:
TODO - Some [Creative Commons](creative_commons.md) licenses (but not ALL), most notably [CC BY](cc_by.md), [CC BY-SA](cc_by_sa.md) and [CC0](cc0.md).
- Some forms of [GFDL](gfdl.md) -- those the license is called "free", it may actually optionally include "invariant sections" that serve to insert unmodifiable propaganda; if such sections are present, the license is by definition not free.
- ...
## How To ## How To

View file

@ -1 +1,7 @@
# Logic # Logic
TODO: intro
TODO: relationship of logic and math, which comes first etc.
**Power of logic is limited** (for more please read this excellent resource: http://humanknowledge.net/Thoughts.html) -- though logic is the strongest, most stable platform our knowledge can ever stand on, it is still not infinitely powerful and has its limits, despite what any reddit [atheist](atheism.md) tells you or even what he believes. This sadly [dooms](doom.md) us to certain eternal inability to uncover all there is, we just have to accept from a certain point we are blind and not even logic will help us. [Kurt Godel](godel.md) mathematically proved with his [incompleteness theorems](incompleteness.md) that we simply won't be able to prove everything, not even the validity of formal tools we use to prove things. Even in just intuitive terms: on the lowest level we start using logic to talk about itself, i.e. if we e.g. try to prove that "logic works" using logical arguments, we cannot ever succeed, because if we succeed, the proven fact that "logic works" relies on the fact that logic indeed works; if it perhaps doesn't work and we used it to prove its own validity, we might have simply gotten a wrong result (it's just as if we trust someone saying "I am not a liar", he may as well be lying about not being a liar). By this logic even the previous sentence may or may not actually be true, we simply don't know, sometimes the best we can do is simply hold on to stronger or weaker beliefs. Logic furthermore cannot talk about many things; it can tell us how the world works but e.g. not WHY it works like it does.

View file

@ -23,6 +23,7 @@ WORK IN PROGRESS
| [feminism](feminism.md) | feminazism, femifascism | | [feminism](feminism.md) | feminazism, femifascism |
| [Firefox](firefox.md) | Furryfox | | [Firefox](firefox.md) | Furryfox |
| [gaming](game.md) | gayming | | [gaming](game.md) | gayming |
| [geek](geek.md) | retard |
| [global warming](global_warming.md) | global heating | | [global warming](global_warming.md) | global heating |
| [Google](google.md) | Goolag | | [Google](google.md) | Goolag |
| Gmail | Gfail | | Gmail | Gfail |

View file

@ -2,6 +2,8 @@
WIP WIP
{ If you want to maybe start some project here I'll be glad if you let me know before you start, it can be good to talk about it first as I already have some ideas about how to make some of these projects, I just don't have time to work on them, I will just give you the ideas I have if you want, we can discuss how to best write the code etc. Of course it's all up to you, I'm just offering advice and discussion :) ~drummyfish }
Here is a list of some projects and project ideas which we, [LRS](lrs.md), need to make in order to pursue our goals. The projects here are mostly basic things and tools that already exist in some form, but that have to be made from scratch according to [LRS](lrs.md) philosophy, i.e. in a KISS/suckless way, under public domain, in a good language (C, comun, ...) etc. This is kind of a dirty list serving some rough organization. If you have the skills and will (or know someone who does), you may take inspiration here, pick one up and make it, or contribute to some of the projects listed here. Also note that it's still possible to make multiple projects of the same type, e.g. you may still create another chess engine even though we already have one, just watch out that this is justified (it should offer something worth the extra effort). Here is a list of some projects and project ideas which we, [LRS](lrs.md), need to make in order to pursue our goals. The projects here are mostly basic things and tools that already exist in some form, but that have to be made from scratch according to [LRS](lrs.md) philosophy, i.e. in a KISS/suckless way, under public domain, in a good language (C, comun, ...) etc. This is kind of a dirty list serving some rough organization. If you have the skills and will (or know someone who does), you may take inspiration here, pick one up and make it, or contribute to some of the projects listed here. Also note that it's still possible to make multiple projects of the same type, e.g. you may still create another chess engine even though we already have one, just watch out that this is justified (it should offer something worth the extra effort).
| what | difficulty | implementation | by | status | comment | similar/for now use | | what | difficulty | implementation | by | status | comment | similar/for now use |

View file

@ -4,6 +4,8 @@
Nigger (also nigga, niBBa, N-word or chimp) is a [forbidden word](newspeak.md) that refers to a member of the [black](black.md) [race](race.md), [SJWs](sjw.md) call the word a [politically incorrect](political_correctness.md) "slur". Its counterpart targeted on white people is *[cracker](cracker.md)*. To Harry Potter fans the word may be compared to the word *Voldemort* which everyone is afraid to say out of fear of being [cancelled](cancel_culture.md). Nigger is not to be confused with [negro](negro.md) (which is a human [race](race.md) of only SOME black people, specifically those in central Africa). Nigger (also nigga, niBBa, N-word or chimp) is a [forbidden word](newspeak.md) that refers to a member of the [black](black.md) [race](race.md), [SJWs](sjw.md) call the word a [politically incorrect](political_correctness.md) "slur". Its counterpart targeted on white people is *[cracker](cracker.md)*. To Harry Potter fans the word may be compared to the word *Voldemort* which everyone is afraid to say out of fear of being [cancelled](cancel_culture.md). Nigger is not to be confused with [negro](negro.md) (which is a human [race](race.md) of only SOME black people, specifically those in central Africa).
{ LOL take a look at this https://encyclopediadramatica.online/Nigger, another take at https://wiki.soyjaks.party/Nigger. Another website: http://niggermania.com. Also https://www.chimpout.com. Another one: http://www.nigrapedia.com. ~drummyfish }
Let us remind new readers that we, [LRS](lrs.md), love all living beings, even black people <3 But we do not support [political correctness](political_correctness.md). Let us remind new readers that we, [LRS](lrs.md), love all living beings, even black people <3 But we do not support [political correctness](political_correctness.md).
The word is used in a number of projects, e.g.: The word is used in a number of projects, e.g.:
@ -15,5 +17,3 @@ The word is used in a number of projects, e.g.:
- ... - ...
[LMAO](lmao.md) they're even censoring art and retroactively changing classical works of art to suit this [newspeak](newspeak.md), just like all previous oppressive regimes. E.g. Agatha Christie's book *Ten Little Niggers* was renamed to *And Then There Were None*. Are they also gonna repaint Mona Lisa when it somehow doesn't suit their liking? [LMAO](lmao.md) they're even censoring art and retroactively changing classical works of art to suit this [newspeak](newspeak.md), just like all previous oppressive regimes. E.g. Agatha Christie's book *Ten Little Niggers* was renamed to *And Then There Were None*. Are they also gonna repaint Mona Lisa when it somehow doesn't suit their liking?
LOL take a look at this website: http://niggermania.com. Also https://www.chimpout.com. Also this lol https://encyclopediadramatica.online/Niggers. Another one: http://www.nigrapedia.com.

View file

@ -103,3 +103,11 @@ There are different types of noise characterized by their properties such as num
``` ```
*1D fractal noise composed of 3 octaves* *1D fractal noise composed of 3 octaves*
## Code
A super simple "poor man's noise" that can be of use sometimes is **coin flip noise** which works simply like this: start with value 0, in each step output current value and randomly change it by +1 or -1. It's basically a [random walk](random_walk.md), a next best thing to the simplest [white noise](white_noise.md), so watch out, it will only work for most basic things, generalizing to a 2D noise will be awkward, you won't know how high or low the values will actually go, also the frequency properties probably won't be ideal. { Not sure actually what spectrum to expect, have to check that out, TODO. ~drummyfish } You may at least try to play around with changing the value even by more than one using e.g. [normal probability distribution](normal_distribution.md).
TODO: code for the above, maybe even a one liner for white noise
TODO: actual Perlin noise etc., also some nice noise that's just adding some random sine waves in a fractal fashion, like a one line formula

View file

@ -14,9 +14,9 @@ Remember, portability is about **making it easy for a programmer to take your pr
**Do NOT use big [frameworks](framework.md)/engines** -- it is one of the greatest misconceptions among many inexperienced programmers to think portable software is created with big frameworks, such as the [Godot](godot.md) engine or the [QT](qt.md) framework, which can "single click" export/deploy software to different platforms. This will merely achieve creating a badly [bloated](bloat.md) multiplatform program that's completely dependent on the framework itself which drags along hundreds of [dependencies](dependency.md) and wastes computing resources (RAM, CPU, storage, ...) which are all factors directly contradicting portability. If you for example create a snake game in Godot, you won't be able to port it to [embedded](embedded.md) devices or devices without an operating system even though the snake game itself is simple enough to run on such devices -- the game drags along the whole Godot engine which is so huge, complex and hardware demanding that it prevents the simple game from running on simple hardware. **Do NOT use big [frameworks](framework.md)/engines** -- it is one of the greatest misconceptions among many inexperienced programmers to think portable software is created with big frameworks, such as the [Godot](godot.md) engine or the [QT](qt.md) framework, which can "single click" export/deploy software to different platforms. This will merely achieve creating a badly [bloated](bloat.md) multiplatform program that's completely dependent on the framework itself which drags along hundreds of [dependencies](dependency.md) and wastes computing resources (RAM, CPU, storage, ...) which are all factors directly contradicting portability. If you for example create a snake game in Godot, you won't be able to port it to [embedded](embedded.md) devices or devices without an operating system even though the snake game itself is simple enough to run on such devices -- the game drags along the whole Godot engine which is so huge, complex and hardware demanding that it prevents the simple game from running on simple hardware.
**The same goes for languages and [libraries](library.md)**: do NOT use big/bloated languages such as [Python](python.md), [Java](java.md) or [JavaScript](javascript.md) -- your program would immediately become dependent on a hugely complex ecosystem of such language. For portability you should basically **only write in [C](c.md)** (the best established, time tested, relatively simple language supported basically by every platform) or in [C++](cpp.md) at worst, and even with these languages do NOT use the newer standards as these hugely limit the number of compliant compilers that will be able to compile your program. The best is to write in C89 or C99 standard of C. **Minimize the number of libraries you use**, even if it is the standard library of your language -- not all compilers fully adhere to standards and some don't have the standard library even if the should. **The same goes for languages and [libraries](library.md)**: do NOT use big/bloated languages such as [Python](python.md), [Java](java.md) or [JavaScript](javascript.md) -- your program would immediately become dependent on a hugely complex ecosystem of such language. For portability you should basically **only write in [C](c.md)** (the best established, time tested, relatively simple language supported basically by every platform) or in [C++](cpp.md) at worst, and even with these languages do NOT use the newer standards as these hugely limit the number of compliant compilers that will be able to compile your program. The best is to write in C89 or C99 standard of C. **Minimize the number of libraries you use**, even if it is the standard library of your language -- not all compilers fully adhere to standards and some don't have the standard library even if the should. For [shell](shell.md) [scripts](script.md) only use **[posix shell](posix_shell.md)**, i.e. only use constructs, utilities and flags/features defined by the posix standard, even if you have more "powerful" shell and utilities like [Bash](bash.md) and [GNU](gnu.md) utils.
**Always make your own thin [I/O](io.md) abstraction, [decouple](coupling.md) your I/O libraries, separate [frontend](frontend.md) and [backend](backend.md)**. This is one of the most basic and most important things to do. Why? Well unless you're writing a library, you will need to use I/O (write out messages, draw to screen, create [GUI](gui.md), read keyboard commands, read from files, read from network, ...) so you will NEED to use some library for this (C [stdlib](stdlib.md), [SDL](sdl.md), OS [syscalls](syscall.md), [Xlib](xlib.md), ...) but you absolutely DON'T WANT this library to become a hard [dependency](dependency.md) of your program because if your program depends let's say on SDL, you won't be able to make your program run on platforms that don't have SDL. So the situation is that you HAVE TO use some I/O library but you don't want to become dependent on it. In your compiled programs **always make your own thin [I/O](io.md) abstraction, [decouple](coupling.md) your I/O libraries, separate [frontend](frontend.md) and [backend](backend.md)**. This is one of the most basic and most important things to do. Why? Well unless you're writing a library, you will need to use I/O (write out messages, draw to screen, create [GUI](gui.md), read keyboard commands, read from files, read from network, ...) so you will NEED to use some library for this (C [stdlib](stdlib.md), [SDL](sdl.md), OS [syscalls](syscall.md), [Xlib](xlib.md), ...) but you absolutely DON'T WANT this library to become a hard [dependency](dependency.md) of your program because if your program depends let's say on SDL, you won't be able to make your program run on platforms that don't have SDL. So the situation is that you HAVE TO use some I/O library but you don't want to become dependent on it.
The way to solve this is to create your own small I/O abstraction in your project, i.e. your own functions (such as `drawPixel`, `writeMessage`, `keyPressed`, `playSound`, `readFrile` etc.) for performing I/O, which you will use inside your main program. These functions will be defined in a small file which will basically be your own small I/O library just for your program. The functions you define there will then internally use functions of whatever underlying I/O system you choose to use at the time as your [frontend](frontend.md) (SDL, Xlib, SFML, ...); the important thing is that your main program code won't itself depend on the underlying system, it will only depend on your I/O abstraction, your own functions. Your custom I/O functions will depend on the underlying I/O system but in a way that's very easy to change -- let's say that your `keyPressed` function internally uses SDL's `SDL_GetKeyboardState` to read keyboard state. If you want to switch from using SDL to using a different frontend, you will only have to change the code in one place: in your I/O abstraction code, i.e. inside your `keyPressed` function. E.g. if you switch from SDL to SFML, you will just delete the code inside your `keyPressed` function and put in another code that uses SFML functions to read keyboard (e.g. the `isKeyPressed` attribute), and your whole code will instantly just work on SFML. In fact you can have multiple implementations of your functions and allow switching of different backends freely -- just as it is possible to compile a [C](c.md) program with any C compiler, you can make it possible to compile your program with any I/O frontend. If you used SDL's specific functions in your main code, you would have to completely rewrite your whole codebase if you wanted to switch away from SDL -- for this reason your main code must never directly touch the underlying I/O system, it must only do so through your I/O abstraction. Of course these principles may apply to any other thing that requires use of external libraries, not just I/O. The way to solve this is to create your own small I/O abstraction in your project, i.e. your own functions (such as `drawPixel`, `writeMessage`, `keyPressed`, `playSound`, `readFrile` etc.) for performing I/O, which you will use inside your main program. These functions will be defined in a small file which will basically be your own small I/O library just for your program. The functions you define there will then internally use functions of whatever underlying I/O system you choose to use at the time as your [frontend](frontend.md) (SDL, Xlib, SFML, ...); the important thing is that your main program code won't itself depend on the underlying system, it will only depend on your I/O abstraction, your own functions. Your custom I/O functions will depend on the underlying I/O system but in a way that's very easy to change -- let's say that your `keyPressed` function internally uses SDL's `SDL_GetKeyboardState` to read keyboard state. If you want to switch from using SDL to using a different frontend, you will only have to change the code in one place: in your I/O abstraction code, i.e. inside your `keyPressed` function. E.g. if you switch from SDL to SFML, you will just delete the code inside your `keyPressed` function and put in another code that uses SFML functions to read keyboard (e.g. the `isKeyPressed` attribute), and your whole code will instantly just work on SFML. In fact you can have multiple implementations of your functions and allow switching of different backends freely -- just as it is possible to compile a [C](c.md) program with any C compiler, you can make it possible to compile your program with any I/O frontend. If you used SDL's specific functions in your main code, you would have to completely rewrite your whole codebase if you wanted to switch away from SDL -- for this reason your main code must never directly touch the underlying I/O system, it must only do so through your I/O abstraction. Of course these principles may apply to any other thing that requires use of external libraries, not just I/O.

View file

@ -2,6 +2,8 @@
Public domain computer is yet nonexistent but planned and highly desired [simple](kiss.md) ethical [computer](computer.md) (in the common meaning of the word) whose specification is completely in the [public domain](public_domain.md) and which is made with completely [selfless](selflessness.md) [LRS](lrs.md)-aligned goal of being absolutely non-malicious and maximally helpful to everyone. It should be the "people's computer", a simple, [suckless](suckless.md), user-respecting hackable computer offering maximum [freedom](free_software.md), a computer which anyone can study, improve, manufacture and repair without paying any "[intellectual property](intellectual_property.md)" fees, a computer which people can buy (well, while money still exist) for extremely low price and use for any purpose without being abused or oppressed. Public domain computer is yet nonexistent but planned and highly desired [simple](kiss.md) ethical [computer](computer.md) (in the common meaning of the word) whose specification is completely in the [public domain](public_domain.md) and which is made with completely [selfless](selflessness.md) [LRS](lrs.md)-aligned goal of being absolutely non-malicious and maximally helpful to everyone. It should be the "people's computer", a simple, [suckless](suckless.md), user-respecting hackable computer offering maximum [freedom](free_software.md), a computer which anyone can study, improve, manufacture and repair without paying any "[intellectual property](intellectual_property.md)" fees, a computer which people can buy (well, while money still exist) for extremely low price and use for any purpose without being abused or oppressed.
"Public domain computer" is just a temporary placeholder/general term, the actual project would probably be called something different.
The project is basically about asking: what if computers were designed to serve us instead of corporations? Imagine a computer that wouldn't stand in your way in whatever you want to do. The project is basically about asking: what if computers were designed to serve us instead of corporations? Imagine a computer that wouldn't stand in your way in whatever you want to do.
In our [ideal society](less_retarded_society.md), one of the versions of the public domain computer could be the [less retarded watch](less_retarded_watch.md). In our [ideal society](less_retarded_society.md), one of the versions of the public domain computer could be the [less retarded watch](less_retarded_watch.md).
@ -49,3 +51,4 @@ Abstract hardware specification means e.g. description on the [logic gate](logic
- [comun](comun.md) - [comun](comun.md)
- [uxn](uxn.md) - [uxn](uxn.md)
- [less retarded watch](less_retarded_watch.md) - [less retarded watch](less_retarded_watch.md)
- [PDOS](pdos.md)

View file

@ -38,5 +38,7 @@ Rocks are pretty [suckless](suckless.md) and [LRS](lrs.md) because they are simp
- [sand](sand.md) - [sand](sand.md)
- [wood](wood.md) - [wood](wood.md)
- [metal](metal.md) - [fire](fire.md)
- [potato](potato.md) - [potato](potato.md)
- [metal](metal.md)
- [pop](pop.md)

View file

@ -73,3 +73,7 @@ With having a completely filled grid generating a non-unique (more than one solu
For a unique solution sudoku we have to check there still exists exactly one solution after removing any numbers from the grid, for which we can again use our solver. Of course we should [optimize](optimization.md) this process by quitting the check after finding more than one solution, we don't need to know the exact count of the solutions, only whether it differs from one. For a unique solution sudoku we have to check there still exists exactly one solution after removing any numbers from the grid, for which we can again use our solver. Of course we should [optimize](optimization.md) this process by quitting the check after finding more than one solution, we don't need to know the exact count of the solutions, only whether it differs from one.
The matter of generating sudokus is further complicated by taking into account the difficulty rating of the puzzle. The matter of generating sudokus is further complicated by taking into account the difficulty rating of the puzzle.
## See Also
- [sudo](sudo.md)

View file

@ -2,9 +2,9 @@
Usenet (User's Network) is an ancient digital discussion network -- a [forum](forum.md) -- that existed long before the [World Wide Web](www.md). At the time it was very popular, it was THE place to be, but nowadays it's been forgotten by the mainstream, sadly hardly anyone remembers it. Usenet (User's Network) is an ancient digital discussion network -- a [forum](forum.md) -- that existed long before the [World Wide Web](www.md). At the time it was very popular, it was THE place to be, but nowadays it's been forgotten by the mainstream, sadly hardly anyone remembers it.
Back in the day there were no [web browsers](browser.md), there was no web. Many users were also **not connected through Internet** as it was expensive, they normally used other networks like [UUCP](uucp.md) working through phone lines. They could communicate by some forms of electronic mail or by directly connecting to servers and leaving messages for others there -- these servers were called [BBS](bbs.md)es and were another popular kind of "[social network](social_network.md)" at the time. Usenet was a bit different as it was [decentralized](decentralization.md) -- it wasn't stored or managed on a single [server](server.md), but on many independent servers that provided users with access to the network. This access was (and is) mostly paid (to [lurk](lurk.md) for free you can search for Usenet archives online). To access Usenet a **newsreader** program was needed, it was kind of a precursor to web browsers (nowadays newsreaders are sometimes built into e.g. email clients). Usenet was lots of time not moderated and anonymous, i.e. kind of free, you could find all kinds of illegal material there. Back in the day there were no [web browsers](browser.md), there was no web. Many users were also **not connected through Internet** as it was expensive, they normally used other networks like [UUCP](uucp.md) working through phone lines. They could communicate by some forms of electronic mail or by directly connecting to servers and leaving messages for others there -- these servers were called [BBS](bbs.md)es and were another popular kind of "[social network](social_network.md)" at the time. Usenet was a bit different as it was [decentralized](decentralization.md) (see also [federation](federation.md)) -- it wasn't stored or managed on a single [server](server.md), but on many independent servers that provided users with access to the network. This access was (and is) mostly paid (to [lurk](lurk.md) for free you can search for Usenet archives online). To access Usenet a **newsreader** program was needed, it was kind of a precursor to web browsers (nowadays newsreaders are sometimes built into e.g. email clients). Usenet was lots of time not moderated and anonymous, i.e. kind of free, you could find all kinds of illegal material there.
Usenet invented many things that survive until today such as the words *[spam](spam.md)* and *[FAQ](faq.md)* as well as some basic concepts of how discussion forums even work. Usenet invented many things that survive until today such as the words *[spam](spam.md)* and *[FAQ](faq.md)* as well as some basic concepts of how discussion forums even work. It was also generally quite a lot for the [free speech](free_speech.md), which is good.
Usenet was originally [ASCII](ascii.md) only, but people started to post binary files encoded as ASCII and there were dedicated sections just for posting binaries, so you co go [piiiiiiiiirating](piracy.md). Usenet was originally [ASCII](ascii.md) only, but people started to post binary files encoded as ASCII and there were dedicated sections just for posting binaries, so you co go [piiiiiiiiirating](piracy.md).

View file

@ -3,7 +3,7 @@
This is an auto-generated article holding stats about this wiki. This is an auto-generated article holding stats about this wiki.
- number of articles: 526 - number of articles: 526
- total size of all texts in bytes: 2594880 - total size of all texts in bytes: 2599904
longest articles: longest articles:
@ -23,6 +23,11 @@ longest articles:
latest changes: latest changes:
``` ```
Date: Thu Dec 14 23:38:44 2023 +0100
lrs_wiki.md
main.md
operating_system.md
wiki_stats.md
Date: Thu Dec 14 21:08:58 2023 +0100 Date: Thu Dec 14 21:08:58 2023 +0100
bloat.md bloat.md
c.md c.md
@ -48,13 +53,5 @@ just_werks.md
lrs.md lrs.md
math.md math.md
procgen.md procgen.md
randomness.md
rights_culture.md
robot.md
rust.md
soydev.md
turing_machine.md
Date: Tue Dec 12 02:53:34 2023 +0100
devuan.md
``` ```

View file

@ -47,10 +47,11 @@ These are some sources you can use for research and gathering information for ar
- **[Project Gutenberg](gutenberg.md)**: mostly older books but there are already some computer related books like [RMS's](rms.md) biography or [Jargon File](jargon_file.md) - **[Project Gutenberg](gutenberg.md)**: mostly older books but there are already some computer related books like [RMS's](rms.md) biography or [Jargon File](jargon_file.md)
- **University theses** (and scientific paper of course): many university theses are publicly accessible and usually nicely sum up topics, bachelor level theses may be better understandable than PhD/master theses. - **University theses** (and scientific paper of course): many university theses are publicly accessible and usually nicely sum up topics, bachelor level theses may be better understandable than PhD/master theses.
- **Slides**: slides from various presentations are actually great resources as they condense the topic into its main points, they filter out the piles of noise. - **Slides**: slides from various presentations are actually great resources as they condense the topic into its main points, they filter out the piles of noise.
- **Wikisource** and **Wikibooks**](infogalactic.md)** etc. - **Wikisource**, **Wikibooks** etc.
- **[books](book.md)**: Books are still of higher quality than online sources so you can [pirate](piracy.md) some and steal some facts from them. Check out libgen, torrents etc. - **[books](book.md)**: Books are still of higher quality than online sources so you can [pirate](piracy.md) some and steal some facts from them. Check out Anna's archive, libgen, torrents etc.
- **[installgentoowiki](https://wiki.installgentoo.com)** - Wikisphere -- check out various wikis, there are thousands, a place to start searching is Wikiindex. Wikis like [installgentoowiki](https://wiki.installgentoo.com) and lurkmorewiki may offer interesting insight into internet/tech culture, many times also less censored facts.
- **[YouTube](youtube.md)**: Yes, sadly this is nowadays one of the biggest sources of information which is unfortunately hidden in videos full of ads and retarded zoomers, the information is unindexed. If you are brave enough, you can dig this information out and write it here as a proper text. - **[YouTube](youtube.md)**: Yes, sadly this is nowadays one of the biggest sources of information which is unfortunately hidden in videos full of ads and retarded zoomers, the information is unindexed. If you are brave enough, you can dig this information out and write it here as a proper text.
- [reddit](reddit.md): Sadly another SJW swamp of retards, however with many subcommunities almost about everything, if you have a question you can't find anywhere there is usually a subreddit where you can ask, if you dare.
- Try searching with different search engines than just Google (wiby, marginalia, Yandex, Bing, Yahoo, Internet Archive, ...). - Try searching with different search engines than just Google (wiby, marginalia, Yandex, Bing, Yahoo, Internet Archive, ...).
- **old magazines**: If you can get your hands on old magazines somehow (physical, pdf, ...) about computers, cell phones, games etc., you may get a nice source of a lot of interesting, obscure and lost information. For example on the web it's impossible to find a good list of old games -- if you search for "top 50 old games", you get a list of complete shit games from 2015, which is now considered "old"; it's much better you get some old game magazine from say 2005 that lists top 50 games at the time. Furthermore these magazines are professionally made and actually [older](old.md), i.e. of better quality. You may also find nice gems, predictions of the future, politically incorrect articles etc. - **old magazines**: If you can get your hands on old magazines somehow (physical, pdf, ...) about computers, cell phones, games etc., you may get a nice source of a lot of interesting, obscure and lost information. For example on the web it's impossible to find a good list of old games -- if you search for "top 50 old games", you get a list of complete shit games from 2015, which is now considered "old"; it's much better you get some old game magazine from say 2005 that lists top 50 games at the time. Furthermore these magazines are professionally made and actually [older](old.md), i.e. of better quality. You may also find nice gems, predictions of the future, politically incorrect articles etc.
- **Non-web**: When web fails, you can search the [darknet](darknet.md), [gopher](gopher.md), [gemini](gemini.md), [usenet](usenet.md), [tor](tor.md) etc. - **Non-web**: When web fails, you can search the [darknet](darknet.md), [gopher](gopher.md), [gemini](gemini.md), [usenet](usenet.md), [tor](tor.md) etc.