Update
This commit is contained in:
parent
5b6494e48c
commit
2b011199db
15 changed files with 1986 additions and 1919 deletions
|
@ -4,7 +4,7 @@
|
|||
|
||||
In [computer graphics](graphics.md) 3D rendering is the process of computing images which represent a projected view of 3D objects through a virtual camera.
|
||||
|
||||
There are many methods and [algorithms](algorithm.md) for doing so differing in many aspects such as computation complexity, implementation complexity, realism of the result, representation of the 3D data, limitations of viewing and so on. If you are just interested in the [realtime](realtime.md) 3D rendering used in [gaymes](game.md) nowadays, you are probably interested in [GPU](gpu.md)-accelerated 3D [rasterization](rasterization.md) with [APIs](api.md) such as [OpenGL](opengl.md) and [Vulkan](vulkan.md).
|
||||
To this end we now have many methods and [algorithms](algorithm.md) differing in many aspects such as computation complexity, implementation complexity, realism of the result, representation of the 3D data, limitations of viewing and so on. If you are just interested in the [realtime](realtime.md) 3D rendering used in [gaymes](game.md) nowadays, you are probably interested in [GPU](gpu.md)-accelerated 3D [rasterization](rasterization.md) with [APIs](api.md) such as [OpenGL](opengl.md) and [Vulkan](vulkan.md).
|
||||
|
||||
[LRS](lrs.md) has a simple 3D rendering library called [small3dlib](small3dlib.md).
|
||||
|
||||
|
@ -12,11 +12,11 @@ There are many methods and [algorithms](algorithm.md) for doing so differing in
|
|||
|
||||
As most existing 3D "[frameworks](framework.md)" are [harmful](harmful.md), a [LRS](lrs.md) programmer is likely to write his own 3D rendering system that suits his program best, therefore we should list some common methods of achieving 3D. Besides that, it's just pretty interesting to see what there is in the store.
|
||||
|
||||
A very important realization of a graphics programmer is that **3D rendering is to a great extent about [faking](cheating.md)** (especially the mainstream realtime 3D) -- it is an endeavor that seeks to produce something that looks somehow familiar to HUMAN sight specifically and so even though the methods are mathematical, the endeavor is really an [art](art.md) in the end, not dissimilar to that of a magician who searches for "smoke and mirrors" [hacks](hacking.md) to produce illusions for the audience. Reality is infinitely complex, we use nothing else but [approximations](approximation.md) and neglecting that rely on assumptions about human sight such as "60 FPS looks like smooth movement to human eye", "infrared spectrum is invisible", "humans can't tell a mirror reflection is a bit off", "inner corners are usually darker than flat surfaces", "no shadow is completely black because light scatters in the atmosphere" etc. Really 3D graphics is nothing but searching for what looks [good enough](good_enough.md), and deciding this relies on a SUBJECTIVE judgement of a human (and sometimes every individual). In theory -- if we had infinitely powerful computers -- we would just program in a few lines of electromagnetic equations and run the precise simulation of light propagating in 3D environment to produce an absolutely realistic result, but though some methods try to come close to said approach, we simply won't ever have infinitely powerful computers. For this we have to resort to a bit more [ugly](ugly.md) approach of identifying specific notable real-life phenomena individually (for example [caustics](caustic.md), [Fresnel](fresnel.md), mirror reflections, refractions, [subsurface scattering](subsurface_scattering.md), metallicity, [noise](noise.md), [motion blur](motion_blur.md) and myriads of others) and addressing each one individually with special treatment, many times correcting and masking our imperfections (e.g. applying [antialiasing](antialiasing.md) because we dared to use a simplified model of light sampling, applying texture filtering because we dared to only use finite amount of memory for our data, applying [postprocessing](postprocessing.md) etc.).
|
||||
A graphics programmer quickly comes to realize that **3D rendering is to a great extent about [faking](cheating.md)** (especially the [mainstream](mainstream.md) realtime 3D) -- it is an endeavor seeking creation of something that looks familiar and satisfyingly good specifically to HUMAN sight and so even though the methods are mathematical, the endeavor really equates [art](art.md) in the end, not dissimilar to that of a magician inventing "smoke and mirrors" [hacks](hacking.md) to produce illusions for the audience. Reality is infinitely complex, we use nothing else but [approximations](approximation.md) and neglecting that rely on assumptions about human visual perception such as "60 FPS looks like smooth movement", "infrared spectrum is invisible", "humans can't tell a mirror reflection is slightly off", "inner corners of objects are usually darker than flat surfaces", "no shadow is completely black because light scatters in the atmosphere" etc. Really 3D graphics is nothing but searching for what looks [good enough](good_enough.md), and deciding this relies on SUBJECTIVE judgment of a human (and sometimes every individual). In theory -- if we had infinitely powerful computers -- we might just program in a few lines of electromagnetic equations and run the precise simulation of light propagating in 3D environment to obtain absolutely realistic results, but though some methods try to come close to said approach, we simply can't ever hope to invent an infinitely powerful computer. For this we have to resort to a bit more [ugly](ugly.md) approach of identifying specific notable real-life phenomena individually (for example [caustics](caustic.md), [Fresnel](fresnel.md), mirror reflections, refractions, [subsurface scattering](subsurface_scattering.md), metallicity, [noise](noise.md), [motion blur](motion_blur.md) and myriads of others) and addressing each one individually with special treatment, many times correcting and masking our imperfections (e.g. applying [antialiasing](antialiasing.md) because we dared to use a simplified model of light sampling, applying texture filtering because we dared to only use finite amount of memory for our data, applying [postprocessing](postprocessing.md) etc.).
|
||||
|
||||
**Rendering spectrum**: The book *Real-Time Rendering* mentions that methods for 3D rendering can be seen as lying on a spectrum, one extreme of which is *appearance reproduction* and the other *physics simulation*. Methods closer to trying to imitate the appearance try to simply focus on imitating the look of an object on the monitor that the actual 3D object would have in real life, without being concerned with *how* that look arises in real life (i.e. closer to the "faking" approach mentioned above) -- these may e.g. use image data such as photographs; these methods may rely on lightfields, photo [textures](texture.md) etc. The physics simulation methods try to replicate the behavior of light in real life -- their main goal is to solve the **[rendering equation](rendering_equation.md)**, still only more or less [approximately](approximation.md) -- and so, through internally imitating the same processes, come to similar visual results that arise in real world: these methods rely on creating 3D geometry (e.g. that made of triangles or voxels), computing light reflections and [global illumination](global_illumination.md). This is often easier to program but more computationally demanding. Most methods lie somewhere in between these two extremes: for example [billboards](billboard.md) and [particle systems](particle_system.md) may use a texture to represent an object while at the same time using 3D quads (very simple 3D models) to correctly deform the textures by perspective and solve their visibility. The classic polygonal 3D models are also usually somewhere in between: the 3D geometry and [shading](shading.md) are trying to simulate the physics, but e.g. a photo texture mapped on such 3D model is the opposite appearance-based approach ([PBR](pbr.md) further tries to shift the use of textures more towards the *physics simulation* end).
|
||||
|
||||
With this said, let's now take a look at possible **classifications** of 3D rendering methods. As seen, there are many ways:
|
||||
Having said this, let's now take a look at possible **classifications** of 3D rendering methods. As seen, there are many ways:
|
||||
|
||||
- by **order**:
|
||||
- **object order**: The method iterates on objects and draws object by object, one after another. This results in pixels being drawn to "random" places on the screen and possibly already drawn pixels being [overdrawn](overdraw.md) with new pixels (though this can be further reduced). Typically requires a [frame buffer](frame_buffer.md) and [double buffering](double_buffering.md), often also [z-buffer](z_buffer.md) (or [sorting](sorting.md)), i.e. requires a lot of memory. This method is also a bit ugly but typically also faster than the alternative, so it is prevailing nowadays.
|
||||
|
@ -45,12 +45,12 @@ With this said, let's now take a look at possible **classifications** of 3D rend
|
|||
- ...
|
||||
- by **[hardware](hw.md)**:
|
||||
- **[software rendering](sw_rendering.md)**: Rendering only with [CPU](cpu.md). This is typically slower as a CPU mostly performs sequential computation, eliminating the possible parallelism optimization, however the approach is more [KISS](kiss.md) and [portable](portablity.md).
|
||||
- **[GPU](gpu.md) accelerated**: Making use of specialized graphics rendering hardware (GPU) that typically uses heavy parallelism to immensely speed up rendering. While this is the mainstream, extremely fast way of rendering, it is also greatly [bloated](bloat.md) while often being an [overkill](overkill.md) that greatly complicates programming and makes programs less [portable](portability.md), less [future proof](future_proof.md) etc.
|
||||
- **[GPU](gpu.md) accelerated**: Making use of specialized graphics rendering hardware (GPU) that typically uses heavy parallelism to immensely speed up rendering. While this is the mainstream, extremely fast way of rendering, it is also highly [bloated](bloat.md) while often being an [overkill](overkill.md) that overcomplicates programming and makes programs less [portable](portability.md), less [future proof](future_proof.md) etc.
|
||||
- by **realism** of output:
|
||||
- **[photorealistic](photorealism.md)**
|
||||
- **stylized**, flat [shaded](shading.md), [wireframe](wireframe.md), ...
|
||||
- ...
|
||||
- **[hybrids](hybrid.md)**: Methods may be combined and/or lie in between different extremes, for example we may see a rasterizer 3D renderer that uses ray tracing to add detail (shadows, reflections, ...) to the scene, we may see renderers that allow triangle meshes as well as voxels etc. { One nice hybrid looking engine is e.g. [Chasm: The Rift](chasm_the_rift.md). ~drummyfish }
|
||||
- **[hybrids](hybrid.md)**: Methods may be combined and/or lie in between different extremes, for example we may see a rasterizing renderer that uses ray tracing to add detail (shadows, reflections, ...) to the scene, ones that allow triangle meshes as well as voxels etc. { One nice hybrid looking engine is e.g. [Chasm: The Rift](chasm_the_rift.md). ~drummyfish }
|
||||
- ...
|
||||
|
||||
Finally a table of some common 3D rendering methods follows, including the most simple, most advanced and some unconventional ones. Note that here we talk about methods and techniques rather than algorithms, i.e. general approaches that are often modified and combined into a specific rendering algorithm. For example the traditional triangle rasterization is sometimes combined with raytracing to add e.g. realistic reflections. The methods may also be further enriched with features such as [texturing](texture.md), [antialiasing](antialiasing.md) and so on. The table below should help you choose the base 3D rendering method for your specific program.
|
||||
|
@ -102,7 +102,7 @@ TODO: VoxelQuest has some innovative voxel rendering, check it out (https://www.
|
|||
|
||||
If you're a complete noob and are asking what the essence of 3D is or just how to render simple 3Dish pictures for your game without needing a [PhD](phd.md), here's the very basics. Yes, you can use some 3D engine such as [Godot](godot.md) that has all the 3D rendering preprogrammed, but you'll surrender to [bloat](bloat.md), you won't really know what's going on and your ability to tinker with the rendering or optimizing it will be basically zero... AND you'll miss on all the [fun](fun.md) :) So here we just foreshadow some concepts you should start with if you want to program your own 3D rendering.
|
||||
|
||||
The absolute basic thing in 3D is probably **[perspective](perspective.md)**, or the concept which says that "things further away look smaller". This is basically the number one thing you need to know and with which you can make simple 3D pictures, even though there are many more effects and concepts that "make pictures look 3D" and which you can potentially study later (lighting, shadows, [focus and blur](depth_of_field.md), [stereoscopy](stereo.md), [parallax](parallax.md), visibility/obstruction etc.). { It's probably possible to make something akin to "3D" even without perspective, just with [orthographic](ortho.md) projection, but that's just getting to details now. Let's just suppose we need perspective. ~drummyfish }
|
||||
The first, 101 most basic concept in 3D is probably **[perspective](perspective.md)**, or the effect by which "things further away look smaller". This is basically the number one idea to know which will enable you to very quickly make simple 3D pictures, even though there are many more effects and concepts that "make pictures look 3D" and which you can potentially study later (lighting, shadows, [focus and blur](depth_of_field.md), [stereoscopy](stereo.md), [parallax](parallax.md), visibility/obstruction etc.). { It's probably possible to make something akin to "3D" even without perspective, just with [orthographic](ortho.md) projection, but that's just getting to details now. Let's just suppose we need perspective. ~drummyfish }
|
||||
|
||||
If you don't have rotating camera and other fancy things, perspective is actually mathematically very simple, you basically just **divide the object's size by its distance from the viewer**, i.e. its Z coordinate (you may divide by some multiple of Z coordinate, e.g. by 2 * Z to get different [field of view](fov.md)) -- the further away it is, the bigger number its size gets divided by so the smaller it becomes. This "dividing by distance" ultimately applies to all distances, so in the end even the details on the object get scaled according to their individual distance, but as a first approximation you may just consider scaling objects as a whole. Just keep in mind you should only draw objects whose Z coordinate is above some threshold (usually called a *near plane*) so that you don't divide by 0! With this "dividing by distance" trick you can make an extremely simple "3Dish" renderer that just draws [sprites](sprite.md) on the screen and scales them according to the perspective rules (e.g. some space simulator where the sprites are balls representing planets). There is one more thing you'll need to handle: **[visibility](visibility.md)**, i.e. nearer objects have to cover the further away objects -- you can do this by simply [sorting](sorting.md) the objects by distance and drawing them back-to-front ([painter's algorithm](painters_algorithm.md)).
|
||||
|
||||
|
@ -248,19 +248,19 @@ press key to animate
|
|||
|
||||
## Mainstream Realtime 3D
|
||||
|
||||
You may have come here just to learn about the typical realtime 3D rendering used in today's [games](game.md) because aside from research and niche areas this kind of 3D is what we normally deal with in practice. This is what this section is about.
|
||||
You may have come here just to learn about the typical realtime 3D used in today's [games](game.md) because aside from research and niche areas this kind of 3D is what we normally deal with in practice. This is what this section is about.
|
||||
|
||||
These days "game 3D" means a [GPU](gpu.md) accelerated 3D [rasterization](rasterization.md) done with rendering [APIs](api.md) such as [OpenGL](opengl.md), [Vulkan](vulkan.md), [Direct3D](d3d.md) or [Metal](metal.md) (the last two being [proprietary](proprietary.md) and therefore [shit](shit.md)) and higher level engines above them, e.g. [Godot](godot.md), [OpenSceneGraph](osg.md) etc. The methods seem to be evolving to some kind of rasterization/[pathtracing](pathtracing.md) hybrid, but rasterization is still the basis.
|
||||
|
||||
This mainstream rendering uses an [object order](object_order.md) approach (it blits 3D objects onto the screen rather than determining each pixel's color separately) and works on the principle of **triangle rasterization**, i.e. 3D models are composed of triangles (or higher polygons which are however eventually broken down into triangles) and these triangles are projected onto the screen according to the position of the virtual camera and laws of [perspective](perspective.md). Projecting the triangles means finding the 2D screen coordinates of each of the triangle's three vertices -- once we have thee coordinates, we draw (rasterize) the triangle to the screen just as a "normal" 2D triangle (well, with some asterisks).
|
||||
This mainstream rendering is classified as an [object order](object_order.md) approach (it blits 3D objects onto the screen rather than determining each pixel's color separately) and works on the principle of **triangle rasterization**, i.e. 3D models are composed of [triangles](triangle.md) (or higher polygons which are however eventually broken down into triangles) and these are projected onto the screen according to the position of the virtual camera and laws of [perspective](perspective.md). Projecting the triangles means finding 2D screen coordinates of each of the triangle's three vertices (each of which has a 3D coordinate) -- once we have the 2D coordinates, we draw (rasterize) the triangle to the screen just as a "normal" 2D triangle (well, with some asterisks).
|
||||
|
||||
Additionally things such as [z-buffering](z_buffer.md) (for determining correct overlap of triangles) and [double buffering](double_buffering.md) are used, which makes this approach very memory ([RAM](ram.md)/[VRAM](vram.md)) expensive -- of course mainstream computers have more than enough memory but smaller computers (e.g. [embedded](embedded.md)) may suffer and be unable to handle this kind of rendering. Thankfully it is possible to adapt and imitate this kind of rendering even on "small" computers -- even those that don't have a GPU, i.e. with pure [software rendering](sw_rendering.md). For this we e.g. replace z-buffering with [painter's algorithm](painters_algorithm.md) (triangle sorting), drop features like [perspective correction](perspective_correction.md), [MIP mapping](mip_mapping.md) etc. (of course quality of the output will go down).
|
||||
Additionally things such as [z-buffering](z_buffer.md) (for determining correct overlap of triangles) and [double buffering](double_buffering.md) are used, which makes this approach very memory ([RAM](ram.md)/[VRAM](vram.md)) expensive -- of course mainstream computers have more than enough memory but smaller computers (e.g. [embedded](embedded.md)) may suffer and be incapable of handling this kind of rendering. Thankfully it is possible to adapt and imitate this kind of rendering even on "small" computers -- even those that don't have a GPU, i.e. with pure [software rendering](sw_rendering.md). For this we e.g. replace z-buffering with [painter's algorithm](painters_algorithm.md) (triangle sorting), drop features like [perspective correction](perspective_correction.md), [MIP mapping](mip_mapping.md) etc. (of course quality of the output will go down).
|
||||
|
||||
Also additionally there's a lot of [bloat](bloat.md) added in such as complex [screen space](screen_space.md) shaders, [pathtracing](pathtracing.md) (popularly known as *raytracing*), [megatexturing](megatexturing.md), [shadow rendering](shadow.md), [postprocessing](postprocessing.md), [compute shaders](compute_shader.md) etc. This may make it difficult to get into "modern" 3D rendering. Remember to [keep it simple](kiss.md).
|
||||
|
||||
On PCs the whole rendering process is hardware-accelerated with a [GPU](gpu.md) (graphics card). GPU is a special hardware capable of performing many operations in [parallel](parallelism.md) (as opposed to a [CPU](cpu.md) which mostly computes sequentially with low level of parallelism) -- this is ideal for graphics because we can for example perform mapping and drawing of many triangles at once, greatly increasing the speed of rendering ([FPS](fps.md)). However this hugely increases the [complexity](complexity.md) of the whole rendering system, we have to have a special [API](api.md) and [drivers](driver.md) for communication with the GPU and we have to upload data (3D models, textures, ...) to the GPU before we want to render them. [Debugging](debugging.md) gets a lot more difficult. So again, this is [bloat](bloat.md), consider avoiding GPUs.
|
||||
On [PCs](pc.md) the whole rendering process is hardware-accelerated with a [GPU](gpu.md) (graphics card). GPU is a special hardware capable of performing many operations in [parallel](parallelism.md) (as opposed to a [CPU](cpu.md) which mostly computes sequentially with low level of parallelism) -- this is ideal for graphics because we can for example perform mapping and drawing of many triangles at once, greatly increasing the speed of rendering ([FPS](fps.md)). However this hugely increases the [complexity](complexity.md) of the whole rendering system, we have to have a special [API](api.md) and [drivers](driver.md) for communication with the GPU and we have to upload data (3D models, textures, ...) to the GPU before we want to render them. [Debugging](debugging.md) gets a lot more difficult. So again, this is [bloat](bloat.md), consider avoiding GPUs.
|
||||
|
||||
GPUs nowadays are no longer just focusing on graphics, but are kind of a general device that can be used for more than just 3D rendering (e.g. [crypto](crypto.md) mining, training [AI](ai.md) etc.) and can no longer even perform 3D rendering completely by themselves -- for this they have to be programmed. I.e. if we want to use a GPU for rendering, not only do we need a GPU but also some extra code. This code is provided by "systems" such as [OpenGL](opengl.md) or [Vulkan](vulkan.md) which consist of an [API](api.md) (an [interface](interface.md) we use from a [programming language](programming_language.md)) and the underlying implementation in a form of a [driver](driver.md) (e.g. [Mesa3D](mesa3d.md)). Any such rendering system has its own architecture and details of how it works, so we have to study it a bit if we want to use it.
|
||||
GPUs nowadays are no longer just focusing on graphics, but are kind of a general computing device usable for more than just 3D rendering (e.g. [crypto](crypto.md) mining, training [AI](ai.md) etc.) and can no longer even perform 3D rendering completely by themselves -- for this they have to be programmed. I.e. if we want to use a GPU for rendering, not only do we need a GPU but also some extra code. This code is provided by "systems" such as [OpenGL](opengl.md) or [Vulkan](vulkan.md) which consist of an [API](api.md) (an [interface](interface.md) we use from a [programming language](programming_language.md)) and the underlying implementation in a form of a [driver](driver.md) (e.g. [Mesa3D](mesa3d.md)). Any such rendering system has its own architecture and details of how it works, so we have to study it a bit if we want to use it.
|
||||
|
||||
The important part of a system such as OpenGL is its **rendering [pipeline](pipeline.md)**. Pipeline is the "path" through which data go through during the rendering process. Each rendering system and even potentially each of its version may have a slightly different pipeline (but generally all mainstream pipelines somehow achieve rasterizing triangles, the difference is in details of how they achieve it). The pipeline consists of **stages** that follow one after another (e.g. the mentioned mapping of vertices and drawing of triangles constitute separate stages). A very important fact is that some (not all) of these stages are programmable with so called **[shaders](shader.md)**. A shader is a program written in a special language (e.g. [GLSL](glsl.md) for OpenGL) running on the GPU that processes the data in some stage of the pipeline (therefore we distinguish different types of shaders based on at which part of the pipeline they reside). In early GPUs stages were not programmable but they became so as to give a greater flexibility -- shaders allow us to implement all kinds of effects that would otherwise be impossible.
|
||||
|
||||
|
|
|
@ -2,9 +2,9 @@
|
|||
|
||||
{ Researching this on-the-go, send me corrections, thanks. ~drummyfish }
|
||||
|
||||
Bitreich is a small, obscure underground group/movement of programmers who greatly value [minimalism](minimalism.md)/[simplicity](simplicity.md), oppose the [evil](evil.md) and degeneration of [modern](modern.md) mainstream technology and aim for making the world a better place mainly through simpler [technology](tech.md). They seem to belong to the cluster of "minimalist programmer groups", i.e. they are similar to [suckless](suckless.md) (which in their manifesto they see as a failed project), [reactionary software](reactionary_software.md) and our very own [LRS](lrs.md), sharing many values such as [minimalism](minimalism.md), [Unix philosophy](unix_philosophy.md), preference and love of the [C](c.md) language, carrying on some of the [hacker culture](hacking.md) heritage, though of course they also have their own specifics that will make them different and even disagreeing with us and others on occasion, e.g. on [copyleft](copyleft.md) (unlike us, they seem to greatly prefer the [GPL](gpl.md)), terminology (yeah, they seems to prefer "[open source](open_source.md)") and probably also things like [privacy](privacy.md) (though the craze doesn't seem to go too far, many have listed their real names and addresses) etc.
|
||||
Bitreich is a small, obscure underground group/movement of [programmers](programming.md) who greatly value [minimalism](minimalism.md)/[simplicity](simplicity.md), oppose the [evil](evil.md) and degeneration of [modern](modern.md) [mainstream](mainstream.md) technology and aim for making the world a better place mainly through increased [minimalism](minimalism.md). They seem to belong to the cluster of "minimalist programmer groups", i.e. they are similar to [suckless](suckless.md) (which in their manifesto they see as a failed project), [reactionary software](reactionary_software.md) and our very own [LRS](lrs.md), sharing many values such as [minimalism](minimalism.md), [Unix philosophy](unix_philosophy.md), preference and love of the [C](c.md) language, carrying on some of the [hacker culture](hacking.md) heritage, though of course they also have their own specifics that will make them different and even disagreeing with us and others on occasion, e.g. on [copyleft](copyleft.md) (unlike us, they seem to greatly prefer the [GPL](gpl.md)), terminology (yeah, they seems to prefer "[open source](open_source.md)") and probably also things like [privacy](privacy.md) (though the craze doesn't seem to go too far, many have listed their real names and addresses) etc.
|
||||
|
||||
According to the gopherhole Bitreich started on 17.8.2016 -- the founder (or at least one of them?) seems to be 20h (Christoph Lohmann according to the user profile), a guy formerly active in [suckless](suckless.md) (can be found on their website), who even gave an interview about Bitreich to some radio/magazine/whatever. It seems Bitreich originated in Germany. As of 2023 they list 12 official member profiles (the number of lurker followers will of course be a much high number, there seem to be even bitreich subcommunities in other countries such as Italy). They are mostly present on [gopher](gopher.md) (gopher://bitreich.org), which they greatly promote, and [IRC](irc.md) (ircs://irc.bitreich.org:6697/#bitreich-en). There are also [Tor](tor.md) hidden services etc.; their website at bitreich.org seems to be purposefully broken in protest of the [web](web.md) horror.
|
||||
According to the gopherhole Bitreich commenced on 17.8.2016 -- the founder (or at least one of them?) seems to be 20h (Christoph Lohmann according to the user profile), a guy formerly active in [suckless](suckless.md) (can be found on their website), who even gave an interview about Bitreich to some radio/magazine/whatever. It seems Bitreich originated in Germany. As of 2023 they list 12 official member profiles (the number of lurker followers will of course be a much high number, there seem to be even bitreich subcommunities in other countries such as Italy). They are mostly present on [gopher](gopher.md) (gopher://bitreich.org), which they greatly promote, and [IRC](irc.md) (ircs://irc.bitreich.org:6697/#bitreich-en). There are also [Tor](tor.md) hidden services etc.; their website at bitreich.org seems to be purposefully broken in protest of the [web](web.md) horror.
|
||||
|
||||
Some of their ideas and philosophy seems to be very based, e.g. preference of KISS/older protocols (gopher, ftp, IRC, ...), "users are programmers" (opposing division into users as consumers and developers as overlords), "bug reports are [patches](patch.md)", "programs can be [finished](finished.md)" etc.
|
||||
|
||||
|
|
2
chess.md
2
chess.md
|
@ -457,6 +457,7 @@ Some general tips and rules of thumb, mostly for beginners:
|
|||
- If you can achieve something with multiple men, usually it's best to do it with the weakest one.
|
||||
- Have a plan, even a simple one -- you mustn't just be answering the opponent's moves, you want to have goal (but you may change your goals quickly) such as "I wanna develop and castle, then start attacking this weak pawn here" etc.
|
||||
- Think from opponent's point of view -- this seems to be an important skill that beginners lack. If you only think about what you want to do, you often find yourself in trouble because you ignored the opponent's threats. At the very least you should ALWAYS think after the opponent's move about WHY he made it to be aware of what his plan probably is and what you should be prepared for. If you don't see why he made a move he did, you must think harder: either he blundered (good for you, take the opportunity!) OR you missed something and you have to find what.
|
||||
- Sometimes, usually in endgames, the obligation to make a move becomes a disadvantage -- this is called [zugzwang](zugzwang.md) and can be abused. For example if the opponent has a pawn and a king who guards another pawn, it may be so that blocking the first pawn will make it unable to move, leaving the opponent with only a move that will make his king stop guarding the other pawn which can then be taken.
|
||||
- Practice endgame -- the play is quite different from middle game, the king joins the battle, you start to race your pawns and prevent opponent's pawns from promoting. { I don't know if it's a good advice but at least in puzzles I've found that if you aren't sure about your move in the endgame, pushing the pawn is usually the right move :D ~drummyfish }
|
||||
- TODO: moar
|
||||
|
||||
|
@ -486,6 +487,7 @@ WORK IN PROGRESS, pls send me more tips :)
|
|||
- When losing constantly offer draws, prolong the game AS MUCH AS POSSIBLE, before the very last move just let the clock run out.
|
||||
- Repeatedly try to make swastikas on the board, especially against colored opponents.
|
||||
- Underpromote pawns to knights or bishops.
|
||||
- Just mirror the opponent's moves.
|
||||
- Any time you can play en passant do it no matter what and always follow by saying "google en passant".
|
||||
- The rating equalizer (you must be somewhat good): play so that you give rating to low rated players and take it away from high rated ones.
|
||||
- When playing a noob don't just mate him but absolutely rape him, promote all pawns to knights before winning, then say you didn't even have to try and that he should look into another game as chess is clearly not his game. Research humiliating play: for example GM Aman Hambleton demonstrated on stream a so called *reset checkmate* in which one promotes all pawns so as to have the original back rank men and then delivers a checkmate by placing the men in the original starting position (furthermore he did this by premoving it all which adds to the humiliation).
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# Compression
|
||||
|
||||
Compression means encoding [data](data.md) (such as images or texts) in a different way so that the data takes less space (memory) while keeping all the important [information](information.md), or, in plain terms, it usually means "making files smaller". Compression is pretty important so that we can utilize memory or [bandwidth](bandwidth.md) well -- without it our hard drives would be able to store just a handful of videos, internet would be slow as hell due to the gigantic amount of transferred data and our [RAM](ram.md) wouldn't suffice for things we normally do. There are many [algorithms](algorithm.md) for compressing various kinds of data, differing by their complexity, performance, efficiency of compression etc. The reverse process to compression (getting the original data back from the compressed data) is called **decompression**. The ratio of the original data size to compressed data size is called **compression ratio** (the higher, the better). The science of data compression is truly huge and complicated AF, here we'll just mention some very basics. Also watch out: compression algorithms are often a [patent](patent.md) mine field.
|
||||
Compression means encoding [data](data.md) (such as images or texts) in a different way so that the data takes less space (memory) while keeping all the important [information](information.md), or, in plain terms, it usually means "making files smaller". Compression is pretty important as it helps us utilize memory or [bandwidth](bandwidth.md) well -- without it our hard drives would be able to store just a handful of videos, internet would be slow as hell due to the gigantic amount of transferred data and our [RAM](ram.md) wouldn't suffice for things we normally do. There are many [algorithms](algorithm.md) for compressing various kinds of data, differing by their complexity, performance, efficiency of compression etc. The reverse process to compression (getting the original data back from the compressed data) is called **decompression**. The ratio of the original data size to compressed data size is called **compression ratio** (the higher, the better). The science of data compression is truly huge and complicated AF, here we'll just mention some very basics. Also watch out: compression algorithms are often a [patent](patent.md) mine field.
|
||||
|
||||
{ CORRECTION NOTE: Allow me to interject -- I used to have compression ratio defined here as compressed to original, then noticed it's usually defined as a reciprocal of that, corrected it now. There seems to be some general confusion though, some actually define it as "space saved", i.e. *1 - compressed / original*. Doesn't matter that much anyway, but it's probably better to stick to an established convention. ~drummyfish }
|
||||
|
||||
|
|
4
faq.md
4
faq.md
|
@ -279,6 +279,10 @@ I am THE laziest bastard who EVER walked this soil, if I seem """productive""" t
|
|||
|
||||
See previous question, it just became a habit to write down what comes to my mind plus note stuff I find useful and I like to read through it from time to time, add more comments, polish stuff, and after a few years of daily writing you get something like this. I can write every day without much effort because I do it instead of wasting my life on bullshit like [constantly migrating and updating](update_culture.md) my website framework (since I have none), checking my bank accounts, maintaining my car (since I have none), maintaining my castle sized house (since I have none), going to work (which I try to not have), masturbating all day (I just do it quickly), consuming TikTok, making smalltalk, arguing on the Internet, going to parties and shit like that. When I happen to talk to someone and we disagree on something, I immediately know it's a complete waste of life talking to him further so rather than trying to argue on I tell him he won the debate (this makes him extremely happy), then I go and write my counterargument on this wiki so that me spending time on formulating the argument will be seen by more people and hence may actually be useful, plus next time I can just provide a link to my article as my argument without any extra effort.
|
||||
|
||||
### Did you use AI to write this wiki?
|
||||
|
||||
NO. I hate AI, it's a [modern](modern.md) [zoomer](zoomer.md) [bloat](bloat.md), also it's stupid as fuck and I wouldn't trust it with a first grader's homework, let alone anything more complex. Also I want this to be 100% my original work in case some dataset copyright trolls wanted to bully this wiki. Also this wiki must keep its unique personality. Using AI also probably wouldn't be a very good example considering our [LRS](lrs.md) values. This wiki is and will remain an AI virgin. The closest this might get to being touched by AI is possibly me having some articles proofread in the future to maybe spot some errors, but I will never let it actually GENERATE anything.
|
||||
|
||||
### I dislike this wiki, our teacher taught us that global variables are bad and that [OOP](oop.md) is good.
|
||||
|
||||
This is not a question you dummy. Have you even read the title of this page? Anyway, your teacher is stupid, he is, very likely unknowingly, just spreading the capitalist propaganda. He probably believes what he's saying but he's wrong.
|
||||
|
|
1
go.md
1
go.md
|
@ -83,6 +83,7 @@ These are some tips on how to play well:
|
|||
- Oftentimes it happens that a good move is to place your stone where the opponent would want to place his stone, so think from the point of view of your opponent, it may aid you in finding your own move.
|
||||
- A group that is alive (has at least two eyes and so cannot ever be captured) can serve you as a safe island of stability to which you can connect other of your groups, which will also make them uncapturable.
|
||||
- When it's clear you'll be able to capture opponent's stones, you don't have to do it immediately, you probably want to leave it for later and first play higher priority moves such as securing other areas of the board, you don't want to give your opponent free moves while you're capturing the group.
|
||||
- A [fun](fun.md) strategy is so called **mirror go** in which one player mirrors the opponent's moves (the mirroring is done by the board center). This can be valid but usually only for a few starting moves, if one plays this blindly the opponent can of course take advantage of the fact he knows your next move.
|
||||
- TODO
|
||||
|
||||
## Go And Computers, Programming
|
||||
|
|
|
@ -62,7 +62,7 @@ This section lays out some essential steps, according to [LRS](lrs.md), which a
|
|||
- [Mint](mint.md): More noob, [bloated](bloat.md) and mainstream distro that only mildly cares about freedom, but is extremely easy and works almost everywhere. Try this if Debian didn't work for you.
|
||||
- [Ubuntu](ubuntu.md): Kind of like Mint, try it if Mint didn't work.
|
||||
- [Puppy](puppy.md) Linux: Tiny kind of a "toy" distro that uses very little resources.
|
||||
- **Learn a bit of [command line](cli.md)** ([Unix](unix.md) utils, [bash](bash.md) etc.). No need to become a hacker right away, just get familiar with this essential Unix environment.
|
||||
- **Learn a bit of [command line](cli.md)** ([Unix](unix.md) utils, [bash](bash.md) etc.). There is a short tutorial in the [Unix](unix.md) article. No need to become a hacker right away, just get familiar with this essential Unix environment.
|
||||
- **Free yourself technologically**, i.e. make yourself depend as little as possible on capitalist technology; this step if crucial, you can't really live well or achieve anything while being a slave. This includes firstly leaving proprietary platforms such as [Facebook](facebook.md), [Google](google.md)'s platforms such as [YouTube](youtube.md), [reddit](reddit.md) etc. Also stop being dependent on proprietary programs ([MS](microsoft.md) office, [photoshop](photoshop.md) etc.), and proprietary consumer devices such as a [smartphone](smartphone.md). Again, it's impossible to free yourself 100% immediately, go slowly and try to get more freedom even if you can't achieve 100% freedom. This means either stop using harmful software/services/devices and engaging in bad habits (social media etc.) or at least minimize their use, and/or use more freedom-friendly alternatives such as different [search engines](search_engine.md) (e.g. [searx](searx.md), ...), a [dumbphone](dumbphone.md) or at least [free](free_software.md) OS smartphone rather than capitalist [smartphone](smartphone.md), freedom friendly laptop (e.g. an old [thinkpad](thinkpad.md)) rather than iShit or consumerist gayming PC, start using **[FOSS](foss.md) programs**, e.g. [GIMP](gimp.md) instead of Photoshop, [LibreOffice](libreoffice.md) instead of MS Office etc, [invidious](invidious.md) or [Peertube](peertube.md) instead of [YouTube](youtube.md) etc. If you are addicted to some modern AAA game like [World of Warcraft](wow.md), then satisfaction of your need for entertainment requires latest [modern](modern.md) powerful PC, paying game subscription, paid operating system, expensive GPU, fast Internet connection... if as a first step you transition to something like [Minetest](minetest.md), suddenly you can do with any old computer with an old integrated GPU, running a FOSS operating system, you'll suddenly be able to play on computers that people will give your for free; better yet if you eventually transition to chess or text adventures, any calculator or perhaps pen and paper will satisfy your need of entertainment, your freedom will increase greatly. Remember, it is best if you can stop using something altogether, the second best thing is to stop being dependent on a single entity, try to use a decentralized and/or [suckless](suckless.md) [FOSS](foss.md) alternative but do not try to just mimic your old proprietary habits in the FOSS world, you have to learn new ways of computing (for example start using multiple search engines instead of relying on one, it's not good to just drop-in replace one search engine for another). Avoid falling to traps of shit like [distrohopping](distrohopping.md), this just enslaves you in a different way.
|
||||
- If you want to program [LRS](lrs.md), **learn [C](c.md)** (see the [tutorial](c_tutorial.md)). Also learn a bit of [POSIX shell](posix_shell.md) and maybe some mainstream [scripting](script.md) language (can be even a bloated one like [Python](python.md)). Learn about [licensing](license.md) and [version control](vcs.md) ([git](git.md)). As you advance, start studying deeper topics such as [history](history.md) or [hacker culture](hacking.md) etc.
|
||||
- Optionally make your own minimal [website](web.md) (or even a [gopherhole](gopher.md)) to help reshare ideas you like (static [HTML](html.md) site without [JavaScript](javascript.md)). This is very easy, and the site can be hosted for free e.g. on [git](git.md) hosting sites like Codeberg or GitLab. Get in touch with us.
|
||||
|
|
11
jokes.md
11
jokes.md
|
@ -17,6 +17,8 @@ Also remember the worst thing you can do to a joke is put a [disclaimer](disclai
|
|||
- Ingame chat: "What's the country in the middle of north Africa?" [{BANNED}](niger.md)
|
||||
- What does a [Marxist](marxism.md) call C++? Class struggle.
|
||||
- What sound does an angry [C](c.md) programmer make? ARGCCCC ARGVVVVVVVV
|
||||
- A three-letter [free software](free_software.md) organization interviews a guy seeking job. The interviewer says: "You'll get the job if you prove yourself. Here are some grenades, go and throw one to the Microsoft building and another one to a drugstore." The guy replies "Why drugstore?" The interviewer says: "You're hired."
|
||||
- I can tell if a [girl](girl.md) has sense of humor just by feeling her breasts.
|
||||
- I have a mentally ill friend who tried to design the worst [operating system](os.md) on purpose. It boots for at least 10 minutes, then it changes the user's desktop background to random ads and it randomly crashes to make the user angry. He recently told me he is getting sued by [Microsoft](microsoft.md) for violating their look and feel.
|
||||
- I am using a super minimal system, it only has one package installed on it. It is called [systemd](systemd.md) (alternatively [Emacs](emacs.md)).
|
||||
- Any [Windows](windows.md) tutorial is really best called a "crash course".
|
||||
|
@ -26,6 +28,8 @@ Also remember the worst thing you can do to a joke is put a [disclaimer](disclai
|
|||
- Do you use [Emacs](emacs.md)? No, I already have an [operating system](os.md).
|
||||
- Do you use [Emacs](emacs.md)? No, I already have a [waifu](waifu.md).
|
||||
- Do you use [Emacs](emacs.md)? No, I already have carpal tunnel. Etc. :D
|
||||
- What's the difference between [Elon Musk](elon_musk.md) and a bucket full of [shit](shit.md)? The bucket.
|
||||
- Why do [Jews](jew.md) have such big noses? Because air is free.
|
||||
- `alias bitch=sudo`
|
||||
- What's a trilobyte? 8 trilobits.
|
||||
- "Never test for a bug that you don't know how to fix." --manager; "If we cannot fix it, it isn't broken." --also manager
|
||||
|
@ -52,10 +56,15 @@ Also remember the worst thing you can do to a joke is put a [disclaimer](disclai
|
|||
- [green](greenwashing.md) [capitalism](capitalism.md) :'D my sides
|
||||
- Difference between a beginner and pro programmer? Pro programmer fails in a much more sophisticated manner.
|
||||
- What is a [computer](computer.md)? A device that can make a hundred million very precise mistakes per second.
|
||||
- A very progressive African country recently allowed [women](woman.md) in universities. The prime minister said: "the cleaning won't do itself".
|
||||
- Which drink is the favorite of a [liberal](liberalism.md)? Wine.
|
||||
- What kind of public transport do [afroamericans](nigger.md) use most commonly? Back of a police car.
|
||||
- The new version of MacOS is going to constantly have [gay](gay.md) porn playing as a wallpaper. Why? So that you don't feel alone in being fucked in the ass when using it.
|
||||
- How many [Python](python.md) programmers do you need to change a lightbulb? Only one -- he holds the bulb while the world revolves around him.
|
||||
- After all it may not take so long to establish our [utopia](less_retarded_society.md). By the time [Windows](windows.md) has updated we will have already done it ten times over.
|
||||
- One of the great milestones yet left to be achieved by science is to find intelligent life in our Solar System.
|
||||
- An evil capitalist, good capitalist and [female](woman.md) genius walk in the park. A bee stings one of them. Who did it sting? The evil capitalists, the other two don't exist.
|
||||
- Why did [Bill Gate$](bill_gates.md) make [Windows](windows.md)? After watching Nascar he wanted to bring the excitement of constant crashed to the computing world.
|
||||
- Cool statistics: 9 out of 10 people enjoy a gang [rape](rape.md).
|
||||
- What does a shitty programmer say when his program crashes? [OOP](oop.md)s. { Thanks my secret friend. :D ~drummyfish }
|
||||
- Basement hackers never die, they just smell that way. Musicians never die, they just decompose (and musicians working part time are [semiconductors](semiconductor.md)).
|
||||
|
@ -67,6 +76,7 @@ Also remember the worst thing you can do to a joke is put a [disclaimer](disclai
|
|||
- [Schizophrenia](schizo.md) beats being alone.
|
||||
- Our new [app](app.md) partly adopts the [KISS](kiss.md) philosophy, specifically the "stupid" part.
|
||||
- I just had sex with a German chick, for some reason she kept yelling her age. (Or maybe she just didn't consent.)
|
||||
- What does a broken gun and black employee have in common? Neither works and neither can be fired.
|
||||
- I find it much more pleasant to browse the web on a 1 bit display, it can't display a [rainbow](lgbt.md).
|
||||
- What's long and sticky? A stick.
|
||||
- The term *military intelligence* is an oxymoron. The term *criminal lawyer* is a redundancy.
|
||||
|
@ -79,6 +89,7 @@ Also remember the worst thing you can do to a joke is put a [disclaimer](disclai
|
|||
- The latest [gender studies](gender_studies.md) paper concluded that if God exists, he is both man and woman, black and white, child and adult, straight and homosexual. Basically imagine Michael Jackson.
|
||||
- Why does a [woman](woman.md) laugh before you tell her a joke? She just got the one you told her last year.
|
||||
- What's a [black](black.md) sprinter called in [America](usa.md)? Guilty.
|
||||
- What's do you call a lesbian with long nails? Single.
|
||||
- Which argument fallacy is best used against an [LGBT](lgbt.md) [soyentist](soyence.md)? Ad homosexual.
|
||||
- Those who can, do. Those who cannot, teach. Those who cannot teach, [do business](entrepreneur.md).
|
||||
- How do you accelerate a [Windows](windows.md) PC? By dropping it out of the window. (Hence the name?)
|
||||
|
|
|
@ -6,7 +6,7 @@ WIP kind of
|
|||
|
||||
Numbers (from Latin *numerus* coming from a Greek word meaning "to distribute") are one of the most elementary [mathematical](math.md) objects, building [stones](rock.md) serving most often as quantitative values (that is: telling count, size, length, order etc.), in higher math also used in much more [abstract](abstraction.md) ways which have only distant relationship to traditional counting. Examples of numbers are minus [one](one.md) half, [zero](zero.md), [pi](pi.md) or [i](i.md). Numbers constitute the basis and core of mathematics and as such they sit almost at the [lowest level](low_level.md) of it, i.e. most other things such as algebra, [functions](function.md) and [equations](equation.md) are built on top of numbers or require numbers to even be examined. In modern mathematics numbers themselves aren't on the absolute bottom of the foundations though, they are themselves built on top of [sets](set.md), as set theory is most commonly used as a basis of whole mathematics, however for many purposes this is just a formalism that's of practical interest only to some mathematicians -- on the other hand numbers just cannot be avoided anywhere, by a mathematician or just a common folk. The word *number* may be the first that comes to our mind when we say *mathematics*. The area of [number theory](number_theory.md) is particularly focused on examining numbers (though it's examining almost exclusively integer numbers because these seem to have the deepest pattern related e.g. to divisibility).
|
||||
|
||||
Let's not [confuse](often_confused.md) numbers with digits or figures (numerals) -- a number is a purely abstract entity while digits serve as symbols for numbers so that we can write them down. One number may be written in many ways, using one of many [numeral systems](numeral_system.md) (Roman numerals, tally marks, Arabic numerals of different [bases](base.md) etc.), for example 4 stands for a number than can also be written as IV, four, 8/2, 16:4, 2^2, 4.00 or 0b100. There are also numbers which cannot exactly be captured within our traditional numeral systems, for some of them we have special symbols -- most famous example is of course [pi](pi.md) whose digits we cannot ever completely write down -- and there are even numbers for which we have no symbols at all, ones that are yet not well researched and are only described by equations to which they are the solution. Sure enough, a number by itself isn't too interesting and probably doesn't even make sense, it's only in context, when it's placed in relationship with other numbers (by ordering them, defining operations and properties based on those operations) that patterns and useful attributes emerge.
|
||||
Do not [confuse](often_confused.md) numbers with digits or figures (numerals) -- a number is a purely abstract entity while digits serve as symbols for numbers so that we can write them down. One number may be written in many ways, using one of many [numeral systems](numeral_system.md) (Roman numerals, tally marks, Arabic numerals of different [bases](base.md) etc.), for example 4 stands for a number than can also be written as IV, four, 8/2, 16:4, 2^2, 4.00 or 0b100. There are also numbers which cannot be exactly expressed with our traditional numeral systems, for some of them we have special symbols -- most famous example is of course [pi](pi.md) whose digits cannot ever be completely written down -- and there are even numbers lacking any symbolic representation, ones not well researched yet, only described by equations to which they are the solution. Sure enough, a number by itself isn't too interesting and probably doesn't even make sense, it's only in context, when it's placed in relationship with other numbers (by ordering them, defining operations and properties based on those operations) that patterns and useful attributes emerge.
|
||||
|
||||
Humans first started to use positive natural numbers (it seems as early as 30000 BC), i.e. 1, 2, 3 ..., so as to be able to trade, count enemies, days and so on -- since then they kept expanding the concept of a number with more [abstraction](abstraction.md) as they encountered more complex problems. First extension was to fractions, initially reciprocals of integers (like one half, one third, ...) and then general ones. Around 6th century BC Pythagoras showed that there even exist numbers that cannot be expressed as fractions ([irrational numbers](irrational_number.md), which in the beginning was a controversial discovery), expanding the set of known numbers further. A bit later (around 100 BC) negative numbers started to be used. Adoption of the number [zero](zero.md) also took some time (1st use of true zero seem to be in 4th century BC), with it first just having a limited use as a mere placeholder digit. Since 16th century a highly abstract concept of [complex numbers](complex_number.md) started to appear, which was later (19th century) expanded further to [quaternions](quaternion.md). With more advancement in mathematics -- e.g. with the development of set theory -- more and more concepts of new kinds of numbers appeared and still appear to this day. Nowadays we have greatly abstract numbers, ones existing in many dimensions, capable of counting and measuring infinitely large and infinitely small entities, and it seems we still haven't nearly discovered everything there is to know about numbers.
|
||||
|
||||
|
|
|
@ -36,7 +36,7 @@ While political correctness loves to boast about "diversity" and somehow "protec
|
|||
|
||||
The death of free speech can especially be seen on the [Internet](internet.md), there is an immense pressure on establishing control, surveillance and authorities over what used to be a hope for a free cybernetic world. This is of course motivated by evil interests just like any other kind of new land colonization, and political correctness is an official excuse to make it happen. It's obvious to anyone who dares to think that removing free speech from our main medium of communication so that "people's feeling don't get hurt" is similarly stupid as (and infinitely more dangerous than) removing the possibility to win or lose from the rules of [chess](chess.md) because we suddenly realized that some people may feel bad when they lose.
|
||||
|
||||
Of course, political correctness doesn't stop at censoring simple words, don't get mistaken. Facts in textbooks and encyclopedias such as those regarding [race](race.md) and sex differences are censored and replaced with lies with the help of [soyence](soyence.md). Political correctness tries to forcefully dictate standards of a culture by an extremely rapidly changing fashion, e.g. the standard of beauty, politeness and so on -- last week we celebrated the international gender fluid day but THIS WEEK we celebrate fat disabled women with acne issues, all TV ads must have at least one crippled landwhale or else you're cancelled. If you can't keep up with their latest inventions you'll be executed -- on no, you used the term "mentally ill"! HOW DARE YOU THAT'S SO OFFENSIVELY AGGRESSIVE YOU HAVE TO SAY NEURODIVERGENT, you're basically [Hitler](hitler.md) now (but wait until next week when the word *neuro* itself becomes offensive).
|
||||
Of course, political correctness doesn't stop at censoring simple words, don't get mistaken. Facts in textbooks and encyclopedias such as those regarding [race](race.md) and sex differences are censored and replaced with lies with the help of [soyence](soyence.md). This is no longer just an annoyance -- this a serious danger to society, threat to free and independent thinking and sharing of information. Political correctness tries to forcefully dictate standards of a culture by an extremely rapidly changing fashion, e.g. the standard of beauty, politeness and so on -- last week we celebrated the international gender fluid day but THIS WEEK we celebrate fat disabled women with acne issues, all TV ads must have at least one crippled landwhale or else you're cancelled. If you can't keep up with their latest inventions you'll be executed -- on no, you used the term "mentally ill"! HOW DARE YOU THAT'S SO OFFENSIVELY AGGRESSIVE YOU HAVE TO SAY NEURODIVERGENT, you're basically [Hitler](hitler.md) now (but wait until next week when the word *neuro* itself becomes offensive).
|
||||
|
||||
OK, let's get back to a bit more serious. Just for the autistic neuroretarded people persons that might misunderstand our stance on social equality: [LRS](lrs.md) is for complete social equality of all people and eventually all living beings, however political correctness has nothing to do with achieving this goal, in fact it mostly goes against it, it creates huge amount of collateral damage, it divides people and fuels social conflict rather than calm it. We try to not cure symptoms of a shit society by harmful means but rather address the root cause by transitioning to a [good society](less_retaded_society.md) without conflict where there is no need for censorship, fact distortion and brainwashing to prevent discrimination. In the society we envision accepting facts about physical inequality does not imply an attack or discrimination at all as humans don't compete by their abilities, in such society the idea of political correctness is as ridiculous as e.g. arguing we should be creating numerically more inclusive datasets with higher leading digits as by [Benford's law](benfords_law.md) smaller digits are are a statistical majority that oppresses higher digits.
|
||||
|
||||
|
|
3699
random_page.md
3699
random_page.md
File diff suppressed because it is too large
Load diff
|
@ -65,7 +65,7 @@ Some stereotypes are:
|
|||
- tough men, living surrounded by extremely dangerous animals such as flying spiders, fight crocodiles every day
|
||||
- hunt with boomerangs
|
||||
- **Brazilian**:
|
||||
- everyone is extroverted, cheerful, horny and dances samba
|
||||
- everyone is extroverted, cheerful, horny and dances samba, attends carnival
|
||||
- everyone plays [football](football.md)
|
||||
- nice tanned bodies, full shapes, big asses and tits, everyone wears bikini everywhere, even at school, work etc.
|
||||
- slums, poverty, drugs, violence
|
||||
|
@ -119,6 +119,11 @@ Some stereotypes are:
|
|||
- [nazis](nazism.md)
|
||||
- post-war very sensitive to anything connected to nazism, for example if someone notices a crossroads somewhere resembles a swastika, nation-wide panic will ensue
|
||||
- likewise sensitive to other sensitive topics, typically e.g. violence in video games: all blood in game is censored to green liquid
|
||||
- **Hispanics**:
|
||||
- telenovelas
|
||||
- sexual dances like tango and samba
|
||||
- always happy, enjoy life, very social, passionate, horny
|
||||
- huge families
|
||||
- **Irish**:
|
||||
- tough
|
||||
- drunk and violent
|
||||
|
@ -176,9 +181,11 @@ Some stereotypes are:
|
|||
- **Mexican**:
|
||||
- all wear sombreros and mustaches
|
||||
- love and drink tequila all day
|
||||
- extremely spicy food that would kill any non-Mexican
|
||||
- lazy, poor, dirty, drugs and crime, violence
|
||||
- constantly trying to get over US borders to steal their jobs
|
||||
- those who already got into Murica work basically as slaves, e.g. cleaners, nannies, janitors etc.
|
||||
- weapon of choice is machete
|
||||
- **Russians**:
|
||||
- very tough, big and strong, endure conditions that would kill other people (such as extreme cold or very high doses of alcohol), keep pet bears
|
||||
- don't smile or show emotion in general
|
||||
|
|
51
unix.md
51
unix.md
|
@ -27,7 +27,7 @@ Unix then started being sold commercially. This led to its fragmentation into di
|
|||
|
||||
For [zoomers](genz.md) and other noobs: Unix wasn't like [Windows](windows.md), it was more like [DOS](dos.md), things were done in [text interface](cli.md) only (even a [TUI](tui.md) or just colorful text was a luxury) -- if you use the command line in "[Linux](linux.md)" nowadays, you'll get an idea of what it was like, except it was all even more primitive. Things we take for granted such as a [mouse](mouse.md), [copy-pastes](copy_paste.md), interactive text editors, having multiple user accounts or [running multiple programs at once](multitasking.md) were either non-existent or advanced features in the early days. There weren't even personal computers back then, people accessed share computers over terminals. Anything these guys did you have to see as done with stone tools -- they didn't have GPUs, gigaherts CPUs, gigabytes of RAM, scripting languages like Python or JavaScript, Google, stack overflow, wifi, mice, IDEs, multiple HD screens all around, none of that -- and yet they programmed faster, less buggy software that was much more efficient. If this doesn't make you think, then probably nothing will.
|
||||
|
||||
## How To
|
||||
## How To For Noobs
|
||||
|
||||
UNDER CONSTRUCTION
|
||||
|
||||
|
@ -41,16 +41,57 @@ Learning to use Unix practically means **learning the [command line](cli.md)** p
|
|||
|
||||
PRO TIP: convenient features are often implemented, most useful ones include going through the history of previously typed commands with UP/DOWN keys and completing commands with the TAB key, which you'll find yourself using very frequently. Try it. It's enough to type just first few letters and then press tab, the command will be completed (at least as much as can be guessed).
|
||||
|
||||
You run a utility simply by writing its name, for example typing `ls` will show you a list of files in your current directory. Very important is the `man` command that shows you a **manual page** for another command, e.g. typing `man ls` should display a page explaining the utility in detail. Short help for a utility can also be obtained by writing `-h` after it, for example `grep -h`.
|
||||
You run a utility simply by writing its name, for example typing `ls` will show you a list of files in your current directory. Very important is the `man` command that shows you a **manual page** for another command, e.g. typing `man ls` should display a page explaining the `ls` utility in detail. Short help for a utility can also usually be obtained by writing `-h` after it, for example `grep -h`.
|
||||
|
||||
Unix utilities (and other programs) can also be invoked with **arguments** that specify more detail about what should be done. Arguments are written after the utility name and are separated by spaces (if the argument itself should contain space, it must be enclosed between double quotes, e.g. `"abc def"`). For example the `cd` (change directory) utility must be given the name of a directory to go to, e.g. `cd mydirectory`.
|
||||
|
||||
Some arguments start with one or two minus characters (`-`), for example `-h` or `--help`. These are usually called **flags** and they serve either to set something on/off or to name other parameters. For example many utilities accept a `-s` flag which means "silent" and tells the utility not to write anything out. A flag oftentimes has a short and long form (the long form starts with two minus characters), so `-s` and `--silent` are the same thing. The other type of flag says what kind of argument the following argument is -- for example a common flag is `--output` (or `-o`) with which we specify the name of the output file, so for instance running a C compiler may look like `cc myprogram.c --output myprogram`. Flags accepted by utilities along with their meanings are documented in the manual pages (see above).
|
||||
Some arguments start with one or two minus characters (`-`), for example `-h` or `--help`. These are usually called **flags** and serve either to turn something on/off or to name other parameters. For example many utilities accept a `-s` flag which means "silent" and tells the utility to shut up and not write anything out. A flag oftentimes has a short and long form (the long one starting with two minus characters), so `-s` and `--silent` are the same thing. The other type of flag says what kind of argument the following argument is going to be -- for example a common one is `--output` (or `-o`) with which we specify the name of the output file, so for instance running a C compiler may look like `c99 mysourcecode.c --output myprogram` (we tell the compiler to name the final program "myprogram"). Short flags can usually be combined like so: instead of `-a -b -c` we can write just `-abc`. Flags accepted by utilities along with their meaning are documented in the manual pages (see above).
|
||||
|
||||
TODO: utils, shell, sh (running programs, ...), usual "workflows" (man pages, history, arrows, tab-completion, ...), often used commands, examples, permissions
|
||||
Now to the very basic stuff: **browsing directories, moving and deleting files etc.** This is done with the following utils: `ls` (prints files in current directory), `pwd` (prints path to current directory), `cd` (travels to given directory, `cd ..` travels back), `cat` (outputs content of given file), `mkdir` (creates directory), `rm` (removes given file; to remove a directory `-rf` flag must be present), `cp` (copies file), `mv` (moves file, including directory -- note that moving also serves for renaming). As an exercise try these out (careful with `rm -rf`) and read manual pages of the commands (you'll find that `ls` can also tell you for example the file sizes and so on).
|
||||
|
||||
To **run a program** that's present in the current directory as a file you can't just write its name (like you could e.g. in [DOS](dos.md)), it MUST be prefixed it with `./` (shorthand for current directory), otherwise the shell thinks you're trying to run an INSTALLED program, i.e. it will be looking for the program in a directory where programs are installed. For example having a program named "myprogram" in current directory it will be run with `./myprogram`. Also note that to be able to run a file as a program it must have the executable mode set, which is done with `chmod +x myprogram` (you may have to do this if you e.g. download the program from the Internet). **Programs can also take arguments** just like we saw with the built-in utilities, so you can run a program like `./myprogram abc def --myflag`.
|
||||
|
||||
TODO: more more more
|
||||
|
||||
Here is a quick cheatsheet of the most common Unix utilities:
|
||||
|
||||
| name | function | possible arguments (just some) |
|
||||
| ------------- | ------------------------------------------------------------------------ | ------------------------------------------- |
|
||||
| alias | create or display alias (nickname for another command) | alias=command |
|
||||
| bc | interactive calculator | |
|
||||
| c99 | C language compiler | file, -o (output file) |
|
||||
| cd | change directory | directory name (`..` means back) |
|
||||
| chmod | change file mode | +x (execute), +w (write), +r (read), file |
|
||||
| cmp | compare files | -s (silent), file1, file2 |
|
||||
| cp | copy files | -r (recursive, for dirs), file, newfile |
|
||||
| date | write date and/or time | format |
|
||||
| df | report free space on disk | -k (use KiB units) |
|
||||
| du | estimate size of file (useful for directories) | -k (use KiB units), -s (only total), file |
|
||||
| echo | write out string (usually for scripts) | |
|
||||
| ed | simple text editor | |
|
||||
| expr | evaluate expression (simple calculator) | expression (as separate arguments) |
|
||||
| false | return false value | |
|
||||
| grep | search for pattern in file | pattern, file, -i (case insensitive) |
|
||||
| head | show first N lines of a file | -n (count), file |
|
||||
| kill | terminate process or send a signal to it | processid, -9 (kill), -15 (terminate) |
|
||||
| ls | list directory (shows files in current dir.) | -s (show file sizes in block) |
|
||||
| man | show manual page | topic |
|
||||
| mkdir | make directory | name |
|
||||
| mv | move (rename) file | -i (ask for rewrite), file, newfile |
|
||||
| pwd | print working directory | |
|
||||
| rm | remove files | -r (recursive, for dirs), -f (force) |
|
||||
| sed | stream editing utility (for replacing text etc.) | script, file |
|
||||
| sh | shell (the command line interpreter, usually for scripting) | -c (command string) |
|
||||
| sort | sort lines in file | -r (reverse), -u (unique), file |
|
||||
| tail | show last N lines of a file | -n (count), file |
|
||||
| true | return true value | |
|
||||
| uname | output system name and info | -a (all, output everything) |
|
||||
| wc | word count (count characters or lines in file, can tell exact file size) | -c (character), -l (lines), file |
|
||||
|
||||
TODO: stdin/out/err, utils, shell, sh (running programs, ...), usual "workflows" (man pages, history, arrows, tab-completion, ...), often used commands, examples, permissions, variables and exit codes
|
||||
|
||||
## See Also
|
||||
|
||||
- [unix philosophy](unix_philosophy.md)
|
||||
- [Linux](linux.md)
|
||||
- [GNU](gnu.md)
|
||||
- [GNU](gnu.md)
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -2,10 +2,10 @@
|
|||
|
||||
This is an autogenerated article holding stats about this wiki.
|
||||
|
||||
- number of articles: 625
|
||||
- number of commits: 977
|
||||
- total size of all texts in bytes: 5096965
|
||||
- total number of lines of article texts: 37019
|
||||
- number of articles: 626
|
||||
- number of commits: 978
|
||||
- total size of all texts in bytes: 5100861
|
||||
- total number of lines of article texts: 37037
|
||||
- number of script lines: 324
|
||||
- occurrences of the word "person": 10
|
||||
- occurrences of the word "nigger": 113
|
||||
|
@ -36,59 +36,71 @@ longest articles:
|
|||
top 50 5+ letter words:
|
||||
|
||||
- which (2816)
|
||||
- there (2203)
|
||||
- people (2169)
|
||||
- example (1771)
|
||||
- other (1593)
|
||||
- about (1418)
|
||||
- there (2207)
|
||||
- people (2173)
|
||||
- example (1775)
|
||||
- other (1594)
|
||||
- about (1421)
|
||||
- number (1332)
|
||||
- software (1253)
|
||||
- software (1266)
|
||||
- because (1174)
|
||||
- their (1105)
|
||||
- their (1104)
|
||||
- would (1073)
|
||||
- something (1052)
|
||||
- something (1053)
|
||||
- program (1039)
|
||||
- being (1025)
|
||||
- being (1027)
|
||||
- things (962)
|
||||
- language (936)
|
||||
- called (930)
|
||||
- without (864)
|
||||
- called (931)
|
||||
- without (865)
|
||||
- function (863)
|
||||
- simple (857)
|
||||
- simple (860)
|
||||
- computer (843)
|
||||
- numbers (831)
|
||||
- different (796)
|
||||
- these (780)
|
||||
- however (777)
|
||||
- however (779)
|
||||
- programming (771)
|
||||
- world (757)
|
||||
- system (740)
|
||||
- should (722)
|
||||
- doesn (712)
|
||||
- still (710)
|
||||
- should (723)
|
||||
- doesn (714)
|
||||
- still (712)
|
||||
- games (691)
|
||||
- society (671)
|
||||
- drummyfish (671)
|
||||
- while (670)
|
||||
- point (669)
|
||||
- drummyfish (668)
|
||||
- simply (656)
|
||||
- possible (653)
|
||||
- probably (643)
|
||||
- probably (645)
|
||||
- using (641)
|
||||
- always (629)
|
||||
- always (630)
|
||||
- course (611)
|
||||
- similar (601)
|
||||
- actually (590)
|
||||
- https (588)
|
||||
- someone (586)
|
||||
- though (581)
|
||||
- basically (570)
|
||||
- similar (602)
|
||||
- actually (591)
|
||||
- someone (587)
|
||||
- https (587)
|
||||
- though (582)
|
||||
- basically (571)
|
||||
- really (569)
|
||||
- technology (553)
|
||||
- technology (554)
|
||||
|
||||
latest changes:
|
||||
|
||||
```
|
||||
Date: Sat Mar 1 13:35:54 2025 +0100
|
||||
compression.md
|
||||
free_culture.md
|
||||
free_software.md
|
||||
fsf.md
|
||||
gnu.md
|
||||
random_page.md
|
||||
shit.md
|
||||
shitpress.md
|
||||
thrembo.md
|
||||
wiki_pages.md
|
||||
wiki_stats.md
|
||||
Date: Sat Mar 1 01:35:35 2025 +0100
|
||||
anarch.md
|
||||
atan.md
|
||||
|
@ -116,20 +128,6 @@ Date: Sat Mar 1 01:35:35 2025 +0100
|
|||
math.md
|
||||
newspeak.md
|
||||
often_confused.md
|
||||
or.md
|
||||
proof.md
|
||||
random_page.md
|
||||
slowly_boiling_the_frog.md
|
||||
suicide.md
|
||||
terry_davis.md
|
||||
throwaway_script.md
|
||||
unix.md
|
||||
usenet.md
|
||||
version_numbering.md
|
||||
wiki_pages.md
|
||||
wiki_stats.md
|
||||
wikipedia.md
|
||||
Date: Fri Feb 28 00:50:23 2025 +0100
|
||||
```
|
||||
|
||||
most wanted pages:
|
||||
|
@ -140,13 +138,13 @@ most wanted pages:
|
|||
- [embedded](embedded.md) (13)
|
||||
- [irl](irl.md) (12)
|
||||
- [buddhism](buddhism.md) (12)
|
||||
- [emacs](emacs.md) (11)
|
||||
- [complex_number](complex_number.md) (11)
|
||||
- [cli](cli.md) (11)
|
||||
- [array](array.md) (11)
|
||||
- [tree](tree.md) (10)
|
||||
- [quake](quake.md) (10)
|
||||
- [gpu](gpu.md) (10)
|
||||
- [emacs](emacs.md) (10)
|
||||
- [drm](drm.md) (10)
|
||||
- [sdl](sdl.md) (9)
|
||||
- [pointer](pointer.md) (9)
|
||||
|
@ -159,7 +157,7 @@ most popular and lonely pages:
|
|||
|
||||
- [lrs](lrs.md) (336)
|
||||
- [capitalism](capitalism.md) (304)
|
||||
- [c](c.md) (237)
|
||||
- [c](c.md) (238)
|
||||
- [bloat](bloat.md) (229)
|
||||
- [free_software](free_software.md) (197)
|
||||
- [game](game.md) (152)
|
||||
|
@ -169,7 +167,7 @@ most popular and lonely pages:
|
|||
- [minimalism](minimalism.md) (118)
|
||||
- [censorship](censorship.md) (116)
|
||||
- [computer](computer.md) (113)
|
||||
- [kiss](kiss.md) (110)
|
||||
- [kiss](kiss.md) (111)
|
||||
- [programming](programming.md) (107)
|
||||
- [math](math.md) (104)
|
||||
- [fun](fun.md) (104)
|
||||
|
|
Loading…
Reference in a new issue