master
Miloslav Ciz 4 weeks ago
parent 72438b36bb
commit 65c0266705

@ -1,17 +1,20 @@
# Comment
Comment is part of computer code that doesn't affect how the code is interpreted by the computer and is intended to hold information for humans that read the code (even though comments can sometimes contain additional information for computers such as metadata and autodocumentation information). There are comments in basically all [programming languages](programming_language.md), they usually start with `//`, `#`, `/*` and similar symbols, sometimes parts of code that don't fit the language syntax are ignored and as such can be used for comments.
Comment is a part of computer code that doesn't affect how the code is interpreted by the [computer](computer.md) and is intended to hold information for humans that read the code (even though comments can sometimes contain additional information for computers such as metadata and autodocumentation information). There are comments in basically all [programming languages](programming_language.md), they usually start with `//`, `#`, `/*` and similar symbols, sometimes parts of code that don't fit the language syntax are ignored and as such can be used for comments (e.g. in [Brainfuck](brainfuck.md) anything that's not a command character is ignored).
Even though you should write nice, [self documenting](self_documentation.md) code, **you should comment you source code** as well. General tips on commenting:
While yes, you should write nice, [self documenting](self_documentation.md) code, **you should comment you source code** as well. General tips on commenting:
- ALWAYS put a **global file comment** at the top of a file to make it [self-contained](self_contained.md). It should include:
- **Description of what the file actually does.** This is extremely important for [readability](readability.md), documentation and quick orientation. If a new programmer comes looking for a specific part of the code, he may waste hours on searching the wrong files just because the idiotic author couldn't be bothered to include fucking three sentences at the start of the file. [Modern](modern.md) program just don't fucking do this anymore, this is just [shit](shit.md).
- [License](license.md)/[waiver](waiver.md), either full text or link. Even if your repo contains a global license (which it should), it's good for the file to carry the license because the file may just be copy pasted on its own into some other project and then it will appear as having no license.
- **Name/nick of the author(s)** and roughly the date of creation (year is enough). This firstly helps legally assess [copyright](copyright.md) (who and for how long holds the copyright) and secondly helps others contact the author in case of encountering something weird in the code.
- Comment specific blocks of code with **keywords** -- this will help searching the code with tools like [grep](grep.md). E.g. in game's code add comment `// player: shoot, fire` to the part of code that handles player's shooting so that someone searching for any one of these two words will be directed here.
- Be brief, don't write poetry, too much text and pompous style will make it less readable.
- Functions (maybe with some exceptions like trivial one-liners) should come with a comment documenting:
- **Behavior** of the function, what it does and also how it does that (Is the function slow? Is it safe? Does it perform checks of arguments? Does it have [side effects](side_effect.md)? How are errors handled? ...).
- **Meaning of all arguments** and if needed their possible values.
- **Return value meaning**.
- You may decide to use comment format of some [autodoc](autodoc.md) system such as [doxygen](doxygen.md) -- it costs nothing and helps firstly unify the style of your comments and secondly, obviously, generate automatic documentation of your code, as well as possibly automatically process it in other ways.
- TODO: moar
- TODO: moar
Way too many comments are sometimes considered bad, there shouldn't be more comments than code, unless maybe in some super complex [assembly](assembly.md) program :) There also seem to be controversial opinions around about comments being essentially [harmful](harmful.md) at least to a degree, for example [Jonathan Blow](jonathan_blow.md) said that "comments are code that never runs and code that never runs has bugs" { I think that's a bit misleading -- comments are never run by a computer but they are run by the brain, a kind of neural network that is tolerant to many bugs, so a comment that's been read by a few people who didn't find anything wrong about it is kind of tested. Besides that by definition the purpose of a comment is not to define algorithms, comments aren't code or at least shouldn't take such role, they're there for other purposes, e.g. declaring intent, putting a reference to something and so on. ~drummyfish }.

@ -1,6 +1,6 @@
# Czechia
Czechia, or Czech Republic, is a small country in the middle of [Europe](europe.md), it's one of the worst countries in the world. It split from Czechoslovakia in 1993, its capital is Prague, it has about 78 square kilometers and population of 11 millions. In the past the country wasn't so bad, there was a good tradition of [socialism](socialism.md) so people had complete social security, education was completely free, everyone could afford food, there were very few ads in the media and generally people were quite happy, everyone would get healthcare and retirement pension; there was also quite diverse culture of different villages with their own language dialects and traditions, there was zero crime, no one ever heard of guns or violence there, there was no fear, and art was also somewhat nice, especially music, movies and movie dubbing. All of this disappeared swiftly once the country adopted [capitalism](capitalism.md) and [US](usa.md) culture after the so called *Velvet revolution* at the beginning of 1990s. Recently people were again made to vote -- the choices were to either make everything more shitty or to make things better. They voted to make everything shittier, so inflation is now skyrocketing, people are freezing in winter, TV is unwatchable, food is luxury, let alone things like houses, nothing works, everyone is enslaved, retirement age was postponed to something like 100 years of age plus you must have worked for about 80 years or something (this gets increased every year), ads torture you everywhere, there is no art anymore, health insurance payment is mandatory but you still have to pay for healthcare, but you won't find a doctor anyway, there are no doctors anymore (everyone went to do [marketing](marketing.md)). The country is only famous for its tradition of drinking a lot of beer. Czech people are mostly described by foreigners as cold, unfriendly, rude and ugly. One of the most famous politicians is a Czech Neonazi who's actually Japanese. Czechia has no historical, political or cultural significance.
Czechia, or Czech Republic, is a small country in the middle of [Europe](europe.md), it's one of the worst countries in the world. It split from Czechoslovakia in 1993, its capital is Prague, it has about 78 square kilometers and population of 11 million. In the past the country wasn't so bad, there was a good tradition of [socialism](socialism.md) so people had complete social security, education was completely free, everyone could afford food, there were very few ads in the media and generally people were quite happy, everyone would get healthcare and retirement pension; there was also quite diverse culture of different villages with their own language dialects and traditions, there was zero crime, no one ever heard of guns or violence there, there was no fear, and art was also somewhat nice, especially music, movies and movie dubbing. All of this disappeared swiftly once the country adopted [capitalism](capitalism.md) and [US](usa.md) culture after the so called *Velvet revolution* at the beginning of 1990s. Recently people were again made to vote -- the choices were to either make everything more shitty or to make things better. They voted to make everything shittier, so inflation is now skyrocketing, people are freezing in winter, TV is unwatchable, food is luxury, let alone things like houses, nothing works, everyone is enslaved, retirement age was postponed to something like 100 years of age plus you must have worked for about 80 years or something (this gets increased every year), ads torture you everywhere, there is no art anymore, health insurance payment is mandatory but you still have to pay for healthcare, but you won't find a doctor anyway, there are no doctors anymore (everyone went to do [marketing](marketing.md)). The country is only famous for its tradition of drinking a lot of beer. Czech people are mostly described by foreigners as cold, unfriendly, rude and ugly. One of the most famous politicians is a Czech Neonazi who's actually Japanese. Czechia has no historical, political or cultural significance.
Except for [drummyfish](drummyfish.md) only fascists live in the country, essentially everyone is a nationalist.
@ -8,7 +8,7 @@ Except for [drummyfish](drummyfish.md) only fascists live in the country, essent
Czech [language](human_language.md) is unironically **the worst language** that there ever was or ever will be. Firstly it sounds horrible, secondly it's the hardest language on Earth, it has seven cases and declinations and things that make every word have like 20 distinct forms (e.g. "to teach": ucit, ucil, ucila, ucilo, ucili jsme, ucili jste, ucili, ucim, ucis, uci, ucime, ucite, budu ucit, budes ucit, ucil bych, ucila bys, ucili bychom, ... ; "dog": pes, psa, psu, psovi, psi, pse, psy, psum, psech, pejsek, pejsku, pejskovi, pejsky, ... ; "cat": kocka, kocce, kocku, kockou, kocky, kockam, kocicka, kocicce, kocicku, kocickami, ...), NOT EVEN such essential things as forming plural or calling someone are simple at all (e.g. word/plural/vocative: pes/psi/pse, kocka/kocky/kocko, dum/domy/dome, stroj/stroje/stroji, ... do you see any pattern? probably not) PLUS, according to Guinness World Record Book, it also contains the most difficult sound to pronounce (that *r* with arrow above it, great many natives actually can't say it, it's called *rackovani*), there are so many irregularities that children spend whole years at school just hardcore memorizing when to write *y* versus *i* (which are pronounced completely the same, you just have to know which one to write because why not), also for example commas and capitalization of words have strict, extremely difficult rules that again have to be memorized. AND all this effort is for nothing, it doesn't make a slightest sense to learn the language because no one excepts a few idiots in middle of Europe speak it (and not even they speak it well), you will literally hear it nowhere else. So that's another thing.
Czechia had the worst presidents of every country, even in comparison with African shitholes and so on. Havel, the only president who came before capitalism, was alright, after him only absolute retards came, every one was much worse than all the rest combined (that's mathematically impossible but they still managed to do it). For example Zeman was the worst retard in the whole country so he got elected, he looked like Vogon from Hitchhiker's Guide to Galaxy except worse, was constantly drunk, rude, had to be carried around like a little baby by his bodyguards because he couldn't walk straight, he almost threw up on national crown jewels and his most famous moment was when he tried to demonstrate his knowledge of [English](english.md) by explaining to some reporter the meaning of the word "pussy" while getting the pronunciation completely wrong. Klaus was a 10 [IQ](iq.md) capitalist thief who, despite making millions as a president, was stealing pencils while being filmed on camera. You can't make this shit up. The current president is a narcissist professional murderer and war promoter.
The whole Czech [politics](politics.md) is a gigantically ridiculous joke not even worth discussing too much, but for example it's true that Czechia had the worst presidents of every country, even in comparison with African shitholes and so on. Havel, the only president who came before capitalism, was alright, after him only absolute retards came, every one was much worse than all the rest combined (that's mathematically impossible but they still managed to do it). For example Zeman was the worst retard in the whole country so he got elected, he looked like Vogon from Hitchhiker's Guide to Galaxy except worse, was constantly drunk, rude, had to be carried around like a little baby by his bodyguards because he couldn't walk straight, he almost threw up on national crown jewels and his most famous moment was when he tried to demonstrate his knowledge of [English](english.md) by explaining to some reporter the meaning of the word "pussy" while getting the pronunciation completely wrong. Klaus was a 10 [IQ](iq.md) capitalist thief who, despite making millions as a president, was stealing pencils while being filmed on camera. You can't make this shit up. The current president is a narcissist professional murderer and war promoter.
The greatest Czech was Jara Cimrman, a fictional genius whom the people made up to have someone to look up to. The history of the country is also completely made up, it was crafted to serve nationalism, to justify things like separatism and murdering Germans after the war and also to destroy the country etc.

@ -1,18 +1,14 @@
# Exercises
**THIS IS CURRENTLY HIGHLY WORK IN PROGRESS**
Here there should be a set of exercise problems for those wishing to pursue [LRS](lrs.md) in any way.
{ Hmmm, it's hard to figure out exactly what to put here. ~drummyfish }
Here there should be some exercises for those wishing to pursue [LRS](lrs.md) in any way.
## Programming Challenges
See also [needed projects](needed.md).
Here you will find suggestions for programming projects primarily focused on practicing programming, but made so that they can theoretically be expanded to something useful as well. They will be roughly sorted by difficulty (under each level projects will be approximately sorted by difficulty too). You can use this to practice what you've learned in [C tutorial](c_tutorial.md). Try to follow the [LRS](lrs.md) principles. We more or less assume you'll be programming in [C](c.md) -- that's how we judge the difficulty etc. -- but of course no one is stopping you from using another language, just remember it may become much more easy or difficult.
This place is for suggesting programming projects that will in first place serve practicing [programming](programming.md), but they'll be formulated so that they can theoretically be expanded to something useful in the end. The projects will be roughly sorted from easiest to hardest into different difficulty levels and within each level also at least approximately from easiest to hardest. You can use this to practice what you've learned in [C tutorial](c_tutorial.md). Be sure to follow the [LRS](lrs.md) principles. We more or less assume you'll be programming in [C](c.md) -- that's how we judge the difficulty etc. -- but of course no one is stopping you from using another language, just remember it may become much more easy or difficult or just awkward.
**LRS programming challenge!** If you desire "motivation", treat this as a [game](game.md), the projects are achievements you can collect. Then it would be cool if you make a git repo or something to show it to the world { I'll be glad to see it, drop me a link :) ~drummyfish } Here are the rules:
**LRS programming challenge!** If you desire "motivation", feel free to treat this as a [game](game.md), the projects will be achievements for you to collect. Then it would be cool if you make a [git](git.md) repo or something to show it to the world { I'll be glad to see it, drop me a link :) ~drummyfish } Here are the **rules**:
- Award yourself points like this:
- 1 point for a completed project in level 0.
@ -24,6 +20,7 @@ Here you will find suggestions for programming projects primarily focused on pra
- A project is considered completed only if you REALLY complete all of its requirements! It's not enough to say "mmm, I could do this if I wanted" -- no, you have to REALLY DO IT for it to count. If the requirement is to make a complete game, a buggy demo doesn't count. Also if you just use some cheat, use 100 libraries to do everything for you, you know you didn't really complete it :) If it's obvious implementing something is part of the challenge (for example collision detection in physics engine), you cannot use a library for it, you have to do it yourself. Just be honest with yourself.
- You CANNOT award yourself partial points, i.e. if you meet 90% of requirements for some project, you CANNOT give yourself 90% points for it, not even one point. Complete it 100%, then get 100% points. Again, it doesn't count to say "mmm, I could finish this if I wanted" -- no, until you finish it it's not finished. This is part of the challenge and insisting on it also makes you potentially make a nice, tidy program that will increase good in the world ;)
- You may reuse your own code without it counting as third party library, i.e. if you write 3D renderer in one project, you can use it in writing 3D game as another project, with it counting as if you wrote everything from scratch just for that project.
- The *thumbs up* parts are not mandatory, just a little extra challenge.
- Don't [cheat](cheating.md), you're only cheating yourself :)
- If there is any doubt, [drummyfish](drummyfish.md) is the arbiter. So if you for example don't know if your project passes, send it to drummyfish and he will tell you.
@ -35,7 +32,8 @@ Here you will find suggestions for programming projects primarily focused on pra
4. **password generator**: Make a program which when run outputs randomly generated password (the password must be different each time you run the program of course). The password must be at least 10 characters long, contain at least one decimal digit and one special character.
5. **rock, paper scissors**: Make a game of rock paper scissors, the player plays against the computer.
6. **average**: Make a program that reads two numbers (you can assume only non-negative integers will be input) and writes out their average (it can be rounded, even to just integer, e.g. 3 and 8 can give 5).
7. **[Nim](nim.md)**: Implement the simple variant of the game Nim for two human players -- At the beginning there will be 15 matches, players take turn, in each turn a player can take 1, 2 or 3 matches. That who takes the last one loses. The game has to show the number of matches as a numeral and also as some kind of symbols, for example: `|||||||||||||||`. Players have to input `1`, `2` or `3` to play their turn, on wrong input the game has to report error and ask again. At the end winner must be shown. Thumbs up for randomly setting the initial number of matches between 10 and 15.
7. **kawaii filter**: Make a program that will filter input text to make it more kawai senpai. It has to read characters from input until end is reached (you can consider either EOF or end of line the end of input, that's up to you), outputting each character it reads as soon as it reads it, except for letters *r*/*R* that will be replaced with *w*/*W*. Also when period is read, the word *desu* must be output before it. For example the input *"This program is really good."* will produce output *"This pwogwam is weally good desu."*.
8. **[Nim](nim.md)**: Implement the simple variant of the game Nim for two human players -- At the beginning there will be 15 matches, players take turn, in each turn a player can take 1, 2 or 3 matches. That who takes the last one loses. The game has to show the number of matches as a numeral and also as some kind of symbols, for example: `|||||||||||||||`. Players have to input `1`, `2` or `3` to play their turn, on wrong input the game has to report error and ask again. At the end winner must be shown. Thumbs up for randomly setting the initial number of matches between 10 and 15.
### Level 1: Easy, *I'm Too Young To Die*
@ -58,13 +56,14 @@ Here you will find suggestions for programming projects primarily focused on pra
3. **[gopher](gopher.md) browser**: Write interactive gopher browser -- it can be a purely [command line](cli.md) browser. It has to be able to follow links and go back at least one page. The program must include some basic help and ability to save files to disk.
4. **simple text [compression](compression.md)**: Write a program that can compress and decompress plain [ASCII](ascii.md) text files using some very simple technique like [run length encoding](rle.md) (RLE) or dictionary methods (you can even use a fixed dictionary, e.g. have a list of common English words that you will represent by some shorter symbols). You can assume input characters will only have 7bit ASCII codes, so you can compress the text also by dropping the 8th unused bit. You don't have to achieve great compression ratio (you can even enlarge some files), but you must pass the following test: take the program's source code, this article's plain text and Wikipedia main page plain text, your program must compress at least two of these to a smaller size (and of course successfully decompress them into identical files). The program must work as a [filter](filter.md), i.e. it mustn't load the whole file into memory or perform multiple passes, it has to use approximately same amount of RAM for input of any size.
5. **stupid chatbot**: Make an entertaining chatbot that can react to basic sentences like "how are you?", "are you a robot?", "tell me a joke" and so on. It must give a human-like answer to at least 50 different sentences. It has to deal with typos and text variability a little bit (for example multiple spaces in a row or all caps text mustn't confuse it). It must have a mood meter which changes depending on what the partner says -- for example if the bot gets insulted, it gets more angry and starts inserting profanity to responses; on the other hand if it's happy it will insert nice smiley faces etc. The bot also has to remember and use the name of its chat partner if that is brought up. Test the bot by having it chat with itself.
6. **arbitrary size [rational numbers](rational_number.md)**: Make a library that allows working with arbitrary size rational numbers, i.e. represent each number as a pair of numerator and denominator, the number will be automatically allocating itself as much memory as it needs for storing the two internal values. Negative numbers must be supported too. It mustn't waste too much memory, i.e. whenever it changes, it will try to simplify the fraction and, if possible, decrease its size and allocate less memory. Size of the number will only be limited by amount of RAM your program can use. Furthermore implement these operations with the numbers: converting to/from the language's native numbers (with rounding if necessary), comparisons (equal, greater, greater or equal, smaller, smaller or equal), addition, subtraction, multiplication, division and printing and/or converting the number to string (at least decimal -- if the number has infinitely many fractional digits, just cut the output somewhere).
7. **image to [ASCII art](ascii_art.md)**: Make a program that takes an RGB bitmap image and renders it with ASCII characters (i.e. prints it out to console). You can support loading the image from just one file format of your choice, possibly something simple like PPM, BMP or Farbfeld. The program must support resizing the image and it must allow to just set one dimension with keeping the aspect ratio. Thumbs up for extra features like setting brightness/contrast and so on.
8. **educational [sorting](sorting.md) visualization**: Make a program for visualizing sorting algorithms -- it may draw real graphics (either directly to the screen or by outputting animation file) or just render ASCII art graphics, but it has to clearly show what the sorting algorithm is doing, i.e. which elements are being compared, which are swapped and if it makes good sense to highlight something else (like the pivot or already sorted part of the array), you should do it. Implement at least bubble sort, insertion sort, selection sort and quick sort. Also offer benchmark mode in which all algorithms race in sorting the same array (this can be without advanced visualization, just show e.g. number of steps for each).
9. **3D model of [fractal](fractal.md)**: Make a program that outputs 3D model of either Siepinski triangle or Koch snowflake fractal. The output shall be some simple 3D format like obj or Collada. The model can be primitive, i.e. it can be just flat shape made of triangles which don't have to really be connected, but the program must allow specifying the number of iterations of the fractal (during invocation, e.g. as a CLI flag). Check that the model is correct by opening it in some 3D editor such as Blender.
10. **[steganography](steganography.md)**: Make a program that hides text strings in either pictures, sounds or another text. The program must be a nice [CLI](cli.md) utility that performs both encoding and decoding -- it will allow the user to specify the string to hide (this string can be simplified to take less space, e.g. it may be converted to all caps, special characters may be removed etc.) and the data in which to embed them. The size of the string that can be encoded will of course be limited by how much space there is in the data, so you can reject or shorten the string if that's the case. The string must NOT be hidden in metadata (i.e. exif tags, file header, after the data, ...), it must be encoded in the useful data itself, i.e. in pixels of the picture, samples of the sound or characters of the text, but it mustn't be apparent that there is something hidden in the data. Use some simple technique, for example in images and sound you can often change the least significant bits without it being noticed, in text you can insert typos, hyphens, replace some periods with semicolons etc. Get creative.
11. **[sudoku](sudoku.md) solver**: Create a program to which the user somehow passes a sudoku puzzle (in a file, through a CLI flag, interactively... the choice is yours, but passing a new puzzle mustn't require program recompilation) and the program attempts to solve it. It must first employ some basic reasoning, at very least it has to repeatedly try the elimination method, i.e. marking a set of possible values in each empty square and then reducing these sets by crossing out values that can't be in that square because the same value is in its column/row/minisquare -- wherever only one value remains in the set, it is filled in as final; this has to be repeated until no more progress is being made. If you want, you can employ other techniques as well. After this if the puzzle is still not solved, the program will resort to [brute force](brute_force.md) which has to eventually lead to solution (even if it would take too long). If the program finds that the puzzle is unsolvable, it has to report it.
12. **language recognizer**: Make a program that will be able to learn and then recognize language of text it is given (in theory it should work for any kind of language, be it human or computer language). Specifically the program will first get *N* files, each one representing a different language (e.g. 5 books in different human languages), then it will take some other text and say to which of the initial *N* files it is linguistically most similar. For simplicity assume only plain ASCII files on input (you can just use some Unicode to ASCII utility on all input files). Use some simple [machine learning](machine_learning.md) technique such as some variant of k-NN. It will suffice if for each training example you construct a vector of some nice features, for example {average word length, vowel/consonant ratio, relative frequency of letter A, relative frequency of letter E, ...}, give each component some weight and then just find the nearest neighbour to the tested sample in this feature space (if you want to be more fancy, split the input files into parts so you get more training samples, then try k-NN with some convenient k). You shouldn't and CANNOT use neural networks, and of course you CANNOT use any machine learning library ;) You don't have to achieve great accuracy but your program should likely be able to quite reliably tell e.g. German from C++.
6. **[minesweeper](minesweeper.md)**: Implement the minesweeper game! It can be a purely command line program if you manage to render it well with ASCII art and make controls usable, but of course you can try making it GUI as well. There must be at least three difficulty levels that differ by board size and number of mines. First click must never land on a mine. The game must show the time it took to complete it, thumbs up for implementing a persistent top 3 score board that's saved to a file.
7. **arbitrary size [rational numbers](rational_number.md)**: Make a library that allows working with arbitrary size rational numbers, i.e. represent each number as a pair of numerator and denominator, the number will be automatically allocating itself as much memory as it needs for storing the two internal values. Negative numbers must be supported too. It mustn't waste too much memory, i.e. whenever it changes, it will try to simplify the fraction and, if possible, decrease its size and allocate less memory. Size of the number will only be limited by amount of RAM your program can use. Furthermore implement these operations with the numbers: converting to/from the language's native numbers (with rounding if necessary), comparisons (equal, greater, greater or equal, smaller, smaller or equal), addition, subtraction, multiplication, division and printing and/or converting the number to string (at least decimal -- if the number has infinitely many fractional digits, just cut the output somewhere).
8. **image to [ASCII art](ascii_art.md)**: Make a program that takes an RGB bitmap image and renders it with ASCII characters (i.e. prints it out to console). You can support loading the image from just one file format of your choice, possibly something simple like PPM, BMP or Farbfeld. The program must support resizing the image and it must allow to just set one dimension with keeping the aspect ratio. Thumbs up for extra features like setting brightness/contrast and so on.
9. **educational [sorting](sorting.md) visualization**: Make a program for visualizing sorting algorithms -- it may draw real graphics (either directly to the screen or by outputting animation file) or just render ASCII art graphics, but it has to clearly show what the sorting algorithm is doing, i.e. which elements are being compared, which are swapped and if it makes good sense to highlight something else (like the pivot or already sorted part of the array), you should do it. Implement at least bubble sort, insertion sort, selection sort and quick sort. Also offer benchmark mode in which all algorithms race in sorting the same array (this can be without advanced visualization, just show e.g. number of steps for each).
10. **3D model of [fractal](fractal.md)**: Make a program that outputs 3D model of either Siepinski triangle or Koch snowflake fractal. The output shall be some simple 3D format like obj or Collada. The model can be primitive, i.e. it can be just flat shape made of triangles which don't have to really be connected, but the program must allow specifying the number of iterations of the fractal (during invocation, e.g. as a CLI flag). Check that the model is correct by opening it in some 3D editor such as Blender.
11. **[steganography](steganography.md)**: Make a program that hides text strings in either pictures, sounds or another text. The program must be a nice [CLI](cli.md) utility that performs both encoding and decoding -- it will allow the user to specify the string to hide (this string can be simplified to take less space, e.g. it may be converted to all caps, special characters may be removed etc.) and the data in which to embed them. The size of the string that can be encoded will of course be limited by how much space there is in the data, so you can reject or shorten the string if that's the case. The string must NOT be hidden in metadata (i.e. exif tags, file header, after the data, ...), it must be encoded in the useful data itself, i.e. in pixels of the picture, samples of the sound or characters of the text, but it mustn't be apparent that there is something hidden in the data. Use some simple technique, for example in images and sound you can often change the least significant bits without it being noticed, in text you can insert typos, hyphens, replace some periods with semicolons etc. Get creative.
12. **[sudoku](sudoku.md) solver**: Create a program to which the user somehow passes a sudoku puzzle (in a file, through a CLI flag, interactively... the choice is yours, but passing a new puzzle mustn't require program recompilation) and the program attempts to solve it. It must first employ some basic reasoning, at very least it has to repeatedly try the elimination method, i.e. marking a set of possible values in each empty square and then reducing these sets by crossing out values that can't be in that square because the same value is in its column/row/minisquare -- wherever only one value remains in the set, it is filled in as final; this has to be repeated until no more progress is being made. If you want, you can employ other techniques as well. After this if the puzzle is still not solved, the program will resort to [brute force](brute_force.md) which has to eventually lead to solution (even if it would take too long). If the program finds that the puzzle is unsolvable, it has to report it.
13. **language recognizer**: Make a program that will be able to learn and then recognize language of text it is given (in theory it should work for any kind of language, be it human or computer language). Specifically the program will first get *N* files, each one representing a different language (e.g. 5 books in different human languages), then it will take some other text and say to which of the initial *N* files it is linguistically most similar. For simplicity assume only plain ASCII files on input (you can just use some Unicode to ASCII utility on all input files). Use some simple [machine learning](machine_learning.md) technique such as some variant of k-NN. It will suffice if for each training example you construct a vector of some nice features, for example {average word length, vowel/consonant ratio, relative frequency of letter A, relative frequency of letter E, ...}, give each component some weight and then just find the nearest neighbour to the tested sample in this feature space (if you want to be more fancy, split the input files into parts so you get more training samples, then try k-NN with some convenient k). You shouldn't and CANNOT use neural networks, and of course you CANNOT use any machine learning library ;) You don't have to achieve great accuracy but your program should likely be able to quite reliably tell e.g. German from C++.
### Level 3: Hard, *Ultra Violence*
@ -120,9 +119,10 @@ Here are some questions to test your LRS related knowledge :D
20. In 3D computer [graphics](graphics.md) what's the difference between [shading](shading.md) and drawing [shadows](shadow.md)?
21. Can we say that the traditional feed forward [neural networks](neural_network.md) are [Turing complete](turing_complete.md)? Explain why or why not.
22. Wicw mx uum yvfe bbt uhmtf ok?
23. What is the principle of [asymmetric cryptography](asymmetric_cryptography.md) and why is it called *asymmetric*?
24. WARNING: VERY HARD. There are two integers, both greater than 1 and smaller than 100. *P* knows their product, *S* knows their sum. They have this conversation: *P* says: I don't know the numbers. *S* says: I know you don't, I don't know them either. *P* says: now I know them. *S* says: now I know them too. What are the numbers? To solve this you are allowed to use a programming language, pen and paper etc. { Holy shit this took me like a whole day. ~drummyfish }
25. Did you enjoy this quiz?
23. Does the statement "10 does not equal 10" logically [imply](implication.md) that intelligent alien life exists?
24. What is the principle of [asymmetric cryptography](asymmetric_cryptography.md) and why is it called *asymmetric*?
25. WARNING: VERY HARD. There are two integers, both greater than 1 and smaller than 100. *P* knows their product, *S* knows their sum. They have this conversation: *P* says: I don't know the numbers. *S* says: I know you don't, I don't know them either. *P* says: now I know them. *S* says: now I know them too. What are the numbers? To solve this you are allowed to use a programming language, pen and paper etc. { Holy shit this took me like a whole day. ~drummyfish }
26. Did you enjoy this quiz?
### Answers
@ -148,10 +148,11 @@ Here are some questions to test your LRS related knowledge :D
20. Shading is the process of computing surface color of 3D objects, typically depending on the object's material and done by GPU programs called [shaders](shader.md); shading involves for example applying textures, normal mapping and mainly lighting -- though it can make pixels lighter and darker, e.g. depending on surface normal, it only applies local models of light, i.e. doesn't compute true shadows cast by other objects. On the other hand computing shadows uses some method that works with the scene as a whole to compute true shadowing of objects by other objects.
21. We can't really talk about Turing completeness of plain neural networks, they cannot be Turing complete because they just transform fixed length input into fixed length output -- a Turing complete model of computation must be able to operate with arbitrarily large input and output. In theory we can replace any neural network with logic circuit or even just plain lookup table. Significance of neural networks doesn't lie in their computational power but rather in their efficiency, i.e. a relatively small and simple neural network may replace what would otherwise be an enormously large and complicated circuit.
22. two (or txq); The cipher offsets each letter by its position.
23. The main difference against symmetric cryptography is we have two keys instead of one, one (private) for encrypting and one (public) for decrypting -- neither key can be used for the other task. Therefore encryption and decryption processes differ greatly (while in symmetric cryptography it's essentially the same, using the same key, just in reversed way), the problem looks different in one direction that the other, hence it is called *asymmetric*.
24. 4 and 13, solution: make a table, columns are first integer, rows are second (remember, both *P* and *S* can be making their own table like this too). Cross out whole bottom triangle (symmetric values). *P* doesn't know the numbers, so cross out all combinations of two primes (he would know such numbers as they have only a unique product). *S* knew *P* didn't know the numbers, so the sum also mustn't be a sum of two primes (if the sum could be written as a prime plus prime, *S* couldn't have known that *P* didn't know the numbers, the numbers may have been those two primes and *P* would have known them). This means you can cross out all such numbers -- these are all bottom-left-to-top-right diagonals that go through at least one already crossed out number (combination of primes), as these diagonal have constant sum. Now *P* has a table like this with relatively few numbers left -- if he now leaves in only the numbers that make the product he knows, he'll very likely be left with only one combination of numbers -- there are still many combinations like this, but only the situation when the numbers are set to be 4 and 13 allows *S* to also deduce the numbers after *P* declares he knows the numbers -- this is because *S* knows the combination lies on one specific constant-sum diagonal and 4-13 lie on the only diagonal that in this situation has a unique product within the reduced table. So with some other combinations *P* could deduce the numbers too, but only with 4-13 *S* can finally say he knows them too.
25. yes
23. Yes, a false statement implies anything.
24. The main difference against symmetric cryptography is we have two keys instead of one, one (private) for encrypting and one (public) for decrypting -- neither key can be used for the other task. Therefore encryption and decryption processes differ greatly (while in symmetric cryptography it's essentially the same, using the same key, just in reversed way), the problem looks different in one direction that the other, hence it is called *asymmetric*.
25. 4 and 13, solution: make a table, columns are first integer, rows are second (remember, both *P* and *S* can be making their own table like this too). Cross out whole bottom triangle (symmetric values). *P* doesn't know the numbers, so cross out all combinations of two primes (he would know such numbers as they have only a unique product). *S* knew *P* didn't know the numbers, so the sum also mustn't be a sum of two primes (if the sum could be written as a prime plus prime, *S* couldn't have known that *P* didn't know the numbers, the numbers may have been those two primes and *P* would have known them). This means you can cross out all such numbers -- these are all bottom-left-to-top-right diagonals that go through at least one already crossed out number (combination of primes), as these diagonal have constant sum. Now *P* has a table like this with relatively few numbers left -- if he now leaves in only the numbers that make the product he knows, he'll very likely be left with only one combination of numbers -- there are still many combinations like this, but only the situation when the numbers are set to be 4 and 13 allows *S* to also deduce the numbers after *P* declares he knows the numbers -- this is because *S* knows the combination lies on one specific constant-sum diagonal and 4-13 lie on the only diagonal that in this situation has a unique product within the reduced table. So with some other combinations *P* could deduce the numbers too, but only with 4-13 *S* can finally say he knows them too.
26. yes
## Other
Make your own exercises in daily life, adopt a mindset of taking small intellectual (or even non-intellectual) challenges. Don't slip into conformist consumerist life of comfort and ignorance that will make your brain rot. Learn new things just for the same of it -- make a game, learn a new language, learn to play music, learn chemistry, paint a picture, learn [chess](chess.md), read a whole [encyclopedia](encyclopedia.md), read Quran, solve puzzles in magazines, construct a machine out of wood, collect rocks, write a book, compose a song, ... you get the idea. Even if you just play vidya games, at least play some puzzle game or a strategy game, or a creative sandbox game, or invent some self-imposed challenge and make it into a puzzle game if it's not, or write a bot that plays the game for you, don't be just a zombie staring into screen. It's good to make it a habit to do some small exercise every day, such as play one game of chess with your computer every single day, or watch one video about math etc. -- in a year or two you'll become pretty good at a new skill just by this. WARNING: do not confuse this with the so called "[self improvement](productivity_cult.md)" cult, you'd be retarded to join that.
Make your own exercises in daily life, adopt a mindset of taking small intellectual (or even non-intellectual) challenges. Don't slip into conformist consumerist life of comfort and ignorance that will make your brain rot. Learn new things just for the sake of it -- make a game, learn a new language, learn to play music, learn chemistry, paint a picture, learn [chess](chess.md), read a whole [encyclopedia](encyclopedia.md), read Quran, solve puzzles in magazines, construct a machine out of wood, collect rocks, write a book, compose a song, multiply numbers in your head before sleep ... you get the idea. Even if you just play vidya games, at least play some puzzle game or a strategy game, or a creative sandbox game, or invent some self-imposed challenge and make it into a puzzle game if it's not, or write a bot that plays the game for you, don't be just a zombie staring into screen. It's good to make it a habit to do some small exercise every day, such as play one game of chess with your computer every single day, or watch one video about math etc. -- in a year or two you'll become pretty good at a new skill just by this. WARNING: do not confuse this with the so called "[self improvement](productivity_cult.md)" cult, you'd be retarded to join that.

@ -10,7 +10,7 @@ You can usually tell someone's gay from appearance and/or his body language. Gay
There is a terrorist [fascist](fascism.md) organization called [LGBT](lgbt.md) aiming to make gay people superior to others, but more importantly to gain political power -- e.g. the [power over language](political_correctness.md).
**Is being gay a choice?** Even though homosexuality is largely genetically determined, it may also be to some extent a choice, sometimes a choice that's not of the individual in question, a choice made at young age and irreversible at older age. Most people are actually [bisexual](bi.md) to a considerable degree, with a *preference* of certain sex. When horny, you'd fuck pretty much anything. Still there is a certain probability in each individual of choosing one or the other sex for a sexual/life partner. However culture and social pressure can push these probabilities in either way. If a child grows up in a major influence of [YouTubers](youtube.md) and other celebrities that openly are gay, or promote gayness as something extremely cool and fashionable, you see ads with gays and if all your role models are gay and your culture constantly paints being homosexual as being more interesting and somehow "brave" and if the [competition](competition.md) of sexes fueled e.g. by the [feminist](feminism.md) propaganda paints the opposite sex as literal [Hitler](hitler.md), the child has a greater probability of (maybe involuntarily) choosing the gay side of his sexual personality.
**Is being gay a choice?** Even though homosexuality is largely genetically determined, it may also be to some extent a choice, sometimes a choice that's not of the individual in question, a choice made at young age and irreversible at older age. Most people are actually [bisexual](bi.md) to a considerable degree, with a *preference* of certain sex. When horny, you'd fuck pretty much anything. Still there is a certain probability in each individual of choosing one or the other sex for a sexual/life partner. However culture and social pressure can push these probabilities in either way. If a child grows up in a major influence of [YouTubers](youtube.md) and other celebrities that openly are gay, or promote gayness as something extremely cool and fashionable, you see ads with gays and if all your role models are gay and your culture constantly paints being homosexual as being more interesting and somehow "brave" and if the [competition](competition.md) of sexes fueled e.g. by the [feminist](feminism.md) propaganda paints the opposite sex as literal [Hitler](hitler.md), the child has a greater probability of (maybe involuntarily) choosing the gay side of his sexual personality. See also *[cultural castration](cultural_castration.md)*.
{ I even observed this effect on myself a bit. I've always been completely straight, perhaps mildly bisexual when very horny. Without going into detail, after spending some time in a specific group of people, I found my sexual preference and what I found "hot" shifting towards the preference prevailing in that group. Take from that whatever you will. ~drummyfish }

@ -53,10 +53,10 @@ Examples from LRS point of view:
## Tech
Here are some extremely basic steps to take regarding technology and the technological aspect of LRS:
This section lays out some essential steps, according to [LRS](lrs.md), which a newcomer should take in relation to [technology](tech.md):
- **Learn about the most essential topics and concepts**, mainly [free software](free_software.md), "[open-source](open_source.md)", [bloat](bloat.md), [minimalism](minimalism.md), [kiss](kiss.md), [capitalism](capitalism.md), [capitalist_software](capitalist_software.md), [suckless](suckless.md), [LRS](lrs.md), [less retarded society](less_retarded_society.md), [anacho pacifism](anpac.md), [type A/B fail](fail_ab.md) etc. You will also need to open up your mind and re-learn some toxic concepts you've been taught by the system, e.g. [we do NOT fight anything](fight_culture.md), we do NOT create any [heroes](hero.md), "leaders" or celebrities (we follow ideas, not people), admit [work](work.md) is shit, older is better than "[modern](modern.md)" etc.
- **Install [GNU](gnu.md)/[Linux](linux.md)** operating system to free yourself from shit like [Windows](windows.md) and [Mac](mac.md) (you can also consider [BSD](bsd.md) and similar free OSes but you're yet probably too noob for that at this point). Do NOT try to switch to "Linux" right away if it's your first time, it's almost impossible, you want to just install "Linux" as [dual boot](dual_boot.md) (alongside your main OS) or on another computer (easier). This way you'll be using both operating systems, slowly getting more comfortable with "Linux" and eventually you'll find yourself uninstalling Windows altogether. You can also just try "Linux" in a [virtual machine](vm.md), from a live CD/flash drive or you can buy something with "Linux" preinstalled like [Raspberry Pi](raspberry.md). **Which "Linux" to install?** There are many options and as a noob you don't have to go hardcore right away, just install any [distro](distro.md) that [just werks](just_werks.md) (don't listen to people who tell you to install [Gentoo](gentoo.md) tho). Remember, perfect distro doesn't exist, all tech is shit nowadays, just choose something and go with it. You can try these:
- **Install [GNU](gnu.md)/[Linux](linux.md)** [operating system](operating_system.md) to free yourself from shit like [Windows](windows.md) and [Mac](mac.md) (you can also consider [BSD](bsd.md) and similar free OSes but you're yet probably too noob for that at this point). Do NOT try to switch to "Linux" right away if it's your first time, it's almost impossible, you want to just install "Linux" as [dual boot](dual_boot.md) (alongside your main OS) or on another computer (easier). This way you'll be using both operating systems, slowly getting more comfortable with "Linux" and eventually you'll find yourself uninstalling Windows altogether. You can also just try "Linux" in a [virtual machine](vm.md), from a live CD/flash drive or you can buy something with "Linux" preinstalled like [Raspberry Pi](raspberry.md). **Which "Linux" to install?** There are many options and as a noob you don't have to go hardcore right away, just install any [distro](distro.md) that [just werks](just_werks.md) (don't listen to people who tell you to install [Gentoo](gentoo.md) tho). Remember, perfect distro doesn't exist, all tech is shit nowadays, just choose something and go with it. You can try these:
- [Devuan](devuan.md): Nice, [LRS](lrs.md) approved distro that respects your [freedom](free_software.md) that just works, is easy to install and is actually nice. Good for any skill level.
- [Debian](debian.md): Like Devuan but uses the evil [systemd](systemd.md) which doesn't have to bother you at this point. Try Debian if Devuan doesn't work for any reason.
- [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.
@ -123,9 +123,9 @@ If you want, just literally take this wiki and make it your own, you can get the
### How To Make Yourself An Independent Solar Powered Computer
One of the best things you can do is to make yourself a computer that's as independent as possible, i.e. working offline and without power from the grid, it's very useful even if it's very low-spec, a programmable calculator can do things that old civilizations would kill for. Of course one way is to set up a complete solar (or wind/human/water/etc.) powered electricity generator that will replace your wall plug -- this is a topic for its own tutorial because that may get a bit complicated (you have to get various voltage convertors, protections for your devices, get the voltages/currents and wiring right etc.). To make just a simple solar powered computer can be much simpler if that's all you need. See also [mechanical computers](mechanical.md), like the old Soviet calculators etc., they can serve similar purpose.
On the path towards freedom a significant leap is made when one acquires a computer that's independent of the dystopian system that will sooner or later [collapse](collapse.md), a computer working offline and without power from the grid -- this is always very useful, even when it's very low-spec, a programmable calculator can do things that old civilizations would kill for. Of course one way is to set up a complete solar (or wind/human/water/etc.) powered electricity generator that will replace your wall plug -- this is a topic for its own tutorial because that may get a bit complicated (you have to get various voltage convertors, protections for your devices, get the voltages/currents and wiring right etc.). To make just a simple solar powered computer can be much simpler if that's all you need. See also [mechanical computers](mechanical.md), like the old Soviet calculators etc., they can serve similar purpose.
NOTE: There is a kind of middle way between full solar powered system and single solar powered device, it is e.g. possible to power your laptop directly or "almost directly" from a solar panel because your laptop already has a battery in it (so you don't need a big battery for the panel, you just charge your laptop) and it works on DC which is what comes from the solar panel (your laptop's charger has to convert AC from the plug to DC, so you just remove this middle man). Please don't just go and plug a solar panel to your laptop, you may destroy it :) Read some tutorial on this first, they can be found on the net. Here we'll go yet more simple.
NOTE: Possible middle ways exist between full solar powered system and single solar powered device, it is e.g. possible to power your laptop directly or "almost directly" from a solar panel because your laptop already has a battery in it (so you don't need a big battery for the panel, you just charge your laptop) and it works on DC which is what comes from the solar panel (your laptop's charger has to convert AC from the plug to DC, so you just remove this middle man). Please don't just go and plug a solar panel to your laptop, you may destroy it :) Read some tutorial on this first, they can be found on the net. Here we'll go yet more simple.
{ The following is a summary of a simple setup I made and tested. ~drummyfish }
@ -191,7 +191,7 @@ You should look like this:
## How Not To Get Depressed Living In This Shitty Dystopia
I don't know lol, you tell me. Becoming more independent of this system really helps though, just accept everything will get destroyed in a few years -- yes, all you ever liked is basically already dead, just deal with it and find new things to like such as reading books instead of scrolling through facebook etc. Unconditional love and [altruism](altruism.md) helps too, just let go of the hate and fight, help people selflessly without expecting rewards. One of the big challenges is also dealing with the *Cassandra complex*, i.e. the fact that only you know the truth but you can't communicate it to others, they don't listen, it's like a nightmare but real, you have to deal with this by meditation.
I don't know lol, you tell me. Becoming more independent of this system really helps, just accept everything will get destroyed in a few years -- yes, all you ever liked is practically already dead and gone, just deal with it and find new things to like such as reading books and watching the nature instead of scrolling through facebook etc. Unconditional [love](love.md) and [altruism](altruism.md) helps just as well, just let go of the hate and [fight](fight_culture.md), help people [selflessly](selflessness.md) without expecting rewards. One of the big challenges is also dealing with the *Cassandra complex*, i.e. that only you know the truth but you can't communicate it to others, they don't listen, it's like a nightmare but real, you have to deal with this by meditation, social isolation, reading and other forms of [coping](coping.md).
## Other

@ -69,6 +69,7 @@ Also remember the worst thing you can do to a joke is put a [disclaimer](disclai
- An [Apple](apple.md) a day keeps [sanity](lrs.md) away.
- The goal of [computer science](compsci.md) is to create things that will last at
least until we're finished building them.
- How many lesbians do you need to screw a lightbulb? Eleven: one to screw it and ten to talk about how great it was doing it without a man.
- The new version of [Windows](windows.md) is going to be backdoor free! The backdoor will be free of charge.
## See Also

@ -1,10 +1,10 @@
# Making Living
*See also [how to](how_to.md) live etc.*
*See also [how to](how_to.md) live, [homelessness](homeless.md) etc.*
The question of how to make a living by making something that's to be given out for free and without limitations is one of the most common in the context of [FOSS](foss.md)/[free culture](free_culture.md). Noobs often avoid this area just because they think it can't be done, even though there are ways of doing this and there are many people making living on FOSS, albeit ways perhaps more challenging than those of [proprietary](proprietary.md) products.
The question of how to make the ends meet by making something that's to be given out [for free](gratis.md) and without limitations is one of the top question asked in the context of "[FOSS](foss.md)"/[free culture](free_culture.md) under they dystopian [capitalist](capitalism.md) system. Noobs often avoid this area just because they think it can't be done, even though there are ways of doing this and there are many people making living on FOSS, albeit ways perhaps more challenging than those of [proprietary](proprietary.md) products.
One has to be aware that **[money](money.md) and commercialization always brings a high risk of profit becoming the highest priority** (which is a "feature" hard-wired in [capitalism](capitalism.md)) which will compromise the quality and ethics of the produced work. Profiting specifically requires abusing someone else, taking something away from someone. Making money by donations often stands on being popular and being popular often means self censorship, hypocrisy and populism. Therefore **it is ideal to create [LRS](lrs.md) on a completely voluntary basis, for free, in the creator's spare time**. This may be difficult to do but one can choose a lifestyle that minimizes expenses and therefore also time needed to spend at [work](work.md), which will give more free time for the creation of [LRS](lrs.md). This includes living frugally, not consuming hardware and rather reusing [old machines](ancientware.md), making savings, not spending on unnecessary things such as smoking or fashion etc. And of course, if you can't make LRS full-time, you can still find relatively ethical ways of it supporting you and so, again, giving you a little more freedom and resources for creating it.
One has to be constantly aware that **[money](money.md) and commercialization always brings a high risk of profit becoming the highest priority** (which is a "feature" hard-wired in [capitalism](capitalism.md)) which will compromise the quality and ethics of the produced work. Profiting specifically requires abusing someone else, taking something away from someone. Making money by donations often stands on being popular and being popular often means self censorship, hypocrisy and populism. Therefore **it is ideal to create [LRS](lrs.md) on a completely voluntary basis, for free, in the creator's spare time**. This may be difficult to do but one can choose a lifestyle that minimizes expenses and therefore also time needed to spend at [work](work.md), which will give more free time for the creation of [LRS](lrs.md). This includes living frugally, not consuming hardware and rather reusing [old machines](ancientware.md), making savings, not spending on unnecessary things such as smoking or fashion etc. And of course, if you can't make LRS full-time, you can still find relatively ethical ways of it supporting you and so, again, giving you a little more freedom and resources for creating it.
Also if you can somehow rip off a rich [corporation](corporation.md) and get some money for yourself, do it. Remember, corporations aren't people, they can't feel pain, they probably won't even notice their loss and even if you hurt them, you help the society by hurting a predator.

@ -2,6 +2,6 @@
*Not to be [confused](often_confused.md) with [communism](communism.md).*
Marxism comprises ideas, theories and ideologies strongly based in works of [Karl Marx](marx.md) (and also Friedrich Engels), roughly aiming for a [revolution](revolution.md) that should end [capitalism](capitalism.md), replace it with [socialist](socialism.md) society and eventually a truly [communist](communism.md) society. Though the terms Marxism and communism are NOT the same (communism is a general idea with many branches, e.g. [anarcho communism](ancom.md), Christian communism etc.), most common people see them as equivalent, which is unfortunate as communism is a purely [good](good.md) idea while Marxism is mostly a bad way of trying to achieve and sustain communism (the relationship between communism and Marxism may be roughly compared to the relationship between Christianity and Catholicism). Marxism comes with aggressive, revolutionary mindset that has caused great tragedies mainly during the 20th century, see mainly [USSR](ussr.md). Marxism sees itself as a [scientific](science.md) effort, it is studied by intellectuals and lives mainly in written works of Marxists.
Marxism comprises of ideas, theories and ideologies strongly based in works of [Karl Marx](marx.md) (and also Friedrich Engels), roughly aiming for a violent [revolution](revolution.md) that should end [capitalism](capitalism.md), replace it with "[socialist](socialism.md)" society and eventually a truly [communist](communism.md) society. Despite the terms Marxism and communism NOT being equal (communism is a general idea with many branches, e.g. [anarcho communism](ancom.md), Christian communism etc.), most common people see them as equivalent, which is unfortunate because communism is a purely [good](good.md) idea while Marxism is mostly a bad way of trying to achieve and sustain their own idea of communism (the relationship between communism and Marxism may be roughly compared to the relationship between Christianity and Catholicism). Marxism comes with aggressive, revolutionary mindset that has caused great tragedies mainly during the 20th century (see especially [USSR](ussr.md)). Marxism sees itself as a [scientific](science.md) effort, it is studied by intellectuals and lives mainly in written works of Marxists.
**We, [LRS](lrs.md), are communists but do NOT embrace Marxism!** Though we do agree with Marxists on many things (mostly identifying issues of [capitalism](capitalism.md) and the desire to replace it with some form of communism) and Marxism is still probably better than [capitalism](capitalism.md) (as anything is better than capitalism), we can't ever approve of some inherent traits of Marxism, mainly the following. Marxism is **violent**, aggressive and revolutionary, often highly hostile to [anarchism](anarchism.md) and [pacifism](pacifism.md) (which we highly embrace), wanting to FORCE communism. Marxists promote establishment of temporary **dictatorship** of the proletariat as they see it the only way to ending capitalism. **Marxists are NOT [altruists](altruism.md)**, their desire of communism doesn't come from love of life, they simply see it as a more efficient societal system than capitalism that's a natural and inevitable next step in evolution of society, they see a man as servant of society, they are obsessed with [work](work.md) and see people who don't share their values as undesirable -- these undesirable people are not only capitalists, but also people who don't want to work, religious people or people who refuse to [fight](fight_culture.md) for their society. They say that ends justify the means and will happily utilize means such as [war](war.md), dictatorship, executions, [censorship](censorship.md), cults of personality and propaganda. We cannot ever stand behind this.
**We, [LRS](lrs.md), are communists but do NOT embrace Marxism!** Though we do agree with Marxists on many things (mostly identifying issues of [capitalism](capitalism.md) and the desire to replace it with some form of communism) and Marxism is still probably better than [capitalism](capitalism.md) (as anything is better than capitalism), we can't ever approve of some inherent traits of Marxism, mainly the following. Marxism is **violent**, aggressive and revolutionary, often highly hostile to [anarchism](anarchism.md) and [pacifism](pacifism.md) (which we highly embrace), wanting to FORCE communism. Marxists promote establishment of temporary **dictatorship** of the proletariat as they see it the only way to ending capitalism. **Marxists are NOT [altruists](altruism.md)**, their desire of communism doesn't come from love of life, they simply see it as a more efficient societal system than capitalism that's a natural and inevitable next step in evolution of society, they see a man as servant of society, **they are obsessed with [work](work.md)** (even preferring to call themselves *workers* rather than *people*; [language matters](name_is_important.md)) and see people who don't share their values as undesirable -- these undesirable people are not only capitalists, but also people who don't want to work, religious people or people who refuse to [fight](fight_culture.md) for their society. They say that ends justify the means and will happily utilize means such as [war](war.md), dictatorship, executions, [censorship](censorship.md), cults of personality and propaganda. We cannot ever stand behind this.

@ -1,6 +1,8 @@
# Minesweeper
Minesweeper is a simple but entertaining singleplayer puzzle [game](game.md) whose objective is to deduce the locations of all mines hidden in a square grid from certain clues and mark all the mines without detonating any of them. Commonly the game is treated as a [minigame](minigame.md) but can be taken to much higher level for example with [speedrunning](speedrunning.md) or by expanding the concept to create a more complex game. Minesweeper falls under the kind of games highly appreciated by [LRS](lrs.md) perspective -- it's very simple to program and learn but still highly fun to play, it's mathematically [interesting](interesting.md) and can in theory be played even without a [computer](computer.md) (if someone else prepares you the board). Current form of the game seems to have evolved from a 1983 game called *Mined-Out*.
Minesweeper is a simple but entertaining singleplayer puzzle [game](game.md) whose objective is to deduce locations of all mines hidden in a square grid given certain numeric clues. You will most often see the game treated as a [minigame](minigame.md) but indeed it can be taken to much higher level for example with [speedrunning](speedrunning.md) or by expanding the concept to create a more complex game; as a matter of fact there is a dedicated community around competitive play of the game (see minesweepergame.com, their wiki nicely explains advanced strategies and techniques such as so called "1.5 click"). Minesweeper falls under the kind of games highly appreciated by [LRS](lrs.md) perspective -- it's very simple, easy to program (try it as an [exercise](exercises.md)) and learn but still highly [fun](fun.md) to play, it's mathematically [interesting](interesting.md) (example: the *Minesweeper theorem* states that any given board has the sum of its clue numbers same as that of its complement board) and can in theory be played even without a [computer](computer.md) (if someone else prepares you the board). Current form of the game seems to have evolved from 1980s games such as *Mined-Out* or *Relentless Logic* (which were in turn likely inspired by older games like *Battleships*), later it became popular mainly due to being one of default games that came with [Windows](windows.md).
{ Look up the video called *Minesweeper The Movie*, it's a funny mockup trailer of a Hollywood style movie based on this game. ~drummyfish }
```
_ _ _ _ _ _ _ _ _
@ -15,10 +17,10 @@ Minesweeper is a simple but entertaining singleplayer puzzle [game](game.md) who
|._._._1|_|_|1_._.|
```
*In progress game.*
*In progress game, `#` are marked mines.*
The **rules** are following: initially a *W* times *H* grid is created and *N* mines are placed on random squares (size of board and number of mines can affect difficulty). All squares are obscured so that the player doesn't see where the mines are. The player can dig on any square by clicking it -- if he clicks on a mine square, it detonates and he loses (here all mines are revealed to him). Implementations typically make it so that the first click can never land on a mine (if it does, the mine is relocated). If the click is on empty square, then this square as well as all other mine-free squares reachable from this square (by walking in 4 principal directions) are revealed as mine-free. All revealed squares have a clue number which says the number of mines in its immediate 8 neighbor squares -- except for squares with clue number 0, all squares have their clue number written on them (often each number has its own color to help with pattern recognition). These clues help the player deduce where the mines are. Player can mark any hidden square with a mine symbol -- once all mine-free squares are revealed, the game is won.
The **rules** are following: initially a *W* times *H* grid is created and *N* mines are placed on [random](randomness.md) squares (size of board and number of mines can affect difficulty). All squares are obscured so that the player doesn't see where the mines are. The player can dig on any square by clicking it -- if he clicks a mine square, it detonates and he loses (here all mines are revealed to him). Implementations normally make it so that the first click can never land on a mine (if it does, the mine is relocated), because that would be just sad. If the click is on empty square, then this square as well as all other mine-free squares reachable from this square (by walking in 4 principal directions) are revealed as mine-free. All revealed squares have a clue number which says the number of mines in its immediate 8 neighbor squares -- except for squares with clue number 0, all squares have their clue number written on them (often each number has its own color to help with pattern recognition). These clues help the player deduce where the mines are. Player can mark any hidden square with a mine symbol -- once all mine-free squares are revealed, the game is won (it's a bit funny that in some versions of the game, especially on low difficulty, one can win with a single click; more serious implementations put limits on the minimum number of required left clicks, so called 3BV number).
The game requires deductive thinking -- at least initially when one is learning, later on it turns almost entirely into a pattern recognition game. The patterns are very local and there isn't that many of them, so one learn them quickly. The game however DOES involve a bit of chance and luck, situations may arise where taking a guess is necessary, but these are relatively few and risk can be minimized with clever deduction.
The game requires deductive thinking -- at least initially when one is learning, later on it turns almost entirely into a pattern recognition game. The patterns are very local and there isn't that many of them, so one learn them quickly. The game however DOES involve a bit of chance and luck because the player doesn't have complete information, situations may arise in which taking a guess is necessary, but these are relatively few and risk can be minimized with clever deduction.
Some patterns can be seen in the above image. For example a square with clue number *N* which has *N* neighbors mean that all its neighbors have mines -- this is often seen e.g. with 1s near corners (seen in the picture). We can also see at the bottom of the board that the two squares will both clearly contain mines. A more intricate pattern is seen near the square with number 3 -- the mine above it was deduced from the number 2 at its right and the number 1 next to the 2: according to the 2 square there have to be 2 mines somewhere in the 3 squares above it, but it's impossible for one mine to be above the 2 with the other being top-right from the 2 as that would place 2 mines in the area of the square with clue number 1, therefore one of the mines has to be top-left from the square with number 2 (above the square with 3).
Some patterns can be seen in the above image. For example a square with clue number *N* which has *N* neighbors mean that all its neighbors have mines -- this is often seen e.g. with 1s near corners (seen in the picture). We can also see at the bottom of the board that the two squares will both clearly contain mines. A more intricate pattern is seen near the square with number 3 -- the mine above it was deduced from the number 2 at its right and the number 1 next to the 2: according to the 2 square there have to be 2 mines somewhere in the 3 squares above it, but it's impossible for one mine to be above the 2 with the other being top-right from the 2 as that would place 2 mines in the area of the square with clue number 1, therefore one of the mines has to be top-left from the square with number 2 (above the square with 3). For more patterns see e.g. [this](https://minesweepergame.com/website/authoritative-minesweeper/wiki/Strategy).

@ -81,7 +81,7 @@ Now that we have a specification, i.e. the idea, someone has to realize it, i.e.
A new language comes to existence just as other things do -- when there is a reason for it. I.e. if someone feels there is no good language for whatever he's doing or if someone has a brilliant idea and want to write a PhD thesis or if someone smokes too much weed or if a corporation wants to control some software platform etc., a new language may be made. This often happen gradually (again, like with many things), i.e. someone just starts modifying an already existing language -- at first he just makes a few macros, then he starts making a more complex preprocessor, then he sees it's starting to become a new language so he gives it a name and makes it a new language -- such language may at first just be transpiled to another language (often [C](c.md)) and over time it gets its own full compiler. At first a new language is written in some other language, however most languages aim for **[self hosted](self_hosting.md) implementation**, i.e. being written in itself. This is natural and has many advantages -- a language written in itself proves its maturity, it becomes independent and as it itself improves, so does its own compiler. Self hosting a language is one of the greatest milestones in its life -- after this the original implementation in the other language often gets deletes as it would just be a burden to keep [maintaining](maintenance.md) it.
**So can a language be inherently fast, [bloated](bloat.md) etc.?** When we say a language is fast, bloated, memory efficient and so on, we often refer to its implementations because, as mentioned, a language is just an idea which can be implemented in many ways with different priorities and tradeoffs, so just keep in mind that talking about languages like this usually refers to the implementations. But on the other hand yes, a language CAN itself be seen as inherently having a similar property because it's simply such that its implementations more or less have to have this property. A very complicated language just cannot be implemented in a simple, non-bloated way, an extremely high level and flexible language cannot be implemented to be among the fastest -- so referring to language implementations we also a little bit refer to the language itself as an implementation reflects the abstract language's properties. **How to tell if language is bloated?** One can get an idea from several things, e.g. list of features, [paradigm](paradigm.md), size of its implementations, number of implementations, size of the specification, year of creation (newer mostly means more bloat) and so on. However be careful, many of these are just clues, for example small specification may just mean it's vague. Even a small self hosted implementation doesn't have to mean the language is small -- imagine e.g. a language that just does what you write in plain English; such language will have just one line self hosted implementation: "Implement yourself." But to actually [bootstrap](boot.md) the language will be immensely difficult and will require a lot of bloat.
**So can a language be inherently fast, [bloated](bloat.md), memory efficient etc.?** When we say a language is so and so, we generally refer to its implementations and our experience from practice because, as explained previously, a language in itself is only an idea that can be implemented in many ways with different priorities and tradeoffs, and not only that; even if we choose specific implementations of languages, the matter of [benchmarking](benchmark.md) and comparing them is very complicated because the results will be highly dependent for example on hardware architecture we use (some [ISA](isa.md) have slow branching, lack the divide instruction, some MCUs lack floating point unit etcetc., all of which may bias results heavily to either side) AND on test programs we use (some types of problems may better fit the specialization of one language that will do very well at it while it would do much worse at other types of problems), the way they are written (the problem of choosing idiomatic code vs transliteration, i.e. performance will depend on whether we try to solve the benchmark problem in the way that's natural for the language or the way that's more faithful to the described solution) and what weight we give to each one (i.e. even when using multiple benchmarks, we ultimately have to assign a specific importance to each one). It's a bit like trying to say who the fastest human is -- generally we can pick the top sportsmen in the world but then we're stuck because one will win at sprint while the other one at long distance running and another one at swimming, and if we consider even letting them compete in different clothes, weather conditions and so on, we'll just have to give up. So speaking about languages and their quantitative properties in practice generally means talking about their implementations and practical experience we have. HOWEVER, on the other hand, it does make sense to talk about properties of languages as such as well -- a language CAN itself be seen as inherently having some property if it's defined so that its every implementation has to have this property, at least practically speaking. Dynamic typing for example means the language will be generally slower because operations on variables will inevitably require some extra runtime checks of what's stored in the variable. A very complicated language just cannot be implemented in a simple, non-bloated way, an extremely high level and flexible language cannot be implemented to be among the fastest -- so in the end we also partially speak about languages as such because eventually implementations just reflect the abstract language's properties. **How to tell if a language is bloated?** One can get an idea from several things, e.g. list of features, [paradigm](paradigm.md), size of its implementations, number of implementations, size of the specification, year of creation ([newer](modern.md) mostly means more bloat) and so on. However be careful, many of these are just heuristics, for example small specification may just mean it's vague. Even a small self hosted implementation doesn't have to mean the language is small -- imagine e.g. a language that just does what you write in plain English; such language will have just one line self hosted implementation: "Implement yourself." But to actually [bootstrap](boot.md) the language will be immensely difficult and will require a lot of bloat.
Judging languages may further be complicated by the question of what the language encompasses because some languages are e.g. built on relatively small "pure language" core while relying on a huge library, preprocessor, other embedded languages and/or other tools of the development environment coming with the language -- for example [POSIX shell](posix_shell.md) makes heavy use of separate programs, utilities that should come with the POSIX system. Similarly [Python](python.md) relies on its huge library. So sometimes we have to make it explicitly clear about this.
@ -124,6 +124,8 @@ Here is a table of notable programming languages in chronological order (keep in
| [uxntal](uxn.md) | **yes** but SJW | 2021 | 400 (official) | 2? (est.), proprietary | assembly lang. for a minimalist virtual machine, PROPRIETARY SPEC. |
| **[comun](comun.md)** | **yes** | 2022 | < 3K | 2, CC0 | "official" [LRS](lrs.md) language, WIP, similar to Forth |
TODO: add "relative speed" column, make some kinda benchmark program and say how many times each languages is slower than C
TODO: Tcl, Rebol
## Interesting Languages

File diff suppressed because it is too large Load Diff

@ -1,3 +1,7 @@
# Right
See [left vs right](left_right.md).
you may be looking for:
- [left vs right](left_right.md)
- [rights culture](rights_culture.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: 571
- number of commits: 763
- total size of all texts in bytes: 3588446
- total number of lines of article texts: 28002
- number of articles: 572
- number of commits: 764
- total size of all texts in bytes: 3598004
- total number of lines of article texts: 28028
- number of script lines: 262
- occurences of the word "person": 8
- occurences of the word "nigger": 72
@ -14,7 +14,7 @@ longest articles:
- [c_tutorial](c_tutorial.md): 124K
- [capitalism](capitalism.md): 64K
- [how_to](how_to.md): 56K
- [how_to](how_to.md): 64K
- [chess](chess.md): 56K
- [less_retarded_society](less_retarded_society.md): 52K
- [number](number.md): 52K
@ -35,60 +35,73 @@ longest articles:
top 50 5+ letter words:
- which (2059)
- there (1562)
- people (1357)
- other (1124)
- example (1082)
- which (2064)
- there (1565)
- people (1359)
- other (1126)
- example (1086)
- software (1042)
- number (997)
- about (930)
- about (932)
- program (839)
- their (774)
- their (775)
- called (723)
- because (701)
- would (699)
- computer (695)
- simple (676)
- because (705)
- computer (701)
- would (700)
- simple (683)
- being (669)
- numbers (668)
- being (668)
- things (653)
- things (659)
- language (652)
- without (627)
- programming (618)
- without (629)
- programming (619)
- function (614)
- something (599)
- something (601)
- however (590)
- these (582)
- different (572)
- system (535)
- world (534)
- these (583)
- different (573)
- system (538)
- world (535)
- should (529)
- games (528)
- games (529)
- point (519)
- doesn (507)
- society (505)
- though (495)
- though (496)
- memory (489)
- drummyfish (474)
- while (471)
- drummyfish (470)
- using (468)
- course (456)
- course (458)
- still (456)
- technology (455)
- still (452)
- similar (449)
- similar (451)
- simply (443)
- possible (438)
- possible (441)
- https (428)
- really (410)
- computers (401)
- extremely (398)
- computers (398)
- usually (396)
- value (394)
- usually (394)
latest changes:
```
Date: Thu Apr 11 18:01:06 2024 +0200
czechia.md
exercises.md
how_to.md
interesting.md
jokes.md
love.md
main.md
mouse.md
random_page.md
science.md
wiki_pages.md
wiki_stats.md
Date: Tue Apr 9 21:36:40 2024 +0200
computer.md
czechia.md
@ -108,20 +121,6 @@ Date: Sun Apr 7 20:25:34 2024 +0200
random_page.md
wiki_pages.md
wiki_stats.md
Date: Sat Apr 6 22:21:54 2024 +0200
21st_century.md
c_pitfalls.md
doom.md
exercises.md
faq.md
interesting.md
main.md
marketing.md
often_confused.md
people.md
race.md
random_page.md
wiki_pages.md
```
most wanted pages:
@ -150,8 +149,8 @@ most wanted pages:
most popular and lonely pages:
- [lrs](lrs.md) (270)
- [capitalism](capitalism.md) (202)
- [c](c.md) (201)
- [capitalism](capitalism.md) (201)
- [bloat](bloat.md) (198)
- [free_software](free_software.md) (163)
- [game](game.md) (136)
@ -161,15 +160,15 @@ most popular and lonely pages:
- [modern](modern.md) (87)
- [computer](computer.md) (87)
- [minimalism](minimalism.md) (86)
- [linux](linux.md) (85)
- [linux](linux.md) (86)
- [programming](programming.md) (79)
- [free_culture](free_culture.md) (79)
- [fun](fun.md) (77)
- [math](math.md) (76)
- [gnu](gnu.md) (75)
- [gnu](gnu.md) (76)
- [public_domain](public_domain.md) (74)
- [foss](foss.md) (74)
- [censorship](censorship.md) (73)
- [censorship](censorship.md) (74)
- [programming_language](programming_language.md) (70)
- [hacking](hacking.md) (70)
- [fight_culture](fight_culture.md) (68)

@ -45,7 +45,7 @@ And the bad things are (see also this site: http://digdeeper.club/articles/wikip
- Wikipedia is **too popular** which has the negative side effect of becoming a **political battlefield**. This is one of the reasons why there has to be a lot of **bureaucracy**, including things such as **locking of articles** and the inability to edit everything. Even if an article can technically be edited by anyone, there are many times people watching and reverting changes on specific articles. So Wikipedia can't fully proclaim it can be "edited by anyone".
- Wikipedia is **hard to read**. The articles go to great depth and mostly even simple topics are explained with a great deal of highly technical terms so that they can't be well understood by people outside the specific field, even if the topic could be explained simply (Simple English Wikipedia tries to fix this a little bit at least). Editors try to include as much information as possible which too often makes the main point of a topic drown in the blablabla. Wikipedia's style is also very formal and "not [fun](fun.md)" to read, which isn't bad in itself but it just is boring to read. Some alternative encyclopedias such as [Citizendium](citizendium.md) try to offer a more friendly reading style. Back in the day Wikipedia used to be written pretty well, check it out e.g. at https://nostalgia.wikipedia.org.
- Wikipedia is **not [public domain](public_domain.md)**. It is licensed under [CC-BY-SA](cc_by_sa.md) which is a [free](free_culture.md) license, but has a few burdening conditions. We belive knowledge shouldn't be owned or burdened by any conditions.
- Even though there are no commercial ads (yet), there regularly appears **political propaganda**, main page just **hard pushes [feminist](feminism.md) shit** as featured images and articles, there appear popups and banners for LGBT/feminist activism and of course all articles are littered with [pseudoleftist](pseudoleft.md) propaganda etc. The issues is it's not just an encyclopedia anymore where you go get your information, it's a group with opinions that's trying to drag you somewhere -- you just go look up some mathematical formula and suddenly you see something like "YAY, LET'S CELEBRATE WOMEN IN AFRICA TODAY", even if it was something you agree with (which it isn't) it's just as annoying and out of place in an encyclopedia as capitalist ads.
- Even though there are no commercial ads (yet), there regularly appears **political propaganda**, main page just **hard pushes [feminist](feminism.md) shit** as featured images and articles, there appear popups and banners for LGBT/feminist activism and of course all articles are littered with [pseudoleftist](pseudoleft.md) propaganda etc. The issues is it's not just an encyclopedia anymore where you go get your information, it's a group with opinions that's trying to drag you somewhere -- you just go look up some mathematical formula and suddenly you see something like "YAY, LET'S CELEBRATE WOMEN IN AFRICA TODAY", even if it was something you agree with (which it isn't) it's just as annoying and out of place in an encyclopedia as capitalist ads. UPDATE: **In 2024 Wikipedia finally put on highly intrusive pop ups and in-text messages begging for money** -- basically like what you see on any porn site -- this means the project is basically dead at this point and they're just milking the corpse -- that's good, Wikipedia certainly won't be missed.
- **Many articles are bought**, there exist companies that offer editing and maintaining certain articles in a way the client desires and of course corporations and politicians take this opportunity -- of course Wikipedia somewhat tries to prevent it but no prevention ever works 100%, so a lot of information on Wikipedia is either highly misleading, untrue, censored or downright fabricated.
## Fun And Interesting Pages

Loading…
Cancel
Save