From 5414a07fa2b1201b46241a4c8a4f6f1254ea7787 Mon Sep 17 00:00:00 2001 From: Miloslav Ciz Date: Mon, 30 Oct 2023 15:32:03 +0100 Subject: [PATCH] Update --- drummyfish.md | 2 +- faq.md | 4 ++++ game.md | 4 +++- how_to.md | 2 +- line.md | 57 ++++++++++++++++++++++++++++++++++++++++++++++++--- minimalism.md | 2 +- wiki_style.md | 14 +++++++------ 7 files changed, 72 insertions(+), 13 deletions(-) diff --git a/drummyfish.md b/drummyfish.md index 4045c20..d827522 100644 --- a/drummyfish.md +++ b/drummyfish.md @@ -4,7 +4,7 @@ Drummyfish (also known as *tastyfish*, *drummy*, *drumy*, *smellyfish* and *i fo **Drummyfish is the most physically disgusting bastard on [Earth](earth.md)**, no woman ever loved him, he is so ugly people get suicidal thoughts from seeing any part of him. -He loves all living beings, even those whose attributes he hates or who hate him. He is a [vegetarian](vegetarianism.md) and here and there supports good causes, for example he donates hair and gives money to homeless people who ask for them. +He loves all living beings, even those whose attributes he hates or who hate him. He is a [vegetarian](vegetarianism.md) and here and there supports good causes, for example he donates hair and gives money to homeless people who ask for them. He also tried to donate blood but couldn't because he's taking antidepressants. Drummyfish has a personal website at [www.tastyfish.cz](https://www.tastyfish.cz), and a gopherhole at [self.tastyfish.cz](gopher://self.tastyfish.cz). diff --git a/faq.md b/faq.md index 5962df8..f95315e 100644 --- a/faq.md +++ b/faq.md @@ -86,6 +86,10 @@ Note that the fact that we love someone (e.g. Hitler) does NOT mean we embrace h What we do NOT engage in is political correctness, censorship, offended culture, identity politics and pseudoleftism. We do NOT support fascist groups such as feminists and LGBT and we will NOT practice bullying and [codes of conducts](coc.md). We do not pretend there aren't any differences between people and we will make jokes that make you feel offended. +### OK then why are there swastikas on your main page? + +Swastika is an old religious symbol used e.g. in [Buddhism](buddhism.md), it is a sign of good fortune and protection from evil. Nazis later used swastika but it doesn't give them monopoly over it, and also they used the other version, with arms going clockwise (AND usually also turned additional 45 degrees), so you can only confuse it with Nazi swastika if you are retarded. + ### Why do you use the [nigger](nigger.md) word so much? To counter its censorship, we mustn't be afraid of words. The more they censor something, the more I am going to uncensor it. They have to learn that the only way to make me not say that word so often is to stop censoring it, so to their action of censorship I produce a reaction they dislike. That's basically how you train a dog. (Please don't ask who "they" are, it's pretty obvious). diff --git a/game.md b/game.md index 760d07c..36bde79 100644 --- a/game.md +++ b/game.md @@ -60,8 +60,9 @@ Furthermore many different ways of division and classifications are widely used - by platform - [real life](irl.md) - [computer](computer.md) ([console](console.md) vs [PC](pc.md), ...) + - [pen and paper](pen_and_paper.md) - by budget/scale/financing: - - amateur + - hobbyist/amateur - [indie](indie.md) - [AAA](aaa.md) - by [business model](business_model.md): @@ -74,6 +75,7 @@ Furthermore many different ways of division and classifications are widely used - [pay what you want](pay_what_you_want.md)/donation - [adware](adware.md) - [spyware](spyware.md) + - [rapeware](rapeware.md) - ... - ... diff --git a/how_to.md b/how_to.md index 8d49473..c021cac 100644 --- a/how_to.md +++ b/how_to.md @@ -12,7 +12,7 @@ Firstly let us welcome you, no matter who you are, no matter your political opin OK, let's say this is a set of general advice, life heuristics, pointers and basics of our philosophy, something to get you started, give you a point of view aligned with what we do, help you make a decision here and there, help you free yourself. Remember that by definition **nothing we ever advice is a commandment** or a rule you mustn't ever break, that would be wrong in itself. Some things also may be yet a "thought in progress" and change. -## Moderacy (middle way) Vs Extremism +## Moderacy (Middle Way) Vs Extremism An important issue of many ideologies/philosophies/religions/etc. has shown to be striking the right balance between moderacy and extremism. Let's sum up the two stances: diff --git a/line.md b/line.md index 8094cd3..40f3a8f 100644 --- a/line.md +++ b/line.md @@ -63,7 +63,7 @@ TODO: 3D lines ## Line Drawing Algorithms -Drawing lines with computers is a subject of [computer graphics](graphics.md). On specific devices such as [vector monitors](vector_monitor.md) this may be a trivial task, however as most display devices nowadays work with [raster graphics](raster_graphics.md), let's from now on focus only on such devices. +Drawing lines with computers is a subject of [computer graphics](graphics.md). On specific devices such as [vector monitors](vector_monitor.md) this may be a trivial task, however as most display devices nowadays work with [raster graphics](raster_graphics.md) ([pixel](pixel.md)s!), let's from now on focus only on such devices. It is worth spending some time on [optimizing](optimization.md) your line drawing function as it constitutes a very basic operation -- consider that you will for example be using it for [wireframe](wireframe.md) rendering of a large 3D scene which will require drawing tens of thousands lines each frame -- having a fast line drawing function here can significantly improve your [FPS](fps.md). There are many [algorithms](algorithm.md) for line [rasterization](rasterization.md). They differ in attributes such as: @@ -88,6 +88,57 @@ XX XX a. accuracy accuracy + anti-aliasing ``` -One of the most basic line rasterization algorithms is the [DDA](dda.md) (Digital differential analyzer), however it is usually better to use at least the [Bresenham's line algorithm](bresenham.md) which is still simple and considerably improves on DDA. +One of the most basic line rasterization algorithms is the [DDA](dda.md) (Digital differential analyzer), however it is usually better to use at least the [Bresenham's line algorithm](bresenham.md) which is still simple and considerably improves on DDA by not requiring multiplication or division (slow operations) and by only using integers (no [floating point](float.md)). -TODO: more algorithms, code example, general form (dealing with different direction etc.) \ No newline at end of file +If you just super quickly need to draw something resembling lines for debugging purposes or anything, you may just draw a few points between the two endpoints (idea: make a recursive function that takes point *A* and *B*, average them to get a middle point *M*, draws all three points and then recursively call itself on *A* and *M* and then on *M* and *B*, until the points are close enough -- with integers only the line will probably be warped as we get accumulating rounding errors in the middle point). You may just do something super dirty like [interpolate](interpolation.md) 1000 points between the endpoints with using floating point and draw them all. Just don't use this in anything serious I guess :) + +Let's now take a more serious closer look at line drawing and how the above mentioned algorithms work: consider we want to draw a line between pixels *A = [ax,ay]* and *B = [bx,by]*. Let's also define *dx = bx - ax* and *dy = by - ay*. + +The [naive](naive.md) approach that comes to newcomer's mind is usually this: iterate *x* from *ax* to *bx* and at each step draw the pixel *[x, ay + dy * (x - ax) / dx]*. This has many problems: obviously we are using many slow operations here such as multiplication and division, but most importantly we will in many cases end up with holes in the line we draw. Consider e.g. a line from *[0,0]* to *[2,10]* -- we will only draw 3 pixels (for *x = 0, 1 and 2*), but the whole line is actually 10 pixels high in vertical direction, so we at the very least need those 10 pixels. What's more, consider *dx = 0*, our algorithm will crash on division by zero. This just falls apart very quickly. + +The most common way to deal with this shit is to always convert the line to some simple subcase (by somehow juggling, swapping and flipping the coordinates), usually a line going from left to right under a degree between -45 and 45 degrees (i.e. *abs(dx) >= abs(dy)*). With such a line we now may do what we couldn't before, i.e. just iterate *x* by 1 and at each step compute the corresponding *y*. Once we have these coordinates we somehow convert them back to the space of the original line and draw them. + +Furthermore algorithms improve this on the basis of observation that really while stepping along the *x* line we don't have to compute *y* from scratch, we are just deciding whether *y* stays the same as in previous step or whether it moves by 1 pixel, so drawing a line now boils down to making one yes/no decision at each step. It turns out this decision can be made using only simple integer operations. + +Bresenham's algorithm is based on the following idea: our line has a certain slope *s = dy / dx*; this slope for the common case (described above) will be between -1 and 1. At each step we move 1 pixel horizontally (*x*) and *s* (some fractional part) pixels vertically. We keep accumulating this vertical shift (often called an *error*) and once it jumps over 1, we jump in the vertical (*y*) direction and so on. E.g. if our line is 10 pixels wide (*dx*) and 3 pixels tall (*dy*), our slope is *s = 3/10*; now we start drawing pixels and our error is *3/10*, then *6/10*, the *9/10* and then *12/10*, jumping over 1, which tells us we have to shift vertically (after this we subtract 1 from the current error so we will continue with *2/10*). Now to get rid of fractions (floats) we may simply multiply everything by *dx*; in our case by 10, so we keep adding error *3/10 * 10 = 3* and instead of comparing the error to 1, we compare it to *1 * 10 = 10*. + +All in all, here is a comfy line drawing function based on the above described principle, i.e. needing no floating point, multiplication or division: + +``` +void drawLine(int ax, int ay, int bx, int by) +{ + int *x = &ax, *y = &ay, + stepX = -1 + 2 * (ax <= bx), + stepY = -1 + 2 * (ay <= by); + + int dx = stepX == 1 ? (bx - ax) : (ax - bx); + int dy = stepY == 1 ? (by - ay) : (ay - by); + + if (dy > dx) + { // swap everything + y = &ax; x = &ay; + stepX ^= stepY; stepY ^= stepX; stepX ^= stepY; + dx ^= dy; dy ^= dx; dx ^= dy; + } + + int steps = dx + 1; + bx = dx / 2; // use bx as error accumulator + + while (steps) + { + drawPixel(ax,ay); + + *x += stepX; + + bx += dy; + + if (bx >= dx) + { + bx -= dx; + *y += stepY; + } + + steps--; + } +} +``` \ No newline at end of file diff --git a/minimalism.md b/minimalism.md index 794c871..7f1b55a 100644 --- a/minimalism.md +++ b/minimalism.md @@ -2,7 +2,7 @@ *No gain, no pain.* -Technological minimalism is a philosophy of designing [technology](technology.md) to be as simple as possible while still achieving given goal, possibly even a little bit simpler. Minimalism is one of the most (if not the most) important concepts in [programming](programming.md) and technology in general. Remember, minimalist is firstly about **internal simplicity**, i.e. the simplicity of design/repairing/[hacking](hacking.md), and only secondly about the simplicity from the user's point of view (otherwise we are only dealing with [pseudominimalism](pseudominimalism.md)). +Technological minimalism is a philosophy of designing [technology](technology.md) to be as simple as possible while still achieving given goal, possibly even a little bit simpler. Minimalism is one of the most (if not the most) important concepts in [programming](programming.md) and technology in general. Remember, minimalism is firstly about **internal simplicity**, i.e. the simplicity of design/repairing/[hacking](hacking.md), and only secondly about the simplicity from the user's point of view (otherwise we are only dealing with [pseudominimalism](pseudominimalism.md)). Antoine de Saint-Exupéry sums it up with a quote: *we achieve perfection not when there is nothing more to add, but when there is nothing left to take away.* diff --git a/wiki_style.md b/wiki_style.md index 774b051..499b028 100644 --- a/wiki_style.md +++ b/wiki_style.md @@ -15,13 +15,15 @@ If you contribute, add yourself to [wiki authors](wiki_authors.md)! You can also - **Don't line-break paragraphs** (a pragraph is on a single line). The reasoning is that a text manually formatted to specific width is hard to edit. It's easier to switch to auto-line breaking in your editor. - **Avoid [unicode](unicode.md), highly prefer [ASCII](ascii.md)**, for the sake of maximum compatibility and simplicity. Use of unicode has to be greatly justified. - **Each page shall start with a heading** (which may or may not correspond to article file name). -- I've finally decided that with certain exceptions headings should be written like this: **Each Word Of A Heading Is Capitalized**. This is for simplicity. +- I've finally decided that with certain exceptions headings should be written like this: **Each Word Of A Heading Is Capitalized**. This is for simplicity, we don't deal with weird ass rules of when or when not to capitalize. - **Filenames of articles shall use a lowercase snake_case**. -- **Article/file names are to be preferably singular nouns**. I.e. "animal" rather than "animals", "portability" rather than "portable" etc. But there may be exception, e.g. articles that are lists may use plural ("human" is about human as species, "people" is a list of existing humans), non-nous MAY be used if nouns would be too long/awkward (e.g. "weird" instead of "weirdness"). Use your brain. -- **This isn't [Wikipedia](wikipedia.md)**, memes, opinions and uncensored truths are allowed (and welcome). +- **Article/file names are to be preferably singular nouns**. I.e. "animal" rather than "animals", "portability" rather than "portable" etc. But there may be exceptions, e.g. articles that are lists may use plural ("human" is about human as species, "people" is a list of existing humans), non-nous MAY be used if nouns would be too long/awkward (e.g. "weird" instead of "weirdness"). Use your brain. +- **This isn't [Wikipedia](wikipedia.md)**, memes, opinions and uncensored truths are allowed (and welcome). **References/citations are not needed**, we aren't a religion that relies on someone else's reputation to validate truth, we just spread information and leave it to others to either trust, test its usefulness and/or verify. Furthermore we don't limit ourselves to truths that can be or have been "proven" by whatever is currently called "approved science^TM", many valuable truths are just proven by experience etc. LRS advocates society in which deception doesn't happen and in which therefore there is no need for citations serving as a proof -- we practice this here. However references are still allowed and many times useful, e.g. as a further reading. - The style of this wiki is inspired by the classic hacker culture works such as the [WikiWikiWeb](wikiwikiweb.md) and [Jargon File](jargon_file.md). - **Writing style should be relaxed and in many parts informal**. Formality is used where it is useful (e.g. definitions), most of other text can benefit from being written as a tech conversation among friends. - **Depth/complexity/level of articles**: Articles shouldn't try to go to unnecessary depth, but also shouldn't be shallow. This is written mainly for programmers of [less retarded society](less_retarded_society.md), the complexity should follow from that. Again, start simple and go more into depth later on in the article, very complex things should rather be explained intuitively, no need for complex proofs etc. +- **Scope**: don't write about literally everything, include only what's relevant from LRS point of view and only to relevant degree -- for example we could write many articles about OOP design patterns, however as that's a complete capitalist bullshit, this would just be noise from our point of view, it would drown useful content and also waste our effort, so we rather limit ourselves to some kind of tl;dr or OOP design patterns. +- **[Future proof](future_proof.md) articles, minimize need for [maintenance](maintenance.md), focus on long term**: unlike Wikipedia we can't (and don't want to) be a dynamic resource that's only ever valid for one day, we want stable articles that will stay relevant forever. Don't go too much into temporary irrelevant shit such as which distro is currently the most bestest or how many forks dwm currently has. I.e. for example lists of software are not very good articles as that's something that will change constantly. List of historical events may be better as those are more or less given and only once in a decade we need to add few new relevant events, possibly also update the view on older ones. An article on mathematical concept on the other hand is quite good as equations are something that just stands valid forever. - **The wiki is kind of a dirty idea dump**, it may contain TODOs, WIPs, errors, ugliness etc., it is not a [finished](finished.md) beautiful and tidy encyclopedia. Remember this wiki is kind of a temporary (though long term) project that's meant to host, communicate and spread ideas that should direct us towards better society, it is a vehicle that should get us somewhere else and will potentially be replaced by something else once we are there. Therefore aims for perfection and beauty shouldn't stand in way of just communicating ideas (i.e. do not delete content for its ugliness if that content is still potentially useful). - **Political incorrectness, slurs and "offensive speech" are highly encouraged**. Avoid the use of the word "person" (use "man", "guy", "human", "one" etc., possibly "individual" at worst). Of course this is not to "offend" anyone, this helps people unlearn being offended. - **Images**: for now don't embed images. [ASCII art](ascii_art.md) can be used in many places instead of an image. Thousand words are worth a picture. Non-embedding links to images may be okay. @@ -33,9 +35,10 @@ Articles should be written to be somewhat readable and understandable to tech sa These are some sources you can use for research and gathering information for articles: +- **paper [encyclopedias](encyclopedia.md)!** Consult these often, they are much better than any online resource, contain obscure, forgotten info and alternative points of view. - **[Wikipedia](wikipedia.md)**: of course, but don't limit your search to it. Searching other language Wikipedias with machine translate can also help find extra info. - **[Citizendium](citizendium.md)**: can offer a different angle of view from Wikipedia. -- **non-SJW forks of Wikipedia**: to get past SWJ censorship/propaganda on Wikipedia try e.g. [infogalactic](infogalactic.md) or [metapedia](metapedia.md). +- **non-SJW forks of Wikipedia**: to get past SWJ censorship/propaganda on Wikipedia try e.g. **[infogalactic](infogalactic.md)** or **[metapedia](metapedia.md)**. - **Britannica online**: proprietary, but articles are nicely written, facts are in the public domain so we can steal them. - **Archives: [Internet Archive](internet_archive.md), [Archive Team Wiki](https://wiki.archiveteam.org/), [archive.li](https://archive.li/), ...**: Most information once available on the Internet is most likely no longer accessible nowadays (taken down, privatized, censored, no longer indexed, ...). Look in the archives! - **[wikiwikiweb](wikiwikiweb.md)** @@ -43,8 +46,7 @@ These are some sources you can use for research and gathering information for ar - **[Project Gutenberg](gutenberg.md)**: mostly older books but there are already some computer related books like [RMS's](rms.md) biography or [Jargon File](jargon_file.md) - **University theses** (and scientific paper of course): many university theses are publicly accessible and usually nicely sum up topics, bachelor level theses may be better understandable than PhD/master theses. - **Slides**: slides from various presentations are actually great resources as they condense the topic into its main points, they filter out the piles of noise. -- **Wikisource** and **Wikibooks** -- **[Metapedia](metapedia.md)**, **[Infogalactic](infogalactic.md)** etc. +- **Wikisource** and **Wikibooks**](infogalactic.md)** etc. - **[books](book.md)**: Books are still of higher quality than online sources so you can [pirate](piracy.md) some and steal some facts from them. Check out libgen, torrents etc. - **[installgentoowiki](https://wiki.installgentoo.com)** - **[YouTube](youtube.md)**: Yes, sadly this is nowadays one of the biggest sources of information which is unfortunately hidden in videos full of ads and retarded zoomers, the information is unindexed. If you are brave enough, you can dig this information out and write it here as a proper text.