Update
This commit is contained in:
parent
a179d394ea
commit
b8828f4d2f
12 changed files with 1829 additions and 1803 deletions
|
@ -2,7 +2,7 @@
|
|||
|
||||
*"The most beautiful thing in the world is [freedom of speech](free_speech.md)."* --Diogenes
|
||||
|
||||
Diogenes (412 BC - 323 BC, not to be confused with the other Diogenes that recorded his life) was one of the biggest, most significant ancient Greek [philosophers](philosophy.md), the best known proponent of [Cynicism](cynicism.md) and one of the absolutely most [based](based.md) men in [history](history.md) as by his philosophy he practiced extreme life [minimalism](minimalism.md) (he lived in a barrel), [asceticism](asceticism.md), self-sufficiency, nonconformism, he refused to [work](work.md), [refused all authority](anarchism.md), criticized absolutely everything and was always extremely [logically](logic.md) consistent and behaved in accordance to what he taught, which is really what makes all his critics -- mostly just big [hypocrite](hypocrisy.md) pussies -- so greatly pissed; the philosophy of Diogenes is quite close to [our own ideals](less_retarded_society.md). The word "cynic" itself comes from a word for "[dog](dog.md)" and indeed, Diogenes lived as one, he just roamed the streets barefoot with a stick, he wore a robe that at night he used to cover himself ([two in one](two_in_one.md)), he didn't give a [shit](shit.md) about anything, preached his [wisdom](wisdom.md), he basically didn't own anything as he believed possession only enslaves us and that everything we need is already there in the nature. He didn't seek [popularity](hero_culture.md), approval, wealth or power, he desired [freedom](freedom.md), spiritual and moral purity, he wanted to let go of absolutely all [bullshit](bullshit.md). The man was also pretty [funny](fun.md), reading about him is really on the level of [4chan](4chan.md) humor, more than 2000 years ahead of his time -- Socrates, Plato and Aristotle wrote pages and pages of boring, serious as fuck walls of text; Diogenes overshadowed them all just with a third party record of his existence. Diogenes wrote some stuff, most famously his *Republic* describing an ideal society, however none of his writings sadly survived, we now only know what others have written about him (there are possibly some recounts of the works who have read them). Let's remember we shouldn't call him a [hero](hero_culture.md), that would itself contradict both his and our philosophy, but if we are to see anyone as a good inspiration and moral example, Diogenes is among the best (well, at least in most things, it goes without saying we can't absolutely embrace everything someone ever did).
|
||||
Diogenes (412 BC - 323 BC, not to be confused with the other Diogenes that recorded his life) was one of the biggest, most significant ancient Greek [philosophers](philosophy.md), the best known proponent of [Cynicism](cynicism.md) and one of the absolutely most [based](based.md) men in [history](history.md) as by his philosophy he practiced extreme life [minimalism](minimalism.md) (he lived in a barrel), [asceticism](asceticism.md), self-sufficiency, nonconformism, he refused to [work](work.md), [refused all authority](anarchism.md), criticized absolutely everything and was always extremely [logically](logic.md) consistent and behaved in accordance to what he taught, which is really what makes all his critics -- mostly just big [hypocrite](hypocrisy.md) pussies -- so greatly pissed; the philosophy of Diogenes is quite close to [our own ideals](less_retarded_society.md). The word "cynic" itself comes from a word for "[dog](dog.md)" and indeed, Diogenes lived as one, he just roamed the streets barefoot with a stick, he wore a robe that at night he used to cover himself ([two in one](two_in_one.md)), he didn't give a [shit](shit.md) about anything, preached his [wisdom](wisdom.md), he basically didn't own anything as he believed (and was right) that possession only enslaves us and that everything we need is already there in the nature. He didn't seek [popularity](hero_culture.md), approval, wealth or power, he desired [freedom](freedom.md), spiritual and moral purity, he wanted to let go of absolutely all [bullshit](bullshit.md). The man was also pretty [funny](fun.md), reading about him is really on the level of [4chan](4chan.md) humor, more than 2000 years ahead of his time -- Socrates, Plato and Aristotle wrote pages and pages of boring, serious as fuck walls of text; Diogenes overshadowed them all just with a third party record of his existence. Diogenes wrote some stuff, most famously his *Republic* describing an ideal society, however none of his writings sadly survived, we now only know what others have written about him (there are possibly some recounts of the works who have read them). Let's remember we shouldn't call him a [hero](hero_culture.md), that would itself contradict both his and our philosophy, but if we are to see anyone as a good inspiration and moral example, Diogenes is among the best (well, at least in most things, it goes without saying we can't absolutely embrace everything someone ever did).
|
||||
|
||||
Some famous and/or [interesting](interesting.md) things he did (or at
|
||||
least is said to have done):
|
||||
|
|
|
@ -187,6 +187,7 @@ This is a summary of some main guidelines on how an LRS supporter should behave
|
|||
- **If you can't handle it ethically, don't handle it at all**: In real life many problems don't have a solution, most things in Universe are beyond your control -- things that can't be handled ethically are one of them. Is it OK to take unethical action to achieve something if ethical action won't work? No, just consider the thing unachievable, deal with the consequences, no matter how catastrophic they are. Catastrophic events happen, you don't ever have to behave unethically.
|
||||
- **Behave extremely weird**: for example when talking to a [woman](woman.md), only stare at her vagina, or sometimes just go out and keep walking in circles, sometimes decide to not talk at all for a week and so on. This shows society that you don't have to respect its culture at all, it has to adjust to people not being robots who behave like everyone else, some people may freely decide they want to just climb trees and not talk to anyone ever and so on, society has to respect that.
|
||||
- **Consumption satisfies your instincts, creation satisfies your soul.** You need both. When you're tired, you need to consume -- consume for as long as you please, but know it won't be enough. Consumption alone makes your life empty -- once you're rested, your stomach is full and your balls are empty, you feel a hunger for a higher purpose. It can only be satisfied by selfless creation.
|
||||
- **Stop living in [21st century](21st_century.md)**: Stop living in the radioactive brain [cancer](cancer.md) inducing century, live in the past, watch only old movies, listen only to old music, don't talk to people born after 2000 etc.
|
||||
- **Watch out for [women](woman.md)**, only three things are on their mind: gold, assholes and gold.
|
||||
- ...
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ We can see that e.g. [real time](real_time.md) [Earth](earth.md)-Mars communicat
|
|||
|
||||
{ TFW no [Xonotic](xonotic.md) deathmatches with our Moon friends :( ~drummyfish }
|
||||
|
||||
For things like [Web](web.md), each planet would likely want to have its own "subweb" (distinguished e.g. by [TLDs](tld.md)) and [caches](cache.md) of other planets' webs for quick access. This way a man on Mars wouldn't have to wait 40 minutes for downloading a webpage from the Earh web but could immediately access that webpage's slightly delayed version, which is of course much better.
|
||||
For things like [Web](web.md), each planet would likely want to have its own "subweb" (distinguished e.g. by [TLDs](tld.md)) and [caches](cache.md) of other planets' webs for quick access. This way a man on Mars wouldn't have to wait 40 minutes for downloading a webpage from the Earth web but could immediately access that webpage's slightly delayed version, which is of course much better.
|
||||
|
||||
Research into this has already been ongoing for some time. InterPlaNet is a protocol developed by [NASA](nasa.md) and others to be the basis for interplanetary Internet.
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
Jargon File (also Hacker's Dictionary) is a [computer](computer.md) [hacker](hacking.md) dictionary/compendium that's been written and updated by a number of prominent hackers, such as [Richard Stallman](rms.md) and [Erik S Raymond](esr.md), since 1970. It is a chiefly important part of hacker culture and has also partly inspired [this very wiki](lrs_wiki.md).
|
||||
|
||||
{ A similar but smaller encyclopedia is at https://www.erzo.org/shannon/writing/csua/encyclopedia.html (originally and encyclopedia at soda.csua.berkeley.edu). ~drummyfish }
|
||||
{ A similar but smaller encyclopedia is at https://www.erzo.org/shannon/writing/csua/encyclopedia.html (originally an encyclopedia at soda.csua.berkeley.edu). ~drummyfish }
|
||||
|
||||
The work informally states it's in the [public domain](pd.md) and some people have successfully published it commercially, although there is no standard [waiver](waiver.md) or [license](license.md) -- maybe because such waivers didn't really exist at the time it was started -- and so we have to suppose it is NOT formally [free as in freedom](free_culture.md). Nevertheless it is freely accessible e.g. at [Project Gutenberg](gutenberg.md) and no one will bother you if you share it around... we just wouldn't recommend treating it as true public domain.
|
||||
|
||||
|
|
2
loc.md
2
loc.md
|
@ -1,6 +1,6 @@
|
|||
# Lines of Code
|
||||
|
||||
Lines of code (LOC, KLOC = 10K LOC, MLOC = 1M LOC etc., also SLOC = source LOC) are a metric of software [complexity](complexity.md) that simply counts the number of lines of program's [source code](source_code.md). It is not a perfect measure but despite some [soyboys](soydev.md) shitting on it it's actually pretty good, espcially when using only one language ([C](c.md)) with consistent [formatting style](code_formatting.md).
|
||||
Lines of code (LOC, KLOC = 10K LOC, MLOC = 1M LOC etc., also SLOC = source LOC) are a metric of software [complexity](complexity.md) that simply counts the number of lines of program's [source code](source_code.md). It is not a perfect measure but despite some [soyboys](soydev.md) shitting on it it's actually pretty good, especially when using only one language ([C](c.md)) with consistent [formatting style](code_formatting.md).
|
||||
|
||||
Of course the metric becomes shitty when you have a project in 20 programming languages written by 100 pajeets out of which every one formats code differently. Also when you use it as a [productivity](productivity_cult.md) measure at [work](work.md) then you're guaranteed your devs are gonna just shit our as much meaningless code as possible in which case the measure fails again. Fortunately, at [LRS](lrs.md) we don't have such problems :)
|
||||
|
||||
|
|
|
@ -56,7 +56,8 @@ There are many terms that are very similar and can many times be used interchang
|
|||
- **[declaration](declaration.md)** vs **[definition](definition.md)**
|
||||
- **[demo](demo.md)** vs **[intro](intro.md)**
|
||||
- **[democracy](democracy.md)** vs **[voting](voting.md)**
|
||||
- **[desktop environment](de.md)** vs **[window manager](wm.md)**
|
||||
- **demonstration** vs **[proof](proof.md)**
|
||||
- **[desktop environment](de.md)** vs **[window manager](wm.md)** vs **[windowing system](windowing_system.md)**
|
||||
- **[duck typing](duck_typing.md)** vs **[weak typing](weak_typing.md)** vs **[dynamic typing](dynamic_typing.md)**
|
||||
- **[digit](digit.md)** vs **[number](number.md)** vs **[value](value.md)** vs **figure** vs **numeral**
|
||||
- **[digital](digital.md)** vs **[electronic](electronics.md)**
|
||||
|
|
|
@ -14,21 +14,32 @@ At high level programming becomes [spiritual](spirituality.md). Check out e.g. [
|
|||
|
||||
*See also [programming tips](programming_tips.md) and [exercises](exercises.md).*
|
||||
|
||||
Anyone can (and probably should) learn at least the basics of programming -- even if you just aim to maintain a small server or make a website, you will probably have to learn how to write a simple [script](script.md), and it won't be too difficult, you can learn this from a programming cookbook, just like you can learn to prepare a simple meal without having to become a master chef. Here however we will now assume you aspire to become a GOOD programmer, that you feel programming is something you want to dedicate part of your life to and that it's something you feel joy about for its own sake. How to tell if you're meant for this? You should just feel it. Every true programmer will be able to tell you the story of when he became charmed, when he first saw a computer and realized its potential, when someone showed him a programming language and at that moment the revelation struck him when he saw: "my God, this machine does EXACTLY what I tell it to." Normal people are just like "oh, that's cool", but the chosen ones just become overwhelmed by excitement, the thought of so many possibilities immediately floods the mind. A normal man perhaps thinks it will simplify his taxes, a true programmer instead can't stop thinking about how to "abuse" (or more correctly *[hack](hacking.md)*) the machine to do something no one thought about before, no matter practical utility, appreciating just the intellectual value. If this is you, read on.
|
||||
|
||||
At first you have to learn two basic rules that have to be constantly on your mind:
|
||||
|
||||
1. **You cannot be a good programmer if you're not good at [math](math.md)** -- real programming is pure math.
|
||||
2. **[Minimalism](minimalism.md) is the most important concept in programming.** If you don't like, support or understand minimalism, don't even think of becoming a programmer.
|
||||
|
||||
OK, now the key thing to becoming a programmer is learning a [programming language](programming_language.md) very well (and learning many of them), however this is not enough (it's only enough for becoming a [coding](coding.md) monkey), you additionally have to have a wider knowledge such as general knowledge of [computers](computer.md) ([electronics](electronics.md), [hardware](hardware.md), theory or [computation](computation.md), [networks](networking.md), ...), tech [history](history.md) and culture ([free software](free_software.md), [hacker cutlure](hacking.md), [free culture](free_culture.md), ...), [math](math.md) and [science](science.md) in general, possibly even society, philosophy etc. Programming is not an isolated topic (only coding is), a programmer has to see the big picture and have a number of other big brain interests such as [chess](chess.md), voting systems, linguistics, physics, [music](music.md) etc. Remember, becoming a good programmer takes a whole life, sometimes even longer.
|
||||
OK, now the key thing to becoming a programmer is learning a **[programming language](programming_language.md)** very well (and learning many of them), however this is not enough (it's only enough for becoming a [coding](coding.md) monkey), you additionally have to have a wider knowledge such as general knowledge of [computers](computer.md) ([electronics](electronics.md), [hardware](hardware.md), theory or [computation](computation.md), [networks](networking.md), ...), tech [history](history.md) and culture ([free software](free_software.md), [hacker cutlure](hacking.md), [free culture](free_culture.md), ...), [math](math.md) and [science](science.md) in general, possibly even society, [philosophy](philosophy.md) etc. Programming is not an isolated topic (only coding is), a programmer has to see the big picture and have a number of other big brain interests such as [chess](chess.md), voting systems, linguistics, physics, [music](music.md) etc. Remember, becoming a good programmer takes a whole life, sometimes even longer.
|
||||
|
||||
**Can you become a good programmer when you're old?** Well, as with everything to become a SERIOUSLY good programmer you should have probably started before the age of 20, the majority of the legend programmers started before 10, it's just like with sports or becoming an excellent musician. But with enough enthusiasm and endurance you can become a pretty good programmer at any age, just like you can learn to play an instrument or run marathon basically at any age, it will just take longer and a lot of energy. You don't even have to aim to become very good, becoming just average is enough to write simple gaymes and have a bit of fun in life :) Just don't try to learn programming because it seems cool, because you want to look like movie haxor, gain followers on youtube or because you need a job -- if you're not having genuine fun just thinking before sleep about how to swap two variables without using a temporary variable, programming is probably not for you. **Can you become a good programmer if you're black or [woman](woman.md)?** No. :D Ok, maybe you can, but all the above applies, don't do it for politics or money or followers -- if you become a seriously based programmer (from [LRS](lrs.md) point of view) of unlikely minority, we'll be more than happy to put an apology here, in ALL CAPS and bold letters :) Hopefully this will inspire someone...
|
||||
|
||||
**Which programming language to start with?** This is the big question. Though languages such as [Python](python.md) or [JavaScript](javascript.md) are objectively really REALLY bad, they are nowadays possibly the easiest way to get into programming -- at least the "mainstream" kind of -- so you may want to just pick one of these two, knowing you'll abandon it later to learn a true language such as [C](c.md) or [Forth](forth.md) (and knowing the bad language will still serve you in the [future](future.md) in some ways, it's not a wasted time). Can you start with C right away? It's probably not impossible for a prodigy but it will be VERY hard and you'll most likely end up failing, overwhelmed, frustrated and never returning to programming again. In *How To Become A Hacker* [ESR](esr.md) actually recommends to learn C, [Lisp](lisp.md) or [Go](golang.md) as the first language, but that recommendation comes to aspiring [hackers](hacking.md), i.e. the most talented and ambitious programmers, so think about whether you fit in this category. Absolutely do NOT even consider [C#](c_sharp.md) (shit, unusable), [Java](java.md) (shit, slow, bloated, unusable), [C++](cpp.md) (like C but shit and more complicated), [Haskell](haskell.md) (not bad but non-traditional, hard), [Rust](rust.md) (shit, bad design, unusable), [Prolog](prolog.md) (lol) and similar languages -- you may explore some of them later tho (the weird ones, not the bad ones). Whichever language you pick for the love of god **avoid [OOP](oop.md)** -- no matter what anyone tells you, when you see a tutorial that uses "classes"/"objects" just move on, learn normal [imperative](imperative.md) programming. OOP is a huge pile of shit meme that you will learn anyway later (because everyone writes it nowadays) so that you see why it's shit and why you shouldn't use it. Also don't let them sell you any kind of new shiny [paradigm](paradigm.md) that's currently trending on [TikTok](tiktok.md) -- learn IMPERATIVE PROGRAMMING and cover your ears when someone talks about anything else.
|
||||
**Which programming language to start with?** This is the big question, it also depends on how talented and hardcore you are. Though languages such as [Python](python.md) or [JavaScript](javascript.md) are objectively really REALLY bad, they are nowadays possibly the easiest way to get into programming -- at least the "mainstream" kind of -- so you may want to just pick one of these two if you just want to start more slow and casual, knowing you'll abandon the language later to learn a real deal such as [C](c.md) or [Forth](forth.md) (and knowing the bad language will still serve you in the [future](future.md) in some ways, it's not a wasted time). Can you start with C right away? It's not impossible for a smart guy but it WILL be hard and there is a big chance you'll end up failing, overwhelmed, frustrated and maybe even never returning to programming again, so be careful. In *How To Become A Hacker* [ESR](esr.md) actually recommends to learn C, [Lisp](lisp.md) or [Go](golang.md) as the first language, but that recommendation really comes to aspiring [hackers](hacking.md), i.e. the most talented and ambitious programmers, so think about whether you fit in this category. Absolutely do NOT even consider [C#](c_sharp.md) (shit, unusable), [Java](java.md) (shit, slow, bloated, unusable), [C++](cpp.md) (like C but shit and more complicated), [Haskell](haskell.md) (not bad but non-traditional, hard), [Rust](rust.md) (shit, bad design, unusable), [Prolog](prolog.md) (lol) and similar languages -- you may explore some of them later tho (the weird ones, not the bad ones). Whichever language you pick for the love of god **avoid [OOP](oop.md)** -- no matter what anyone tells you, when you see a tutorial that uses "classes"/"objects" just move on, learn normal [imperative](imperative.md) programming. OOP is a huge pile of shit meme that you will learn anyway later (because everyone writes it nowadays) so that you see why it's shit and why you shouldn't use it. Also don't let them sell you any kind of new shiny [paradigm](paradigm.md) that's currently trending on [TikTok](tiktok.md) -- learn IMPERATIVE PROGRAMMING and cover your ears when someone talks about anything else. So to sum up, here are some comments on individual languages you might consider:
|
||||
|
||||
{ I really started programming in [Pascal](pascal.md) at school, it was actually a good language as it worked very similarly to C and the transition later wasn't that hard, but nowadays learning Pascal doesn't make much sense anymore. ~drummyfish }
|
||||
- [C](c.md): Hardcore choice, only for the real smarts. It's a very good language and you will have to learn it one day anyway, but for absolute beginners may be too much to handle.
|
||||
- [Python](python.md): Objectively ugly but extremely beginner friendly, simple to use, quite simple to learn, will teach you all the basic concepts. Relaxed choice but you have to keep in mind you'll switch one day.
|
||||
- [JavaScript](javascript.md): Alternative to Python, similarly friendly to noobs, maybe a tiny bit harder to use, but will allow you to make fun visuals (in web browser) very easily and has a syntax closer to C (so in this learning JavaScript can make you better ready for learning C).
|
||||
- [Pascal](pascal.md): Language that's kind of dead (though not completely) but which is actually quite nice in that it's very close to C while having been designed as an educational language. Still a more difficult language (has pointers, manual [memory management](memory_management.md), static typing, ...). Consider it an alternative to C if Python/JavaScript still look way too shitty to you.
|
||||
- [Lisp](lisp.md): Language that's pretty elegant but dissimilar to other ones here and a bit obscure (for example in that there are MANY different dialects of it), it's nice and useful but also a bit niche. Only consider it if you know a bit what's going on and you have a special reason you'd want to learn it (for example if you're an [Emacs](emacs.md) user).
|
||||
- [Assembly](assembly.md): Really, really hardcore choice, only for the most oldschool masochists who want to learn programming like they did back in the 1960s, from the very [bottom](low_level.md) up. This will be yet harder than C. Probably only consider this if you know you're a borderline genius and love to fiddle with computers at very low level, messing with [hardware](hw.md) and [electronics](electronics.md). Basically if you're aiming to making your own computer from the ground up.
|
||||
- [PHP](php.md): Just to offer yet more choice, however PHP is rather discouraged as it's not a super nice language and is also not as much used anymore. It's simpler than C, in the league of simpler languages, and will allow you to program server side stuff, so maybe look into it if you want to make things on the web, like turn-based browser games or search engines.
|
||||
- [Go](golang.md): Rather discouraged but offered for more variety, it will be on the level of C and is actually marketed as "new C", however it has some [modern](modern.md) shit, really only consider Go if for some reason you want to learn a harder, lower level language while really really refusing to learn the other languages like C and Pascal for some weird reason.
|
||||
|
||||
**[Games](game.md) are an ideal start [project](project.md)** because they're [fun](fun.md) (having fun makes learning much faster and enjoyable), there are many noob tutorials all over the Internet etc. However keep in mind to **start EXTREMELY simple.** -- this can't be stressed enough, most people are very impatient and eager and start making an RPG game or networking library without really knowing a programming language -- this is a GUARANTEED spectacular failure. At the beginning think in terms of "snake" and "minesweeper". Your very first project shouldn't even use any [GUI](gui.md), it should be purely [command-line](cli.md) text program, so a text-only tiny interactive story in [Python](python.md) is possibly the absolutely best choice as a first project. Once you're more comfortable you may consider to start using graphics, e.g. Python + [Pygame](pygame.md), but still [KEEP IT SIMPLE](kiss.md), make a flappy bird clone or something. As you progress, consider perhaps buying a simple toy computer such as an [open console](open_console.md) -- these toys are closer to old computers that had no operating systems etc., they e.g. let you interact directly with hardware and teach you a LOT about good programming by teaching you how computers actually work under the hood. One day you will have to make the big step and **learn [C](c.md)**, the best and most important language as of yet, but be sure to only start learning it when you're at least intermediate in your start language (see our [C tutorial](c_tutorial.md)). To learn C we recommend our [SAF](saf.md) library which will save you all headaches of complex APIs and your games will be nice and compatible with you small toy computers.
|
||||
{ I really started programming in [Pascal](pascal.md) at school, it was actually a good language as it worked very similarly to C and the transition later wasn't that hard. ~drummyfish }
|
||||
|
||||
As with everything, you learn by doing -- reading is extremely important and necessary, but to actually learn anything you have to spend thousands of hours practicing the art yourself. So **program, program and program**, live by programming, look for ways of using programming in what you're already doing, try to automatize anything you do, think about programming before sleep etc. If you can, **contribute to some project**, best if you can help your favorite [FOSS](foss.md) program -- try this at least once as being in the company of the experienced just teaches you like nothing else, a month spent contributing to a project may be worth a year of just reading books.
|
||||
**[Games](game.md) are an ideal start [project](project.md)** because they're [fun](fun.md) (having fun makes learning much faster and enjoyable), there are many noob tutorials all over the Internet etc. However keep in mind to **start EXTREMELY simple.** -- this can't be stressed enough, most people are very impatient and eager and start making an RPG game or networking library without really knowing a programming language -- this is a GUARANTEED spectacular failure. At the beginning think in terms of "snake" and "minesweeper". Your very first project shouldn't even use any [GUI](gui.md), it should be purely [command-line](cli.md) text program, so a text-only tiny interactive story in [Python](python.md) is possibly the safest choice as a first project -- if you are feeling more ambitious, try to write the same thing but in [C](c.md). Once you're more comfortable you may consider to start using graphics, e.g. Python + [Pygame](pygame.md) (or, again, C + [SAF](saf.md) or [SDL](sdl.md) if you want a better language), but still [KEEP IT SIMPLE](kiss.md), make a flappy bird clone or something. As you progress, consider perhaps buying a simple toy computer such as an [open console](open_console.md) -- these toys are closer to old computers that had no operating systems etc., they e.g. let you interact directly with hardware and teach you a LOT about good programming by teaching you how computers actually work under the hood AND, by having weak hardware, not allowing you to write shitty code. Whatever language you start with, it is unavoidable that one day you will have to make the big step and **learn [C](c.md)**, the most important language as of yet, but if you see you're struggling with a simpler language, be sure to only start learning C when you're at least intermediate in your start language (see our [C tutorial](c_tutorial.md)). To learn C we recommend our [SAF](saf.md) library which will save you all headaches of complex APIs and your games will be nice and compatible with you small toy computers.
|
||||
|
||||
As with everything, you learn by doing -- reading is extremely important and necessary, but to actually learn anything you have to spend thousands of hours practicing the art yourself. So **program, program and program**, live by programming, look for ways of using programming in what you're already doing, try to automatize anything you do, think about programming before sleep etc. If you can, **contribute to some project**, best if you can help your favorite [FOSS](foss.md) program -- try this at least once as being in the company of the experienced just teaches you like nothing else, a month spent contributing to a project may be worth two or three years of just reading books. If you're [extremely asocial](avpd.md), the alternative is to just [fork](fork.md) someone else's program and trying to modify it -- this way you'll at least learn to understand someone else's code and you'll see how someone experienced writes the code.
|
||||
|
||||
TODO
|
3483
random_page.md
3483
random_page.md
File diff suppressed because it is too large
Load diff
|
@ -1,9 +1,15 @@
|
|||
# Raycasting
|
||||
|
||||
In [computer graphics](graphics.md) raycasting refers to a rendering technique in which we determine which parts of the scene should be drawn according to which parts of the scene are hit by rays cast from the camera. This is based on the idea that we can trace rays of light that enter the camera by going backwards, i.e. starting from the camera towards the parts of the scene that reflected the light. The term raycasting specifically has two main meanings:
|
||||
In [computer graphics](graphics.md) raycasting refers to a rendering technique in which we determine which parts of the scene should be drawn according to which parts of the scene are hit by rays cast from the camera; it is a simpler version of **[raytracing](raytracing.md)**. The whole idea is based on the observation that we can trace rays of light that enter the camera by going BACKWARDS, i.e. instead of tracing light from light sources we rather start from the camera and go towards the parts of the scene that reflected the light (by which we ensure we are only considering the RELEVANT paths of light that actually end up hitting the camera) -- that is we are asking the question "in order for this screen pixel to light up, where would the light be coming from?", and then computing the answer to the question. A simplified way to quickly imagine what's going on is therefore to think of drawing the scene via "scanning" it with some kind of laser beam. Despite perhaps sounding intimidating at first, raycasting is one of the [simplest](minimalism.md) rendering methods, and for that it is also quite elegant -- [we](lrs.md) definitely do recommend it.
|
||||
|
||||
- **[3D](3d.md) raycasting**: [Algorithm](algorithm.md) that works the same as [raytracing](raytracing.md) but without [recursion](recursion.md). I.e. raycasting is simpler than raytracing and only casts primary rays (those originating from the camera), hence, unlike in raytracing, there are no shadows, reflections and refractions. Raytracing is the extension of raycasting.
|
||||
- **[2D](2d.md) raycasting**: Technique for rendering so called "[pseudo3D](pseudo3D.md)" (primitive 3D) graphics, probably best known from the old [game](game.md) Wolf3D (predecessor of [Doom](doom.md)). The principle of casting the rays is the same but we only limit ourselves to casting the rays within a single 2 dimensional plane and render the environemnt by columns (unlike the 3D variant that casts rays and renders by individual pixels).
|
||||
Raycasting is an **image order** rendering method, meaning that we iterate over the pixels of the screen and for each determine its [color](color.md) (as opposed to object order methods that iterate over 3D objects that are then "pasted" to the screen). I.e. the image can be drawn in any order -- let's say from top left to bottom right -- and without drawing any pixel more than once or leaving out any. This is advantageous as we may leave out [double buffering](double_buffering.md) and save A LOT of memory on the extra frame buffer. We may also utilize for example [frameless rendering](frameless.md). All these attributes are why we consider raycasting so nice.
|
||||
|
||||
Now it's important to mention that among graphics programmers the term raycasting has come to have two meanings:
|
||||
|
||||
- **[3D](3d.md) raycasting**: Casts a ray for each pixels of the screen. I.e. this works the same as traditional [raytracing](raytracing.md) but without [recursion](recursion.md). I.e. raycasting is simpler than raytracing and only casts so called primary rays (those originating from the camera), hence, unlike in raytracing, there are no shadows, reflections and refractions. So raytracing is the extension of raycasting. Similarly to raytracing this kind of raycasting is considered slow as it requires casting screen width times screen height rays (one for each pixel) every frame, but it must be said this is a lot due to fact that [GPUs](gpu.md) are built for different kind of rendering, so raycasting many times ends up being implemented in [software](sw_rendering.md). As an image order method there is actually a good potential for raycasting to be [parallelized](parallelism.md) (the rays may in theory be cast simultaneously), so with special hardware raycasting could be quite fast. With nice tricks and [optimizations](optimization.md) (hierarchical accelerating structures, subsampling, mathematically simple shapes, ...) however even software raycasting may be used for real time rendering.
|
||||
- **[2D](2d.md) raycasting** (also called 1D raycasting): Technique for rendering so called "[pseudo3D](pseudo3D.md)" (primitive 3D) graphics, probably best known from the old [game](game.md) [Wolf3D](wolf3d.md) (predecessor of [Doom](doom.md)), also used in [Anarch](anarch.md). The principle of casting the rays is still the same but we only limit ourselves to casting them within a single 2 dimensional plane and render the environemnt by columns (unlike the 3D variant that casts rays and renders by individual pixels). I.e. we are [cheating](cheating.md) a bit -- instead of casting a ray for each screen pixel we only cast a ray for each screen COLUMN and so we reduce the full 3D raycasting into a fewer dimensional one and use clever tricks to still keep it looking "3D". Of course this introduces some limitation (like not being able to rotate camera up and down) but makes the method MUCH faster -- so fast it was used for real time "3D" rendering on the early 90s computers. Additionally this method may be greatly improved to make it yet more awesome -- for example it's possible to add some verticality to the environments by casting a few extra rays for each column.
|
||||
|
||||
**If it's so awesome, why isn't it used in the [mainstream](mainstream.md)?** As always because mainstream is [shit](shit.md) -- it rather settled on the more ugly but business friendly rasterization of polygonal models -- probably the main reason is that with rasterization companies can split people into graphics programmers, who just program a rasterizer, and graphic artists, who can make whatever 3D model out of polygons without caring about technical details. Raycasting is more of an [art](art.md) requiring individual tweaks to each program and considering the technical side when making the 3D models. [Capitalism](capitalism.md) does ugly things to produce huge quantities of products to be [consumed](consumerism.md), it never cares about efficiency, elegance or beauty of art.
|
||||
|
||||
## 2D Raycasting
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# Steve Jobs
|
||||
|
||||
*"I'm not glad he'd dead, but I'm glad he's gone."* -- [Richard Stallman](rms.md)
|
||||
*"I'm not glad he's dead, but I'm glad he's gone."* -- [Richard Stallman](rms.md)
|
||||
|
||||
Steve Jobs (also Steve Jewbs) was the prototypical evil [CEO](ceo.md) dictator and co-founder of one of the worst [corporations](corporation.md) in the world: [Apple](apple.md). He was a psychopathic entrepreneur with a [cult of personality](hero_culture.md) that makes [Americans](usa.md) cum. He was mainly known for his ability to manipulate people and he worsened technology by making it more consumerist, expensive and incompatible with already existing technology. All americans masturbate daily to Steve Jobs so he can also be considered the most famous US porn star. Someone once said that there are essentially two types of men in technology: those who understand what they don't manage and those who manage what they don't understand. Jobs was the latter.
|
||||
|
||||
|
|
File diff suppressed because one or more lines are too long
100
wiki_stats.md
100
wiki_stats.md
|
@ -2,10 +2,10 @@
|
|||
|
||||
This is an autogenerated article holding stats about this wiki.
|
||||
|
||||
- number of articles: 592
|
||||
- number of commits: 876
|
||||
- total size of all texts in bytes: 4287328
|
||||
- total number of lines of article texts: 32707
|
||||
- number of articles: 593
|
||||
- number of commits: 877
|
||||
- total size of all texts in bytes: 4292310
|
||||
- total number of lines of article texts: 32718
|
||||
- number of script lines: 294
|
||||
- occurrences of the word "person": 7
|
||||
- occurrences of the word "nigger": 93
|
||||
|
@ -26,7 +26,7 @@ longest articles:
|
|||
- [3d_model](3d_model.md): 40K
|
||||
- [bloat](bloat.md): 36K
|
||||
- [internet](internet.md): 36K
|
||||
- [woman](woman.md): 32K
|
||||
- [woman](woman.md): 36K
|
||||
- [main](main.md): 32K
|
||||
- [history](history.md): 32K
|
||||
- [random_page](random_page.md): 32K
|
||||
|
@ -35,60 +35,75 @@ longest articles:
|
|||
|
||||
top 50 5+ letter words:
|
||||
|
||||
- which (2426)
|
||||
- there (1853)
|
||||
- people (1655)
|
||||
- example (1447)
|
||||
- other (1318)
|
||||
- number (1236)
|
||||
- about (1159)
|
||||
- software (1150)
|
||||
- which (2427)
|
||||
- there (1861)
|
||||
- people (1660)
|
||||
- example (1448)
|
||||
- other (1319)
|
||||
- number (1237)
|
||||
- about (1161)
|
||||
- software (1155)
|
||||
- program (976)
|
||||
- because (901)
|
||||
- their (889)
|
||||
- would (885)
|
||||
- because (905)
|
||||
- their (893)
|
||||
- would (887)
|
||||
- called (827)
|
||||
- language (822)
|
||||
- being (813)
|
||||
- something (809)
|
||||
- being (808)
|
||||
- things (804)
|
||||
- numbers (801)
|
||||
- simple (767)
|
||||
- computer (752)
|
||||
- simple (768)
|
||||
- computer (753)
|
||||
- without (723)
|
||||
- programming (712)
|
||||
- function (707)
|
||||
- these (683)
|
||||
- different (678)
|
||||
- however (666)
|
||||
- system (647)
|
||||
- world (628)
|
||||
- doesn (619)
|
||||
- should (614)
|
||||
- system (650)
|
||||
- world (629)
|
||||
- doesn (621)
|
||||
- should (615)
|
||||
- while (593)
|
||||
- point (588)
|
||||
- games (583)
|
||||
- society (580)
|
||||
- games (580)
|
||||
- drummyfish (563)
|
||||
- simply (557)
|
||||
- using (552)
|
||||
- though (548)
|
||||
- still (547)
|
||||
- still (548)
|
||||
- possible (540)
|
||||
- memory (525)
|
||||
- memory (523)
|
||||
- similar (520)
|
||||
- https (517)
|
||||
- course (508)
|
||||
- course (510)
|
||||
- value (503)
|
||||
- technology (498)
|
||||
- always (495)
|
||||
- basically (487)
|
||||
- always (497)
|
||||
- basically (488)
|
||||
- really (479)
|
||||
- probably (472)
|
||||
- first (474)
|
||||
|
||||
latest changes:
|
||||
|
||||
```
|
||||
Date: Fri Sep 6 15:31:02 2024 +0200
|
||||
ai.md
|
||||
doom.md
|
||||
exercises.md
|
||||
free_software.md
|
||||
gnu.md
|
||||
law.md
|
||||
lgbt.md
|
||||
main.md
|
||||
optimization.md
|
||||
random_page.md
|
||||
wiki_pages.md
|
||||
wiki_stats.md
|
||||
windows.md
|
||||
woman.md
|
||||
Date: Thu Sep 5 21:54:17 2024 +0200
|
||||
art.md
|
||||
chess.md
|
||||
|
@ -111,17 +126,6 @@ Date: Thu Sep 5 21:54:17 2024 +0200
|
|||
wiby.md
|
||||
wiki_pages.md
|
||||
wiki_stats.md
|
||||
Date: Tue Sep 3 15:31:10 2024 +0200
|
||||
brain_software.md
|
||||
diogenes.md
|
||||
gnu.md
|
||||
main.md
|
||||
random_page.md
|
||||
wiki_pages.md
|
||||
wiki_stats.md
|
||||
Date: Mon Sep 2 20:43:40 2024 +0200
|
||||
ai.md
|
||||
approximation.md
|
||||
```
|
||||
|
||||
most wanted pages:
|
||||
|
@ -150,10 +154,10 @@ most wanted pages:
|
|||
most popular and lonely pages:
|
||||
|
||||
- [lrs](lrs.md) (298)
|
||||
- [capitalism](capitalism.md) (246)
|
||||
- [capitalism](capitalism.md) (247)
|
||||
- [c](c.md) (221)
|
||||
- [bloat](bloat.md) (214)
|
||||
- [free_software](free_software.md) (177)
|
||||
- [free_software](free_software.md) (179)
|
||||
- [game](game.md) (142)
|
||||
- [suckless](suckless.md) (140)
|
||||
- [proprietary](proprietary.md) (125)
|
||||
|
@ -162,20 +166,20 @@ most popular and lonely pages:
|
|||
- [kiss](kiss.md) (98)
|
||||
- [modern](modern.md) (95)
|
||||
- [gnu](gnu.md) (93)
|
||||
- [fun](fun.md) (93)
|
||||
- [linux](linux.md) (92)
|
||||
- [fun](fun.md) (92)
|
||||
- [programming](programming.md) (90)
|
||||
- [censorship](censorship.md) (90)
|
||||
- [math](math.md) (87)
|
||||
- [math](math.md) (88)
|
||||
- [fight_culture](fight_culture.md) (83)
|
||||
- [hacking](hacking.md) (82)
|
||||
- [free_culture](free_culture.md) (82)
|
||||
- [fight_culture](fight_culture.md) (82)
|
||||
- [less_retarded_society](less_retarded_society.md) (81)
|
||||
- [hacking](hacking.md) (81)
|
||||
- [bullshit](bullshit.md) (81)
|
||||
- [shit](shit.md) (80)
|
||||
- [art](art.md) (78)
|
||||
- [public_domain](public_domain.md) (77)
|
||||
- [corporation](corporation.md) (77)
|
||||
- [public_domain](public_domain.md) (76)
|
||||
- [programming_language](programming_language.md) (75)
|
||||
- [foss](foss.md) (75)
|
||||
- [internet](internet.md) (73)
|
||||
|
|
Loading…
Reference in a new issue