diff options
| Commit | 3e42b21587d675736439d9240c8389c22efa1a5f (patch) | |
|---|---|---|
| Author | 2025-08-17 21:32:26 +0300 | |
| Committer | 2025-08-17 21:32:26 +0300 | |
| Files | 9a1b091c8bbad6e46deab2c111719917ab9337c6 /src/blog | |
| syndamia.com-3e42b21587d675736439d9240c8389c22efa1a5f.tar syndamia.com-3e42b21587d675736439d9240c8389c22efa1a5f.tar.gz syndamia.com-3e42b21587d675736439d9240c8389c22efa1a5f.zip | ||
| Parent | 996110806ba5df44c63e64d34510036670a64765 (diff) | |
feat(blog): Converted about half to dunbar
12 files changed, 724 insertions, 603 deletions
diff --git a/src/blog/2.6-years-of-web-design/index.md b/src/blog/2.6-years-of-web-design/index.du index 109d6d7..10d1237 100644 --- a/src/blog/2.6-years-of-web-design/index.md +++ b/src/blog/2.6-years-of-web-design/index.du @@ -1,17 +1,23 @@ # 2.6 years of web design -## Contents +'define expected-reading 13 min +'define created 23 December 2022 +'define edited 23 December 2022 +[$pagenav] -1. [v1.0](#v1.0) -2. [v2.0](#v2.0) -3. [v2.1](#v2.1) -4. [v2.2](#v2.2) -5. [v3.0](#v3.0) -6. [v3.1](#v3.1) -7. [now](#now) -8. [Appendix](#appendix) +:contents +.numbered +1. [url #v1.0 v1.0] +2. [url #v2.0 v2.0] +3. [url #v2.1 v2.1] +4. [url #v2.2 v2.2] +5. [url #v3.0 v3.0] +6. [url #v3.1 v3.1] +7. [url #now now] +8. [url #appendix Appendix] -On 17 May 2020 I [pushed the very first version of this website](https://gitlab.com/Syndamia/syndamiadotcom/-/commit/f2d3991cf3381d4d794b3faa2890439bb70af729), which went live 3 days later. + +On 17 May 2020 I [url https://gitlab.com/Syndamia/syndamiadotcom/-/commit/f2d3991cf3381d4d794b3faa2890439bb70af729 pushed the very first version of this website], which went live 3 days later. The whole idea of making my own website came on a whim: I had recently turned 18 and spent some of my money on getting a small VPS (which was primarily used for cloud storage). There was no plan and I had never done anything like it, so a shitty website was to be expected. @@ -19,66 +25,66 @@ There was no plan and I had never done anything like it, so a shitty website was Looking back at it now, that first design's color palette was comprised of three dull grey colors, which didn't contrast very much on the white font: - +[image ./img/v1.0-index.png] For code blocks, the background was a dark-blue color with a blue-ish font color, absolutely horrible for readability: - +[image ./img/v1.0-code\ block.png] -Although I wasn't the one to invent that color scheme, it was *inspired* from [xed](https://github.com/linuxmint/xed)'s Oblivion theme. +Although I wasn't the one to invent that color scheme, it was *[inspired]* from [url https://github.com/linuxmint/xed xed]'s Oblivion theme. It wasn't all completely bonkers, there were some not-so-ugly design decisions. Navigation was done with tabs, which look decently nice on a desktop. On blog posts, and especially on those with multiple pages, you would have the title on the left, and a close button on the right, "mimicking" a browser window. - +[image ./img/v1.0-tutorial-page.png] As you can imagine, this was a scalability nightmare. If the title was too long or there were too many pages, stuff would overlap in an unreadable manner: - +[image ./img/v1.0-index-smallscreen.png] -You know, if this website was published on [neocities](https://neocities.org/), my desktop-oriented unscaleable layout might've been seen as cool and novel... +You know, if this website was published on [url https://neocities.org/ neocities], my desktop-oriented unscaleable layout might've been seen as cool and novel... Thankfully (or maybe unfortunately), I didn't go down that road. Finally, tables, like those used in the "Projects" listing, were the absolute dumbest: - +[image ./img/v1.0-projects.png] As you can see, the design was overwhelmingly ugly, with many boneheaded decisions behind it. -Did I mention every post had to be written entirely by hand in HTML, except for the headers and footers, which were [**generated client-side with JavaScript**](https://gitlab.com/Syndamia/syndamiadotcom/-/tree/v1.0/website/js)? +Did I mention every post had to be written entirely by hand in HTML, except for the headers and footers, which were [url https://gitlab.com/Syndamia/syndamiadotcom/-/tree/v1.0/website/js =[generated client-side with JavaScript]=]? -Nonetheless, it served as a good starting point and stepping stone, for my web development *adventures*. +Nonetheless, it served as a good starting point and stepping stone, for my web development *[adventures]*. ### v2.0 -Less than two months later, on 21 July, [I did a complete redesign](https://gitlab.com/Syndamia/syndamiadotcom/-/commit/64fbbd514733e42dd047bf65c511563a84ebd629). -To more easily separate the two, I decided to use [releases](https://gitlab.com/Syndamia/syndamiadotcom/-/releases), where a major version would signify a major styling change, and minor versions would be reserved for other important changes, like how the whole website is generated. +Less than two months later, on 21 July, [url https://gitlab.com/Syndamia/syndamiadotcom/-/commit/64fbbd514733e42dd047bf65c511563a84ebd629 I did a complete redesign]. +To more easily separate the two, I decided to use [url https://gitlab.com/Syndamia/syndamiadotcom/-/releases releases], where a major version would signify a major styling change, and minor versions would be reserved for other important changes, like how the whole website is generated. Speaking of generated, I actually went away with the old "system" of manual labour, and turned to technology for aid. -It's all thanks to [Wolfgang's Channel](https://www.youtube.com/@WolfgangsChannel)'s tutorial on making a ["Fast & Minimal Blog"](https://www.youtube.com/watch?v=N_ttw2Dihn8). -There, he showed how to setup and use [ssg](https://www.romanzolotarev.com/ssg.html) with [lowdown](https://kristaps.bsd.lv/lowdown/), a combination that still powers this website. +It's all thanks to [url https://www.youtube.com/@WolfgangsChannel Wolfgang's Channel]'s tutorial on making a [url https://www.youtube.com/watch?v=N_ttw2Dihn8 "Fast & Minimal Blog"]. +There, he showed how to setup and use [url https://www.romanzolotarev.com/ssg.html ssg] with [url https://kristaps.bsd.lv/lowdown/ lowdown], a combination that still powers this website. Turning to the actual website itself, now it looked quite pleasant, in the day at least: - +[image ./img/v2.0-index.png] Rather than using multiple colors for different elements, I went for a monochrome "printed on a piece of paper" look. One might call that regression, but I'd like to think of it as minimalism. Looking at those same code blocks and tables: - - +[image ./img/v2.0-code\ block.png] +[image ./img/v2.0-resume.png] Ay, that's pretty clean! But it should remind you of something. Before, the only time I would work with Markdown files was in GitHub READMEs. So, with that association in place, replicating GitHub's style was a natural choice. -Though that last part wasn't done by me, but by [sindresorhus](https://github.com/sindresorhus/github-markdown-css). +Though that last part wasn't done by me, but by [url https://github.com/sindresorhus/github-markdown-css sindresorhus]. As for the overall design, there isn't too much to say. Yes, the original tab idea kinda lived on, as those buttons at the top, and yes, it still wasn't scaleable, but now it didn't even try to be. - +[image ./img/v2.0-index-smartphone.png] Overall, this made it more "commercialized", soulless (assuming v1.0 had one) and plain old boring. It seems I hit the other end of the spectrum, from ugly but interesting to pleasing but dull. @@ -87,7 +93,7 @@ It seems I hit the other end of the spectrum, from ugly but interesting to pleas Over the following half a year, I wrote a couple more articles, but most importantly the styling was finally made scaleable: - +[image ./img/v2.1-index-smartphone.png] Ignoring my big fat head taking up 70% of the screen, the index page properly fit on a mobile screen! The navigation tabs weren't very symmetrically organized, but at least nothing was overlapping and overflowing over the screen. @@ -95,9 +101,9 @@ The navigation tabs weren't very symmetrically organized, but at least nothing w ### v2.2 Still, by that time I started to get criminally bored by that black and white appearance. -As an avid fan of not hurting my eyes and [gruvbox](https://github.com/morhetz/gruvbox), a color overhaul needed to be done. +As an avid fan of not hurting my eyes and [url https://github.com/morhetz/gruvbox gruvbox], a color overhaul needed to be done. -But I'm getting ahead of myself, we need to sidetrack to a project I was working on at the time of [2.1's release](https://gitlab.com/Syndamia/syndamiadotcom/-/releases/v2.1): [DevHive](https://github.com/Team-Kaleidoscope). +But I'm getting ahead of myself, we need to sidetrack to a project I was working on at the time of [url https://gitlab.com/Syndamia/syndamiadotcom/-/releases/v2.1 2.1's release]: [url https://github.com/Team-Kaleidoscope DevHive]. Sparing you the details, it was a social media app, with detached front-end and back-end. Me and two other guys worked on it for about 5 months, from December 2020 to April 2021, as a course project. @@ -105,23 +111,23 @@ Up until this point, the course I'm talking about almost didn't touch front-end As you might imagine, I was the only one with any idea of web design, meaning I was the "lead designer". This time, however, I wanted to do it a bit more properly, so I made mockups of the final design. -The first was done in [Pencil](https://pencil.evolus.vn/), a somewhat limited application for designing layouts: +The first was done in [url https://pencil.evolus.vn/ Pencil], a somewhat limited application for designing layouts: - +[image ./img/devhive-index-concept1.png] Pretty quickly I turned to actual HTML and CSS, because I needed a more realistic feel of how the actual elements would be laid out. Another idea that came up to mind was using a palette: a certain selection of colors for everything. After talking with the others, I found a decent selection of blue and orange sunset-y colours and got to work. The end result was this beauty: - +[image ./img/devhive-index-concept2.png] Although it looked pretty nice, we decided against it, since the focus was on the back-end, the front-end needed to be simpler. There are also some problems with the color scheme, but more on that later. Then I did what I had already done before: simplified the devil out of it. - +[image ./img/devhive-index-concept3.png] Now this looks way too cartoon-ish, you could make it with a steady hand and a ruler on a sheet of paper. However it made the others happy, so we went along with it. @@ -129,7 +135,7 @@ However it made the others happy, so we went along with it. The overall flatness and emptiness, and general boringness bugged me for a while. Some time later, after messing around for a couple hours, I came up with this: - +[image ./img/devhive-index-concept4.png] A much more modern-looking and feeling concept, completely different from it's comic roots. Unfortunately, we didn't go with it, later we found out it had some issues with certain elements, and the previous idea was already implemented. @@ -150,14 +156,14 @@ I needed something in between the second and third concepts, something which was Coincidentally, at the same time, I was working on a dark colored implementation of my website, using the gruvbox color. Putting two and two together, I came up with this thing; - +[image ./img/devhive-index-concept5.png] Now this looked really nice, somewhat professional even, was very simple and didn't hurt your eyes. Suffice to say, everyone loved it, and we redid everything to look like it. As for my own website, this is what it looked like by the time I made release 2.2: - +[image ./img/v2.2-index.png] There is no point in showing code blocks or other elements, since it was just a change of colors. But boy oh boy how long it took to make such a simple change. @@ -165,31 +171,31 @@ That's where everything stayed for a while. ### v3.0 -Of course, there were changes, I wrote more posts, tweaked some of the styling, hell, I even started adding (**non required**) JavaScript functionality. +Of course, there were changes, I wrote more posts, tweaked some of the styling, hell, I even started adding (=[non required]=) JavaScript functionality. Still, I was yearning for something better. Scalability was continuing to be an issue, outside of the annoying misalignment, navigation buttons in the header or footer would disappear into the void if it's contents were too long: - +[image ./img/v2.2-index-footer-smallwidth.png] This example is unrealistic, but there were times where I wanted to put something longer in the footer button, and this issue arose. Also the whole button idea wasn't very expandable, what if I wanted to have not 6 but more than 20 buttons in the header up top? - +[image ./img/v2.2-index-full-header.png] And don't get me started on how comically bad this is on mobile: - +[image ./img/v2.2-index-full-header-smartphone.png] Something needed to change yet again, and something did. -A year and a third later, on [3 July 2022](https://gitlab.com/Syndamia/syndamiadotcom/-/commit/bde3ebdea6310c891b7e38185906d1a1e03977e4), I went away with the tabbed-like button layout, and opted for a dead simple sidebar: +A year and a third later, on [url https://gitlab.com/Syndamia/syndamiadotcom/-/commit/bde3ebdea6310c891b7e38185906d1a1e03977e4 3 July 2022], I went away with the tabbed-like button layout, and opted for a dead simple sidebar: - +[image ./img/v3.0-index-initial.png] About that useless right border and the weird choice for only left and bottom borders on the sidebar: I wanted some separation for the sidebar and I wanted more "fun" in the overall design. -Most of the inspiration for those came from [Julia Evan's blog](https://jvns.ca/), where there is a big orange ribbon running on the sides and across the page. +Most of the inspiration for those came from [url https://jvns.ca/ Julia Evan's blog], where there is a big orange ribbon running on the sides and across the page. Over time I did more tweaking on the colors and layout of everything, so by the time I created release 3.0, it looked like this: - +[image ./img/v3.0-index.png] A good question you might be asking yourself is "How is this supposed to be scaleable?" The answer is that it kinda of wasn't, at the time. @@ -204,41 +210,41 @@ The whole point of DevHive's final redesign was to use colors for better separat But that completely when over my head when I initially did that 3.0 redesign. Fortunately, it later came back. -It might've been four and a half months later, but I finally [added color separation between the background and article and navbar](https://gitlab.com/Syndamia/syndamiadotcom/-/commit/55afc85bf7da9c0ed5e8859027080aebfa55ec50). +It might've been four and a half months later, but I finally [url https://gitlab.com/Syndamia/syndamiadotcom/-/commit/55afc85bf7da9c0ed5e8859027080aebfa55ec50 added color separation between the background and article and navbar]. - +[image ./img/v3.1-index.png] And about that unfixed scalability? Well, I fixed it, now on a mobile devices, the navbar stays up top, but is shrunk and can be expanded with a button: - +[image ./img/v3.1-index-smartphone.png] Another notable styling change was in tables. -I pretty much stole the design from [LEMMiNO](https://www.lemmi.no/)'s website: +I pretty much stole the design from [url https://www.lemmi.no/ LEMMiNO]'s website: - +[image ./img/v3.1-table.png] Finally, probably the most important change of it all, before I used some bash scripts to automate certain actions in the result HTML files, like generating the description automatically. -Now, this was all done with [awk](https://www.gnu.org/software/gawk/manual/gawk.html), a programming language specifically designed for making text changes to files. -awk's flexibility permitted me to create stuff like [the slide presentation system](/talks/demo.html) without too much trouble. +Now, this was all done with [url https://www.gnu.org/software/gawk/manual/gawk.html awk], a programming language specifically designed for making text changes to files. +awk's flexibility permitted me to create stuff like [url /talks/demo.html the slide presentation system] without too much trouble. ### now As of the writing of this post, not too much has changed since the last release. -There have been new posts, like this one and [Taming the Fun-too](/blog/taming-the-fun-too) but the overall design is here to stay, at least until I learn more about creating web styles and/or get bored of the current one. +There have been new posts, like this one and [url /blog/taming-the-fun-too Taming the Fun-too] but the overall design is here to stay, at least until I learn more about creating web styles and/or get bored of the current one. Happy holidays everyone! ### Appendix This post has been in the works since 01 August 2020. -At the time it was just called ["syndamiadotcom"](https://gitlab.com/Syndamia/syndamiadotcom/-/tree/501942b638c34582de2f73dc31423c9322eb81fd/src/blog/syndamiadotcom) and was listed under the now defunct "Projects" section. -It was actually still available on the website, under `/blog/syndamiadotcom/`, but I didn't list it in the blogs page. +At the time it was just called [url https://gitlab.com/Syndamia/syndamiadotcom/-/tree/501942b638c34582de2f73dc31423c9322eb81fd/src/blog/syndamiadotcom "syndamiadotcom"] and was listed under the now defunct "Projects" section. +It was actually still available on the website, under `[/blog/syndamiadotcom/]`, but I didn't list it in the blogs page. That first iteration looked at the layout in a much stiffer and uninteresting way. I was talking about what exact color codes I used for crying out loud. But it was left as-is because I struggled on how to approach it. -I'm still not entirely happy with this version either, [v2.2](#v2.2) was probably the most interesting and valuable part of the whole thing and the rest was fairly meh. +I'm still not entirely happy with this version either, [url #v2.2 v2.2] was probably the most interesting and valuable part of the whole thing and the rest was fairly meh. Oh well, maybe I'll rewrite it again one day. However, for the time being, I believe it's better for me to expect a bit less and just put stuff out there. @@ -246,4 +252,4 @@ As you saw, learning the little I know about web design was a slow trial and err The same will happen with making blog posts and other articles. I'm not a writer and I'm not interested enough to learn things properly. -*P.S.* Expect this post to be updated in the future, when I make new releases! +*[P.S.]* Expect this post to be updated in the future, when I make new releases! diff --git a/src/blog/bash-is-weird/index.du b/src/blog/bash-is-weird/index.du new file mode 100644 index 0000000..3fe56cb --- /dev/null +++ b/src/blog/bash-is-weird/index.du @@ -0,0 +1,65 @@ +# BASH is weird + +'define expected-reading 4 min +'define created 01 May 2023 +'define edited 02 May 2023 +[$pagenav] + +'footnote parameter-expansion Of course this is just one of the many ways to reference and work with variables. +For very basic stuff, BASH is decently simple and intuitive, for example variables are set with the format `[name=value]` and they're referenced with `[\$name]` [$parameter-expansion]. +However, that changes once you start diving deeper (as I had to do for my [url /talks/linuxgraphy-by-strabo Linuxgraphy by Strabo] presentation). +An example which illustrates my point would be: + +```bash +myvar=($(echo A B C)) +myvar=1234 +echo $((myvar += 46)) ${myvar[\${myvar:0:1}]} + +It has 3 things which really bothered me: + +:ordered +1. The output of `[\$(echo A B C)]` is replaced "literally", and then the whole expression is evaluated. + Meaning, `[myvar=($(echo A B C))]` turns into `[myvar=(A B C)]`, which creates an array with those three letters. + + .p + I thought the "returned" value of `[\$(echo A B C)]` would be the whole string "A B C", so the array would have one element, that string. + However, `[\$()]` isn't really a function, which takes arguments, "creates" commands and returns their output. + It's [url https://www.gnu.org/software/bash/manual/html_node/Command-Substitution.html Command =[Substitution]=], the text gets executed and it's output =[replaces]= the `[\$(...)]` itself (slightly reminiscent of [url https://lispcookbook.github.io/cl-cookbook/macros.html LISP macros]). + + .p + Side note: obviously, the original expected behaviour can happen if we use some quotes: + + ```bash + myvar=("$(echo A B C)") + +2. On the second line, `[myvar]` *[becomes]* an integer and then we do an arithmetic operation on it, nothing wrong here. + `[\${parameter:offset:length}]` returns the substring from `[parameter]` from `[offset]` with size `[length]`, but we're giving it a "number", so it should either throw some sort of error or return something default, like 0. + However it correctly returns the number 1 (and no, that isn't a default, the number is correctly parsed as a string). + + .p + This shows that numbers are actually strings too, and numerical operations are just weird string operations. + Contrary to any dynamically-typed language, it's not like the type of a variable is inferred from it's value, [url https://tldp.org/LDP/abs/html/untyped.html there isn't a type at all]! + Which makes everything even more weird, considering you *[can]* [url https://www.gnu.org/software/bash/manual/bash.html#index-declare create variables with a specific type]. + +3. Finally, the arguably biggest weirdness of it all, is `[\${myvar[1]}]`. + It doesn't matter how it is represented, at first `[myvar]` was the list of values A, B, C and now it's a number, this should return nothing. + Per contra, the value `[B]` is returned instead! + + .p + Via trial and error, we find that our number will be returned when the index is 0, and with index 2 we get `[C]`. + So all variables are arrays, and by default for integer and string operations, the first value is used? + + .p + This is strange, but it cannot be the full picture, because [url https://linux.die.net/Bash-Beginners-Guide/sect_10_01.html names have attributes], alongside it's type, a variable (name) can be read-only, but also have the "trace" flag, which only works with functions. + So, variables and functions are the same "object"? + Unfortunately, I couldn't find any definitive information on the topic, so this train of thought will have to be left unresolved. + + +And this is just one example, more bizarreness can be found with [url https://www.vidarholen.net/contents/blog/?p=25 square brackets] and [url https://mywiki.wooledge.org/BashPitfalls most ok looking code]. +[url https://chrisdone.com/posts/shell-conduit/ Some people] even go as far to say: + +.quote +Its syntax is insane, incredibly error prone, its defaults are awful, and it’s not a real big person programming language. + +But I believe that is a step too far, [url http://www.binaryphile.com/bash/2018/07/26/approach-bash-like-a-developer-part-1-intro.html there are benefits, especially when approaching it seriously]. +Every language has mind-numbing oddities, some get the out of the way from the start (like BASH), and others much later. diff --git a/src/blog/bash-is-weird/index.md b/src/blog/bash-is-weird/index.md deleted file mode 100644 index d0d7190..0000000 --- a/src/blog/bash-is-weird/index.md +++ /dev/null @@ -1,55 +0,0 @@ -# BASH is weird - -For very basic stuff, BASH is decently simple and intuitive, for example variables are set with the format `name=value` and they're referenced with `$name`[^parameter-expansion]. -However, that changes once you start diving deeper (as I had to do for my [Linuxgraphy by Strabo](/talks/linuxgraphy-by-strabo) presentation). -An example which illustrates my point would be: - -```bash -myvar=($(echo A B C)) -myvar=1234 -echo $((myvar += 46)) ${myvar[${myvar:0:1}]} -``` - -It has 3 things which really bothered me: - -1. The output of `$(echo A B C)` is replaced "literally", and then the whole expression is evaluated. - Meaning, `myvar=($(echo A B C))` turns into `myvar=(A B C)`, which creates an array with those three letters. - - I thought the "returned" value of `$(echo A B C)` would be the whole string "A B C", so the array would have one element, that string. - However, `$()` isn't really a function, which takes arguments, "creates" commands and returns their output. - It's [Command **Substitution**](https://www.gnu.org/software/bash/manual/html_node/Command-Substitution.html), the text gets executed and it's output **replaces** the `$(...)` itself (slightly reminiscent of [LISP macros](https://lispcookbook.github.io/cl-cookbook/macros.html)). - - Side note: obviously, the original expected behaviour can happen if we use some quotes: - - ```bash - myvar=("$(echo A B C)") - ``` - -2. On the second line, `myvar` *becomes* an integer and then we do an arithmetic operation on it, nothing wrong here. - `${parameter:offset:length}` returns the substring from `parameter` from `offset` with size `length`, but we're giving it a "number", so it should either throw some sort of error or return something default, like 0. - However it correctly returns the number 1 (and no, that isn't a default, the number is correctly parsed as a string). - - This shows that numbers are actually strings too, and numerical operations are just weird string operations. - Contrary to any dynamically-typed language, it's not like the type of a variable is inferred from it's value, [there isn't a type at all](https://tldp.org/LDP/abs/html/untyped.html)! - Which makes everything even more weird, considering you *can* [create variables with a specific type](https://www.gnu.org/software/bash/manual/bash.html#index-declare). - -3. Finally, the arguably biggest weirdness of it all, is `${myvar[1]}`. - It doesn't matter how it is represented, at first `myvar` was the list of values A, B, C and now it's a number, this should return nothing. - Per contra, the value `B` is returned instead! - - Via trial and error, we find that our number will be returned when the index is 0, and with index 2 we get `C`. - So all variables are arrays, and by default for integer and string operations, the first value is used? - - This is strange, but it cannot be the full picture, because [names have attributes](https://linux.die.net/Bash-Beginners-Guide/sect_10_01.html), alongside it's type, a variable (name) can be read-only, but also have the "trace" flag, which only works with functions. - So, variables and functions are the same "object"? - Unfortunately, I couldn't find any definitive information on the topic, so this train of thought will have to be left unresolved. - -And this is just one example, more bizarreness can be found with [square brackets](https://www.vidarholen.net/contents/blog/?p=25) and [most ok looking code](https://mywiki.wooledge.org/BashPitfalls). -[Some people](https://chrisdone.com/posts/shell-conduit/) even go as far to say: - -> Its syntax is insane, incredibly error prone, its defaults are awful, and it’s not a real big person programming language. - -But I believe that is a step too far, [there are benefits, especially when approaching it seriously](http://www.binaryphile.com/bash/2018/07/26/approach-bash-like-a-developer-part-1-intro.html). -Every language has mind-numbing oddities, some get the out of the way from the start (like BASH), and others much later. - -[^parameter-expansion]: Of course this is just one of the many ways to reference and work with variables. diff --git a/src/blog/encrypted-email/index.du b/src/blog/encrypted-email/index.du new file mode 100644 index 0000000..8102dcf --- /dev/null +++ b/src/blog/encrypted-email/index.du @@ -0,0 +1,174 @@ +# Encrypted email + +'define expected-reading 10 min +'define created 10 September 2022 +'define edited 16 September 2022 +[$pagenav] + +:contents +:numbered +1. [url #encryption-and-signature Encryption and signature] +2. [url #openpgp OpenPGP] + .numbered + 1. [url #pgpinline PGP/Inline] + 2. [url #pgpmime PGP/MIME] + +3. [url #smime S/MIME] +4. [url #reop reop] +5. [url #post-email-systems Post-email systems] +6. [url #centralized-non-email-systems Centralized non-email systems] + .numbered + 1. [url #protonmail Protonmail] + 2. [url #tutanota Tutanota] + +7. [url #conclusion Conclusion] + + + +When you try and look around for articles, regarding encrypted emails, all you'll find is people complaining about it's difficulties and shortcomings. But, no one actually explains what to do if you, nevertheless, want to encrypt your emails! At best most articles will just [url https://www.virtru.com/blog/arent-people-using-email-encryption shove some product up your face]. + +That's why, after a fairly lengthy research process, I've decided to do just that. These are the more common ways to encrypt your email with their strengths and weaknesses. I also wrote a (somewhat rough) [url /tutorials/how-to-encrypt-email tutorial on how to setup] [url #openpgp OpenPGP] or [url #smime S/MIME] in practice. + +*[Note:]* What I'm referring to is end-to-end encryption, where you send an encrypted email, and the recipient decrypts it. Encryption between you and a mail server is practically a given and is setup by the mail server administrator. + +## Encryption and signature + +Unless stated otherwise, all of the listed encryption (and signature) schemes work by utilizing [url https://en.wikipedia.org/wiki/Public-key_cryptography public-key cryptography]. + +In brief, if you are sending an encrypted email, the =[recipient]= needs to have generated a public and private key pair. Then you need to have acquired =[their public key]=. Finally, if you want to send them an encrypted email: + +.numbered +1. You encrypt =[your]= email with =[their public key]= +2. The recipient decrypts =[your]= message with =[their private key]= + +And if someone wants to send =[you]= an encrypted email, =[you]= need to generate a public and private key pair, share =[your public key]= with them, and when you receive the message, decrypt it with =[your private key]=. + +Every email you send can be [url https://en.wikipedia.org/wiki/Digital_signature digitally signed] (not to be confused with [url https://en.wikipedia.org/wiki/Digital_signature electronic signatures]), meaning the message is (cryptographically) "signed", and with this signature, the recipient can check if the message was changed during transit. Digital signatures also use public-key cryptography, but the other way around: + +.numbered +1. You sign =[your]= email with =[your private key]= +2. Then the recipient verifies =[your]= message with =[your public key]=. + +This might sound a bit complicated, but all you need to worry about is you and the recipient generating these public-private key pairs, exchanging public keys, and your email client should handle the rest. And if you use a tool like [url https://www.pep.security/en/ pEp], the creation and exchange of keys can be easily automated. + +## OpenPGP + +By far, the most popular way to encrypt your emails is with [url https://en.wikipedia.org/wiki/Pretty_Good_Privacy OpenPGP]. PGP is the original program which implemented the encryption scheme, while OpenPGP is the standard/encryption scheme, which was created from PGP (so when I say OpenPGP, I mean a program that implements OpenPGP). + +By design, it relies on a [url https://en.wikipedia.org/wiki/Web_of_trust web of trust], the idea being, different people sign each others public keys (sometimes at [url https://en.wikipedia.org/wiki/Key_signing_party key signing parties]), and you know that a specific key corresponds to a specific person, only when a large amount of people have signed it. + +OpenPGP divides the security community quite a lot, some [url https://restoreprivacy.com/let-pgp-die/ abolish it] while other still [url https://arstechnica.com/information-technology/2016/12/signal-does-not-replace-pgp/ defend it], but at the end of the day, it's very widespread and if someone encrypts their email, chances are it's with OpenPGP (unless they're in a business, where [url #smime S/MIME] rules). + +There are two main ways to encrypt an email with OpenPGP: + +### PGP/Inline + +The first is called "PGP/Inline", with which you encrypt only the message itself. That's it. And there are [url https://josefsson.org/inline-openpgp-considered-harmful.html other limitations] too, to name a few: + +.numbered +1. You can't encrypt attachments, period. +2. Your message can only be plain ASCII text characters. So any Unicode character (probably) won't work, and HTML messages are out of the question. + +Though, it's not all bad. If you can survive only sending text to other people, PGP/Inline might be a better option: + +.numbered +1. It's much easier to work with, you can directly copy the encrypted PGP message and decrypt it however you like +2. The other option, PGP/MIME, is much harder to implement properly and there have been cases where [url https://web.archive.org/web/20180625054201/https://www.whonix.org/blog/pgp-inline-vs-mime it's implementation is flawed] + +### PGP/MIME + +"PGP/MIME" is the second option. As it's name suggests, you can encrypt [url https://en.wikipedia.org/wiki/MIME MIME] data with PGP, which by definition means it supports any content type. This includes: + +.numbered +1. Support for Unicode characters and HTML messages +2. Attachments of any type +3. Delivery status report + +Basically, any [url https://en.wikipedia.org/wiki/MIME#Multipart_subtypes multipart subtype]. Also, I should mention, the message structure and all metadata is hidden by design. + +PGP/MIME is capable of a lot more, and is [url https://www.mailpile.is/blog/2014-11-21_To_PGP_MIME_Or_Not.html generally preferred] over PGP/Inline. Nonetheless, it has it's shortcomings: + +.numbered +1. As already mentioned, it is hard to implement and [url https://web.archive.org/web/20180625054201/https://www.whonix.org/blog/pgp-inline-vs-mime flawed implementations] have been made +2. Everything is encrypted together, so you'll need to download the whole email, including all attachments, to decrypt it +3. If your client doesn't support it, manual decryption takes a bit more work + +## S/MIME + +[url https://en.wikipedia.org/wiki/S/MIME S/MIME], roughly said, combines and extends the [url https://en.wikipedia.org/wiki/Cryptographic_Message_Syntax Cryptograhic Message Syntax] encryption scheme and [url https://en.wikipedia.org/wiki/MIME MIME] standard to create a singular, email-oriented standard. + +Unlike OpenPGP it doesn't use a web of trust, but a [url https://en.wikipedia.org/wiki/Public_key_infrastructure Public key infrastructure]. This means that, rather than people exchanging certificates between themselves, a [url https://en.wikipedia.org/wiki/Certificate_authority Certificate Authroity] connects public keys with entities (people or organizations for example). + +So, already, it has a huge advantage, you don't need to exchange keys, since the email client will handle it. S/MIME is most often used by corporations/organizations, so support in commercial mail clients like [url https://support.google.com/a/answer/6374496?hl=en#zippy= Google Workspace Enterprise Edition] and [url https://support.microsoft.com/en-us/office/encrypt-messages-by-using-s-mime-in-outlook-on-the-web-878c79fc-7088-4b39-966f-14512658f480 Outlook Enterprise/Business] ([url https://docs.microsoft.com/en-us/exchange/security-and-compliance/smime-exo/configure-smime-exo?view=o365-worldwide Exchange Online has to be configured] by an administrator and can be used only with [url https://docs.microsoft.com/en-us/deployoffice/endofsupport/microsoft-365-services-connectivity paid clients]) is available. + +On the other hand, you can browse [url https://support.google.com/a/answer/7448393?hl=en&ref_topic=9061730 Google's] and [url https://docs.microsoft.com/en-us/security/trusted-root/participants-list Microsoft's] trusted (root) CAs all you want, but you'll find that there is only one place where you could register a certificate for free: [url https://www.actalis.com/s-mime-certificates.aspx Actalis]. A good tutorial on the procedure can be found [url https://www.dannyguo.com/blog/how-to-get-a-free-s-mime-certificate/ here], but beware, *[they]* generate the private key. + +Otherwise, it's email encryption capabilities are the same as those outlined in [url #pgpmime PGP/MIME]. + +## reop + +[url https://flak.tedunangst.com/post/reop reop] is a very new, simple and "completed" system. The thing is, it's only a single command line utility that uses some encryption schemes (picked by the [url http://nacl.cr.yp.to/index.html nacl] library) for it's own unique system. Currently, there doesn't seem to be any email clients that support it. + +It is also fairly limited: + +.quote +no support for key revocation, or long chains of certificates, or partial trust, or key servers + +However, as explained in it's [url https://flak.tedunangst.com/post/reop article], that might not be that big of a deal. Finally, there are very very few people that use it. From experience, I have only seen [url https://hacktivis.me/about Haelwenn Monnier] use it. + +The only reason for using reop is if you want a very small system with a very simple source code behind it. Nevertheless, it's still a viable alternative. + +## Post-email systems + +There is a somewhat old [url https://github.com/OpenTechFund/secure-email document], created by the [url https://www.opentech.fund/ OpenTechFunc], which outlines very thoroughly all "next generation secure email or email-like communication" technologies. + +In it, they define the term "[url https://github.com/OpenTechFund/secure-email#post-email-alternatives post-mail]" as: + +.quote +projects to create alternatives to email that are more secure yet still email-like + +And outline zero trust and fingerprinting as the main advantages of these systems. Also most of these systems are [url https://en.wikipedia.org/wiki/Peer-to-peer peer-to-peer]. + +Given that these projects aren't really email, I won't dive much deeper into it. But I will mention, almost all listed projects seem to have been abandoned. Those still under active development are [url http://goldbug.sourceforge.net/ goldbug] and [url https://retroshare.cc/ retroshare]. Until 2021, zeronet *[was]* updated, but the [url https://github.com/shortcutme author] seems to have [url https://github.com/HelloZeroNet/ZeroNet/issues/2808#issuecomment-1132820787 disappeared]. + +## Centralized non-email systems + +"Centralized non-email systems" is another term, which as far as I can tell, is also coined by [url https://github.com/OpenTechFund/secure-email this document] from [url https://www.opentech.fund/ OpenTechFunc]. They define it as "centralized email-like messaging platform" and further divide it into: + +:quote +:numbered +1. Closed system: you can only send to other users on the same provider. +2. Semi-closed system: you can communicate outside the system, but it is troublesome to do so. + .bulleted + - If you send an email to someone else using the same system, it is end-to-end encrypted. + - If you send an email outside the system, then the recipient gets a URL they can use to view the message. Often, the message is symmetrically encrypted using a shared secret. + +3. Semi-closed system, with no encryption: just like above, but emails outside the system have no encryption. + + + +Out of the listed options, Enlocked doesn't work anymore and was [url https://adammonsen.com/post/853/ a bad system] to begin with, ShazzleMail is pretty much [url https://www.reddit.com/r/privacytoolsIO/comments/nv6gzu/comment/hf338kq/?utm_source=share&utm_medium=web2x&context=3 dead] and Walnut also isn't up. + +That leaves us with the two last-standing providers: + +### Protonmail + +Protonmail, or [url https://proton.me/ proton.me] as they are called now, which uses good old [url #openpgp OpenPGP]. That means they have end-to-end encryption and zero-access encryption by default for all protonmail accounts. They also [url https://proton.me/support/how-to-use-pgp support encrypted conversations with non-protonmail users]. + +Funnily enough, Protonmail doesn't really fit in any of the listed categories, since encrypted emails outside the system will work as any [url #openpgp OpenPGP] encrypted one. + +Protonmail's services have a free tier, which should be enough for lighter usage, but restricts =[heavily]= storage, label and folder count, amount of sent messages per day, etc. At the time of writing, their second tier pretty much lifts all restrictions for 5 euro per month (without annual contracts). Check out their pricing [url https://proton.me/pricing here]. + +### Tutanota + +[url https://tutanota.com/ Tutanota] uses it's own special system for security. In brief, all of your emails are (zero-access) stored and end-to-end encrypted with (mostly) [url https://en.wikipedia.org/wiki/Advanced_Encryption_Standard AES 128], and while they generate and hold your public and private keys, your password is needed to decrypt your private key (do check out their [url https://tutanota.com/security/ security page] for more details). + +However, it's crucial to note that they are a type *[2. Semi-closed system]*. If you send an encrypted email to a non-tutanota recipient, the recipient will get a URL from which they will be able to reply, through Tutanota's web client. + +Finally, pricing. In general, they have a lot less features than [url #protonmail Protonmail], but their free tier is a lot more capable than [url #protonmail Protonmail]'s. Their pricing is extremely flexible, being able to buy specific features by themselves, like storage or mail aliases. Check it out [url https://tutanota.com/pricing/ here]. + +## Conclusion + +In brief, almost all email encryption systems use [url #encryption-and-signature public-key cryptography]. The most popular of these systems for personal use is [url #openpgp OpenPGP], but in the business space, [url #smime S/MIME] is quite a bit more prominent. [url #reop reop] is a viable, but limited, very new and lightweight systems for encrypting your email messages. + +[url #protonmail Protonmail] is an email provider, which has [url #openpgp OpenPGP] built-in, enabling and supporting encryption by default, but their free tier leaves what to be desired. [url #tutanota Tutanota] is another provider, with their own entirely different system, where encrypted emails to non-tutanota users force the recipients to use their web client. diff --git a/src/blog/encrypted-email/index.md b/src/blog/encrypted-email/index.md deleted file mode 100644 index ccd0868..0000000 --- a/src/blog/encrypted-email/index.md +++ /dev/null @@ -1,149 +0,0 @@ -# Encrypted email - -## Contents - -1. [Encryption and signature](#encryption-and-signature) -2. [OpenPGP](#openpgp) - 1. [PGP/Inline](#pgpinline) - 2. [PGP/MIME](#pgpmime) -3. [S/MIME](#smime) -4. [reop](#reop) -5. [Post-email systems](#post-email-systems) -6. [Centralized non-email systems](#centralized-non-email-systems) - 1. [Protonmail](#protonmail) - 2. [Tutanota](#tutanota) -7. [Conclusion](#conclusion) - -When you try and look around for articles, regarding encrypted emails, all you'll find is people complaining about it's difficulties and shortcomings. But, no one actually explains what to do if you, nevertheless, want to encrypt your emails! At best most articles will just [shove some product up your face](https://www.virtru.com/blog/arent-people-using-email-encryption). - -That's why, after a fairly lengthy research process, I've decided to do just that. These are the more common ways to encrypt your email with their strengths and weaknesses. I also wrote a (somewhat rough) [tutorial on how to setup](/tutorials/how-to-encrypt-email) [OpenPGP](#openpgp) or [S/MIME](#smime) in practice. - -*Note:* What I'm referring to is end-to-end encryption, where you send an encrypted email, and the recipient decrypts it. Encryption between you and a mail server is practically a given and is setup by the mail server administrator. - -## Encryption and signature - -Unless stated otherwise, all of the listed encryption (and signature) schemes work by utilizing [public-key cryptography](https://en.wikipedia.org/wiki/Public-key_cryptography). - -In brief, if you are sending an encrypted email, the **recipient** needs to have generated a public and private key pair. Then you need to have acquired **their public key**. Finally, if you want to send them an encrypted email: - -1. You encrypt **your** email with **their public key** -2. The recipient decrypts **your** message with **their private key** - -And if someone wants to send **you** an encrypted email, **you** need to generate a public and private key pair, share **your public key** with them, and when you receive the message, decrypt it with **your private key**. - -Every email you send can be [digitally signed](https://en.wikipedia.org/wiki/Digital_signature) (not to be confused with [electronic signatures](https://en.wikipedia.org/wiki/Digital_signature)), meaning the message is (cryptographically) "signed", and with this signature, the recipient can check if the message was changed during transit. Digital signatures also use public-key cryptography, but the other way around: - -1. You sign **your** email with **your private key** -2. Then the recipient verifies **your** message with **your public key**. - -This might sound a bit complicated, but all you need to worry about is you and the recipient generating these public-private key pairs, exchanging public keys, and your email client should handle the rest. And if you use a tool like [pEp](https://www.pep.security/en/), the creation and exchange of keys can be easily automated. - -## OpenPGP - -By far, the most popular way to encrypt your emails is with [OpenPGP](https://en.wikipedia.org/wiki/Pretty_Good_Privacy). PGP is the original program which implemented the encryption scheme, while OpenPGP is the standard/encryption scheme, which was created from PGP (so when I say OpenPGP, I mean a program that implements OpenPGP). - -By design, it relies on a [web of trust](https://en.wikipedia.org/wiki/Web_of_trust), the idea being, different people sign each others public keys (sometimes at [key signing parties](https://en.wikipedia.org/wiki/Key_signing_party)), and you know that a specific key corresponds to a specific person, only when a large amount of people have signed it. - -OpenPGP divides the security community quite a lot, some [abolish it](https://restoreprivacy.com/let-pgp-die/) while other still [defend it](https://arstechnica.com/information-technology/2016/12/signal-does-not-replace-pgp/), but at the end of the day, it's very widespread and if someone encrypts their email, chances are it's with OpenPGP (unless they're in a business, where [S/MIME](#smime) rules). - -There are two main ways to encrypt an email with OpenPGP: - -### PGP/Inline - -The first is called "PGP/Inline", with which you encrypt only the message itself. That's it. And there are [other limitations](https://josefsson.org/inline-openpgp-considered-harmful.html) too, to name a few: - -1. You can't encrypt attachments, period. -2. Your message can only be plain ASCII text characters. So any Unicode character (probably) won't work, and HTML messages are out of the question. - -Though, it's not all bad. If you can survive only sending text to other people, PGP/Inline might be a better option: - -1. It's much easier to work with, you can directly copy the encrypted PGP message and decrypt it however you like -2. The other option, PGP/MIME, is much harder to implement properly and there have been cases where [it's implementation is flawed](https://web.archive.org/web/20180625054201/https://www.whonix.org/blog/pgp-inline-vs-mime) - -### PGP/MIME - -"PGP/MIME" is the second option. As it's name suggests, you can encrypt [MIME](https://en.wikipedia.org/wiki/MIME) data with PGP, which by definition means it supports any content type. This includes: - -1. Support for Unicode characters and HTML messages -2. Attachments of any type -3. Delivery status report - -Basically, any [multipart subtype](https://en.wikipedia.org/wiki/MIME#Multipart_subtypes). Also, I should mention, the message structure and all metadata is hidden by design. - -PGP/MIME is capable of a lot more, and is [generally preferred](https://www.mailpile.is/blog/2014-11-21_To_PGP_MIME_Or_Not.html) over PGP/Inline. Nonetheless, it has it's shortcomings: - -1. As already mentioned, it is hard to implement and [flawed implementations](https://web.archive.org/web/20180625054201/https://www.whonix.org/blog/pgp-inline-vs-mime) have been made -2. Everything is encrypted together, so you'll need to download the whole email, including all attachments, to decrypt it -3. If your client doesn't support it, manual decryption takes a bit more work - -## S/MIME - -[S/MIME](https://en.wikipedia.org/wiki/S/MIME), roughly said, combines and extends the [Cryptograhic Message Syntax](https://en.wikipedia.org/wiki/Cryptographic_Message_Syntax) encryption scheme and [MIME](https://en.wikipedia.org/wiki/MIME) standard to create a singular, email-oriented standard. - -Unlike OpenPGP it doesn't use a web of trust, but a [Public key infrastructure](https://en.wikipedia.org/wiki/Public_key_infrastructure). This means that, rather than people exchanging certificates between themselves, a [Certificate Authroity](https://en.wikipedia.org/wiki/Certificate_authority) connects public keys with entities (people or organizations for example). - -So, already, it has a huge advantage, you don't need to exchange keys, since the email client will handle it. S/MIME is most often used by corporations/organizations, so support in commercial mail clients like [Google Workspace Enterprise Edition](https://support.google.com/a/answer/6374496?hl=en#zippy=) and [Outlook Enterprise/Business](https://support.microsoft.com/en-us/office/encrypt-messages-by-using-s-mime-in-outlook-on-the-web-878c79fc-7088-4b39-966f-14512658f480) ([Exchange Online has to be configured](https://docs.microsoft.com/en-us/exchange/security-and-compliance/smime-exo/configure-smime-exo?view=o365-worldwide) by an administrator and can be used only with [paid clients](https://docs.microsoft.com/en-us/deployoffice/endofsupport/microsoft-365-services-connectivity)) is available. - -On the other hand, you can browse [Google's](https://support.google.com/a/answer/7448393?hl=en&ref_topic=9061730) and [Microsoft's](https://docs.microsoft.com/en-us/security/trusted-root/participants-list) trusted (root) CAs all you want, but you'll find that there is only one place where you could register a certificate for free: [Actalis](https://www.actalis.com/s-mime-certificates.aspx). A good tutorial on the procedure can be found [here](https://www.dannyguo.com/blog/how-to-get-a-free-s-mime-certificate/), but beware, *they* generate the private key. - -Otherwise, it's email encryption capabilities are the same as those outlined in [PGP/MIME](#pgpmime). - -## reop - -[reop](https://flak.tedunangst.com/post/reop) is a very new, simple and "completed" system. The thing is, it's only a single command line utility that uses some encryption schemes (picked by the [nacl](http://nacl.cr.yp.to/index.html) library) for it's own unique system. Currently, there doesn't seem to be any email clients that support it. - -It is also fairly limited: - -> no support for key revocation, or long chains of certificates, or partial trust, or key servers - -However, as explained in it's [article](https://flak.tedunangst.com/post/reop), that might not be that big of a deal. Finally, there are very very few people that use it. From experience, I have only seen [Haelwenn Monnier](https://hacktivis.me/about) use it. - -The only reason for using reop is if you want a very small system with a very simple source code behind it. Nevertheless, it's still a viable alternative. - -## Post-email systems - -There is a somewhat old [document](https://github.com/OpenTechFund/secure-email), created by the [OpenTechFunc](https://www.opentech.fund/), which outlines very thoroughly all "next generation secure email or email-like communication" technologies. - -In it, they define the term "[post-mail](https://github.com/OpenTechFund/secure-email#post-email-alternatives)" as: - -> projects to create alternatives to email that are more secure yet still email-like - -And outline zero trust and fingerprinting as the main advantages of these systems. Also most of these systems are [peer-to-peer](https://en.wikipedia.org/wiki/Peer-to-peer). - -Given that these projects aren't really email, I won't dive much deeper into it. But I will mention, almost all listed projects seem to have been abandoned. Those still under active development are [goldbug](http://goldbug.sourceforge.net/) and [retroshare](https://retroshare.cc/). Until 2021, zeronet *was* updated, but the [author](https://github.com/shortcutme) seems to have [disappeared](https://github.com/HelloZeroNet/ZeroNet/issues/2808#issuecomment-1132820787). - -## Centralized non-email systems - -"Centralized non-email systems" is another term, which as far as I can tell, is also coined by [this document](https://github.com/OpenTechFund/secure-email) from [OpenTechFunc](https://www.opentech.fund/). They define it as "centralized email-like messaging platform" and further divide it into: - -> 1. Closed system: you can only send to other users on the same provider. -> 2. Semi-closed system: you can communicate outside the system, but it is troublesome to do so. -> - If you send an email to someone else using the same system, it is end-to-end encrypted. -> - If you send an email outside the system, then the recipient gets a URL they can use to view the message. Often, the message is symmetrically encrypted using a shared secret. -> 3. Semi-closed system, with no encryption: just like above, but emails outside the system have no encryption. - -Out of the listed options, Enlocked doesn't work anymore and was [a bad system](https://adammonsen.com/post/853/) to begin with, ShazzleMail is pretty much [dead](https://www.reddit.com/r/privacytoolsIO/comments/nv6gzu/comment/hf338kq/?utm_source=share&utm_medium=web2x&context=3) and Walnut also isn't up. - -That leaves us with the two last-standing providers: - -### Protonmail - -Protonmail, or [proton.me](https://proton.me/) as they are called now, which uses good old [OpenPGP](#openpgp). That means they have end-to-end encryption and zero-access encryption by default for all protonmail accounts. They also [support encrypted conversations with non-protonmail users](https://proton.me/support/how-to-use-pgp). - -Funnily enough, Protonmail doesn't really fit in any of the listed categories, since encrypted emails outside the system will work as any [OpenPGP](#openpgp) encrypted one. - -Protonmail's services have a free tier, which should be enough for lighter usage, but restricts **heavily** storage, label and folder count, amount of sent messages per day, etc. At the time of writing, their second tier pretty much lifts all restrictions for 5 euro per month (without annual contracts). Check out their pricing [here](https://proton.me/pricing). - -### Tutanota - -[Tutanota](https://tutanota.com/) uses it's own special system for security. In brief, all of your emails are (zero-access) stored and end-to-end encrypted with (mostly) [AES 128](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard), and while they generate and hold your public and private keys, your password is needed to decrypt your private key (do check out their [security page](https://tutanota.com/security/) for more details). - -However, it's crucial to note that they are a type *2. Semi-closed system*. If you send an encrypted email to a non-tutanota recipient, the recipient will get a URL from which they will be able to reply, through Tutanota's web client. - -Finally, pricing. In general, they have a lot less features than [Protonmail](#protonmail), but their free tier is a lot more capable than [Protonmail](#protonmail)'s. Their pricing is extremely flexible, being able to buy specific features by themselves, like storage or mail aliases. Check it out [here](https://tutanota.com/pricing/). - -## Conclusion - -In brief, almost all email encryption systems use [public-key cryptography](#encryption-and-signature). The most popular of these systems for personal use is [OpenPGP](#openpgp), but in the business space, [S/MIME](#smime) is quite a bit more prominent. [reop](#reop) is a viable, but limited, very new and lightweight systems for encrypting your email messages. - -[Protonmail](#protonmail) is an email provider, which has [OpenPGP](#openpgp) built-in, enabling and supporting encryption by default, but their free tier leaves what to be desired. [Tutanota](#tutanota) is another provider, with their own entirely different system, where encrypted emails to non-tutanota users force the recipients to use their web client. diff --git a/src/blog/fmi-i-vissheto-obrazovanie-v-programistkata-industriq/balove-2021.du b/src/blog/fmi-i-vissheto-obrazovanie-v-programistkata-industriq/balove-2021.du new file mode 100644 index 0000000..ca16262 --- /dev/null +++ b/src/blog/fmi-i-vissheto-obrazovanie-v-programistkata-industriq/balove-2021.du @@ -0,0 +1,65 @@ +# Балове 2021 + +'define expected-reading 3 min +'define created 13 July 2023 +'define edited 14 July 2023 +[$pagenav] + +*[Тази страница е разширение на [url ./ "ФМИ и висшето образование в програмистката индустрия"].]* + +Благодарение на електронната система за кандидатстване, имам минимални балове на трите класирания през 2021 за компютърни науки, софтуерно инженерство и информатика (без информационни системи, защото не исках да влизам там). +Понеже такава информация много не се разпространява, тук ще я споделя подробно. +Очевидна бележка: това са баловете за мъже, за жени са различни. + +Също в бележките под линия на оригиналната статия съм дал стойности и източници за [url ./#fn4 бройка кандидати през 2021]. + +Напомням, че 2021 беше последната година с два изпита по математика: Математика I и Математика II. +Първият беше по-обикновен, със затворени и отворени въпроси, и задачи с решения. +Вторият беше 8 задачи с решения. + +Балът се формираше така: +.bulleted +- 3 по оценката от Математика II *[или]* 2.5 по оценката от Математика I (което от двете носи по-голямо число) +- + +- ако си ходил на държавен зрелостен изпит по математика, оценката от него, *[иначе]* оценката по математика от дипломата + +За някакво усещане за баловете, ще напиша минималната нужна оценка от изпитите, считайки оценката от ДЗИ или дипломата за 6,00. +Ако балът е под 13.5, то тогава със сигурност са приети студенти, които са имали по-малко от 6.00 на ДЗИ/диплома и са компенсирали с резултати на изпитите по математика (не може да кандидатстваш с оценка, по-ниска от 3.000). +Тези балове са в наклонен шрифт. +Тирета показват, че за даденото класиране не е имало свободни места (и дисциплината не е участвала). + +## Първо класиране + +.table +|=Специалност - форма на обучение=||=Минимален бал=||=Мин. оценка по Математика I=||=Мин. оценка по Математика II=| +|:Софтуерно инженерство - редовно:||:20.57:||:5.828:||:4.857:| +|:Компютърни науки - редовно:||:19.45:||:5.380:||:4.483:| +|:Информатика - редовно:||:14.88:||:3.552:||:3.000:| +|::||::||::||::| +|:Софтуерно инженерство - платено редовно:||:18.73:||:5.092:||:4.243:| +|:Компютърни науки - платено редовно:||:17.63:||:4.652:||:3.877:| +|:Информатика - платено редовно:||:*[11.62]*:||:3.000:||:3.000:| + +## Второ класиране + +.table +|=Специалност - форма на обучение=||=Минимален бал=||=Мин. оценка по Математика I=||=Мин. оценка по Математика II=| +|:Софтуерно инженерство - редовно:||:20.27:||:5.708:||:4.757:| +|:Компютърни науки - редовно:||:18.79:||:5.116:||:4.263:| +|:Информатика - редовно:||:*[10.64]*:||:3.000:||:3.000:| +|::||::||::||::| +|:Софтуерно инженерство - платено редовно:||:16.63:||:4.252:||:3.543:| +|:Компютърни науки - платено редовно:||:14.81:||:3.524:||:3.000:| +|:Информатика - платено редовно:||:-:||:-:||:-:| + +## Трето класиране + +.table +|=Специалност - форма на обучение=||=Минимален бал=||=Мин. оценка по Математика I=||=Мин. оценка по Математика II=| +|:Софтуерно инженерство - редовно:||:-:||:-:||:-:| +|:Компютърни науки - редовно:||:19.22:||:5.288:||:4.406:| +|:Информатика - редовно:||:*[12.00]*:||:3.000:||:3.000:| +|::||::||::||::| +|:Софтуерно инженерство - платено редовно:||:16.63:||:4.252:||:3.543:| +|:Компютърни науки - платено редовно:||:17.15:||:4.460:||:3.717:| +|:Информатика - платено редовно:||:-:||:-:||:-:| diff --git a/src/blog/fmi-i-vissheto-obrazovanie-v-programistkata-industriq/balove-2021.md b/src/blog/fmi-i-vissheto-obrazovanie-v-programistkata-industriq/balove-2021.md deleted file mode 100644 index 57546bc..0000000 --- a/src/blog/fmi-i-vissheto-obrazovanie-v-programistkata-industriq/balove-2021.md +++ /dev/null @@ -1,60 +0,0 @@ -# Балове 2021 - -*Тази страница е разширение на ["ФМИ и висшето образование в програмистката индустрия"](./).* - -Благодарение на електронната система за кандидатстване, имам минимални балове на трите класирания през 2021 за компютърни науки, софтуерно инженерство и информатика (без информационни системи, защото не исках да влизам там). -Понеже такава информация много не се разпространява, тук ще я споделя подробно. -Очевидна бележка: това са баловете за мъже, за жени са различни. - -Също в бележките под линия на оригиналната статия съм дал стойности и източници за [бройка кандидати през 2021](./#fn4). - -Напомням, че 2021 беше последната година с два изпита по математика: Математика I и Математика II. -Първият беше по-обикновен, със затворени и отворени въпроси, и задачи с решения. -Вторият беше 8 задачи с решения. - -Балът се формираше така: - -- 3 по оценката от Математика II *или* 2.5 по оценката от Математика I (което от двете носи по-голямо число) -- + -- ако си ходил на държавен зрелостен изпит по математика, оценката от него, *иначе* оценката по математика от дипломата - -За някакво усещане за баловете, ще напиша минималната нужна оценка от изпитите, считайки оценката от ДЗИ или дипломата за 6,00. -Ако балът е под 13.5, то тогава със сигурност са приети студенти, които са имали по-малко от 6.00 на ДЗИ/диплома и са компенсирали с резултати на изпитите по математика (не може да кандидатстваш с оценка, по-ниска от 3.000). -Тези балове са в наклонен шрифт. -Тирета показват, че за даденото класиране не е имало свободни места (и дисциплината не е участвала). - -## Първо класиране - -|Специалност - форма на обучение|Минимален бал|Мин. оценка по Математика I|Мин. оценка по Математика II| -|---|---|---|---| -|Софтуерно инженерство - редовно|20.57|5.828|4.857| -|Компютърни науки - редовно|19.45|5.380|4.483| -|Информатика - редовно|14.88|3.552|3.000| -||||| -|Софтуерно инженерство - платено редовно|18.73|5.092|4.243| -|Компютърни науки - платено редовно|17.63|4.652|3.877| -|Информатика - платено редовно|*11.62*|3.000|3.000| - -## Второ класиране - -|Специалност - форма на обучение|Минимален бал|Мин. оценка по Математика I|Мин. оценка по Математика II| -|---|---|---|---| -|Софтуерно инженерство - редовно|20.27|5.708|4.757| -|Компютърни науки - редовно|18.79|5.116|4.263| -|Информатика - редовно|*10.64*|3.000|3.000| -||||| -|Софтуерно инженерство - платено редовно|16.63|4.252|3.543| -|Компютърни науки - платено редовно|14.81|3.524|3.000| -|Информатика - платено редовно|-|-|-| - -## Трето класиране - -|Специалност - форма на обучение|Минимален бал|Мин. оценка по Математика I|Мин. оценка по Математика II| -|---|---|---|---| -|Софтуерно инженерство - редовно|-|-|-| -|Компютърни науки - редовно|19.22|5.288|4.406| -|Информатика - редовно|*12.00*|3.000|3.000| -||||| -|Софтуерно инженерство - платено редовно|16.63|4.252|3.543| -|Компютърни науки - платено редовно|17.15|4.460|3.717| -|Информатика - платено редовно|-|-|-| diff --git a/src/blog/fmi-i-vissheto-obrazovanie-v-programistkata-industriq/index.md b/src/blog/fmi-i-vissheto-obrazovanie-v-programistkata-industriq/index.du index 0861ff4..3b13c4c 100644 --- a/src/blog/fmi-i-vissheto-obrazovanie-v-programistkata-industriq/index.md +++ b/src/blog/fmi-i-vissheto-obrazovanie-v-programistkata-industriq/index.du @@ -1,44 +1,63 @@ # ФМИ и висшето образование в програмистката индустрия -## Contents +'define expected-reading 39 min +'define created 12 July 2023 +'define edited 14 July 2023 +[$pagenav] + +:contents +:numbered +1. [url #section-2 Кой съм аз] +2. [url #section-3 Университетите в България (София)] + .numbered + 1. [url #section-4 УниБит] + 2. [url #section-5 НБУ] + 3. [url #section-6 Технически университет] + +4. [url #section-7 ФМИ] + :numbered + 1. [url #section-8 Специалности] + 2. [url #section-9 Влизане] + 3. [url #section-10 Следване и оцеляване] + .numbered + 1. [url #section-11 Оценяване, влачене и повтаряне] + 2. [url #section-12 Седмична заетост] + 3. [url #section-13 Преподаватели] + 4. [url #section-14 Избираеми дисциплини и работа] + + 4. [url #-2 Какво се учи в КН2] + :numbered + 1. [url #section-15 Училищната математика\nсрещу университетската математика] + 2. [url #section-16 Първи курс: М-то във ФМИ означава МатеМатика] + .numbered + 1. [url #section-17 Зимен семестър] + 2. [url #section-18 Летен семестър] + + 3. [url #section-19 Втори курс: И-то във ФМИ означава математИка] + .numbered + 1. [url #section-20 Зимен семестър] + 2. [url #section-21 Летен семестър] + + + +5. [url #section-22 Има ли смисъл от следване във фми? ДА!] + -1. [Кой съм аз](#section-1) -2. [Университетите в България (София)](#section-2) - 1. [УниБит](#section-3) - 2. [НБУ](#section-4) - 3. [Технически университет](#section-5) -4. [ФМИ](#section-6) - 1. [Специалности](#section-7) - 2. [Влизане](#section-8) - 3. [Следване и оцеляване](#section-9) - 1. [Оценяване, влачене и повтаряне](#section-10) - 2. [Седмична заетост](#section-11) - 3. [Преподаватели](#section-12) - 4. [Избираеми дисциплини и работа](#section-13) - 4. [Какво се учи в КН2](#2) - 1. [Училищната математика<br>срещу университетската математика](#section-14) - 2. [Първи курс: М-то във ФМИ означава МатеМатика](#--) - 1. [Зимен семестър](#section-15) - 2. [Летен семестър](#section-16) - 3. [Втори курс: И-то във ФМИ означава математИка](#--1) - 1. [Зимен семестър](#section-17) - 2. [Летен семестър](#section-18) -5. [Има ли смисъл от следване във фми? ДА!](#section-19) Всеки гимназиален ученик, който се насочва към програмиране, рано или късно започва да мисли за висшето си образование. Мненията онлайн са разнообразни, някои твърдят че не е нужно, някои хвалят определени университети, други пък изрично ги отричат. И цялата тази дискусия се намира в постове от преди 5-10 години... Аз вече съм следвал 2 години в университет, плюс това имам сериозен опит от преди това. -Макар и този блогпост да е главно за [Факултета по Математика и Информатика](https://www.fmi.uni-sofia.bg/) към [Софийски Университет](https://www.uni-sofia.bg/index.php), по-общата ми цел е да споделя всичко , което знам свързано с образованието в индустрията. +Макар и този блогпост да е главно за [url https://www.fmi.uni-sofia.bg/ Факултета по Математика и Информатика] към [url https://www.uni-sofia.bg/index.php Софийски Университет], по-общата ми цел е да споделя всичко , което знам свързано с образованието в индустрията. -Бърза бележка: всичко казано **важи за моя випуск**, с времето нещата се изменят и може повечето информация тук да бъде **остаряла**. -Допълнително, [тук](./balove-2021.html) имам изкарани баловете във ФМИ (на СУ) за 2021 година. +Бърза бележка: всичко казано =[важи за моя випуск]=, с времето нещата се изменят и може повечето информация тук да бъде =[остаряла]=. +Допълнително, [url ./balove-2021.html тук] имам изкарани баловете във ФМИ (на СУ) за 2021 година. ## Кой съм аз Този блогпост няма да бъде напълно неутрален и ще включва моето мнение, затова е добре да знаеш от къде идва моята гледна точка. -Завършил съм [9 Френска езикова гимназия](https://www.feg.bg/), обаче едновременно от 10 до 12 клас участвах интензивно в националната програма [ИТ-кариера](https://it-kariera.mon.bg/e-learning/). +Завършил съм [url https://www.feg.bg/ 9 Френска езикова гимназия], обаче едновременно от 10 до 12 клас участвах интензивно в националната програма [url https://it-kariera.mon.bg/e-learning/ ИТ-кариера]. Накратко, в тази програма изучавах практически неща, главните няколко типове програмирания, и към края се занимавах с разработване на софтуер на сравнително индустриално ниво (или поне най-близкото до това). От цялата програма бях единствения от център София с пълно отличие. @@ -54,7 +73,7 @@ ## Университетите в България (София) Сега ще обсъдим какви са алтернативите на ФМИ, и защо те не са толкова добри. -В София има четири (смислени) университета, които предлагат някаква форма на софтуерно образование: [Софийски университет](https://www.uni-sofia.bg/), [Нов Български Университет](https://nbu.bg/), [Техническия Университет](https://www.tu-sofia.bg/) и [Университет по Библеотекознание и Информационни технологии](https://www.unibit.bg/). +В София има четири (смислени) университета, които предлагат някаква форма на софтуерно образование: [url https://www.uni-sofia.bg/ Софийски университет], [url https://nbu.bg/ Нов Български Университет], [url https://www.tu-sofia.bg/ Техническия Университет] и [url https://www.unibit.bg/ Университет по Библеотекознание и Информационни технологии]. Този пост ще бъде посветен на първата от тези опции, но все пак покрай приятели и колеги имам добра представа за другите опции. ### УниБит @@ -84,15 +103,17 @@ ### Технически университет -Не съм чувал много, но техническият университет се занимава повече с инженерство, така че [се учат не толкова свързани предмети](https://tu-sofia.bg/uplan/%D0%A4%D0%9A%D0%A1%D0%A2/%D0%91%D0%B0%D0%BA%D0%B0%D0%BB%D0%B0%D0%B2%D1%8A%D1%80/FKSU_UPlan_BCSCe_zadochno.pdf), като физика, проектиране и електротехника. -[Доколкото виждам онлайн, мненията не са позитивни](https://old.reddit.com/r/bulgaria/comments/tqy9l4/%D1%84%D0%BC%D0%B8_%D0%B8%D0%BB%D0%B8_%D1%82%D1%83/): +Не съм чувал много, но техническият университет се занимава повече с инженерство, така че [url https://tu-sofia.bg/uplan/%D0%A4%D0%9A%D0%A1%D0%A2/%D0%91%D0%B0%D0%BA%D0%B0%D0%BB%D0%B0%D0%B2%D1%8A%D1%80/FKSU_UPlan_BCSCe_zadochno.pdf се учат не толкова свързани предмети], като физика, проектиране и електротехника. +[url https://old.reddit.com/r/bulgaria/comments/tqy9l4/%D1%84%D0%BC%D0%B8_%D0%B8%D0%BB%D0%B8_%D1%82%D1%83/ Доколкото виждам онлайн, мненията не са позитивни]: -> За IT ТУ е абсолютна загуба на време - редовно ми идват стажанти от там. Ако не са се занимавали с програмиране от преди това, почваме от 0 +.quote +За IT ТУ е абсолютна загуба на време - редовно ми идват стажанти от там. Ако не са се занимавали с програмиране от преди това, почваме от 0 -<br> +\n -> Завършил съм компютърни системи и технологии на немски в ТУ. Знам за какво иде реч и в българските факултети. -> След като разбрах какво се изучава във ФМИ ме хвана яд, че не се бях записал там. +.quote +Завършил съм компютърни системи и технологии на немски в ТУ. Знам за какво иде реч и в българските факултети. +След като разбрах какво се изучава във ФМИ ме хвана яд, че не се бях записал там. Също когато кандидатствах се разпространяваше видео за някаква преподавателка как по новините разказва колко е добре в ТУ, и директно след това имаше запис как изпада в истерия покрай нещо сравнително дребно. @@ -105,10 +126,10 @@ Във ФМИ много от предметите са математики и програмиранията се говори, че не са много добре. Онлайн има стотици часове материали и курсове, повечето от които са безплатни, на всяка тема свързана с програмиране. -Допълнително имаш [Telerik Academy](https://www.telerikacademy.com/) и [SoftUni](https://softuni.bg/) (само искам да напомня, че **СофтУни не е университет**, макар и така да се казват) - две места които предлагат разнообразни програмистки и чисто практически курсове (и също дават сертификати). +Допълнително имаш [url https://www.telerikacademy.com/ Telerik Academy] и [url https://softuni.bg/ SoftUni] (само искам да напомня, че =[СофтУни не е университет]=, макар и така да се казват) - две места които предлагат разнообразни програмистки и чисто практически курсове (и също дават сертификати). А и повечето програмисти нямат висше и са самоуки, тоест този път не е изобщо странен, даже е най-често следвания. -Финалното ми мнение се намира [най-долу](#section-19), но един такова решение трябва да се вземе с възможно най-много информация. +Финалното ми мнение се намира [url #section-19 най-долу], но един такова решение трябва да се вземе с възможно най-много информация. ### Специалности @@ -116,16 +137,18 @@ Технически всяка се занимава с различни неща, но на практика всички влезли искат да са програмисти. От тях, най-желани са компютърни науки и софтуерно инженерство (тези ще наричам "хубавите" специалности). -В информатика се влизаше много лесно, там балът беше [безнадеждно нисък](./balove-2021.html), обаче следването е най-трудно от всички останали дисциплини. -Късането е брутално, особено първи курс: по Алгебра 1 от към 200 човека (това включваше и минали години май) само един човек беше *допуснат* до изпит (ама си го мина де). +В информатика се влизаше много лесно, там балът беше [url ./balove-2021.html безнадеждно нисък], обаче следването е най-трудно от всички останали дисциплини. +Късането е брутално, особено първи курс: по Алгебра 1 от към 200 човека (това включваше и минали години май) само един човек беше *[допуснат]* до изпит (ама си го мина де). По дискретни структури бяха повече, цели 10тима човека. -Общо от 1ви курс преминаха успешно 20-30 човека във 2ри курс (за да минеш не е нужно всички изпити да си минал, ама детайли [по-късно](#section-10)). +Общо от 1ви курс преминаха успешно 20-30 човека във 2ри курс (за да минеш не е нужно всички изпити да си минал, ама детайли [url #section-10 по-късно]). Има няколко причини за това: - +.bulleted - от една страна бала като е най-нисък, хората с най-ниски умения по математика се намират там, така че успехите ще са най-ниски, - от друга страна има и преподаватели които са прекомерно неадекватни като изпитване и преподаване. -Информационни системи от своя страна сякаш се занимава повече с бази данни и проектиране на информационни системи[^inf-sistemi], не толкова чисто програмиране и нещата около него. +'footnote inf-sistemi Признавам, за тази информация използвах [url https://forums.bgdev.org/index.php?showtopic=34217&st=0&#entry255351 това мнение от форум], никой не обсъжда ИС. + +Информационни системи от своя страна сякаш се занимава повече с бази данни и проектиране на информационни системи[$inf-sistemi], не толкова чисто програмиране и нещата около него. Признавам, че не съм чувал много за тях, ама балът не изглежда да е много висок (мисля че е по-висок от информатика) и мисля, че следването е най-лесно от 4те специалности. Сега, компютърни науки и софтуерно инженерство. @@ -141,29 +164,33 @@ Само по Алгебра 1 и Геометрия минават към 20-30 човека от първия път, по останалите си минават повечето. Макар че сравнително непланирано им сложиха доста взискателни преподаватели през 2ри курс, не знам дали те ще останат в бъдещи години, така че разликата между КН1 и КН2 може да се стопи. +'footnote minali-1-kurs Тази статистика е взета директно от таблици с оценки на редовни студенти на [url https://learn.fmi.uni-sofia.bg/mod/resource/view.php?id=228877 първи курс по Дискретни структури] и [url https://learn.fmi.uni-sofia.bg/mod/resource/view.php?id=283034 втори курс по Дизайн и Анализ на Алгоритми]. Тези таблици са правени от лектора по списъци от СУСИ (онлайн системата за студенти). Ще спомена по-късно, но дългите факултетни номера, в които има и букви, са на студентите, влезли през 2021, докато кратките пет-цифрени са на студенти от минали години, които повтарят. + КН2 вече е доста по-трудно, тук ежегодно по Диференциално и интегрално смятане минават 20-30 човека, а по Дискретни структури минават по 10тина. Напомням, че аз влязох тук. -Приблизително 44%[^minali-1-kurs] от редовните студенти (които не повтарят) успешно минаха (минахме ;)) към втори курс. +Приблизително 44%[$minali-1-kurs] от редовните студенти (които не повтарят) успешно минаха (минахме ;)) към втори курс. Иначе имам впечатлението, че най-умните и умелите хора измежду компютърни науки и софтуерно инженерство се намират тук, макар че това зависи от випуска: няма гаранция, че един много умен кандидат-студент ще реши да се запише за КН (и ще попадне в КН2). Като обобщение, това са дисциплините подредени от най-трудна за минаване към най-лесна: -1. **Информатика**: много трудно, не по много основателни причини, макар че като цяло малцинството което успява да завърши са на високо ниво. +:ordered +1. =[Информатика]=: много трудно, не по много основателни причини, макар че като цяло малцинството което успява да завърши са на високо ниво. Не препоръчвам, ако не си много издържлив и КН и СИ не са се получили. -2. **Компютърни науки, 2ри поток**: трудно, но като цяло е сравнително основателно (пак на моменти е малко нечестно, но не толкова колкото при информатика), нивото просто е високо. +2. =[Компютърни науки, 2ри поток]=: трудно, но като цяло е сравнително основателно (пак на моменти е малко нечестно, но не толкова колкото при информатика), нивото просто е високо. Поне от моя випуск, повечето от най-добрите се намират тук. Ако си представим, че има някакво перфектно ниво на обучение, където не е твърде лесно, но и не е твърде трудно, бих казал че КН2 се намира малко над това ниво. -3. **Компютърни науки, 1ви поток**: малко по-лесно от КН2, но с малко понижаване на качеството. +3. =[Компютърни науки, 1ви поток]=: малко по-лесно от КН2, но с малко понижаване на качеството. Има добро количество материал, което в КН2 ти е набито в главата, докато при КН1 си го забравил след лятната ваканция (не че това не важи в обратната посока, но в КН2 ни вкарват повече неща в умовете). В сравнение с перфектното ниво, КН1 е малко под него. Обаче трябва да се има в предвид, че 2ри курс сложиха доста взискателни преподаватели. Ако това се запази, разликата между двата потока може да изчезне. -4. **Софтуерно инженерство**: забележимо по-лесно от компютърни науки, повечето хора по повечето дисциплини минават без твърде много проблеми. +4. =[Софтуерно инженерство]=: забележимо по-лесно от компютърни науки, повечето хора по повечето дисциплини минават без твърде много проблеми. Ама нивото също спада забележително, макар и бала да е най-висок. Както споменах, при компютърни науки е по-добре, ама нивото на СИ пак е сравнително ок. -5. **Информационни системи**: нисичък бал и сравнително лесно, но не ми изглежда да е супер развиващо за програмисти. +5. =[Информационни системи]=: нисичък бал и сравнително лесно, но не ми изглежда да е супер развиващо за програмисти. Не бих препоръчал, освен ако алтернативата не е информатика. + Трябва да напомня, че под лесно имам предвид, че се налага полу-редовно учене, не е като лесно в НБУ, където мързелуваш цял семестър, правиш един калпав проект за седмица и минаваш. Също по някои предмети преподавателите са едни и същи всяка година, по други не, тоест колко са сложни дадени предмети и специалности зависи от годината. @@ -173,23 +200,35 @@ Сега главният определящ изпит е просто "Математика" и включва сложни въпроси като "кое от следните числа е най-голямо" и "намерете броя решения на уравнението". Разбира се, с това си идват свои трудности, и най-малката грешка може да постави 10-20 човека над тебе като успех, но в края на деня не се изисква толкова много тренинг както при моите изпити. -Моята генерация беше последната по старата програма на обучение[^mat-i-ii], така че при кандидатстване се вземаше една от оценките на изпитите Математика I или Математика II (като втория изпит допринася повече към бала). +'footnote mat-i-ii Макар че това не е много добра причина за смяна на изпитването, понеже схемата с два такива изпита (единия стандартен и другия с малко задачи, но с пълни решения) си е държала още от времето на комунизма. Моето предположение за тази промяна, е че новата система е влошила качеството на обучение твърде много и искат минималните оценки за влизане се повишават обратно към околността на 6ца, но това вече са мои си конспирации. + +'footnote 2021-kandidati Такива статистики много не се намират публично и линковете не са сложени на достъпно място, но успях да изровя директните линкове към разпределението по зали за [url https://www.uni-sofia.bg/index.php/bul/content/download/249347/1644279/version/1/file/2021-04-24_09-00_%D0%9C%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0+II.pdf първа изпитна сесия по Математика II], [url https://www.uni-sofia.bg/index.php/bul/content/download/250518/1651896/version/1/file/2021-05-23_09-00_%D0%9C%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0+I.pdf първата изпитна сесия по Математика I] и [url https://www.uni-sofia.bg/index.php/bul/content/download/250730/1653146/version/1/file/2021-05-30_09-00_%D0%9C%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0+II.pdf втората изпитна сесия по Математика II] през 2021 година (ако някой от тях спре да работи, архивирани са на [url https://web.archive.org/ archive.org]). До всяка зала пише колко човека са разпределени за там, така че общата бройка е една проста сума. Най-много хора са се явили на първата сесися по Математика II: 593, на Математика I са 514 и на втората сесия по Математика II са 568. + +Моята генерация беше последната по старата програма на обучение[$mat-i-ii], така че при кандидатстване се вземаше една от оценките на изпитите Математика I или Математика II (като втория изпит допринася повече към бала). Математика I беше сравнително стандартен, напомнящ на модерната "Математика" или матурата, обаче Математика II беше съвсем друго животно: там имаш 8 задачи, всяка с отворен отговор и изисквано решение. -Този изпит беше трудният и до голяма степен определящият, от максимум 593[^2021-kandidati] човека се рееха слухове че само 20тина са имали 6,00. +Този изпит беше трудният и до голяма степен определящият, от максимум 593[$2021-kandidati] човека се рееха слухове че само 20тина са имали 6,00. -Въпреки това, влизането във ФМИ беше лесно, общо имаше 525[^2021-mesta] места, предостатъчно, имайки предвид, че не всички явили се на тези изпити, кандидатстваха в компютърна специалност (оценката важи за физическия и стопанския факултет). +'footnote 2021-mesta Този документ вече е лесно достъпен в [url https://www.uni-sofia.bg/index.php/bul/content/download/259611/1706172/version/1/file/%D0%9C%D0%B5%D1%81%D1%82%D0%B0+%D0%94%D0%9F.pdf сайта на СУ]. Също говоря за нормалните места по държавна субсидия: без платено обучение и българи, живеещи в чужбина. + +'footnote visoki-iziskvaniq Доколкото съм чувал, тази схема е била валидна до към 2014, поне за специалности като компютърни науки и софтуерно инженерство. Сякаш малко след това баловете на всичко започват яко да падат, ама такива статистики вече хептен ги няма публично. Единствената така информация имат кандидат-студенти, и то за своята година в която влизат, и не се познавам с достатъчно хора, за да разпитвам. + +Въпреки това, влизането във ФМИ беше лесно, общо имаше 525[$2021-mesta] места, предостатъчно, имайки предвид, че не всички явили се на тези изпити, кандидатстваха в компютърна специалност (оценката важи за физическия и стопанския факултет). Вече за конкретни специалности беше малко по-трудно, 300 от тези места бяха в хубавите компютърни специалности, така че конкуренцията беше горе-долу двама човека за едно място. Също е добре да спомена, че баловете бяха супер ниски, в компютърни науки влязох с 4.70 (на Математика II) на първо класиране, на второ можеше и с 4.30 да вляза. -Конкретни стойности за баловете от тази година съм изкарал [тук](./balove-2021.html). -В Софтуерно инженерство бяха малко по-високи изискванията (а там бяха най-високи от компютърните специалности), ама пак, далеч от времето, когато с 5.40 е можело и да не влезеш[^visoki-iziskvaniq]. +Конкретни стойности за баловете от тази година съм изкарал [url ./balove-2021.html тук]. +В Софтуерно инженерство бяха малко по-високи изискванията (а там бяха най-високи от компютърните специалности), ама пак, далеч от времето, когато с 5.40 е можело и да не влезеш[$visoki-iziskvaniq]. + +'footnote 2022-kandidati Както за 2021, пак трябваше да се ровя, но намерих разпределението по зали за [url https://www.uni-sofia.bg/index.php/bul/content/download/266692/1750342/version/1/file/2022-04-03_09-00_%D0%9C%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0.pdf единствената изпитна сесия по Математика] през 2022 (също архивирано в [url https://web.archive.org/ archive.org]). -С новия изпит вече конкуренцията е малко по-висока, все пак са се явили 969[^2022-kandidati] ученици на Математика през 2022 и максимум 979[^2023-kandidati] през 2023. +'footnote 2023-kandidati Както за 2021, пак имаше ровене, но намерих разпределението по зали за [url https://www.uni-sofia.bg/index.php/bul/content/download/285793/1865079/version/1/file/2023-04-02_09-00_%D0%9C%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0%E2%80%93%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B5%D0%BD_%D0%BF%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB.pdf първата изпитна сесия по Математика] и [url https://www.uni-sofia.bg/index.php/bul/content/download/290157/1891849/version/1/file/2023-06-11_09-00_%D0%9C%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0.pdf втората изпитна сесия по математика] (както винаги, налични в [url https://web.archive.org/ archive.org]). На първата са се явили 979 и 875 на втората. + +С новия изпит вече конкуренцията е малко по-висока, все пак са се явили 969[$2022-kandidati] ученици на Математика през 2022 и максимум 979[$2023-kandidati] през 2023. Местата са същия брой, така че излиза към примерно трима човека за едно място и ако примерно имаш 3ка или 4ка може и да не влезеш във ФМИ. -Обаче, **най-важното: материалът във ФМИ не се е изменил!** +Обаче, =[най-важното: материалът във ФМИ не се е изменил!]= Макар и изпитът да е значително по-лесен, трудността на материала не се е снижила (или поне толкова, колкото изпита) и в същото време математиката се изучава доста. Тоест, един човек, влязъл с най-ниския бал на Математика ще е далеч по-неподготвен за ФМИ от човек с минимален бал на Математика II. -Затова **препоръчвам всеки кандидат-студент да може да реши някоя Математика II за към 4-4.50!** +Затова =[препоръчвам всеки кандидат-студент да може да реши някоя Математика II за към 4-4.50!]= Това са горе-долу 5-6 от 8те задачи. Иначе ако не можеш редовно да учиш математика и не можеш да се справиш с такива задачи (които са по-прости като характер в сравнение с това, което учим в университета), следването ти ще бъде твърде трудно според мен. @@ -214,10 +253,12 @@ Оценката се формира по различни начини при различните предмети, но най-често контролните и домашните през семестъра носят 40-50% и през сесията си изкарваш останалата част от оценката. Също понякога, ако си се справил достатъчно добре на контролните през семестъра, може да бъдеш освободен от изпит-задачи (не е нужно да ходиш и като оценка на него ти се пише средно аритметично от контролните). -Обаче почти винаги **ако изкараш двойка на някой от изпитите през сесията, цялата ти оценка за предмета става двойка!** +Обаче почти винаги =[ако изкараш двойка на някой от изпитите през сесията, цялата ти оценка за предмета става двойка!]= + +'footnote september Разговорно на поправителната сесия им викаме септември, макар и само един-два дена от нея да са в този месец. Причината е, че просто до преди няколко години наистина е била през септември, но са я изместили назад. Защо са я изместили, не знам. Когато не си минал един предмет, ти го "влачиш". -За всеки предмет имаш две дати през академичната година, през които може да го вземеш: редовната сесията след семестър (тоест когато по принцип се изпитват хора по този предмет) и поправителната сесия, която се случва във втората половина от август[^september]. +За всеки предмет имаш две дати през академичната година, през които може да го вземеш: редовната сесията след семестър (тоест когато по принцип се изпитват хора по този предмет) и поправителната сесия, която се случва във втората половина от август[$september]. По принцип имаш и ликвидационна сесия, ама идеята е, ако два изпита през поправителната сесия ти се препокриват, през поправителната да отидеш на единия и на ликвидационната да може да отидеш на другия (трябва да подадеш документ, че това си направил, не можеш да отложиш изпити ей така). Можеш да преминеш към следващия курс без проблеми ако влачиш максимум 3 предмета от годината. @@ -241,7 +282,7 @@ Количеството подготовка за едно контролно зависи от човек на човек, но ако нищо не си учил, бих казал че е поне една-две интензивни седмици за сериозните предмети са достатъчни. За домашните е по-малко, защото по принцип те са върху неща, изучавани на упражнения, така че ако си си водел записки (или споделящи колеги са водели) ще знаеш как да решиш всички задачи (разбира се, има изключения). -Това обаче е **само за контролни-задачи по някои предмети**, все пак имаш теория и имаш задачи за които ти трябва теория, и тя вече не може да се научи толкова бързо. +Това обаче е =[само за контролни-задачи по някои предмети]=, все пак имаш теория и имаш задачи за които ти трябва теория, и тя вече не може да се научи толкова бързо. Нещо много хубаво е, че никой не следи за присъствие на занятия и не се пишат отсъствия както в училище. Разбира се, това не означава, че не е нужно да се ходи на всички занятия, напротив, но ако искаш винаги може да пропуснеш нещо. @@ -264,16 +305,16 @@ Обаче, си задължен и да ходиш на избираеми дисциплини: имаш минимален брой избираеми за всеки семестър, минимален общ брой за всичките години и минимален брой ECTS кредити за всичките години. За разлика от училище, имаш доста голям избор и много от тях са интересни и полезни. -Обаче, **не записвай избираеми през първи курс!** -Скоро ще обсъдим предметите, обаче **първи курс е най-труден и изисква цялото ти работно време!** -Това трябва да навежда на мисълта, че **не трябва да работиш по време на първи курс**, освен ако не ти се налага или не си от най-умните хора в специалността. +Обаче, =[не записвай избираеми през първи курс!]= +Скоро ще обсъдим предметите, обаче =[първи курс е най-труден и изисква цялото ти работно време!]= +Това трябва да навежда на мисълта, че =[не трябва да работиш по време на първи курс]=, освен ако не ти се налага или не си от най-умните хора в специалността. Материалът е нещо напълно ново, не само като изучавани неща, ами и като концепции и модел на учене. -Ама каквото и да си говорим, **най-доброто обучение се намира в избираемите дисциплини!** +Ама каквото и да си говорим, =[най-доброто обучение се намира в избираемите дисциплини!]= Не е задължително да си доцент или професор, за да направиш избираема, и може да я направиш както си искаш. Има много такива, които се водят от бивши студенти на ФМИ, които сега работят в големи компании, и предоставят супер практично и готино обучение. -За някои неща даже не можеш да намериш в България курсове, като [Реализация на езици за програмиране](https://intranet.fmi.uni-sofia.bg/index.php/s/uGI4XDReO3WoUok), където се разглежда как се правят компилатори или [Употреба и скриптиране на Vim](https://intranet.fmi.uni-sofia.bg/index.php/s/v2v4WlP2GdDbWtb), където подробно поглежда един от най-добрите текстови редактори някога създавани. +За някои неща даже не можеш да намериш в България курсове, като [url https://intranet.fmi.uni-sofia.bg/index.php/s/uGI4XDReO3WoUok Реализация на езици за програмиране], където се разглежда как се правят компилатори или [url https://intranet.fmi.uni-sofia.bg/index.php/s/v2v4WlP2GdDbWtb Употреба и скриптиране на Vim], където подробно поглежда един от най-добрите текстови редактори някога създавани. ### Какво се учи в КН2 @@ -295,13 +336,17 @@ Твърденията са неща, които казваме че са верни за дадена конструкция, тоест за нещо, което си измислим (и което не противоречи на аксиомите). Конструкция е ключова дума, понеже сътворяваме с въображение някакъв обект, нещо с някакви свойства и после доказваме, чисто формално и прецизно със стриктно определени уреди, че дадения обект прави това, което искаме. +'footnote def-set Формално няма дефиниция на множество, понеже става малко бездънно: какво е множество, еми колекция от елементи, какво е колекция от елементи, еми съвкупност от елементи, какво е съвкупност, еми множество от елементи. Формално казваме, че множество е първично понятие, тоест че няма дефиниция и се надяваме, че читателя схваща за какво се говори. + +'footnote axiom-of-choice В интерес на истината, това със сигурност е вярно само когато приемаме [url https://en.wikipedia.org/wiki/Axiom_of_choice аксиомата за избора], ако не я приемем, тогава доооста неща стават супер неинтуитивни и изглеждат грешни, обаче чисто формално и математически са верни. + Трудно ми е да дам лесен пример, понеже нищо в училище не може и да се сравнява, но нека да пробваме следното: нека да разгледаме множества. -Множество е просто някаква колекция от елементи[^def-set], представи си кутия с някакви предмети в нея. +Множество е просто някаква колекция от елементи[$def-set], представи си кутия с някакви предмети в нея. Аз твърдя, че едно празно множество е елемент на друго празно множество, тоест че една празната кутия се съдържа в друга празна кутия. -Това е очевидно грешно[^axiom-of-choice], нашето доказателство е, че щом кутията е празна, то по дефиниция няма елементи, следователно няма как да има друга кутия в нея. +Това е очевидно грешно[$axiom-of-choice], нашето доказателство е, че щом кутията е празна, то по дефиниция няма елементи, следователно няма как да има друга кутия в нея. Ето: конструкция, твърдение и доказателство, доста елементарно и очевидно, но все пак се опитвам да не навлизам в детайли, а и в математиката има такива резултати, които не са хич очевидни. -Също, доказателството, че нещо не е вярно може би изглежда безполезно, но някои от [най-големите теореми на математиката са формулиране така](https://en.wikipedia.org/wiki/Fermat%27s_Last_Theorem). +Също, доказателството, че нещо не е вярно може би изглежда безполезно, но някои от [url https://en.wikipedia.org/wiki/Fermat%27s_Last_Theorem най-големите теореми на математиката са формулиране така]. Сега вече ще обсъдим конкретно изучаваните предмети в детайл. @@ -312,7 +357,7 @@ ##### Зимен семестър -**Алгебра 1**: пълното име е линейна алгебра. +=[Алгебра 1]=: пълното име е линейна алгебра. Занимава се главно с линейни уравнения (ax + by + ... + mz = k), обаче интересното идва като изследваме операции върху тях и ги навържем в пространства. Много фундаментален предмет, използват се поне части от него в много клони на математиката и инженерството (защото много неща могат да се моделират с нея). Има употреби в machine learning, в компютърната графика, в алгоритми за препоръки (търсачки примерно), обработка на изображения и много други. @@ -320,7 +365,7 @@ Има по една малка задача всяка седмица, но не са трудни, изисква постоянство. Предметът се минава без твърде много трудности, лекционните записки са много прецизно написани и упражненията са супер. -**Диференциално и интегрално смятане 1**: с други думи, реален анализ. +=[Диференциално и интегрално смятане 1]=: с други думи, реален анализ. Главно разглеждаме свойства и операции върху функции и редици числа. В училище учим производни; глаголът да правиш производни разговорно може да се нарече "производиране", обаче терминът е диференциране. Интегрирането е обраното действие на диференцирането, тоест намирането на функция, имайки само нейната производна. @@ -331,11 +376,12 @@ Главната цедка е теорията, на която имаш теоретични задачи, при които дори за 3ка ще трябва да приложиш малко усет към предмета. Като цяло просто изискванията са високи, иначе екипа са готини и бих казал, че оценяването е честно. -**Дискретни структури**: този предмет е малко смесица от три предмета - булева алгебра, увод в теория на множествата, комбинаторика и теория на графите. +=[Дискретни структури]=: този предмет е малко смесица от три предмета - булева алгебра, увод в теория на множествата, комбинаторика и теория на графите. От всичките математики, това е може би най-важната за програмиране. В определен смисъл на думата, ДИС се занимава с безкрайно много и безкрайно малки елементи: на една функция може да и подадеш числото 1, но и 1.1, и 1.11 и так. нат., без проблем. Обаче ДСТР разглежда дискретни обекти, тоест някакъв краен брой конкретни неща. +.unordered - Булевата алгебра е малка, тя много се ползва в булеви изрази при условия в код. Формално дефинираме логически изрази и разглеждаме техни свойства. - Класифицирал съм теория на множествата като увод, защото истинският предмет става много странен (има си избираема за това), но се занимава точно с обекта за който говорехме по-рано: множества. @@ -351,7 +397,7 @@ Ама трябва да предупредя, че не получаваш точки за половинчати решения, като цяло или си решил задачата коректно или не. Бих казал че при този предмет се появяват нечестности или прекомерно високи изисквания на моменти, но се минава. -**Увод в програмирането**, неговото значение трябва да е очевидно. +=[Увод в програмирането]=, неговото значение трябва да е очевидно. Изучава се C++, макар и някои неща да не са направени по най-добрите начини. Налага се да знаеш и ползваш точно нещата, които ти се преподават и нищо друго. Не бих казал, че е лошо направен, има някакво основание за тази методика, обаче някои неща се разглеждат твърде формално и програмирането не се изучава като динамичен предмет, в който може да решиш проблеми по много начини, а като задача по математика, където се изисква определено решение. @@ -364,9 +410,9 @@ ##### Летен семестър -**Диференциално и интегрално смятане 2**: директно продължение на ДИС1. +=[Диференциално и интегрално смятане 2]=: директно продължение на ДИС1. -**Геометрия**: истинското име на този предмет е аналитична геометрия и няма нищо общо с училищната евклидова геометрия. +=[Геометрия]=: истинското име на този предмет е аналитична геометрия и няма нищо общо с училищната евклидова геометрия. Разглеждаме пространствата и геометричните обекти като по-абстрактни неща, или по-конкретно, разглеждаме повече числата и зависимостите между конкретни обекти. Централно в компютърната графика и всичко около нея (обработка на изображения, 3D моделиране, ...). @@ -374,18 +420,18 @@ Упражненията са супер, има и много добри записки по тях. Минава се без твърде много проблеми. -**Езици, автомати и изчислимост**: вторият най-важен предмет от математиките, на английски се казва Theoretical Computer Science. +=[Езици, автомати и изчислимост]=: вторият най-важен предмет от математиките, на английски се казва Theoretical Computer Science. Занимава се с различни теоретични обекти, които могат да правят изчисления върху текстови низове. Всичко свързано с анализ или шаблони върху текст използва нещата тук, а пък и отвъд. Ако някога си чувал за машина на Тюринг, Тюринг-завършеност на програмни езици или проблемът за спирането, от тука идват. Благодарение на тази наука е възможно да имплементираш компилатори на програмни езици и да правиш всички форми на разбор на текст (като обработката на уебстраници и интернет пакети). -Записките са много добри, даже публично се намират, заедно с минали изпитни теми, [тук](http://logic.fmi.uni-sofia.bg/eai.html). +Записките са много добри, даже публично се намират, заедно с минали изпитни теми, [url http://logic.fmi.uni-sofia.bg/eai.html тук]. И както по дискретни структури, асистентите не са консистентни и нивото малко криви. Ама в края на деня преподавателите са готини и не искат да прецакват хора, така че се минава спокойно. -**Обектно ориентирано програмиране**: това е най-популярният начин/парадигма за програмиране. -Обект е групиране на данни с функциите върху тях, като са изпълнени [няколко свойства](https://en.wikipedia.org/wiki/Object-oriented_design#Object-oriented_concepts). +=[Обектно ориентирано програмиране]=: това е най-популярният начин/парадигма за програмиране. +Обект е групиране на данни с функциите върху тях, като са изпълнени [url https://en.wikipedia.org/wiki/Object-oriented_design#Object-oriented_concepts няколко свойства]. Кажи-речи всяка компания и всеки модерен програмен език, който се използва в индустрията, поддържа ООП. Екипът е същия като при УП, така че общото ми мнение е същото, макар че при ООП ситуацията е може би една идея по-релаксирана. @@ -398,7 +444,7 @@ ##### Зимен семестър -**Компютърни архитектури**: описание на хардуера. +=[Компютърни архитектури]=: описание на хардуера. Малко се доближава и до електротехниката, но се разглеждат много фундаменталните хардуерни компоненти и техните функционалности в един компютър. Разглеждаме основните компонентни схеми за изчисления и хардуерно как се ползват и работят нещата. Не е кой знае колко полезен за средния програмист, освен ако не се занимаваш със системно програмиране, ама е много важен фундамент. @@ -407,22 +453,22 @@ Това е първият предмет при който няма задължителни упражнения, но никой не препоръчва да се ходи на избираемия практикум, понеже не е координиран много добре с лекциите и някои неща стават твърде трудни. Иначе минаването е лесно. -**Основи на компютърната графика**: има ли изобщо какво да обяснявам. +=[Основи на компютърната графика]=: има ли изобщо какво да обяснявам. Разглеждаме част от математиката, но повече се занимаваме с 3D моделиране и идеите на сложните неща, не толкова тяхното имплементиране. Минаването е лесно, трябва да си малко консистентен със седмичните задачи обаче. И този лектор ми е един от любимите. Презентациите в които се намира материала са перфектно направени и упражненията са много приятни. -Ето [тук](https://boytchev.github.io/scorm/) има редици малки задачки/игри с които можеше да изкараш малък бонус към оценката. +Ето [url https://boytchev.github.io/scorm/ тук] има редици малки задачки/игри с които можеше да изкараш малък бонус към оценката. -**Структури от данни и програмиране**: нещо като въведение в дизайн и анализ на алгоритмите. +=[Структури от данни и програмиране]=: нещо като въведение в дизайн и анализ на алгоритмите. Занимаваме се с някои много важни структури от данни, като стек и опашка, и разглеждаме алгоритми върху тях. Супер важно за всеки програмист. Екипът пак е същия, както при УП и ООП, така че мнението ми продължава, но тук поне изискванията за писане на код са по-основателни. Все пак разглеждаме конкретни структури от данни и алгоритми, ако не ги ползваш в решенията на задачи, малко би се обезсмислила цялата история. -**Функционално програмиране**: втората най-използвана парадигма след ООП. +=[Функционално програмиране]=: втората най-използвана парадигма след ООП. Идеята е, че разглеждаме всичко като функции, във всеки момент една функция връща нещо или приема нещо и никъде не пазим състояния. Тоест, една стойност се намира или като аргумент или като върната стойност. Също супер важно да се знае и може. @@ -432,18 +478,18 @@ ##### Летен семестър -**Алгебра 2**: дефакто разглеждаме теория на групите, което на английски съм го виждал и като "Modern algebra". +=[Алгебра 2]=: дефакто разглеждаме теория на групите, което на английски съм го виждал и като "Modern algebra". Група е някакво множество от елементи и операция върху тях, като за операцията са изпълнени няколко свойства. Допълнително имаме и пръстен, където вече имаш множество и две операции върху тях. -Може би звучи странно, но е една от [най-интересните и шантави математики](https://www.youtube.com/watch?v=mH0oCDa74tE). +Може би звучи странно, но е една от [url https://www.youtube.com/watch?v=mH0oCDa74tE най-интересните и шантави математики]. Криптографията се основава на нея и има употреби в теория на графите. Екипът същия като при Алгебра 1, така че нямам оплаквания. Макар че този път няма седмични задачи - ура! -**Дизайн и анализ на алгоритми**: също едно име, което обяснява себе си. +=[Дизайн и анализ на алгоритми]=: също едно име, което обяснява себе си. Разглеждаме методиките за сравняване на алгоритми (асимптотика) и как да докажем тяхната коректност. -Също разглеждаме доста основни и често използвани алгоритми, както и се допираме до [NP сложност](https://en.wikipedia.org/wiki/NP_%28complexity%29). +Също разглеждаме доста основни и често използвани алгоритми, както и се допираме до [url https://en.wikipedia.org/wiki/NP_%28complexity%29 NP сложност]. Още един много важен предмет. Тук сякаш асистентите преподават по-добре и нивото е по-изравнено. @@ -451,7 +497,7 @@ Обаче смятам, че на доста моменти навлиза твърде много в математиката и теорията, и има същите проблеми с оценяването както по ДСТР. Цели 15 човека минаха от първия път, така че нивото е горе-долу същото. -**Изследване на операциите**: решава оптимизационни задачи, тоест задачи при които искаш минимум или максимум, като за всяка променлива имаш някакво ограничение (на английски се казва Linear Programming, но няма нищо общо с програмиране). +=[Изследване на операциите]=: решава оптимизационни задачи, тоест задачи при които искаш минимум или максимум, като за всяка променлива имаш някакво ограничение (на английски се казва Linear Programming, но няма нищо общо с програмиране). Една оптимизационна задача е примерно ако имаме фабрики за автомобили, всяка произвеждаща различно количество коли и складове в други градове, с различни капацитети, и имаме цената на пътя между градовете и складовете, как най-евтно ще пренесем всички автомобили в складовете. Има употреба ако се опитваш да решиш такъв тип задачи, но ми се струва от по-безполезните неща за един програмист. @@ -459,7 +505,7 @@ Лекторът е готин. Минаването е лесно, нещата не са супер трудни. -**Компютърни мрежи**: пак име, което само се обяснява. +=[Компютърни мрежи]=: пак име, което само се обяснява. Абсолютно всичко свързано с интернет и мрежите, от протоколи до методи за маршрутизация. Като КАРХ не е от най-полезните за ежедневието, но е много важен фундамент. @@ -467,7 +513,7 @@ Както и по други предмети, лектора не иска да ни прецаква, затова минаването не е проблем. Даже бих казал, че е твърде лесно. -**Операционни системи**: може би най-важният не-математически предмет, ако беше направен свестно. +=[Операционни системи]=: може би най-важният не-математически предмет, ако беше направен свестно. Имам много силно мнение за него, като цяло предмета се свежда до 70% менижиране на процеси, 20% менижиране на памет и 10% случайни неща. Имаше потенциалът да е от най-добрите предмети в целия бакалавър, ама програмата и изпитването беше наистина зле направено. @@ -481,27 +527,16 @@ Не бих казал, че се учат стари неща, които не са актуални, но за най-новите технологии трябва да се обърнеш към избираеми. Обучението е далеч от перфектно, обаче каквото и да си говорим, обучението никъде не е перфектно. -Бих казал, че качеството на курсове също [може да бъде много по-ниско](https://kleopetrov.me/2017/01/31/return-return-and-how-to-breack-it/). +Бих казал, че качеството на курсове също [url https://kleopetrov.me/2017/01/31/return-return-and-how-to-breack-it/ може да бъде много по-ниско]. Това е много голяма тема, обаче въпреки че не учим най-новите и използваемите неща, основите с които излизаш ти позволяват да научиш новите технологии значително по-бързо и в значително по-голяма дълбочина. Колкото и да не се харесва, математиката е в основата на всички кътчета от компютрите. Разбира се, има пре-достатъчно работа, която не изисква и елементарно събиране да знаеш, но ако се стремиш нагоре, математиката е нужна. Ама, преподаването не е единствената причина защо бих препоръчал ФМИ: +.ordered 1. Колегите, които влизат са много готини и ако се постараеш ще се запознаеш с много добри приятели 2. Студентстването като изживяване е веднъж в живота, все пак характерът става по-издържлив когато те скъсат по няколко изпита, за които си учил много. 3. Каквото и да си говорим, ФМИ е доста авторитетно учебно заведение, макар и диплома за един програмист да не е задължителна, със сигурност ще помогне значително. -И даже бих аргументирал, че е **по-добре да следваш една година във ФМИ и да се откажеш, отколкото да следваш 4 години и да завършиш в който и да е друг университет!** - -[^inf-sistemi]: Признавам, за тази информация използвах [това мнение от форум](https://forums.bgdev.org/index.php?showtopic=34217&st=0&#entry255351), никой не обсъжда ИС. -[^mat-i-ii]: Макар че това не е много добра причина за смяна на изпитването, понеже схемата с два такива изпита (единия стандартен и другия с малко задачи, но с пълни решения) си е държала още от времето на комунизма. Моето предположение за тази промяна, е че новата система е влошила качеството на обучение твърде много и искат минималните оценки за влизане се повишават обратно към околността на 6ца, но това вече са мои си конспирации. -[^minali-1-kurs]: Тази статистика е взета директно от таблици с оценки на редовни студенти на [първи курс по Дискретни структури](https://learn.fmi.uni-sofia.bg/mod/resource/view.php?id=228877) и [втори курс по Дизайн и Анализ на Алгоритми](https://learn.fmi.uni-sofia.bg/mod/resource/view.php?id=283034). Тези таблици са правени от лектора по списъци от СУСИ (онлайн системата за студенти). Ще спомена по-късно, но дългите факултетни номера, в които има и букви, са на студентите, влезли през 2021, докато кратките пет-цифрени са на студенти от минали години, които повтарят. -[^2021-kandidati]: Такива статистики много не се намират публично и линковете не са сложени на достъпно място, но успях да изровя директните линкове към разпределението по зали за [първа изпитна сесия по Математика II](https://www.uni-sofia.bg/index.php/bul/content/download/249347/1644279/version/1/file/2021-04-24_09-00_%D0%9C%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0+II.pdf), [първата изпитна сесия по Математика I](https://www.uni-sofia.bg/index.php/bul/content/download/250518/1651896/version/1/file/2021-05-23_09-00_%D0%9C%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0+I.pdf) и [втората изпитна сесия по Математика II](https://www.uni-sofia.bg/index.php/bul/content/download/250730/1653146/version/1/file/2021-05-30_09-00_%D0%9C%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0+II.pdf) през 2021 година (ако някой от тях спре да работи, архивирани са на [archive.org](https://web.archive.org/)). До всяка зала пише колко човека са разпределени за там, така че общата бройка е една проста сума. Най-много хора са се явили на първата сесися по Математика II: 593, на Математика I са 514 и на втората сесия по Математика II са 568. -[^2021-mesta]: Този документ вече е лесно достъпен в [сайта на СУ](https://www.uni-sofia.bg/index.php/bul/content/download/259611/1706172/version/1/file/%D0%9C%D0%B5%D1%81%D1%82%D0%B0+%D0%94%D0%9F.pdf). Също говоря за нормалните места по държавна субсидия: без платено обучение и българи, живеещи в чужбина. -[^visoki-iziskvaniq]: Доколкото съм чувал, тази схема е била валидна до към 2014, поне за специалности като компютърни науки и софтуерно инженерство. Сякаш малко след това баловете на всичко започват яко да падат, ама такива статистики вече хептен ги няма публично. Единствената така информация имат кандидат-студенти, и то за своята година в която влизат, и не се познавам с достатъчно хора, за да разпитвам. -[^2022-kandidati]: Както за 2021, пак трябваше да се ровя, но намерих разпределението по зали за [единствената изпитна сесия по Математика](https://www.uni-sofia.bg/index.php/bul/content/download/266692/1750342/version/1/file/2022-04-03_09-00_%D0%9C%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0.pdf) през 2022 (също архивирано в [archive.org](https://web.archive.org/)). -[^2023-kandidati]: Както за 2021, пак имаше ровене, но намерих разпределението по зали за [първата изпитна сесия по Математика](https://www.uni-sofia.bg/index.php/bul/content/download/285793/1865079/version/1/file/2023-04-02_09-00_%D0%9C%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0%E2%80%93%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B5%D0%BD_%D0%BF%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB.pdf) и [втората изпитна сесия по математика](https://www.uni-sofia.bg/index.php/bul/content/download/290157/1891849/version/1/file/2023-06-11_09-00_%D0%9C%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0.pdf) (както винаги, налични в [archive.org](https://web.archive.org/)). На първата са се явили 979 и 875 на втората. -[^september]: Разговорно на поправителната сесия им викаме септември, макар и само един-два дена от нея да са в този месец. Причината е, че просто до преди няколко години наистина е била през септември, но са я изместили назад. Защо са я изместили, не знам. -[^def-set]: Формално няма дефиниция на множество, понеже става малко бездънно: какво е множество, еми колекция от елементи, какво е колекция от елементи, еми съвкупност от елементи, какво е съвкупност, еми множество от елементи. Формално казваме, че множество е първично понятие, тоест че няма дефиниция и се надяваме, че читателя схваща за какво се говори. -[^axiom-of-choice]: В интерес на истината, това със сигурност е вярно само когато приемаме [аксиомата за избора](https://en.wikipedia.org/wiki/Axiom_of_choice), ако не я приемем, тогава доооста неща стават супер неинтуитивни и изглеждат грешни, обаче чисто формално и математически са верни. +И даже бих аргументирал, че е =[по-добре да следваш една година във ФМИ и да се откажеш, отколкото да следваш 4 години и да завършиш в който и да е друг университет!]= diff --git a/src/blog/friendship-ended-with-funtoo-now-gentoo-is-my-best-friend/index.md b/src/blog/friendship-ended-with-funtoo-now-gentoo-is-my-best-friend/index.du index 64f94d4..783050b 100644 --- a/src/blog/friendship-ended-with-funtoo-now-gentoo-is-my-best-friend/index.md +++ b/src/blog/friendship-ended-with-funtoo-now-gentoo-is-my-best-friend/index.du @@ -1,15 +1,21 @@ # Friendship ended with Funtoo, now Gentoo is my best friend -## Contents +'define expected-reading 11 min +'define created 28 May 2023 +'define edited 07 June 2023 +[$pagenav] -1. [Terminology](#terminology) -2. [Public Enemy No 1: Packages](#public-enemy-no-1-packages) -3. [I didn't follow the wolf pack philosophy](#i-didnt-follow-the-wolf-pack-philosophy) -4. [Why did I choose Funtoo in the first place?](#why-did-i-choose-funtoo-in-the-first-place) - 1. [Debunking benefits](#debunking-benefits) - 2. [Personal advantages over Gentoo](#personal-advantages-over-gentoo) +.contents +.numbered +1. [url #terminology Terminology] +2. [url #public-enemy-no-1-packages Public Enemy No 1: Packages] +3. [url #i-didnt-follow-the-wolf-pack-philosophy I didn't follow the wolf pack philosophy] +4. [url #why-did-i-choose-funtoo-in-the-first-place Why did I choose Funtoo in the first place?] + .numbered + 1. [url #debunking-benefits Debunking benefits] + 2. [url #personal-advantages-over-gentoo Personal advantages over Gentoo] -Around 6 months ago I wrote [Taming The Fun-too](/blog/taming-the-fun-too), a blog post sharing my personal experiences with the Funtoo linux distribution. +Around 6 months ago I wrote [url /blog/taming-the-fun-too Taming The Fun-too], a blog post sharing my personal experiences with the Funtoo linux distribution. What you don't know is that less than a month later, at the end of December, I installed Gentoo on my desktop computer, and an additional 3 months later my laptop followed. Here is what happened. @@ -17,50 +23,65 @@ Here is what happened. Before we begin, I want to take a second and explain some Gentoo/Funtoo terminology: -- `emerge` (as a verb): what does "install" mean? I would argue it means copying a program and the file it depends on somewhere on a system, with the goal of being able to run this program. +:unordered +- `[emerge]` (as a verb): what does "install" mean? I would argue it means copying a program and the file it depends on somewhere on a system, with the goal of being able to run this program. + + .p Now, in Gentoo and Funtoo, most programs are compiled from source code, so before you install you download it's source and compile. - For this reason, on such systems you would usually say a certain program/package is *being emerged, not installed* (and the words comes from the [package-manager command-line utility of the same name](https://wiki.gentoo.org/wiki/Emerge)). -- `ebuild` (file): the exact steps needed to emerge a package differ from one project to another, but how do you manage packages then? + For this reason, on such systems you would usually say a certain program/package is *[being emerged, not installed]* (and the words comes from the [url https://wiki.gentoo.org/wiki/Emerge package-manager command-line utility of the same name]). + +- `[ebuild]` (file): the exact steps needed to emerge a package differ from one project to another, but how do you manage packages then? The solution is that when you try to emerge something, a special file with detailed instructions is looked up: an ebuild file. + - repository tree: the collection of all ebuilds -- `use` flags: every program can be built with different flags (aka options), which enable or disable certain features from being available in the result package. - For example, the text editor [vim](https://packages.gentoo.org/packages/app-editors/vim) supports sound, but not everyone would want to have that feature. + +- `[use]` flags: every program can be built with different flags (aka options), which enable or disable certain features from being available in the result package. + For example, the text editor [url https://packages.gentoo.org/packages/app-editors/vim vim] supports sound, but not everyone would want to have that feature. + ## Public Enemy No 1: Packages Most packages and their dependencies on Funtoo go unmaintained and untested for years, which significantly limits your abilities to install and build software. -Python was stuck at version 3.7, while a lot of packages like barrier, libplacebo, mpv and pulseeffects[^packages-in-repo-tree] required[^required-3.8] at least 3.8. +'footnote packages-in-repo-tree Not all of those packages are in the repository tree, but that doesn't matter, if you want to compile a program, you should be able to do so. + +'footnote required-3.8 Required might be a strong word, I don't remember if I tried (though I'm sure I did) just downgrading the Python version in the ebuild. Nevertheless, there were for sure useful packages which really did need it. + +Python was stuck at version 3.7, while a lot of packages like barrier, libplacebo, mpv and pulseeffects[$packages-in-repo-tree] required[$required-3.8] at least 3.8. So, with a lot of effort and poking around, I got python 3.8 to work, just barely. -What's even better is that eventually I reached an **unfixable** circular python dependency (between dev-python/packaging and dev-python/setuptools). +What's even better is that eventually I reached an =[unfixable]= circular python dependency (between dev-python/packaging and dev-python/setuptools). + +'footnote glibc This point may not be completely fair, since Funtoo has a system for [url https://web.archive.org/web/20230528115518/https://projects.funtoo.org/metatools/docs/autogen.html ebuild generation], which means that they might've made configuration changes and/or applied patches which "fix" that version, but still, it really isn't a good look. -Another problem child was glibc, it is *currently* at [version 2.33-r2](https://github.com/funtoo/core-kit/tree/1.4-release/sys-libs/glibc), which under Gentoo [is officially masked and discouraged for usage](https://gitweb.gentoo.org/repo/gentoo.git/tree/profiles/package.mask#n542)[^glibc] and wouldn't you know it, also prevents some packages from being compiled (mainly I remember ungoogled-chromium). +Another problem child was glibc, it is *[currently]* at [url https://github.com/funtoo/core-kit/tree/1.4-release/sys-libs/glibc version 2.33-r2], which under Gentoo [url https://gitweb.gentoo.org/repo/gentoo.git/tree/profiles/package.mask#n542 is officially masked and discouraged for usage][$glibc] and wouldn't you know it, also prevents some packages from being compiled (mainly I remember ungoogled-chromium). There were a lot more problematic packages, but I've forgotten most details. What I do remember is that the day I decided to hop to Gentoo, I tried to update my system and yet again I got some sort of issue, either a package couldn't compile properly or there was some dependency conflict. That was preceded by my unsuccessful attempts at getting the kicad package to work a couple of days prior. At that point, this had become completely normal. -**But** Funtoo shouldn't be blamed for it! +=[But]= Funtoo shouldn't be blamed for it! ## I didn't follow the wolf pack philosophy -On the [Welcome](https://www.funtoo.org/Welcome) page of Funtoo's website, in the second paragraph, we are linked the [Wolf Pack Philosophy](https://www.funtoo.org/Wolf_Pack_Philosophy) page. +On the [url https://www.funtoo.org/Welcome Welcome] page of Funtoo's website, in the second paragraph, we are linked the [url https://www.funtoo.org/Wolf_Pack_Philosophy Wolf Pack Philosophy] page. This is essentially a document describing how a member of the community should behave, and I didn't follow it. Any member of the pack is supposed to: - -- **Be Mindful of the Pack** by tackling challenges with the community +.unordered +- =[Be Mindful of the Pack]= by tackling challenges with the community\n but as I found (package) challenges, I tackled them on my own, not trying to consult anyone or ask for help -- **Be Interconnected** by supporting and being supported by the community +- =[Be Interconnected]= by supporting and being supported by the community\n but I didn't connect with anyone on my issues -- **Howl** by expressing their needs and sharing their "adventures" +- =[Howl]= by expressing their needs and sharing their "adventures"\n but I didn't express them and didn't share the work I've done Or more simply put, Funtoo is a small project, and you need to communicate with others to get things done. -Another way to look at it is that in a project of this scale, what gets supported is what the community uses, so in a way, I was trying to use Funtoo in the *wrong* way. +'footnote kicad On that aforementioned kicad package, drobbins, the benevolent dictator for life of Funtoo, categorized it as a [url https://bugs.funtoo.org/browse/FL-8435?focusedId=52907&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-52907 package which people aren't interested in]. + +Another way to look at it is that in a project of this scale, what gets supported is what the community uses, so in a way, I was trying to use Funtoo in the *[wrong]* way. This may sound ridiculous, but then again, they aren't making a project which "just works" for everyone (like Ubuntu or Linux Mint), this is a project by the community for the community. -You can't expect them to support everything that a big-scale distro does, like Gentoo, with a fraction of the manpower, so if nobody supports a package (which exists in the repository tree) that doesn't work and you don't at least speak up, it will probably stay broken[^kicad] (this kind of relates to the **Is Territorial** point in the philosophy). +You can't expect them to support everything that a big-scale distro does, like Gentoo, with a fraction of the manpower, so if nobody supports a package (which exists in the repository tree) that doesn't work and you don't at least speak up, it will probably stay broken[$kicad] (this kind of relates to the =[Is Territorial]= point in the philosophy). However, in my defense, I didn't open bug reports or create forum posts because my issues weren't "directly" related to Funtoo, or a normal Funtoo installation. Most of the time I would have an issue with a package, then get it's Gentoo counterpart, try to get all dependencies working one by one, and it will fail with some unsearchable error. @@ -78,15 +99,15 @@ Looking back at it, the last two parts could be applied to a lot of distros, but But we did also talk about Gentoo, and he pointed out some reasons why Funtoo is better. Looking at these with the benefit of hindsight: -> git > rsync +.quote git > rsync By default, on Gentoo synchronization of ebuild files is done via rsync, while on Funtoo it's done with git. -Gentoo has actually supported git synchronization for quite a while, and [the setup is easy](https://wiki.gentoo.org/wiki/Portage_with_Git), so in the modern day it's really a matter of preference. -Though, [rsync is probably better with bad internet connections](https://lwn.net/Articles/759578/). +Gentoo has actually supported git synchronization for quite a while, and [url https://wiki.gentoo.org/wiki/Portage_with_Git the setup is easy], so in the modern day it's really a matter of preference. +Though, [url https://lwn.net/Articles/759578/ rsync is probably better with bad internet connections]. -> profiles (flavors and mix-ins) +.quote profiles (flavors and mix-ins) -Funtoo has a system called [profiles](https://www.funtoo.org/Funtoo_Profiles). +Funtoo has a system called [url https://www.funtoo.org/Funtoo_Profiles profiles]. The idea is that you can group a whole set of packages and use flags into one name with the ability to turn them off and on again. So, if you want to install gnome on your system, you don't have to worry about flags and potential dependency problems, just use the gnome mix-in and everything will be ready to go for emerging. @@ -94,19 +115,19 @@ This is pretty cool but it's also somewhat unnecessary. You would save time on your very first install ever, but once you've set your flags on one machine, you'll just need to copy some files over (make.conf and package.use) and be done with it. There is a case to be made for people who often emerge and unmerge packages, but they are very much a minority (which I'm not a part of). -> Funtoo has [stage 3 tarballs](https://wiki.gentoo.org/wiki/Stage_tarball) with already setup DEs +.quote Funtoo has [url https://wiki.gentoo.org/wiki/Stage_tarball stage 3 tarballs] with already setup DEs This means that on a Funtoo system, you could directly unpack the tarball (the initial prebuilt binaries), and without emerging anything, have a ready-to-go desktop environment. The huge benefit is that you can very quickly reboot into your "install" (after setting up the booting of course), and use your computer with the comfort of a graphical environment while everything else is being emerged. -Again, this is really cool, but at the end of the day, a normal "text-only" installation isn't very difficult, the [Gentoo handbook](https://wiki.gentoo.org/wiki/Handbook:AMD64/Full/Installation) is very detailed and well written, you install a system once so in the long term it wouldn't matter and I personally use a custom desktop environment setup, so those DEs would be bloat. +Again, this is really cool, but at the end of the day, a normal "text-only" installation isn't very difficult, the [url https://wiki.gentoo.org/wiki/Handbook:AMD64/Full/Installation Gentoo handbook] is very detailed and well written, you install a system once so in the long term it wouldn't matter and I personally use a custom desktop environment setup, so those DEs would be bloat. -> fixed release model +.quote fixed release model -[Funtoo releases fixed version of their distro](https://forums.funtoo.org/topic/1945-funtoo-release-model/#comment-9321), which means, in theory, packages will be way more stable and tested than normally. +[url https://forums.funtoo.org/topic/1945-funtoo-release-model/#comment-9321 Funtoo releases fixed version of their distro], which means, in theory, packages will be way more stable and tested than normally. I've never found problems with packages being "too new", and this is more relevant to how the packages are managed by the maintainers, so it doesn't make that much of a difference to the end user, in my opinion. -> [autogens](https://www.funtoo.org/Autogen) +.quote [url https://www.funtoo.org/Autogen autogens] Rather than making ebuilds manually, on Funtoo you can automatically generate them with simple Python code. This system probably reduces management time quite a lot, especially for a smaller team of maintainers, but you would still need to understand ebuild files. @@ -116,34 +137,29 @@ And I'm not a maintainer, so I don't really care. Though I've "disproved" all of them, that's not to say there aren't any advantages: -> ccache +.quote ccache Imagine you are compiling a program with source code of over 20000 files and in the latest update, only 1000 of them were changed. It will be significantly faster, if you recompile only those 1000 files and use your work from before for the others. That is the idea of ccache, and on Funtoo it works great, I had it enabled for all packages. Unfortunately, for Gentoo it's the opposite effect, I couldn't compile most packages with it enabled. -> package.use > make.conf +.quote package.use > make.conf -There is a big emphasis on writing your use flags in a separate `/etc/portage/package.use` file (or make it a folder and add use flags in different subfiles), and to try and change `/etc/portage/make.conf` as little as possible. -I generally believe this is a significantly better system than stuffing everything into `make.conf`, and it isn't pushed that hard on Gentoo. +There is a big emphasis on writing your use flags in a separate `[/etc/portage/package.use]` file (or make it a folder and add use flags in different subfiles), and to try and change `[/etc/portage/make.conf]` as little as possible. +I generally believe this is a significantly better system than stuffing everything into `[make.conf]`, and it isn't pushed that hard on Gentoo. That said, Gentoo still supports it, so I'm not missing out, but I probably wouldn't have used it. -> better ebuilds +.quote better ebuilds Though I can't empirically prove this, I found that the packages that worked on Funtoo compiled faster than their Gentoo counterparts and generally the ebuilds were simpler and more manageable. -> Slightly better documentation +.quote Slightly better documentation I'm not saying Gentoo's documentation is bad, but Funtoo's is often written a bit more simply. -<br> +\n Funtoo has it's audience, if you're ready to be a part of the wolf pack, it has to potential to be even better than Gentoo. That said, if you need something which always just works, your choice should be Gentoo, as it is for me. - -[^packages-in-repo-tree]: Not all of those packages are in the repository tree, but that doesn't matter, if you want to compile a program, you should be able to do so. -[^required-3.8]: Required might be a strong word, I don't remember if I tried (though I'm sure I did) just downgrading the Python version in the ebuild. Nevertheless, there were for sure useful packages which really did need it. -[^glibc]: This point may not be completely fair, since Funtoo has a system for [ebuild generation](https://web.archive.org/web/20230528115518/https://projects.funtoo.org/metatools/docs/autogen.html), which means that they might've made configuration changes and/or applied patches which "fix" that version, but still, it really isn't a good look. -[^kicad]: On that aforementioned kicad package, drobbins, the benevolent dictator for life of Funtoo, categorized it as a [package which people aren't interested in](https://bugs.funtoo.org/browse/FL-8435?focusedId=52907&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-52907). diff --git a/src/blog/icon-fonts-arent-evil-you-just-have-to-care/index.du b/src/blog/icon-fonts-arent-evil-you-just-have-to-care/index.du new file mode 100644 index 0000000..d09c890 --- /dev/null +++ b/src/blog/icon-fonts-arent-evil-you-just-have-to-care/index.du @@ -0,0 +1,129 @@ +# Icon fonts aren't evil, you just have to care + +'define expected-reading 9 min +'define created 19 July 2023 +'define edited 19 July 2023 +[$pagenav] + +.contents +.numbered +1. [url #the-problem-with-svgs The problem with SVGs] +2. [url #icon-fonts Icon fonts] + .numbered + 1. [url #text-antialiasing-unavoidable Text antialiasing: unavoidable] + 2. [url #better-control-over-svgs-not-always-needed Better control over SVGs: not always needed] + 3. [url #fetching-failures-and-accessible-fonts-fixable-with-care Fetching failures and accessible fonts: fixable with care] + 4. [url #screen-reader-accessibility-almost-unavoidable Screen reader accessibility: almost unavoidable] + 5. [url #file-size-fixable-with-care File size: fixable with care] + +Recently I did a [url https://gitlab.com/Syndamia/syndamiadotcom/-/merge_requests/10 whole bunch of changes to the way this website works] and one of them included replacing all SVG icons with an icon font. +While doing research, I found [url https://www.youtube.com/watch?v=9xXBYcWgCHA Seren Davies' talk] as well as [url https://www.irigoyen.dev/blog/2021/02/17/stop-using-icon-fonts/ many] [url http://technotes.iangreenleaf.com/posts/font-awesome-not-awesome.html other] [url https://www.ianfeather.co.uk/ten-reasons-we-switched-from-an-icon-font-to-svg/ posts] being against them. +A lot of these concerns and issues are valid and multiple times I stopped that rework, but in the end I believe, with enough care, you could make them work almost perfectly. + +## The problem with SVGs + +First, we have to get acquaintanced with why I wanted change: before the big rework, this website used SVG images for all icons. +For [url https://gitlab.com/Syndamia/syndamiadotcom/-/releases/v3.0 quite a while] I've added support for an alternative light theme, but ever since the beginning icons have been an issue. + +How can you change the color, or more specifically, the internal styling of an SVG? +You have a [url https://stackoverflow.com/questions/22252472/how-can-i-change-the-color-of-an-svg-element couple of options], if you include it with a normal `[<img>]` tag, as I was doing, you could do some [url https://stackoverflow.com/a/53336754 magic with filters] to change the exact color, though this is kinda difficult and [url https://caniuse.com/css-filters browsers support filters since somewhat recently]. +This is a deal-breaker, because I care about older browsers and without that CSS property, icons become very difficult to see on the light theme. + +Another option is to load it with an `[\<object>]`, `[\<embed>]` or `[\<iframe>]` tag, though they all [url https://stackoverflow.com/a/21503151 require JavaScript] to edit the internal styling and have [url https://vecta.io/blog/best-way-to-embed-svg a lot of problems]: + +.bulleted +- `[\<object>]` [url https://vecta.io/blog/best-way-to-embed-svg#2-using-an--object--tag causes problems for search engines or the workaround forces downloading multiple files for the same image]. + Worst-case scenario, for every icon you would need two different HTTP requests, which significantly increases required traffic for devices on slow connections, no dice. +- `[\<embed>]` isn't part of the HTML specification, so it could disappear from browsers at any moment and it may have very different behaviours between browsers +- `[\<iframe>]` is [url https://stackoverflow.com/a/23178537 hard to maintain and causes problems for search engines] + +The final option is putting SVG images directly inline with the rest of the HTML. +However, this also comes with it's drawbacks: + +.bulleted +- There will be no icon caching, since they'll be a part of the downloaded webpage. +- [url https://caniuse.com/svg-html5 Browsers before ~2012 didn't support them], which is a deal-breaker since navigation-critical items wouldn't be displayed on those browsers. +- It would also require a little bit more work to maintain, since if I wanted to change an icon I would have to go somewhere and manually insert it's contents, rather than just downloading it and replacing the existing icon. + +Nevertheless, this is the best option and the one I was thinking about the most. + +## Icon fonts + +The alternative is to create your own font, where you replace certain unicode symbols with your own custom graphics. +It is [url https://caniuse.com/mdn-css_properties_font-family universally supported], changing color is as easy as changing text, adding an icon somewhere is as easy as pasting a unicode character there and the font itself can be cached. +Is this too perfect to be true? +Yes, yes it is, there are quite a lot of caveats (outlined very well, with images, on [url https://css-tricks.com/icon-fonts-vs-svg/ this post by Chris Coyier]). + +### Text antialiasing: unavoidable + +At the end of the day, your icons are text, so they'll be antialised. +The result is them being more blurry. +This is pretty much unavoidable, but in my limited testing, most of the time they aren't blurry, and when they are, it's never so bad that you start loosing detail. + +### Better control over SVGs: not always needed + +This is true, you can make an SVG have multiple colors, you can add animations and since SVGs are images, styling is usually easier. +However, I don't have any desire to do either of these, in practice my icons are "extending" the surrounding text. + +### Fetching failures and accessible fonts: fixable with care + +Now, to the big problem, what happens if the browser doesn't fetch the font or if a dyslexic person changes it to something they find easier to read. +This is one of the main issues, outlined in the aforementioned [url https://www.youtube.com/watch?v=9xXBYcWgCHA Seren Davies' talk]. + +Unicode defines certain characters as part of so-called [url https://en.wikipedia.org/wiki/Private_Use_Areas Private Use Areas] (PUA), meaning those character won't ever have a standard glyph (image) assigned to them and any font can define them freely. +The effect is that on different fonts, such a character will appear as a completely different glyph, though most don't define them at all, leaving you with a default blank square. +This is horrible: if the font doesn't get downloaded or if you =[need]= to change it to something you can actually read, you'll get random irrelevant glyphs at best and blank squares everywhere at worst. +To add insult to injury, icon fonts like [url https://fontawesome.com/ font-awesome] contain their icons almost exclusively in the PUA! + +However, this all can be fixed, at least to an extent. +The main tricks are: + +:numbered +1. =[Adding text to every clickable option]=, where possible. + For example, I changed my theme button from an icon to "Dark theme" or "Light theme" (depending on the current theme). + + .p + Even outside this topic, having text instead of icons [url https://dev.to/megazear7/no-icon-web-design-16eb has many benefits], mainly making it easier for users to understand how to interact with the website. + +2. =[Putting important navigational and functional icons outside the PUA]= (and leaving decorational ones there). + + .p + For example, on mobile devices my sidebar is put on the top, but as to not take too much space, it is "folded" up. + To expand it, you need to click an arrow on the top-right corner of the page. + Now, that arrow image is "mapped" to the standard triangle pointing up and down characters, so if the font doesn't load or is changed, you would get a triangle, which conveys the same action. + + .p + This isn't always possible though, for example, what if you have a company logo of some sort? + The solution is in the previous point: don't make your link to that company a single icon, at least add the name next to the icon (or in other words, make the icon decorative). + + +But, to do the second trick, you would need your own custom font. +Thankfully, there are programs which can edit already existing ones, so you won't have to know how to make one yourself. +I personally really like [url https://tabler-icons.io/ tabler-icons] (and more specifically, [url https://github.com/tabler/tabler-icons/releases/tag/v2.10.0 version 2.10.0]) and for the editing I use [url https://fontforge.org/en-US/ FontForge]. +So, I download the `[.ttf]` version of the font and then a (part of a) [url https://gitlab.com/Syndamia/syndamiadotcom/-/blob/master/FontForge-helper.ff#L37-74 FontForge script I made moves glyphs from the PUA to standard characters]. + +### Screen reader accessibility: almost unavoidable + +Text readers usually struggle quite a lot with Unicode characters and especially with those in the PUA. +Generally, you have [url https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes accessibility attributes] like [url https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label aria-label], where you can explain what the given character does. +But SVGs have a title and description tags built-in, existing inside the image file itself, which is way better than adding an aria property. + +### File size: fixable with care + +When every icon is on a separate image, you'll download it only when needed, however with a custom font, you'll always need to download the whole font, which includes icons you don't use. +For the aforementioned tabler-icons, the `[.ttf]` font file is 1.8 MB! +That is waaaay too much, especially since the font could block rendering of the page. +But in reality, if you remove the icons that you don't use, the size difference could actually go in favor of fonts. + +In the [url https://gitlab.com/Syndamia/syndamiadotcom/-/blob/master/FontForge-helper.ff#L17-35 first half of my FontForge script] I select everything that isn't the 16 icons I actually use, and remove it. +The same tabler-icons, but exported as (very well optimized for size) SVG files took up ~28KB in total, however the font with only those same icons was ~7KB in size. +In reality, the most icons loaded by a page ([url /assets /assets]) totaled ~22KB in size, which is still a ~3 times reduction. +On average a page probably requests less than 7KB of icons, but still, 7KB isn't that much and once you fetch it, it get's cached and you don't have to request it ever again. + +Overall, I would say size-wise, with a font containing only what you need, it could easily take up less space than the separate SVGs. +If you still have speed issues, [url https://www.filamentgroup.com/lab/font-events.html there are always ways to load fonts progressively]. + +\n + +Overall, even with a lot of customization, icon fonts could still sometimes cause issues for accessibility and are more limited in some ways. +For me, I've found that their negatives (when applicable) don't degrade website usage that much and their positives make my life a whole lot simpler. diff --git a/src/blog/icon-fonts-arent-evil-you-just-have-to-care/index.md b/src/blog/icon-fonts-arent-evil-you-just-have-to-care/index.md deleted file mode 100644 index fe6c84d..0000000 --- a/src/blog/icon-fonts-arent-evil-you-just-have-to-care/index.md +++ /dev/null @@ -1,112 +0,0 @@ -# Icon fonts aren't evil, you just have to care - -## Contents - -1. [The problem with SVGs](#the-problem-with-svgs) -2. [Icon fonts](#icon-fonts) - 1. [Text antialiasing: unavoidable](#text-antialiasing-unavoidable) - 2. [Better control over SVGs: not always needed](#better-control-over-svgs-not-always-needed) - 3. [Fetching failures and accessible fonts: fixable with care](#fetching-failures-and-accessible-fonts-fixable-with-care) - 4. [Screen reader accessibility: almost unavoidable](#screen-reader-accessibility-almost-unavoidable) - 5. [File size: fixable with care](#file-size-fixable-with-care) - -Recently I did a [whole bunch of changes to the way this website works](https://gitlab.com/Syndamia/syndamiadotcom/-/merge_requests/10) and one of them included replacing all SVG icons with an icon font. -While doing research, I found [Seren Davies' talk](https://www.youtube.com/watch?v=9xXBYcWgCHA) as well as [many](https://www.irigoyen.dev/blog/2021/02/17/stop-using-icon-fonts/) [other](http://technotes.iangreenleaf.com/posts/font-awesome-not-awesome.html) [posts](https://www.ianfeather.co.uk/ten-reasons-we-switched-from-an-icon-font-to-svg/) being against them. -A lot of these concerns and issues are valid and multiple times I stopped that rework, but in the end I believe, with enough care, you could make them work almost perfectly. - -## The problem with SVGs - -First, we have to get acquaintanced with why I wanted change: before the big rework, this website used SVG images for all icons. -For [quite a while](https://gitlab.com/Syndamia/syndamiadotcom/-/releases/v3.0) I've added support for an alternative light theme, but ever since the beginning icons have been an issue. - -How can you change the color, or more specifically, the internal styling of an SVG? -You have a [couple of options](https://stackoverflow.com/questions/22252472/how-can-i-change-the-color-of-an-svg-element), if you include it with a normal `<img>` tag, as I was doing, you could do some [magic with filters](https://stackoverflow.com/a/53336754) to change the exact color, though this is kinda difficult and [browsers support filters since somewhat recently](https://caniuse.com/css-filters). -This is a deal-breaker, because I care about older browsers and without that CSS property, icons become very difficult to see on the light theme. - -Another option is to load it with an `<object>`, `<embed>` or `<iframe>` tag, though they all [require JavaScript](https://stackoverflow.com/a/21503151) to edit the internal styling and have [a lot of problems](https://vecta.io/blog/best-way-to-embed-svg): - -- `<object>` [causes problems for search engines or the workaround forces downloading multiple files for the same image](https://vecta.io/blog/best-way-to-embed-svg#2-using-an--object--tag). - Worst-case scenario, for every icon you would need two different HTTP requests, which significantly increases required traffic for devices on slow connections, no dice. -- `<embed>` isn't part of the HTML specification, so it could disappear from browsers at any moment and it may have very different behaviours between browsers -- `<iframe>` is [hard to maintain and causes problems for search engines](https://stackoverflow.com/a/23178537) - -The final option is putting SVG images directly inline with the rest of the HTML. -However, this also comes with it's drawbacks: - -- There will be no icon caching, since they'll be a part of the downloaded webpage. -- [Browsers before ~2012 didn't support them](https://caniuse.com/svg-html5), which is a deal-breaker since navigation-critical items wouldn't be displayed on those browsers. -- It would also require a little bit more work to maintain, since if I wanted to change an icon I would have to go somewhere and manually insert it's contents, rather than just downloading it and replacing the existing icon. - -Nevertheless, this is the best option and the one I was thinking about the most. - -## Icon fonts - -The alternative is to create your own font, where you replace certain unicode symbols with your own custom graphics. -It is [universally supported](https://caniuse.com/mdn-css_properties_font-family), changing color is as easy as changing text, adding an icon somewhere is as easy as pasting a unicode character there and the font itself can be cached. -Is this too perfect to be true? -Yes, yes it is, there are quite a lot of caveats (outlined very well, with images, on [this post by Chris Coyier](https://css-tricks.com/icon-fonts-vs-svg/)). - -### Text antialiasing: unavoidable - -At the end of the day, your icons are text, so they'll be antialised. -The result is them being more blurry. -This is pretty much unavoidable, but in my limited testing, most of the time they aren't blurry, and when they are, it's never so bad that you start loosing detail. - -### Better control over SVGs: not always needed - -This is true, you can make an SVG have multiple colors, you can add animations and since SVGs are images, styling is usually easier. -However, I don't have any desire to do either of these, in practice my icons are "extending" the surrounding text. - -### Fetching failures and accessible fonts: fixable with care - -Now, to the big problem, what happens if the browser doesn't fetch the font or if a dyslexic person changes it to something they find easier to read. -This is one of the main issues, outlined in the aforementioned [Seren Davies' talk](https://www.youtube.com/watch?v=9xXBYcWgCHA). - -Unicode defines certain characters as part of so-called [Private Use Areas](https://en.wikipedia.org/wiki/Private_Use_Areas) (PUA), meaning those character won't ever have a standard glyph (image) assigned to them and any font can define them freely. -The effect is that on different fonts, such a character will appear as a completely different glyph, though most don't define them at all, leaving you with a default blank square. -This is horrible: if the font doesn't get downloaded or if you **need** to change it to something you can actually read, you'll get random irrelevant glyphs at best and blank squares everywhere at worst. -To add insult to injury, icon fonts like [font-awesome](https://fontawesome.com/) contain their icons almost exclusively in the PUA! - -However, this all can be fixed, at least to an extent. -The main tricks are: - -1. **Adding text to every clickable option**, where possible. - For example, I changed my theme button from an icon to "Dark theme" or "Light theme" (depending on the current theme). - Even outside this topic, having text instead of icons [has many benefits](https://dev.to/megazear7/no-icon-web-design-16eb), mainly making it easier for users to understand how to interact with the website. -2. **Putting important navigational and functional icons outside the PUA** (and leaving decorational ones there). - For example, on mobile devices my sidebar is put on the top, but as to not take too much space, it is "folded" up. - To expand it, you need to click an arrow on the top-right corner of the page. - Now, that arrow image is "mapped" to the standard triangle pointing up and down characters, so if the font doesn't load or is changed, you would get a triangle, which conveys the same action. - This isn't always possible though, for example, what if you have a company logo of some sort? - The solution is in the previous point: don't make your link to that company a single icon, at least add the name next to the icon (or in other words, make the icon decorative). - -But, to do the second trick, you would need your own custom font. -Thankfully, there are programs which can edit already existing ones, so you won't have to know how to make one yourself. -I personally really like [tabler-icons](https://tabler-icons.io/) (and more specifically, [version 2.10.0](https://github.com/tabler/tabler-icons/releases/tag/v2.10.0)) and for the editing I use [FontForge](https://fontforge.org/en-US/). -So, I download the `.ttf` version of the font and then a (part of a) [FontForge script I made moves glyphs from the PUA to standard characters](https://gitlab.com/Syndamia/syndamiadotcom/-/blob/master/FontForge-helper.ff#L37-74). - -### Screen reader accessibility: almost unavoidable - -Text readers usually struggle quite a lot with Unicode characters and especially with those in the PUA. -Generally, you have [accessibility attributes](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes) like [aria-label](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label), where you can explain what the given character does. -But SVGs have a title and description tags built-in, existing inside the image file itself, which is way better than adding an aria property. - -### File size: fixable with care - -When every icon is on a separate image, you'll download it only when needed, however with a custom font, you'll always need to download the whole font, which includes icons you don't use. -For the aforementioned tabler-icons, the `.ttf` font file is 1.8 MB! -That is waaaay too much, especially since the font could block rendering of the page. -But in reality, if you remove the icons that you don't use, the size difference could actually go in favor of fonts. - -In the [first half of my FontForge script](https://gitlab.com/Syndamia/syndamiadotcom/-/blob/master/FontForge-helper.ff#L17-35) I select everything that isn't the 16 icons I actually use, and remove it. -The same tabler-icons, but exported as (very well optimized for size) SVG files took up ~28KB in total, however the font with only those same icons was ~7KB in size. -In reality, the most icons loaded by a page ([/assets](/assets)) totaled ~22KB in size, which is still a ~3 times reduction. -On average a page probably requests less than 7KB of icons, but still, 7KB isn't that much and once you fetch it, it get's cached and you don't have to request it ever again. - -Overall, I would say size-wise, with a font containing only what you need, it could easily take up less space than the separate SVGs. -If you still have speed issues, [there are always ways to load fonts progressively](https://www.filamentgroup.com/lab/font-events.html). - -<br> - -Overall, even with a lot of customization, icon fonts could still sometimes cause issues for accessibility and are more limited in some ways. -For me, I've found that their negatives (when applicable) don't degrade website usage that much and their positives make my life a whole lot simpler. diff --git a/src/blog/microsoft-and-foss-extinguish/index.md b/src/blog/microsoft-and-foss-extinguish/index.du index ebd3ab5..5c4a9bf 100644 --- a/src/blog/microsoft-and-foss-extinguish/index.md +++ b/src/blog/microsoft-and-foss-extinguish/index.du @@ -1,18 +1,25 @@ # Microsoft and FOSS: a fire to be extinguished -## Contents +'define expected-reading 6 min +'define created 20 February 2024 +'define edited 20 February 2024 +[$pagenav] -1. [GitHub's embrace and extensions](#githubs-embrace-and-extensions) -2. [Blowtorch to the penguin](#blowtorch-to-the-penguin) -3. [But these are good things for the user](#but-these-are-good-things-for-the-user) - 1. [The practical answer](#the-practical-answer) - 2. [The moral answer](#the-moral-answer) +.contents +.numbered +1. [url #githubs-embrace-and-extensions GitHub's embrace and extensions] +2. [url #blowtorch-to-the-penguin Blowtorch to the penguin] +3. [url #but-these-are-good-things-for-the-user But these are good things for the user] + .numbered + 1. [url #the-practical-answer The practical answer] + 2. [url #the-moral-answer The moral answer] -A week ago [Microsoft announced they'll be adding "sudo" to Windows](https://devblogs.microsoft.com/commandline/introducing-sudo-for-windows/). -I'm not really knowledgeable enough to be certain what I'm saying is true, so I could be wrong, but upon hearing these news, my mind immediately jumped to the [EEE: Embrace, Extend, Extinguish](https://en.wikipedia.org/wiki/Embrace,_extend,_and_extinguish). +A week ago [url https://devblogs.microsoft.com/commandline/introducing-sudo-for-windows/ Microsoft announced they'll be adding "sudo" to Windows]. +I'm not really knowledgeable enough to be certain what I'm saying is true, so I could be wrong, but upon hearing these news, my mind immediately jumped to the [url https://en.wikipedia.org/wiki/Embrace,_extend,_and_extinguish EEE: Embrace, Extend, Extinguish]. As it is explained on Wikipedia, this is a very old and successful tactic, where Microsoft would enter new markets by: +.numbered 1. Embracing public standards and implementing all features the current product landscape offers, then 2. Extending their offering with proprietary features, which will be pushed to customers and finally 3. Extinguishing their competition, since the vast majority of consumers would be depending on the proprietary features of Microsoft's product @@ -23,22 +30,23 @@ Thinking about the development of GitHub under Microsoft's rule, this pattern se Open-source by itself is primarily about publishing the source code of your project, but GitHub isn't just about that. Now we have: -- [GitHub Octoverse](https://octoverse.github.com/), yearly reports on open-source globally, but quite often through the lens of GitHub -- [GitHub Insider](https://resources.github.com/newsletter/), a monthly newsletter -- [GitHub Copilot](https://github.com/features/copilot/), an AI developer tool -- [GitHub Enterprise](https://github.com/enterprise), an AI developer platform -- [GitHub blog](https://github.blog/), mostly a set of tutorials and informational articles regarding GitHub +.bulleted +- [url https://octoverse.github.com/ GitHub Octoverse], yearly reports on open-source globally, but quite often through the lens of GitHub +- [url https://resources.github.com/newsletter/ GitHub Insider], a monthly newsletter +- [url https://github.com/features/copilot/ GitHub Copilot], an AI developer tool +- [url https://github.com/enterprise GitHub Enterprise], an AI developer platform +- [url https://github.blog/ GitHub blog], mostly a set of tutorials and informational articles regarding GitHub and the list just goes on. GitHub isn't just a public place to view open-source software anymore, if you are a novice developer or you just don't care that much, it will be very easy to associate the FOSS community with the GitHub community. Once you've started using all of those services and tools, there is no coming back, because other repository platforms focus only on repositories. -I mean, [GitLab](https://gitlab.com/) doesn't offer a developer forum like [GitHub Discussions](https://docs.github.com/en/discussions/collaborating-with-your-community-using-discussions/about-discussions), you won't find a [sourcehut](https://sourcehut.org/)-branded FOSS newsletter, [SourceForge](https://sourceforge.net/) won't allow you to add [animations, graphics, games, etc. on your profile](https://github.com/abhisheknaiidu/awesome-github-profile-readme), there isn't a [codeberg](https://codeberg.org/) [command-line repository management app](https://cli.github.com/), so *obviously GitHub is where it's at for FOSS*. +I mean, [url https://gitlab.com/ GitLab] doesn't offer a developer forum like [url https://docs.github.com/en/discussions/collaborating-with-your-community-using-discussions/about-discussions GitHub Discussions], you won't find a [url https://sourcehut.org/ sourcehut]-branded FOSS newsletter, [url https://sourceforge.net/ SourceForge] won't allow you to add [url https://github.com/abhisheknaiidu/awesome-github-profile-readme animations, graphics, games, etc. on your profile], there isn't a [url https://codeberg.org/ codeberg] [url https://cli.github.com/ command-line repository management app], so *[obviously GitHub is where it's at for FOSS]*. -And you'll be introduced to GitHub before any of the others, thanks to the [GitHub Student Developer Pack](https://education.github.com/pack), where students can get free access to a variety of services, or to [GitHub classroom](https://docs.github.com/en/education/manage-coursework-with-github-classroom/get-started-with-github-classroom/about-github-classroom), where newer developers will probably publish their first pieces of code. +And you'll be introduced to GitHub before any of the others, thanks to the [url https://education.github.com/pack GitHub Student Developer Pack], where students can get free access to a variety of services, or to [url https://docs.github.com/en/education/manage-coursework-with-github-classroom/get-started-with-github-classroom/about-github-classroom GitHub classroom], where newer developers will probably publish their first pieces of code. -Why learn to use the git terminal command when [GitHub Desktop](https://desktop.github.com/) abstract everything away in a beautiful clicky interface (as a "bonus", this will make you associate git with GitHub too), why follow [Hacker News](https://news.ycombinator.com/) or multiple different FOSS websites, when Microsoft provides. +Why learn to use the git terminal command when [url https://desktop.github.com/ GitHub Desktop] abstract everything away in a beautiful clicky interface (as a "bonus", this will make you associate git with GitHub too), why follow [url https://news.ycombinator.com/ Hacker News] or multiple different FOSS websites, when Microsoft provides. Why learn anything, when Microsoft's GitHub serves it to you on a silver platter? Well, for an increasing number of developers, I fear, the answer is: "there is no point". @@ -46,16 +54,15 @@ Well, for an increasing number of developers, I fear, the answer is: "there is n ## Blowtorch to the penguin Now let's talk about Microsoft's other plaything: Linux. -Here, I feel, the tactic is even more obvious: thanks to [WSL](https://en.wikipedia.org/wiki/Windows_Subsystem_for_Linux), Linux applications look and run like any other Windows app. -Thanks to [Windows Terminal](https://en.wikipedia.org/wiki/Windows_Terminal), Windows can't be seen as a lesser OS for developers, all benefits of having a proper, fully-fledged, UNIX-like command-line can now be found on Windows. +Here, I feel, the tactic is even more obvious: thanks to [url https://en.wikipedia.org/wiki/Windows_Subsystem_for_Linux WSL], Linux applications look and run like any other Windows app. +Thanks to [url https://en.wikipedia.org/wiki/Windows_Terminal Windows Terminal], Windows can't be seen as a lesser OS for developers, all benefits of having a proper, fully-fledged, UNIX-like command-line can now be found on Windows. -I mean, they've added the sudo command for crying out loud, there is even an official [Windows package manager](https://en.wikipedia.org/wiki/Windows_Package_Manager)! +I mean, they've added the sudo command for crying out loud, there is even an official [url https://en.wikipedia.org/wiki/Windows_Package_Manager Windows package manager]! For a novice or someone uninterested, you wouldn't ever have to learn how to use Linux. You'll use Windows as you've known for your entire life, and if you need something even vaguely related to Linux, you'll just easily get it on another silver platter. I'm certain over the coming decade, the true Linux desktop market share, as in machines running natively Linux, will shrink, but since WSL users will contribute to that number, we'll see the opposite. - ## But these are good things for the user It could be argued that Microsoft is creating something good for the user, that GitHub's extensions will pull more people into FOSS, it will make developers stronger and more connected than ever. @@ -75,7 +82,7 @@ It's tempting to imagine Linux software or Linux projects turn into Windows soft ### The moral answer -[We do things, not because they are easy, but because they are hard](https://en.wikipedia.org/wiki/We_choose_to_go_to_the_Moon). +[url https://en.wikipedia.org/wiki/We_choose_to_go_to_the_Moon We do things, not because they are easy, but because they are hard]. Knowledge is the most important resource we have, everything humanity has achieved has been with the creation, expansion and distribution of knowledge. Developers are the craftsmen of computer software and to create you need knowledge, the more you have the more you can do. |