master
Miloslav Ciz 4 months ago
parent 078a02731b
commit f856572509

@ -1,6 +1,6 @@
# Less Retarded Wiki
This is online at https://www.tastyfish.cz/lrs/main.html.
This is online at http://www.tastyfish.cz/lrs/main.html.
Wiki about less retarded software and related topics.

@ -59,6 +59,7 @@ The following is a list of software usually considered a good, typical example o
- [IDEs](ide.md) such as [VSCode](vscode.md) or [NetBeans](netbeans.md).
- Big [game engines](game_engine.md) such as [Unreal](unreal_engine.md), [Unity](unity.md) or [Godot](godot.md).
- Practically all commercial [games](games.md) made in the [21st century](21st_century.md) such as [World of Warcraft](wow.md), Call of Duty etc.
- [pulse audio](pulse.md)
- office programs (e.g. M$ Office and [LibreOffice](libreoffice.md))
- [Neural networks](neural_network.md) aka "AI" that is forced into everything nowadays.
- ...

@ -1,3 +1,3 @@
# Build Engine
For now see [Duke Nukem](duke3D.md).
For now see [Duke Nukem](duke3d.md).

@ -1,7 +1,7 @@
# Evil
*Evil always wins in the end.*
*Evil always wins in the end. But that's not a reason to join it.*
TODO
As [Richard Stallman](rms.md) says, **all evil does some good, which is never a reason to support it**. Just as any good always does a little bit of evil, the opposite also holds: for example [Facebook](facebook.md), a [corporation](corporation.md) who accelerates and largely causes downfall of civilization and kills and tortures millions of people, may on occasion help do something good, for example help people communicate during an emergency, however it is no reason to support Facebook or to stop supporting its destruction.

@ -42,9 +42,9 @@ The **ko** rule states that one mustn't make a move that returns the board to th
**Prisoners** are enemy's stones that are OBVIOUSLY in your territory and so are practically dead. I.e. they are inside what's clearly not their territory and with further play would clearly be captured. Obvious here is a matter of agreement between players -- if players disagree whether some stones are obvious prisoners, they simply keep playing and resolve the situation.
**Scoring:** scoring assigns points to each player when the game is over, the one with more points win. There are multiple scoring systems, most common are these two:
**Scoring:** scoring assigns points to each player when the game is over, the one with more points win. There are multiple scoring systems, most common are these two (players basically universally agree the scoring system has almost no effect on the play so it's probably more of a convention):
- **Chinese** (area scoring): more [KISS](kiss.md), the score is just each player's area (surrounded empty square PLUS squares occupied by the player's stones), plus komi for white.
- **Chinese** (area scoring): more [KISS](kiss.md), the score is just each player's area (surrounded empty square PLUS squares occupied by the player's stones), plus komi for white. { This one seems to me like a better option for beginners and also for programming, it's just simpler and makes you not afraid of putting stones anywhere. ~drummyfish }
- **Japanese** (territory scoring): At the end of the game we count the score for black as the size of black's territory PLUS one point for each stone black has captured PLUS one point for each white prisoner (a would be captured stone) in black's territory. Score for white is computed analogously but we also add the komi compensation.
**Handicaps:** TODO.

@ -17,6 +17,7 @@ On this wiki we kind of use LMAO as a synonym to [LULZ](lulz.md) as used on Ency
- There are many funny stories from [4chan](4chan.md). In 2012 they made masses of Justin Bieber fans shave their heads by spreading fake news that Bieber had cancer under the hashtag #BaldForBieber. In 2013 they made a similarly funny prank by making Justin Bieber fans cut themselves with another faked campaign #CuttingForBieber. In 2013 they made a huge number of Appletoddlers destroy their [iPhones](iphone.md) with fake ads that promoted a new "feature" that makes the phone waterproof via a software update. Similarly in 2014 they spread fake ads about a new iPhone "feature" that would let users charge their phones in a microwave. 4chan also hijacked many internet polls such as the Mountain Dew's poll for naming their new drink in 2012: people from 4chan raided the poll and chose the name "Hitler Did Nothing Wrong", with names such as "Diabeetus" or "Soda" as followers. Another raided poll was that of Talor Swift about at which school she should perform -- 4chan mass voted for a school for deaf children which eventually won (Taylor Switch handled it by donating money to the school). 4chan also chose North Korea as a country for Justin Bieber's tour. Another hilarious story is from 2006 when 4chan raided the Habbo Hotel (a MMO game mostly for children); they made shitton of black characters with afros, went around blocking players from accessing game areas, grouping to form swastikas and famously blocking a hotel pool with the sign "Pool's closed due to AIDS".
- In 2022 a proprietary "[smart](smart.md) home" company Insteon got into financial trouble, shut down its servers and left people without functioning houses.
- In the 1985 book *Big Score: The Billion-Dollar Story: The Billion-Dollar Story of Silicon Valley* there is a nice chapter talking about the manufacturing of integrated chips that explains how the process is (or at least used to be) very unpredictable and how it's basically astrology for the managers to try to predict and maximize the yield rates (the percentage of manufactured chips that function correctly). There were companies whose research showed the number of good chips correlated with the phases of the Moon, another one found that chips were destroyed by tiny droplets of piss on the hands of workers who didn't wash their hands and that [women](woman.md) workers during menstruation destroyed more chips because of the increased amount of oil secreted from their hands.
- In 2018 Hungary banned [gender studies](gender_studies.md) as ideology that has nothing in common with science :D
- The unexpected assassination of Lord British in Ultima Online in 1997 was pretty funny.
- [Elizabeth Holmes](elizabeth_holmes.md)
- In 2019 a [progaming](progaming.md) ("esports") organization Vaevictis tried to make an all-[female](woman.md) League of Legends team, which would be the first such team in the high progaming league. The team quickly failed, it can't even be described how badly they played, of course they didn't even had a hope of gaining a single win, they gained several world records for their failures such as the fastest loss (13 minutes), eventually they got fired from the league xD

@ -17,13 +17,14 @@ Up until recently in history every engineer would tell you that *the better mach
- [suckless](suckless.md)
- [Unix philosophy](unix_philosophy.md)
- [KISS](kiss.md)
- [countercomplex](countercomplex.md)
- [countercomplex](countercomplex.md), [permacomputing](permacomputing_wiki.md)
- [less retarded software](lrs.md)
- [Bitreich](bitreich.md)
- [less is more](less_is_more.md)/[worse is better](worse_is_better.md)
- [appropriate technology](appropriate_tech.md)
- [reactionary software](reactionary_software.md), though bordering with [pseudominimalism](pseudominimalism.md)
- [plan9](plan9.md) and its followers such as [100rabbits](100rabbit.md) etc., though this often borders with [pseudominimalism](pseudominimalism.md)
- [Collapse OS](collapseos.md)/[Dusk OS](duskos.md)
- ...
Under [capitalism](capitalism.md) technological minimalism is suppressed in the mainstream as it goes against [corporate](corporation.md) interests, i.e. those of having monopoly control over technology, even if such technology is "[FOSS](foss.md)" (which then becomes just a cool brand, see [openwashing](openwashing.md)). We may, at best, encounter a "shallow" kind of minimalism, so called [pseudominimalism](pseudominimalism.md) which only tries to make things appear minimal, e.g. aesthetically, and hides ugly overcomplicated internals under the facade. [Apple](apple.md) is famous for this [shit](shit.md).

@ -6,7 +6,7 @@ Optimization means making a program more efficient in terms of consumption of so
These are mainly for [C](c.md), but may be usable in other languages as well.
- **Tell your compiler to actually optimize** (`-O3`, `-Os` flags etc.). Also check out further compiler flags that may help you turn off unnecessary things you don't need, AND try out different compilers, some may just produce better code.
- **Tell your compiler to actually optimize** (`-O3`, `-Os` flags etc.). Also check out further compiler flags that may help you turn off unnecessary things you don't need, AND try out different compilers, some may just produce better code. If you are brave also check even more aggressive flags like `-Ofast` and `-Oz`, which may be even faster than `-03`, but may break your program too.
- **[gprof](gprof.md) is a utility you can use to profile your code**.
- **`<stdint.h>` has fast type nicknames**, types such as `uint_fast32_t` which picks the fastest type of at least given width on given platform.
- **Actually measure the performance** to see if your optimizations work or not. Sometimes things behave counterintuitively and you end up making your program perform worse by trying to optimize it! Also make sure that you MEASURE THE PERFORMANCE CORRECTLY, many beginners for example just try to measure run time of a single simple function call which doesn't really work, you want to try to measure something like a million of such function calls in a loop and then average the time.

@ -7,7 +7,7 @@ Here is a list of people notable in technology or in other ways related to [LRS]
- **[Alan Turing](turing.md)**: mathematician, father of [computer science](compsci.md), [gay](gay.md)
- **[Alexandre Oliva](alexandre_oliva.md)**: [free software](free_software.md) advocate, founding member of [FSFLA](fsfla.md), maintainer of [Linux-libre](linux_libre.md)
- **[Bill Gates](bill_gates.md)**: founder and CEO of [Micro$oft](microsoft.md), huge faggot
- **[Buddha](buddha.md)**: started [buddhism](buddhism.md), a religion seeking enlightenment attained by seeing the ultimate truth and so freeing oneself from all desire
- **[Buddha](buddha.md)** (Siddhartha Gautama): started [buddhism](buddhism.md), a religion seeking enlightenment attained by searching for the ultimate truth and so freeing oneself from all desire
- **[Dennis Ritchie](dennis_ritchie)**: creator of [C](c.md) language and co-creator of [Unix](unix.md)
- **[Diogenes](diogenes.md)**: based Greek philosopher who opposed all authorities in very cool ways
- **[Donald Knuth](knuth.md)**: computer scientist, Turing-award winner, author of the famous [Art of Computer Programming](taocp.md) books and the [TeX](tex.md) typesetting system
@ -26,8 +26,10 @@ Here is a list of people notable in technology or in other ways related to [LRS]
- **[Lawrence Lessig](lessig.md)**: lawyer, founder of [free culture](free_culture.md) movement and [Creative Commons](creative_commons.md), critic of [copyright](copyright.md)
- **[Linus Torvalds](linus_torvalds.md)**: Finnish programmer who created [Linux](linux.md) and [git](git.md)
- **[Luke Smith](luke_smith.md)**: [suckless](suckless.md) vlogger/celebrity
- **[Mahatma Gandhi](gandhi.md)**: Indian man who greatly utilized and popularized [nonviolence](nonviolence.md)
- **[Melvin Kaye](mel.md) aka Mel**: genius old time programmer that appears in [hacker lore](hacker_culture.md) (*Story of Mel*)
- **[Mental Outlaw](mental_outlaw.md)**: [suckless](suckless.md) vlogger/celebrity
- **[Mother Teresa](mother_teresa.md)**
- **[Nina Paley](nina_paley.md)**: [female](woman.md) artist, one of the most famous proponents of [free culture](free_culture.md)
- **[Noam Chomsky](noam_chomsky.md)**: linguist notable in theoretical [compsci](computer_science.md), anarchist
- **[Óscar Toledo G.](toledo.md)**: programmer of tiny programs and [games](game.md) (e.g. the smallest [chess](chess.md) program), sadly [proprietary](proprietary.md) [winfag](windows.md)

@ -7,7 +7,7 @@ TODO
Here we propose a programming style and C code formatting you may use in your programs. { It's basically a style I personally adopted and fine-tuned over many years of my programming. ~drummyfish } Remember that nothing is set in stone, the most important thing is usually to be consistent within a single project and to actually think about why you're doing things the way you're doing them. Keeping to the standard set here will gain you advantages such as increased readability for others already familiar with the same style and avoiding running into traps set by short-sighted decisions e.g. regarding identifiers. Try to think from the point of view of a programmer who gets just your source code without any way to communicate with you, make his life as easy as possible. The LRS style/formatting rules follow:
- **Respect the [LRS](lrs.md) design principles** ([KISS](kiss.md), no [OOP](oop.md), avoid dependencies such as [stdlib](stdlib.md) etc.).
- **Indentation: use two spaces, NEVER use [tabs](tab.md)**. Why? Tabs are ugly, tricky (look the same as spaces) non-standard behaving characters (behavior is dependent on editor and settings, some processors will silently convert tabs and spaces, copy-paste may do so also etc.), they don't carry over to some platforms (especially paper); your source will contain spaces either way, no need to insert additional blank character.
- **Indentation: use two spaces, NEVER use [tabs](tab.md)**. Why? Tabs are ugly, tricky (look the same as spaces) non-standard behaving characters (behavior is dependent on editor and settings, some processors will silently convert tabs and spaces, copy-paste may do so also etc.), they don't carry over to some platforms (especially paper), some very simple platforms may not even support them; your source will contain spaces either way, no need to insert additional blank character.
- **Limit source code width to 80** columns or similar value. Keep in mind the source may be edited on computers with small screens (like old [thinkpads](thinkpad.md), especially withing context of LRS) with a screen split vertically.
- Write **opening and closing curly brackets on their own lines, in the same columns**, e.g.:

@ -9,4 +9,5 @@ This is a place for sharing some practical programming tips.
- **[KEEP IT SIMPLE](kiss.md)** and keep it [LRS](lrs.md), do not blindly follow mainstream ways and "workflows" as those are more often than not horrible. For example instead of using some uber bug tracker, you should use a simple plaintext TODO.txt file; instead of using and IDE use [vim](vim.md) or something similar. Stay away from [OOP](oop.md), [dependencies](dependency.md) etc.
- **Don't listen to advice of anyone who does programming for living**, he's most definitely accustomed to the worst ways of programming and will try to push you to [OOP](oop.md), [bloat](bloat.md), [proprietary](proprietary.md) tech, [tranny software](tranny_software.md), [GitHub](github.md) etc. Listening to advice of such people is like taking advice on whether to take drugs from a drug dealer.
- **Most true programming is done away from the computer** -- soydevs think that a good programmer just spends hours in front of a computer bashing the keyboard and drinking litres of coffee to stay alive and [PRODUCTIVE](productivity_cult.md); indeed, they usually do, but they are not good programmers, their time is spent slaving the computer doing [maintenance](maintenance.md), debugging, googling, updating and socializing on Twitter. A good programmer actually programs everywhere: when going for walk, before falling asleep, when sleeping, when watching a movie etc. He only starts writing a serious program after years of thinking about it and already having most of it programmed in his head; sitting in front of a computer and writing the algorithm down is only the final smaller part of the journey.
- During development turn off optimization flags for faster compiling and turn on verbosity and various checks, e.g. `-Werror -Wall -Wextra -Wpedantic` for [C](c.md).
- TODO: moar

@ -49,11 +49,13 @@ In [computer graphics](graphics.md) raycasting refers to a rendering technique i
*raycasted view, rendered by the example below*
The method is called *2D* because even though the rendered picture looks like a 3D view, the representation of the world we are rendering is 2 dimensional (usually a grid, a top-down plan of the environment with cells of either empty space or walls) and the casting of the rays is performed in this 2D space -- unlike with the 3D raycasting which really does cast rays in fully 3D environments. Also unlike with the 3D version which casts one ray per each rendered pixel (x * y rays per frame), 2D raycasting only casts **one ray per rendered column** (x rays per frame) which actually, compared to the 3D version, drastically reduces the number of rays cast and makes this method **fast enough for [real time](real_time.md)** rendering even using [software_rendering](sw_rendering.md) (without a GPU).
The method is called *2D* because even though the rendered picture looks like a 3D view, the rays we are casting are 2 dimensional and the representation of the world we are rendering is also usually 2 dimensional (typically a grid, a top-down plan of the environment with cells of either empty space or walls) and the casting of the rays is performed in this 2D space -- unlike with the 3D raycasting which really does cast 3D rays and uses "fully 3D" environment representations. Also unlike with the 3D version which casts one ray per each rendered pixel (x * y rays per frame), 2D raycasting only casts **one ray per rendered column** (x rays per frame) which actually, compared to the 3D version, drastically reduces the number of rays cast and makes this method **fast enough for [real time](real_time.md)** rendering even using [software_rendering](sw_rendering.md) (without a GPU).
The principle is following: for each column we want to render we cast a ray from the camera and find out which wall in our 2D world it hits first and at what distance -- according to the distance we use [perspective](perspective.md) to calculate how tall the wall columns should look from the camera's point of view, and we render the column. Tracing the ray through the 2D grid representing the environment can be done relatively efficiently with algorithms normally used for line rasterization. There is another advantage for weak-hardware computers: we can easily use 2D raycasting **without a [framebuffer](framebuffer.md)** (without [double_buffering](double_buffering.md)) because we can render each frame top-to-bottom left-to-right without overwriting any pixels (as we simply cast the rays from left to right and then draw each column top-to-bottom). And of course, it can be implemented using [fixed point](fixed_point.md) (integers only).
SIDENOTE: The distinction between 2D and 3D raycasting may get [fuzzy](fuzzy.md), the transition may be gradual. It is possible to have "real 3D" world (with some limitations) but draw it using 2D raycasting, [Anarch](anarch.md) does something like that -- it uses 2D raycasting for rendering but player and projectiles have full X, Y and Z coordinates. Also consider for example performing 2D raycasting but having 3 layers of the 2D world, allowing for 3 different height levels; now we've added the extra Z dimension to 2D raycasting, though this dimension is small (Z coordinate of world cell can only be 0, 1 or 2), however we will now be casting 3 rays for each column and are getting closer to the full 3D raycasting. This is just to show that as with everything we can usually do "something in between".
The classic version of 2D raycasting -- as seen in the early 90s games -- only renders walls with [textures](texture.md); floors and ceilings are untextured and have a solid color. The walls all have the same height, the floor and ceiling also have the same height in the whole environment. In the walls there can be sliding doors. 2D sprites ([billboards](billboard.md)) can be used with raycasting to add items or characters in the environment -- for correct rendering here we usually need a 1 dimensional [z-buffer](z_buffer.md) in which we write distances to walls to correctly draw sprites that are e.g. partially behind a corner. However we can **extend** raycasting to allow levels with different heights of walls, floor and ceiling, we can add floor and ceiling texturing and, in theory, probably also use different level geometry than a square grid (however at this point it would be worth considering if e.g. [BSP](bsp.md) rendering wouldn't be better).
Back to pure 2D raycasting; the principle is following: for each column we want to render we cast a ray from the camera and find out which wall in our 2D world it hits first and at what distance -- according to the distance we use [perspective](perspective.md) to calculate how tall the wall columns should look from the camera's point of view, and we render the column. Tracing the ray through the 2D grid representing the environment can be done relatively efficiently with algorithms normally used for line rasterization. There is another advantage for weak-hardware computers: we can easily use 2D raycasting **without a [framebuffer](framebuffer.md)** (without [double_buffering](double_buffering.md)) because we can render each frame top-to-bottom left-to-right without overwriting any pixels (as we simply cast the rays from left to right and then draw each column top-to-bottom). And of course, it can be implemented using [fixed point](fixed_point.md) (integers only).
The classic version of 2D raycasting -- as seen in the early 90s games -- only renders walls with [textures](texture.md); floors and ceilings are untextured and have a solid color. The walls all have the same height, the floor and ceiling also have the same height in the whole environment. In the walls there can be sliding doors. 2D sprites ([billboards](billboard.md)) can be used with raycasting to add items or characters in the environment -- for correct rendering here we usually need a 1 dimensional [z-buffer](z_buffer.md) in which we write distances to walls to correctly draw sprites that are e.g. partially behind a corner. However we can **extend** raycasting to allow levels with different heights of walls, floor and ceiling, we can add floor and ceiling texturing and also use different level geometry than a square grid (however at this point it would be worth considering if e.g. [BSP](bsp.md) or [portal rendering](portal_rendering.md) wouldn't be better). An idea that might spawn from this is for example using [signed distance field](sdf.md) function to define an environment and then use 2D [raymarching](raymarching.md) to iteratively find intersections of the ray with the environment in the same way we are stepping through cells in the 2D raycasting described above.
### Implementation

@ -8,6 +8,8 @@ The technique of slowly boiling the frog is used by [corporations](corporation.m
Slowly boiling the frog works very well when spanning several generations because a new generation won't remember that things used to be better. Parents can tell them but young never listen to older generations, or take them seriously. A [zooomer](genz.md) won't remember that computers used to be better, he thinks that [bloated](bloat.md) phones filled with [ads](ad.md) and [DRM](drm.md) that don't work without Internet connection and that spy on you constantly are the only way of technology.
This can also be seen with all the [subscriptions](subscription.md) and *[service as software replacement](saas.md)* in [modern](modern.md) tech. Back in the 90s no one would buy a program he would have to keep periodically paying for, people saw that was stupid and everyone would tell you that no company can make subscription software because no one would pay subscriptions if he can just buy a competitor's program once and use it forever, people would just laugh at any company trying to do that; if back then you told anyone subscriptions would become the sole business model in technology, even e.g. for cars, they would literally put you in mental asylum, you would be labeled a retard and schizo, just like they are labeling [us](lrs.md) warning about the future. It took 1 to 2 generations to indeed make this schizo vision a reality. If you think something can't happen because it just sounds "schizo", [you're a brainwashed retard](yes_they_can.md).
## See Also
- [leading the pig to the slaughterhouse](leading_the_pig_to_the_slaughterhouse.md)

@ -16,7 +16,7 @@ Usenet was the pre-[web](www.md) web, kind of like an 80s [reddit](reddit.md) wh
## Where To Freely Browse Usenet
Search for Usenet archives, I've found some sites dedicated to this, also [Internet archive](internet_archive.md) has some newsgroups archived. [Google](google.md) has Usenet archives on a website called "Google groups" (now sadly requires login). There is a nice archive at https://www.usenetarchives.com. Possibly guys from Archive Team can help (https://wiki.archiveteam.org/index.php/Usenet, https://archive.org/details/usenet, ...). See also http://www.eternal-september.org. There is an archive from 1981 accessible through [gopher](gopher.md) at gopher://gopher.quux.org/1/Archives/usenet-a-news.
Search for Usenet archives, I've found some sites dedicated to this, also [Internet archive](internet_archive.md) has some newsgroups archived. [Google](google.md) has Usenet archives on a website called "Google groups" (now sadly requires login). There is a nice archive at https://www.usenetarchives.com. Possibly guys from Archive Team can help (https://wiki.archiveteam.org/index.php/Usenet, https://archive.org/details/usenet, ...). See also http://www.eternal-september.org. There is an archive from 1981 accessible through [gopher](gopher.md) at gopher://gopher.quux.org/1/Archives/usenet-a-news. Also https://yarchive.net/.
## See Also

@ -1,6 +1,6 @@
# Viznut
Viznut (real name Ville-Matias Heikkilä) is a Finnish [demoscene](demoscene.md) programmer, [hacker](hacking.md) and [artist](art.md) that advocated high technological [minimalism](minimalism.md). He is known for example for his [countercomplex](countercomplex.md) blog, co-discovering [bytebeat](bytebeat.md), creating [IBNIZ](ibniz.md) and starting [permacomputing wiki](permacomputing_wiki.md). In his own words, he believes much more can be done with much less. He also warns of [collapse](collapse.md) (http://viznut.fi/en/future.html). According to his [Fediverse](fediverse.md) page he lives in Turku, Finland, was born around 1977 and has been programming since the age of seven.
Viznut (real name Ville-Matias Heikkilä) is a Finnish [demoscene](demoscene.md) programmer, [hacker](hacking.md) and [artist](art.md) that advocated high technological [minimalism](minimalism.md). He is known for example for his [countercomplex](countercomplex.md) blog, co-discovering [bytebeat](bytebeat.md), creating [IBNIZ](ibniz.md) and involvement in [permacomputing wiki](permacomputing_wiki.md). In his own words, he believes much more can be done with much less. He also warns of [collapse](collapse.md) (http://viznut.fi/en/future.html). According to his [Fediverse](fediverse.md) page he lives in Turku, Finland, was born around 1977 and has been programming since the age of seven.
{ Lol he's not responding to my emails :] ~drummyfish }

@ -2,8 +2,8 @@
This is an auto-generated article holding stats about this wiki.
- number of articles: 529
- total size of all texts in bytes: 2639445
- number of articles: 530
- total size of all texts in bytes: 2645503
longest articles:
@ -23,6 +23,15 @@ longest articles:
latest changes:
```
Date: Tue Dec 26 23:42:01 2023 +0100
c.md
duskos.md
fixed_point.md
forth.md
people.md
quine.md
sqrt.md
wiki_stats.md
Date: Tue Dec 26 14:46:41 2023 +0100
assembly.md
cache.md
@ -47,14 +56,5 @@ iq.md
linux.md
paradigm.md
programming_language.md
ted_kaczynski.md
wiki_stats.md
Date: Sat Dec 23 19:56:56 2023 +0100
algorithm.md
bytecode.md
capitalism.md
esolang.md
freedom.md
hash.md
```

Loading…
Cancel
Save