master
Miloslav Ciz 2 years ago
parent a33d8f64b0
commit bd0c3c0580

@ -1,6 +1,6 @@
# Bytebeat
Bytebeat is a procedural [chiptune](chiptune.md)/8bit style music generated by a short expression in a programming language; it was discovered/highlighted in 2011 by [Viznut](viznut.md) (author of [countercomplex](countercomplex.md) blog) and the technique capable of producing quite impressive music by single-line code has since caught the attention of many programmers, especially in [demoscene](demoscene.md). There has even been a [paper](https://arxiv.org/abs/1112.1368) written about bytebeat.
Bytebeat is a procedural [chiptune](chiptune.md)/8bit style music generated by a short expression in a programming language; it was discovered/highlighted in 2011 by [Viznut](viznut.md) (author of [countercomplex](countercomplex.md) blog) and others, and the technique capable of producing quite impressive music by single-line code has since caught the attention of many programmers, especially in [demoscene](demoscene.md). There has even been a [paper](https://arxiv.org/abs/1112.1368) written about bytebeat.
This is a [beautiful](beauty.md) [hack](hacking.md) for [LRS](lrs.md)/[suckless](suckless.md) programmers because it takes quite a tiny amount of code, space and effort to produce nice music, e.g. for [games](game.md) (done e.g. by [Anarch](anarch.md)).

@ -0,0 +1,12 @@
# Deferred Shading
In computer [graphics](graphics.md) programming deferred shading is a technique for speeding up the rendering of (mainly) [shaded](shading.md) 3D graphics (i.e. graphics with textures, materials, [normal maps](normal_mapping.md) etc.). It is nowadays used in many advanced 3D engines. In principle of course the idea may also be used in 2D graphics and outside graphics.
The principle is following: in normal forward shading (non-deferred) the shading computation is applied immediately to any rendered pixel (fragment) as they are rendered. However, as objects can overlap, many of these expensively computed pixels may be overwritten by pixels of other objects, so many pixels end up being expensively computed but invisible. This is of course wasted computation. Deferred shading only computes shading of the pixels that will end up actually being visible -- this is achieved by **two rendering passes**:
1. At first geometry is rendered without shading, only with information that is needed for shading (for example [normals](normal.md), material IDs, texture IDs etc.). The rendered image is stored in so called G-buffer which is basically an image in which every pixel stores the above mentioned shading information.
2. The second pass applies the shading effects by applying the pixel/fragment [shader](shader.md) on each pixel of the G-buffer.
This is especially effective when we're using very expensive/complex pixel/fragment shaders AND we have many overlapping objects. **Sometimes deferred shading may be replaced by simply ordering the rendered models**, i.e. rendering front-to-back, which may achieve practically the same speed up. In simple cases deferred shading may not even be worth it -- in [LRS](lrs.md) programs we may use it only rarely.
Deferred shading also comes with complications, for example **rasterization [anti aliasing](anti_aliasing.md) can't be used** because, of course, anti-aliasing in G-buffer doesn't really make sense. This is usually solved by some [screen-space](screen_space.md) antialiasing technique such as [FXAA](fxaa.md), but of course that may be a bit inferior. **Transparency also poses an issue**.

@ -12,4 +12,4 @@ There also exists [triple buffering](triple_buffering.md) which uses yet another
Double buffering can be made more efficient by so called page flipping, i.e. allowing to switch the back and front buffer without having to physically copy the data, i.e. by simply changing the [pointer](pointer.md) of a display buffer. This has to be somehow supported by hardware.
**When do we actually need double buffering?** Not always, we can avoid it or suppress its memory requirements if we need to -- we may want to do this e.g. in [embedded](embedded.md) programming where we want to save every byte of RAM. The mainstream computers nowadays simply always run on a very fast FPS and keep redrawing the screen even if the image doesn't change, but if you write a program that only occasionally changes what's on the screen (e.g. an e-book reader), you may simply leave out double buffering and actually render to the front buffer once the screen needs to change, the user probably won't notice any flicker during a single quick frame redraw. You also don't need double buffering if you're able to compute the final pixel color right away, for example with [ray tracing](ray_tracing.md) you don't need any double buffering, unless of course you're doing some complex [postprocessing](postprocessing.md). Double buffering is only needed if we compute a pixel color but that color may still change before the frame is finished. You may also only use a partial double buffer if that is possible (which may not be always): you can e.g. split the screen into 16 regions and render region by region, using only a 1/16th size double buffer. Using a [palette](palette.md) can also make the back buffer smaller: if we use e.g. a 256 color palette, we only need 1 byte for every pixel of the back buffer instead of some 3 bytes for full [RGB](rgb.md). The same goes for using a smaller resolution that is the actual native resolution of the screen.
**When do we actually need double buffering?** Not always, we can avoid it or suppress its memory requirements if we need to, e.g. with so called **[frameless rendering](frameless.md)** -- we may want to do this e.g. in [embedded](embedded.md) programming where we want to save every byte of RAM. The mainstream computers nowadays simply always run on a very fast FPS and keep redrawing the screen even if the image doesn't change, but if you write a program that only occasionally changes what's on the screen (e.g. an e-book reader), you may simply leave out double buffering and actually render to the front buffer once the screen needs to change, the user probably won't notice any flicker during a single quick frame redraw. You also don't need double buffering if you're able to compute the final pixel color right away, for example with [ray tracing](ray_tracing.md) you don't need any double buffering, unless of course you're doing some complex [postprocessing](postprocessing.md). Double buffering is only needed if we compute a pixel color but that color may still change before the frame is finished. You may also only use a partial double buffer if that is possible (which may not be always): you can e.g. split the screen into 16 regions and render region by region, using only a 1/16th size double buffer. Using a [palette](palette.md) can also make the back buffer smaller: if we use e.g. a 256 color palette, we only need 1 byte for every pixel of the back buffer instead of some 3 bytes for full [RGB](rgb.md). The same goes for using a smaller resolution that is the actual native resolution of the screen.

@ -4,6 +4,6 @@ Drummyfish (also tastyfish, drumy etc.) is a [LRS](lrs.md) software programmer t
Aside from creating [LRS](lrs.md) drummyfish has contributed to a few [FOSS](foss.md) projects such as [OpenMW](openm.md). He's been contributing with [public domain](pd.md) art and writings to [Wikipedia](wikipedia.md), [Wikimedia Commons](wm_commons.md), [opengameart](oga.md), [libregamewiki](lgw.md) and others.
Doxx: his real name is Miloslav Číž, he was born in 1990 and lives in Moravia, Czech Republic. He studied [compsci](compsci.md) focused on [computer graphics](graphics.md) in a University and got a master's degree, but subsequently refused to work in the industry, partly because of his views (manifested in [LRS](lrs.md)) and partly because of mental health issues.
Doxx: his real name is Miloslav Číž, he was born in 1990 and lives in Moravia, Czech Republic. He studied [compsci](compsci.md) focused on [computer graphics](graphics.md) in a University and got master's degree, but subsequently refused to work in the industry, partly because of his views (manifested by [LRS](lrs.md)) and partly because of mental health issues. He continues to work on his programming (and other) projects in his spare time in order to be able to do it with absolute freedom.
{ Why do I doxx myself? Following the [LRS](lrs.md) philosophy, I believe information should be free. [Censorship](censorship.md) -- even in the name of [privacy](privacy.md) -- goes against information freedom. We should live in a society in which people are moral and don't abuse others by any means, including via availability of their private information. And the first step to achieve an ideal society is to start living as if we're already there. ~drummyfish }
{ Why doxx myself? Following the [LRS](lrs.md) philosophy, I believe information should be free. [Censorship](censorship.md) -- even in the name of [privacy](privacy.md) -- goes against information freedom. We should live in a society in which people are moral and don't abuse others by any means, including via availability of their private information. And in order to achieve ideal society we have to actually live it, i.e. slowly start to behave as if it was already in place. Of course, I can't tell you literally everything (such as my passwords etc.), but the more I can tell you, the closer we are to the ideal society. ~drummyfish }

@ -24,4 +24,6 @@ The following are a few notable fantasy consoles.
- [open console](open_console.md)
- [handheld](handheld.md)
- [virtual machine](vm.md)
- [IBNIZ](ibniz.md)
- [SAF](saf.md)

@ -0,0 +1,11 @@
# Frameless Rendering
Frameless rendering is a technique of [rendering](rendering.md) animation by continuously updating an image on the screen by updating single "randomly" selected pixels rather than by showing a quick sequence of discrete frames. This is an alternative to the mainstream [double buffered](double_buffering.md) frame-based rendering traditionally used nowadays.
Typically this is done with [image order](image_order.md) rendering methods, i.e. methods that can immediately and independently compute the final color of any pixel on the screen -- for example with [raytracing](raytracing.md).
The main advantage of frameless rendering is of course saving a huge amount of memory usually needed for double buffering, and usually also increased performance (fewer pixels are processed per second). The animation may also seem more smooth and responsive -- reaction to input is seen faster. Another advantage, and possibly a disadvantage as well, is a **[motion blur](motion_blur.md)** effect that arises as a side effect of updating by individual pixels spread over the screen: some pixels show the scene at a newer time than others, so the previous images kind of blend with the newer ones. This may add realism and also prevent temporal [aliasing](aliasing.md), but blur may sometimes be undesirable, and also the kind of blur we get is "pixelated" and noisy.
Selecting the pixels to update can be done in many ways, usually with some [pseudorandom](pseudorandom.md) selection, but regular patterns may also be used. There have been papers that implemented adaptive frameless rendering that detected where it is best to update pixels to achieve low noise.
Historically similar (though different) techniques were used on computers that didn't have enough memory for a double buffer or redrawing the whole screen each frame was too intensive on the CPU; programmers had to identify which pixels had to be redrawn and only update those. This resulted in techniques like *adaptive tile refresh* used in scrolling games such as [Commander Keen](commander_keen.md).

@ -6,7 +6,7 @@ He's kind of based but also retarded to a great degree at times, for example he
His videos consist of normie-friendly tutorials on suckless software, rants, independent living, live-streams and podcasts. The typical Luke Smith video is him walking somewhere in the middle of a jungle talking about how retarded modern technology is and how everyone should move to the woods.
Luke studies PhD in linguistics but is very critical of academia -- he "speaks" several languages (including [Latin](latin.md)), though many of them to a low level with bad American accent and he can't sometimes even speak English correctly (using phrases such as "the reason is because" etc.). He is a self described [right-winder](left_right.md) and talks in meme phrases which makes his "content" kind of enjoyable. He despises such things as [soydevry](soydev.md), [bloat](bloat.md), "consoomerism" and [soyence](soyence.md).
Luke studies PhD in linguistics but is very critical of academia -- he "speaks" several languages (including [Latin](latin.md)), though many of them to a low level with bad American accent and he can't sometimes even speak English correctly (using phrases such as "the reason is because", "less people" etc.). He is a self described [right-winder](left_right.md) and talks in meme phrases which makes his "content" kind of enjoyable. He despises such things as [soydevry](soydev.md), [bloat](bloat.md), "consoomerism" and [soyence](soyence.md).
## See Also

@ -4,7 +4,7 @@ Mathematics (also math or maths) is the best [science](science.md) (yes, it is a
Some see math not as a science but rather a discipline that develops formal tools for "true sciences". The reasoning is usually that a science has to use [scientific method](scientific_method.md), but that's a limited view as that's not the only way of obtaining reliable knowledge. Besides that math can and does use the principles of scientific method -- mathematicians first perform "experiments" with numbers and generalize into [conjectures](conjecture.md), however this is not considered [good enough](good_enough.md) in math as it actually has the superior tool of [proof](proof.md) that is considered the ultimate goal of math. In this sense mathematics is more than a science.
[Soydevs](soydev.md), coding monkeys (such as webdevs) and just retards in general hate math because they can't understand it. They think they can do programming without math, which is just ridiculous. This delusion stems mostly from these people being highly incompetent and without proper education -- all they've ever seen was a shallow if-then-else [python](python.md) "[coding](coding.md)" of baby programs or point-and-click "coding" in gigantic [GUI](gui.md) frameworks such as [Unity](unity.md) where everything is already preprogrammed for them. By DunningKruger they can't even see how incompetent they are and what real programming is about and they think everyone just if-then-elses everything. In reality, this is like thinking that merely being able to read and write makes you someone being capable of being a great writer or that being able to drive a car makes you able to design and construct cars. Such people will be able to get jobs and do some repetitive tasks such as web development or system administration, but they will never create anything innovative and all they will ever make will be ugly, [bloated](bloat.md) [spaghetti](spaghetti.md) solution that will likely do more harm than good.
[Soydevs](soydev.md), coding monkeys (such as webdevs) and just retards in general hate math because they can't understand it. They think they can do programming without math, which is just ridiculous. This delusion stems mostly from these people being highly incompetent and without proper education -- all they've ever seen was a shallow if-then-else [python](python.md) "[coding](coding.md)" of baby programs or point-and-click "coding" in gigantic [GUI](gui.md) frameworks such as [Unity](unity.md) where everything is already preprogrammed for them. By DunningKruger they can't even see how incompetent they are and what real programming is about. In reality, this is like thinking that being able to operate a calculator makes you a capable mathematician or being able to drive a car makes you a capable car engineer. Such people will be able to get jobs and do some repetitive tasks such as web development, [Unity](unity.md) game development or system administration, but they will never create anything innovative and all they will ever make will be ugly, [bloated](bloat.md) [spaghetti](spaghetti.md) solution that will likely do more harm than good.
On the other hand, one does not have to be a math [PhD](phd.md) in order to be a good programmer in most fields. Sure, knowledge and overview of advanced mathematics is needed to excel, to be able to spot and sense elegant solutions, but beyond these essentials that anyone can learn with a bit of will it's really more about just not being afraid of math, accepting and embracing the fact that it permeates what we do and studying it when the study of a new topic is needed.

@ -12,6 +12,7 @@ These are mainly for [C](c.md), but may be usable in other languages as well.
- **Keywords such as `inline`, `static` and `const` can help compiler optimize well**.
- **Optimize the [bottlenecks](bottleneck.md)!** Optimizing in the wrong place is a complete waste of time. If you're optimizing a part of code that's taking 1% of your program's run time, you will never speed up your program by more than that 1% even if you speed up the specific part by 10000%. Bottlenecks are usually inner-most loops of the main program loop, you can identify them with [profiling](profiling.md).
- **You can almost always trade space (memory usage) for time (CPU demand) and vice versa** and you can also fine-tune this. You typically gain speed by precomputation (look up tables, more demanding on memory) and memory with compression (more demanding on CPU).
- **Be smart, use [math](math.md)**. Example: let's say you want to compute the radius of a zero-centered [bounding sphere](bounding_sphere.md) of an *N*-point [point cloud](point_cloud.md). Naively you might be computing the Euclidean distance (*sqrt(x^2 + y^2 + z^2)*) to each point and taking a maximum of them, however you can just find the maximum of squared distances (*x^2 + y^2 + z^2*) and return a square root of that maximum. This saves you a computation of *N - 1* square roots.
- **Learn about [dynamic programming](dynamic_programming.md)**.
- **Avoid branches (ifs)** if you can (remember [ternary operators](ternary_operator.md), loop conditions etc. are branches as well). They break prediction in CPU pipelines and instruction preloading and are often source of great performance losses. Don't forget that you can many times compare and use the result of operations without using any branching (e.g. `x = (y == 5) + 1;` instead of `x = (y == 5) ? 2 : 1;`).
- **Use iteration instead of [recursion](recursion.md)** if possible (calling a function costs something).

@ -2,7 +2,7 @@
{ Remember that racism, i.e. hatred and oppression of a race as a whole is wrong, as is any other kind of hatred and oppression against living beings. Telling the truth without censorship, using politically incorrect terms and acknowledging differences between people is however not racism in itself, despite what modern propaganda tells you. Keep this in mind when reading this article. ~drummyfish }
Races of people are very large, loosely defined groups of genetically similar people. Races differ by their look and in physical, mental and cultural aspects. This topic is nowadays forbidden to be discussed and researched in "[science](soyence.md)", however there exists a number of older research and some things are just obvious.
Races of people are very large, loosely defined groups of genetically similar (related) people. Races significantly differ by their look and in physical, mental and cultural aspects. This topic is nowadays forbidden to be discussed and researched in "[science](soyence.md)", however there exists a number of older research and some things are just obvious. Theories such as polygenism -- the idea that different races evolved from different pre-humans, i.e. Asians from asian monkeys, Africans from african monkeys etc. -- are forbidden to be supported and they're ridiculed and demonized by mainstream information sources like [Wikipedia](wikipedia.md) who only promote the politically correct "out of Africa" theory. [SJWs](sjw.md) reject any idea of a race with the same religious fanaticism with which Christian fanatics opposed Darwin's evolution theory.
Most generally races are called by the color of their skin, i.e. White (Caucasian), Black (African), Yellow (Asian) and Brown (Indian). But the lines can be drawn in many ways, some go as far as calling different nations separate races (e.g. the Norwegian race, Russian race etc.).
@ -10,7 +10,11 @@ There is a controversial 1994 book called *The Bell Curve* that deals with diffe
In relation to [technology](tech.md)/[math](math.md)/[science](science.md) it is useful to know the differences in intellect between different races, though cultural and other traits linked to races may also play a big role. It is important to keep in mind intelligence isn't one dimensional, it's one of the most complex and complicated concepts we can be dealing with (remember the famous Chimp test that revealed that chimpanzees greatly outperform humans at certain intellectual tasks). We can't simplify to a single measure such as [IQ](iq.md). Let intelligence here mean simply the ability to perform well in the area of our art. And of course, there are smart and stupid people in any race, the general statements we make are just about statistics and probabilities.
The smartest races in this regard seem to be [Jews](jew.md) and [Asians](asian.md), closely followed by the general white race. There is no question about the intelligence of Jews, the greatest thinkers of all times were Jewish ([Richard Stallman](rms.md), [Einstein](einstein.md), [Marx](marx.md), [Chomsky](chomsky.md), even [Jesus](jesus.md) and others). Jews seem to have a very creative intelligence while Asians are more mechanically inclined, they can learn a skill and bring it to perfection with an extremely deep study and dedication. The African black race (in older literature known as the *negro*) is decisively the least intelligent -- this makes a lot of sense, the race has been oppressed for centuries and didn't get much chance to evolve towards good performance in intellectual tasks, quite the opposite, those who were physically fit rather than smart were probably more likely to survive and reproduce as slaves. 1892 book *Hereditary Genius* says that the black race is *about two grades* below the white race (nowadays the gap will most likely be lower). There isn't so much info about other races such as the red race or Eskimos, but they're probably similarly intelligent to the black race (The above mentioned book *Hereditary Genius* gives an intelligence of the Australian race *at least one grade below that of the negro*). The brown races are kind of complicated, the Indian people showed a great intellectual potential, e.g. in [chess](chess.md), [math](math.md), philosophy (nonviolence inherently connected to India is the most intellectually advanced philosophy), and lately also [computer science](compsci.md) (even though many would argue that "[pajeets](pajeet.md)" are just trained coding monkeys).
The smartest races in this regard seem to be [Jews](jew.md) and [Asians](asian.md), closely followed by the general white race. There is no question about the intelligence of Jews, the greatest thinkers of all times were Jewish ([Richard Stallman](rms.md), [Einstein](einstein.md), [Marx](marx.md), [Chomsky](chomsky.md), even [Jesus](jesus.md) and others). Jews seem to have a very creative intelligence while Asians are more mechanically inclined, they can learn a skill and bring it to perfection with an extremely deep study and dedication. The African black race (in older literature known as the *negro*) is decisively the least intelligent -- this makes a lot of sense, the race has been oppressed and living in harsh conditions for centuries and didn't get much chance to evolve towards good performance in intellectual tasks, quite the opposite, those who were physically fit rather than smart were probably more likely to survive and reproduce as slaves or jungle people. 1892 book *Hereditary Genius* says that the black race is *about two grades* below the white race (nowadays the gap will most likely be lower). There isn't so much info about other races such as the red race or Eskimos, but they're probably similarly intelligent to the black race (The above mentioned book *Hereditary Genius* gives an intelligence of the Australian race *at least one grade below that of the negro*). The brown races are kind of complicated, the Indian people showed a great intellectual potential, e.g. in [chess](chess.md), [math](math.md), philosophy (nonviolence inherently connected to India is the most intellectually advanced philosophy), and lately also [computer science](compsci.md) (even though many would argue that "[pajeets](pajeet.md)" are just trained coding monkeys).
Increasing multiculturalism and mixing of the races will likely make all of this less and less relevant.
## See Also
- [stereotype](stereotype.md)

@ -0,0 +1,3 @@
# Social Inertia
Social inertia appears when a social group continues to behave in an established way mainly because it has behaved that way for a long time, even if such behavior is no longer justified.

@ -0,0 +1,9 @@
# 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) and creating [IBNIZ](ibniz.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.
His work is pretty based, in many ways aligned with [LRS](lrs.md), he contributed a great deal to minimalist technology. Unfortunately in some ways he also seems pretty retarded: he uses [facebook](facebook.md), [twitter](twitter.md) and [github](github.md) and also mentions "personal pronouns" on his twitter xD Pretty disappointing TBH.
His personal site is at http://viznut.fi/en/ and his blog at http://countercomplex.blogspot.com/. He collects many files at http://viznut.fi/files/, including very interesting writings about demoscene, programming experiments etc.
In 2011 he released [IBNIZ](ibniz.md), a tiny [SDL](sdl.md) [virtual machine](vm.md) and a language that's meant as a platform for creating [demos](demoscene.md). Also in 2011 he was involved in the discovery of [bytebeat](bytebeat.md), a way of creating music with extremely simple [C](c.md) expressions -- later he published a paper about it. In 2012 he founded [Skrolli](skrolli.md), a magazine about sustainable/non-consumerist technology. In about 2019 he released PC-lamerit, an animated series about 90s computer hackers, made as an executable computer program -- it looks pretty cool. He also created UNSCII, a fixed-width font usable for [ANSI art](ansi_art.md).

@ -36,6 +36,8 @@ These are some sources you can use for research and gathering information for ar
- **[wikiwikiweb](wikiwikiweb.md)**
- **[Wiby](wiby.md)**: this will find nice sites of tech nerds that Google won't show among first results
- **[Project Gutenberg](gutenberg.md)**: mostly older books but there are already some computer related books like [RMS's](rms.md) biography or [Jargon File](jargon_file.md)
- **University theses**: many university theses are publicly accessible and usually nicely sum up topics, bachelor level theses may be better understandable than PhD/master theses.
- **Slides**: slides from various presentations are actually great resources as they condense the topic into its main points, they filter out the piles of noise.
- **Wikisource** and **Wikibooks**
- **[Metapedia](metapedia.md)**
- **[books](book.md)**: Books are still of higher quality than online sources so you can [pirate](piracy.md) some and steal some facts from them.

Loading…
Cancel
Save