various small stylistic edits
This commit is contained in:
parent
87ab4f7cf9
commit
fe8b3601f1
|
@ -8,18 +8,64 @@ tags:
|
||||||
- 100 Days To Offload
|
- 100 Days To Offload
|
||||||
date: 2020-04-25T22:12:40-04:00
|
date: 2020-04-25T22:12:40-04:00
|
||||||
---
|
---
|
||||||
A friend of mine, [Kev Quirk](https://kevq.uk/), issued [a challenge](https://fosstodon.org/@kev/104053977554016690) yesterday and I decided to take him up on it. In the time between then and now, he's actually set up a website for participants to submit their posts; it's called (quite fittingly) *[100 Days To Offload](https://100daystooffload.com/)*. I'm going to attempt to keep up with it for the next 100 days and see where it takes me. Because I'll be using this blog every day, expect a lot of changes and improvements. With that out of the way, here goes!
|
|
||||||
|
A friend of mine, [Kev Quirk,](https://kevq.uk/) issued [a
|
||||||
|
challenge](https://fosstodon.org/@kev/104053977554016690) yesterday and
|
||||||
|
I decided to take him up on it. In the time between then and now, he's
|
||||||
|
actually set up a website for participants to submit their posts; it's
|
||||||
|
called (quite fittingly) *[100 Days To
|
||||||
|
Offload.](https://100daystooffload.com/)* I'm going to attempt to keep
|
||||||
|
up with it for the next 100 days and see where it takes me. Because I'll
|
||||||
|
be using this blog every day, expect a lot of changes and improvements.
|
||||||
|
With that out of the way, here goes!
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Part of this challenge is "offloading" and one of the ways that word can be meant is to lay out everything that's on your mind. Today, that's school. I'm generally an *incredibly* laid-back person; I don't really ever get stressed about anything. That is simultaneously a good thing and a very bad thing. Because I don't really get stressed, I don't feel the urgency of getting homework done, communicating with professors about late assignments, studying, the works. In the past, I've enjoyed the content I was learning so the fear of making a bad grade was never a motivator---it was interest in the subject and a natural curiosity. Right now, I'm not interested in any of my subjects except for German. It's very unlikely that I will be dealing with Java in the workforce, Discrete Math is boring, and Calculus II is *killing* me[^1]. I don't even know if I'll pass it this semester.
|
Part of this challenge is "offloading" and one of the ways that word can
|
||||||
|
be meant is to lay out everything that's on your mind. Today, that's
|
||||||
|
school. I'm generally an *incredibly* laid-back person; I don't really
|
||||||
|
ever get stressed about anything. That is simultaneously a good thing
|
||||||
|
and a very bad thing. Because I don't really get stressed, I don't feel
|
||||||
|
the urgency of getting homework done, communicating with professors
|
||||||
|
about late assignments, studying, the works. In the past, I've enjoyed
|
||||||
|
the content I was learning so the fear of making a bad grade was never a
|
||||||
|
motivator---it was interest in the subject and a natural curiosity.
|
||||||
|
Right now, I'm not interested in any of my subjects except for German.
|
||||||
|
It's very unlikely that I will be dealing with Java in the workforce,
|
||||||
|
Discrete Math is boring, and Calculus II is *killing* me.[^1] I don't
|
||||||
|
even know if I'll pass it this semester.
|
||||||
|
|
||||||
And yet...I'm still not stressed. My university implemented an optional pass-fail grading system in light of the pandemic and the physical campus shutting down. If a student is making an A, they will definitely opt out. If a student is making a C, the minimum required to move on, they will opt in. This mean the C will remain on their transcript *but* it won't affect their GPA. For those wanting to get into grad school (me), it is a god send. I have been so lax this semester about doing *anything* for my classes that I will very likely end up opting in for all of courses except German. As I said above, I don't even know if I'll make a C in Calculus though that isn't just because I haven't done all of the work; I have one of the most difficult professors in the math department.I am worried but I'm *very* good at keeping that in the back of my mind under many many layers of keeping myself busy. It's a bit like that meme of the dog saying "this is fine" while the house burns around him except I'm not looking at the fire. My head is craned towards my monitor, my fingers on the keyboard, and my mind is somewhere in a server in Germany ignoring every bit of it.
|
And yet...I'm still not stressed. My university implemented an optional
|
||||||
|
pass-fail grading system in light of the pandemic and the physical
|
||||||
|
campus shutting down. If a student is making an A, they will definitely
|
||||||
|
opt out. If a student is making a C, the minimum required to move on,
|
||||||
|
they will opt in. This mean the C will remain on their transcript *but*
|
||||||
|
it won't affect their GPA. For those wanting to get into grad school
|
||||||
|
(me), it is a god send. I have been so lax this semester about doing
|
||||||
|
*anything* for my classes that I will very likely end up opting in for
|
||||||
|
all of courses except German. As I said above, I don't even know if I'll
|
||||||
|
make a C in Calculus though that isn't just because I haven't done all
|
||||||
|
of the work; I have one of the most difficult professors in the math
|
||||||
|
department.I am worried but I'm *very* good at keeping that in the back
|
||||||
|
of my mind under many many layers of keeping myself busy. It's a bit
|
||||||
|
like that meme of the dog saying "this is fine" while the house burns
|
||||||
|
around him except I'm not looking at the fire. My head is craned towards
|
||||||
|
my monitor, my fingers on the keyboard, and my mind is somewhere in a
|
||||||
|
server in Germany ignoring every bit of it.
|
||||||
|
|
||||||
This is very much a badly-written ramble and I'm not even going to read through it before posting. I don't like talking about this kind of thing but it feels good to get it off my chest, even if it is garbled and likely hard to read. I will try to only have a single "downer" post like this in the series; I have a few ideas for much better content.
|
This is very much a badly-written ramble and I'm not even going to read
|
||||||
|
through it before posting. I don't like talking about this kind of thing
|
||||||
|
but it feels good to get it off my chest, even if it is garbled and
|
||||||
|
likely hard to read. I will try to only have a single "downer" post like
|
||||||
|
this in the series; I have a few ideas for much better content.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
This is published as part of *100 Days To Offload* and is not indicative of the rest of the content there; most of it is much more positive 😅 To join in, simply write a post, submit it [here](https://100daystooffload.com/), and use `#100DaysToOffload` somewhere on your social media 😉
|
This is published as part of *100 Days To Offload* and is not indicative
|
||||||
|
of the rest of the content there; most of it is much more positive 😅 To
|
||||||
|
join in, simply write a post, submit it
|
||||||
|
[here,](https://100daystooffload.com/) and use `#100DaysToOffload`
|
||||||
|
somewhere on your social media 😉
|
||||||
|
|
||||||
[^1]: I actually took the course last semester and ended up dropping it because my grade was so bad right out of the gate.
|
[^1]: I actually took the course last semester and ended up dropping it
|
||||||
|
because my grade was so bad right out of the gate.
|
||||||
|
|
|
@ -12,28 +12,103 @@ tags:
|
||||||
- 100 Days to Offload
|
- 100 Days to Offload
|
||||||
---
|
---
|
||||||
## The idea
|
## The idea
|
||||||
I've found it very difficult to stick to a regular schedule for [#100DaysToOffload](https://100daystooffload) for various reasons. Chief among them is simply that I don't have enough time with everything else I have going on; what I want to write and the ideas I've had take longer to get on paper (or screen) than I'm able to dedicate at the moment[^1]. However, I love the intent behind it and want to continue in a somewhat less involved manner. Enter [#100DaysToRead](https://social.nixnet.services/tags/100DaysToRead).
|
I've found it very difficult to stick to a regular schedule for
|
||||||
|
[#100DaysToOffload](https://100daystooffload) for various reasons. Chief
|
||||||
|
among them is simply that I don't have enough time with everything else
|
||||||
|
I have going on; what I want to write and the ideas I've had take longer
|
||||||
|
to get on paper (or screen) than I'm able to dedicate at the moment.[^1]
|
||||||
|
However, I love the intent behind it and want to continue in a somewhat
|
||||||
|
less involved manner. Enter
|
||||||
|
[#100DaysToRead.](https://social.nixnet.services/tags/100DaysToRead)
|
||||||
|
|
||||||
## The "rules"
|
## The "rules"
|
||||||
Quotes are used because they're not solid rules; it can be hard to learn something significant from fiction, you might miss a day here and there, what you learned could be a bit personal and not really suitable for social media, any number of things might result in "breaking" one or all of them. Just do your best. 🙂
|
Quotes are used because they're not solid rules; it can be hard to learn
|
||||||
|
something significant from fiction, you might miss a day here and there,
|
||||||
|
what you learned could be a bit personal and not really suitable for
|
||||||
|
social media, any number of things might result in "breaking" one or all
|
||||||
|
of them. Just do your best. 🙂
|
||||||
|
|
||||||
### Read for an hour a day
|
### Read for an hour a day
|
||||||
I recommend using some kind of timer or stopwatch to track how long you've been reading. A stopwatch would be best as it allows you to get sucked in without ringing and making you feel as if you *need* to stop; the pull of real life is great and audible reminders only serve to exacerbate the urgency of rejoining the rest of the world. Part of the idea behind this is not only to learn something but to *enjoy* it and that's difficult when you're anxiously waiting for a timer to ding so you can get back to watching a show. I spent a *lot* of time with books when I was younger then fell completely out of the practise once I got more involved with school and want to make it a habit once more.
|
I recommend using some kind of timer or stopwatch to track how long
|
||||||
|
you've been reading. A stopwatch would be best as it allows you to get
|
||||||
|
sucked in without ringing and making you feel as if you *need* to stop;
|
||||||
|
the pull of real life is great and audible reminders only serve to
|
||||||
|
exacerbate the urgency of rejoining the rest of the world. Part of the
|
||||||
|
idea behind this is not only to learn something but to *enjoy* it and
|
||||||
|
that's difficult when you're anxiously waiting for a timer to ding so
|
||||||
|
you can get back to watching a show. I spent a *lot* of time with books
|
||||||
|
when I was younger then fell completely out of the practise once I got
|
||||||
|
more involved with school and want to make it a habit once more.
|
||||||
|
|
||||||
### Take notes
|
### Take notes
|
||||||
The *main* goal of this challenge is to learn things and the effects of this rule are twofold; you'll certainly be learning a lot but it will also provide material to write about in the future[^2]. Take notes in whatever manner you prefer, from writing in the margins[^3] to writing on the wall, though the latter might not be the greatest idea. I personally plan to put my notes in [a Zettelkasten](https://zettelkasten.de/) created with [vimwiki](https://github.com/vimwiki/vimwiki/) along with the rest of my notes[^4]. I will first write down whatever thoughts I have in my [pocket notebook](https://www.walmart.com/ip/Moleskine-Classic-Notebook-Hard-Cover-Pocket-3-5-x-5-5-Plain-Blank-Black-192-Pages-9788883701030-Hardcover-Ntb/8402217) (these will likely just be a short summary with the page/paragraph as reference[^5]) then, directly after I've finished the session or later that day—the same day!—I'll go through the notes and expand them a bit. I want the *full* thought stored in my Zettelkasten for use in the future; whenever I read another book and have a related thought, I'll return to this note and add links between them.
|
The *main* goal of this challenge is to learn things and the effects of
|
||||||
|
this rule are twofold; you'll certainly be learning a lot but it will
|
||||||
|
also provide material to write about in the future.[^2] Take notes in
|
||||||
|
whatever manner you prefer, from writing in the margins[^3] to writing
|
||||||
|
on the wall, though the latter might not be the greatest idea. I
|
||||||
|
personally plan to put my notes in [a
|
||||||
|
Zettelkasten](https://zettelkasten.de/) created with
|
||||||
|
[vimwiki](https://github.com/vimwiki/vimwiki/) along with the rest of my
|
||||||
|
notes.[^4] I will first write down whatever thoughts I have in my
|
||||||
|
[pocket
|
||||||
|
notebook](https://www.walmart.com/ip/Moleskine-Classic-Notebook-Hard-Cover-Pocket-3-5-x-5-5-Plain-Blank-Black-192-Pages-9788883701030-Hardcover-Ntb/8402217)
|
||||||
|
(these will likely just be a short summary with the page/paragraph as
|
||||||
|
reference[^5]) then, directly after I've finished the session or later
|
||||||
|
that day—the same day!—I'll go through the notes and expand them a bit.
|
||||||
|
I want the *full* thought stored in my Zettelkasten for use in the
|
||||||
|
future; whenever I read another book and have a related thought, I'll
|
||||||
|
return to this note and add links between them.
|
||||||
|
|
||||||
### Post a short summary
|
### Post a short summary
|
||||||
Whatever you've learned that day, post a condensed version along with the book/page/paragraph on social media using the [#100DaysToRead](https://social.nixnet.services/tags/100DaysToRead) tag! Expanding a short summary then condensing it again with different wording helps to ensure you understand the material and will aid in recollection. Posting about it will give others the same information and might even pique their interest about what you're reading.
|
Whatever you've learned that day, post a condensed version along with
|
||||||
|
the book/page/paragraph on social media using the
|
||||||
|
[#100DaysToRead](https://social.nixnet.services/tags/100DaysToRead) tag!
|
||||||
|
Expanding a short summary then condensing it again with different
|
||||||
|
wording helps to ensure you understand the material and will aid in
|
||||||
|
recollection. Posting about it will give others the same information and
|
||||||
|
might even pique their interest about what you're reading.
|
||||||
|
|
||||||
## Thoughts
|
## Thoughts
|
||||||
Inspiration for this comes partly from [episode 112](https://www.social-engineer.org/podcast/ep-112-catching-spies-and-paying-parking-tickets-with-joe-navarro/) of [The Social-Engineer Podcast](https://www.social-engineer.org/podcast/), partly from me wanting to learn more, and partly from me wanting more material to write about. There is so much knowledge in books but it takes a great deal of discipline to sit down every day and read for an hour when there are upgrades to perform, emails waiting for replies, games to play, shows to watch, and so much else. Another small aspect of this is partly to alleviate those concerns and stresses; it's a time to sit down, lose yourself in a book, and forget about the outside world.
|
Inspiration for this comes partly from [episode
|
||||||
|
112](https://www.social-engineer.org/podcast/ep-112-catching-spies-and-paying-parking-tickets-with-joe-navarro/)
|
||||||
|
of [The Social-Engineer
|
||||||
|
Podcast,](https://www.social-engineer.org/podcast/) partly from me
|
||||||
|
wanting to learn more, and partly from me wanting more material to write
|
||||||
|
about. There is so much knowledge in books but it takes a great deal of
|
||||||
|
discipline to sit down every day and read for an hour when there are
|
||||||
|
upgrades to perform, emails waiting for replies, games to play, shows to
|
||||||
|
watch, and so much else. Another small aspect of this is partly to
|
||||||
|
alleviate those concerns and stresses; it's a time to sit down, lose
|
||||||
|
yourself in a book, and forget about the outside world.
|
||||||
|
|
||||||
## What I'm starting with
|
## What I'm starting with
|
||||||
Fittingly, I plan to begin with *[How to Read a Book](https://wikipedia.org/wiki/How_to_Read_a_Book)* by [Mortimer J. Adler](https://wikipedia.org/wiki/Mortimer_J._Adler). It provides an in-depth discussion on reading critically and learning as much as possible from a given book. Adler doesn't push a "one-strategy-fits-all" method either. He goes through a variety of approaches for different genres and encourages a deep level of thinking for all, fiction included. I'm looking forward to starting it tomorrow!
|
Fittingly, I plan to begin with *[How to Read a
|
||||||
|
Book](https://wikipedia.org/wiki/How_to_Read_a_Book)* by [Mortimer J.
|
||||||
|
Adler.](https://wikipedia.org/wiki/Mortimer_J._Adler) It provides an
|
||||||
|
in-depth discussion on reading critically and learning as much as
|
||||||
|
possible from a given book. Adler doesn't push a "one-strategy-fits-all"
|
||||||
|
method either. He goes through a variety of approaches for different
|
||||||
|
genres and encourages a deep level of thinking for all, fiction
|
||||||
|
included. I'm looking forward to starting it tomorrow!
|
||||||
|
|
||||||
|
[^1]: With finding links, proofreading, revising, expanding, and
|
||||||
|
shortening various sections, this short post took me over two hours
|
||||||
|
to write.
|
||||||
|
|
||||||
[^1]: With finding links, proofreading, revising, expanding, and shortening various sections, this short post took me over two hours to write.
|
|
||||||
[^2]: Maybe a #100DaysToOffload Take 2!
|
[^2]: Maybe a #100DaysToOffload Take 2!
|
||||||
[^3]: I physically can't bring myself to do this but some people love [marginalia](https://wikipedia.org/wiki/Marginalia) and actively seek books with them. However, it's a very effective technique and might be fun to follow your thought trail when re-reading a book.
|
|
||||||
[^4]: I am currently evaluating [Anytype](https://anytype.io/) as a tool for creating and maintaining a Zettelkasten as well as storing other types on information. At the moment, I can only use it on Windows so it's inaccessible when I *really* need it but the developers say a Linux build will be ready soon™
|
[^3]: I physically can't bring myself to do this but some people love
|
||||||
[^5]: I plan to format these like `p20 ¶2`. The second symbol is a *pilcrow* or, more commonly, a paragraph mark. Usage of that and the section mark (§) are detailed in Matthew Butterick's *[Practical Typography](https://practicaltypography.com/paragraph-and-section-marks.html)*.
|
[marginalia](https://wikipedia.org/wiki/Marginalia) and actively
|
||||||
|
seek books with them. However, it's a very effective technique and
|
||||||
|
might be fun to follow your thought trail when re-reading a book.
|
||||||
|
|
||||||
|
[^4]: I am currently evaluating [Anytype](https://anytype.io/) as a tool
|
||||||
|
for creating and maintaining a Zettelkasten as well as storing other
|
||||||
|
types on information. At the moment, I can only use it on Windows so
|
||||||
|
it's inaccessible when I *really* need it but the developers say a
|
||||||
|
Linux build will be ready soon™
|
||||||
|
|
||||||
|
[^5]: I plan to format these like `p20 ¶2`. The second symbol is a
|
||||||
|
*pilcrow* or, more commonly, a paragraph mark. Usage of that and the
|
||||||
|
section mark (§) are detailed in Matthew Butterick's *[Practical
|
||||||
|
Typography.](https://practicaltypography.com/paragraph-and-section-marks.html)*
|
||||||
|
|
|
@ -13,30 +13,85 @@ tags:
|
||||||
- Mobile
|
- Mobile
|
||||||
- 100 Days To Offload
|
- 100 Days To Offload
|
||||||
---
|
---
|
||||||
Let me put a little disclaimer right here at the beginning: I don't use my mobile phone how a lot of people do so your mileage will vary. I also say "Mostly" in the title because it's incredibly difficult to *completely* remove Google from Android though [some projects](https://www.replicant.us/) have done a very good job of it.
|
|
||||||
|
Let me put a little disclaimer right here at the beginning: I don't use
|
||||||
|
my mobile phone how a lot of people do so your mileage will vary. I also
|
||||||
|
say "Mostly" in the title because it's incredibly difficult to
|
||||||
|
*completely* remove Google from Android though [some
|
||||||
|
projects](https://www.replicant.us/) have done a very good job of it.
|
||||||
|
|
||||||
## My motivation
|
## My motivation
|
||||||
In short, I value my privacy and Google is about as far from privacy-friendly as you can get. What information algorithms are capable of extrapolating given enough data is downright *scary* and **[that is Google's entire business model](https://www.eff.org/deeplinks/2020/03/google-says-it-doesnt-sell-your-data-heres-how-company-shares-monetizes-and)**. In addition, the company itself is [really quite terrible](https://www.alphabetworkers.org/resignation-letter/), from [launching a censored search engine in China](https://theintercept.com/2018/08/01/google-china-search-engine-censorship/) and [selling AI tech to the US military](https://gizmodo.com/google-employees-resign-in-protest-against-pentagon-con-1825729300) to [mishandling sexual assault cases](https://gizmodo.com/massive-google-walkout-over-sexual-misconduct-marks-tec-1830157276) and [forcing people onto Google services with sheer market dominance](https://www.cnbc.com/2018/07/10/eu-hits-alphabet-google-with-android-antitrust-fine.html).
|
In short, I value my privacy and Google is about as far from
|
||||||
|
privacy-friendly as you can get. What information algorithms are capable
|
||||||
|
of extrapolating given enough data is downright *scary* and **[that is
|
||||||
|
Google's entire business
|
||||||
|
model.](https://www.eff.org/deeplinks/2020/03/google-says-it-doesnt-sell-your-data-heres-how-company-shares-monetizes-and)**
|
||||||
|
In addition, the company itself is [really quite
|
||||||
|
terrible,](https://www.alphabetworkers.org/resignation-letter/) from
|
||||||
|
[launching a censored search engine in
|
||||||
|
China](https://theintercept.com/2018/08/01/google-china-search-engine-censorship/)
|
||||||
|
and [selling AI tech to the US
|
||||||
|
military](https://gizmodo.com/google-employees-resign-in-protest-against-pentagon-con-1825729300)
|
||||||
|
to [mishandling sexual assault
|
||||||
|
cases](https://gizmodo.com/massive-google-walkout-over-sexual-misconduct-marks-tec-1830157276)
|
||||||
|
and [forcing people onto Google services with sheer market
|
||||||
|
dominance.](https://www.cnbc.com/2018/07/10/eu-hits-alphabet-google-with-android-antitrust-fine.html)
|
||||||
|
|
||||||
I do not like Google and I do not want it on my phone.
|
I do not like Google and I do not want it on my phone.
|
||||||
|
|
||||||
## What I'm using
|
## What I'm using
|
||||||
I have the [Redmi Note 5 Pro](https://www.mi.com/in/redmi-note-5-pro/) and love it. Specifically, one of the things I like is Xiaomi's business model. It's exactly the same as Google's—data collection and advertising—but it's incredibly easy to circumvent. Xiaomi not only uses its [MIUI](https://en.miui.com/) (*me-you-eye*) for user tracking and profiling but it also displays ads on the lock screen and elsewhere. Because of all that, they're able to *seriously* drop the price on their phones and almost sell them at no more than the hardware and manufacturing cost.
|
I have the [Redmi Note 5 Pro](https://www.mi.com/in/redmi-note-5-pro/)
|
||||||
|
and love it. Specifically, one of the things I like is Xiaomi's business
|
||||||
|
model. It's exactly the same as Google's—data collection and
|
||||||
|
advertising—but it's incredibly easy to circumvent. Xiaomi not only uses
|
||||||
|
its [MIUI](https://en.miui.com/) (*me-you-eye*) for user tracking and
|
||||||
|
profiling but it also displays ads on the lock screen and elsewhere.
|
||||||
|
Because of all that, they're able to *seriously* drop the price on their
|
||||||
|
phones and almost sell them at no more than the hardware and
|
||||||
|
manufacturing cost.
|
||||||
|
|
||||||
Circumventing the data collection is as easy as flashing your own ROM; I prefer [AospExtended](https://aospextended.com/) though [LineageOS](https://lineageos.org/) is a much simpler and "cleaner" Android experience. Many of the installation guide will tell you to flash some [Open GApps](https://opengapps.org/) package but I don't. Others will say to use [microG](https://microg.org/), which is much better but I decided to even omit that the last time I flashed my phone. Thus, I have absolutely no compatibility with Google Services and apps that break without it, well, break.
|
Circumventing the data collection is as easy as flashing your own ROM; I
|
||||||
|
prefer [AospExtended](https://aospextended.com/) though
|
||||||
|
[LineageOS](https://lineageos.org/) is a much simpler and "cleaner"
|
||||||
|
Android experience. Many of the installation guide will tell you to
|
||||||
|
flash some [Open GApps](https://opengapps.org/) package but I don't.
|
||||||
|
Others will say to use [microG,](https://microg.org/) which is much
|
||||||
|
better but I decided to even omit that the last time I flashed my phone.
|
||||||
|
Thus, I have absolutely no compatibility with Google Services and apps
|
||||||
|
that break without it, well, break.
|
||||||
|
|
||||||
I also have the [Mi Band 4](https://www.mi.com/global/mi-smart-band-4)
|
I also have the [Mi Band 4](https://www.mi.com/global/mi-smart-band-4)
|
||||||
which does give Xiaomi the ability to collect a plethora of biometric
|
which does give Xiaomi the ability to collect a plethora of biometric
|
||||||
data as well … if I use their app. Instead, I like
|
data as well … if I use their app. Instead, I like
|
||||||
[Gadgetbridge](https://codeberg.org/Freeyourgadget/Gadgetbridge/) from
|
[Gadgetbridge](https://codeberg.org/Freeyourgadget/Gadgetbridge/) from
|
||||||
[F-Droid](https://f-droid.org/en/packages/nodomain.freeyourgadget.gadgetbridge/).
|
[F-Droid.](https://f-droid.org/en/packages/nodomain.freeyourgadget.gadgetbridge/)
|
||||||
I do occasionally want proprietary apps such as
|
I do occasionally want proprietary apps such as
|
||||||
[Linguee](https://www.linguee.com/) for English/German translation and I get those through [Aurora](https://auroraoss.com/) rather than Google Play.
|
[Linguee](https://www.linguee.com/) for English/German translation and I
|
||||||
|
get those through [Aurora](https://auroraoss.com/) rather than Google
|
||||||
|
Play.
|
||||||
|
|
||||||
## What it's like
|
## What it's like
|
||||||
I mentioned that some apps will break without Google Services, however, I find that they are solidly in the minority; most proprietary applications will work perfectly fine without Google Services or microG though you won't get push notifications. That's really not a big deal for me because I've been moving to a more minimal mobile experience and do most things on my desktop anyway. This is closely related to the disclaimer at the top. I rarely use my phone for anything other than communication through open source apps and listening to podcasts; I don't even have an email client installed (but if I did, it would be [K-9 Mail](https://k9mail.app/)). In all, it's perfectly useable but don't expect your banking application to work[^1].
|
I mentioned that some apps will break without Google Services, however,
|
||||||
|
I find that they are solidly in the minority; most proprietary
|
||||||
|
applications will work perfectly fine without Google Services or microG
|
||||||
|
though you won't get push notifications. That's really not a big deal
|
||||||
|
for me because I've been moving to a more minimal mobile experience and
|
||||||
|
do most things on my desktop anyway. This is closely related to the
|
||||||
|
disclaimer at the top. I rarely use my phone for anything other than
|
||||||
|
communication through open source apps and listening to podcasts; I
|
||||||
|
don't even have an email client installed (but if I did, it would be
|
||||||
|
[K-9 Mail.](https://k9mail.app/)) In all, it's perfectly useable but
|
||||||
|
don't expect your banking application to work.[^1]
|
||||||
|
|
||||||
---
|
---
|
||||||
This was posted as part of [#100DaysToOffload](https://100daystooffload.com/), an [awesome idea](https://fosstodon.org/@kev/104053977554016690) from [Kev Quirk](https://kevq.uk/). If you want to participate, just write something every day for 100 days and post a link on social media with the hashtag!
|
|
||||||
|
|
||||||
[^1]: Why would you bank on mobile anyway? Mobile platforms are some of the most insecure and something that sensitive should be kept far away.
|
This was posted as part of
|
||||||
|
[#100DaysToOffload,](https://100daystooffload.com/) an [awesome
|
||||||
|
idea](https://fosstodon.org/@kev/104053977554016690) from [Kev
|
||||||
|
Quirk](https://kevq.uk/). If you want to participate, just write
|
||||||
|
something every day for 100 days and post a link on social media with
|
||||||
|
the hashtag!
|
||||||
|
|
||||||
|
[^1]: Why would you bank on mobile anyway? Mobile platforms are some of
|
||||||
|
the most insecure and something that sensitive should be kept far
|
||||||
|
away.
|
||||||
|
|
|
@ -12,23 +12,42 @@ tags:
|
||||||
- Websites
|
- Websites
|
||||||
toc: true
|
toc: true
|
||||||
---
|
---
|
||||||
I'm a fan of using as little JavaScript as feasible on a website and implementing a scroll-to-top button in JS is just ridiculous. Nevertheless, there seems to be a plethora of copypasta for it so I thought I would write about implementing one in pure HTML and CSS. The title is just a playful poke at [Kev Quirk](https://kevq.uk) who recently posted about [exactly the same thing](https://kevq.uk/adding-a-scroll-to-top-button-without-javascript/) but with different styling 😉
|
|
||||||
|
I'm a fan of using as little JavaScript as feasible on a website and
|
||||||
|
implementing a scroll-to-top button in JS is just ridiculous.
|
||||||
|
Nevertheless, there seems to be a plethora of copypasta for it so I
|
||||||
|
thought I would write about implementing one in pure HTML and CSS. The
|
||||||
|
title is just a playful poke at [Kev Quirk](https://kevq.uk) who
|
||||||
|
recently posted about [exactly the same
|
||||||
|
thing](https://kevq.uk/adding-a-scroll-to-top-button-without-javascript/)
|
||||||
|
but with different styling 😉
|
||||||
|
|
||||||
## HTML
|
## HTML
|
||||||
There's only one attribute to add to an existing HTML tag near the top of your page and a single line for the button itself.
|
There's only one attribute to add to an existing HTML tag near the top
|
||||||
|
of your page and a single line for the button itself.
|
||||||
|
|
||||||
|
For the attribute, you'll need to use an
|
||||||
|
[ID.](https://www.w3schools.com/hTML/html_id.asp) When the button is
|
||||||
|
clicked, the user will be taken to whatever element has this attribute.
|
||||||
|
For my site, I simply added it to the header at the very top.
|
||||||
|
|
||||||
For the attribute, you'll need to use an [ID](https://www.w3schools.com/hTML/html_id.asp). When the button is clicked, the user will be taken to whatever element has this attribute. For my site, I simply added it to the header at the very top.
|
|
||||||
``` html
|
``` html
|
||||||
<header class="header" id="top">
|
<header class="header" id="top">
|
||||||
```
|
```
|
||||||
|
|
||||||
All that's required for the button is:
|
All that's required for the button is:
|
||||||
|
|
||||||
``` html
|
``` html
|
||||||
<a href="#top"><button class="top">Top</button></a>
|
<a href="#top"><button class="top">Top</button></a>
|
||||||
```
|
```
|
||||||
|
|
||||||
## CSS
|
## CSS
|
||||||
The basic HTML above is exactly the same as what Kev's article has. The CSS is where ours will diverge. Having a button at the very bottom of the page is perfectly fine but I use my site as more than a blog; it's reasonable to expect visitors to simply search for a link or whatever else and move on. Having a floating button that stays in the same place as the user scrolls is a good way to facilitate this.
|
The basic HTML above is exactly the same as what Kev's article has. The
|
||||||
|
CSS is where ours will diverge. Having a button at the very bottom of
|
||||||
|
the page is perfectly fine but I use my site as more than a blog; it's
|
||||||
|
reasonable to expect visitors to simply search for a link or whatever
|
||||||
|
else and move on. Having a floating button that stays in the same place
|
||||||
|
as the user scrolls is a good way to facilitate this.
|
||||||
|
|
||||||
``` css
|
``` css
|
||||||
.top {
|
.top {
|
||||||
|
@ -50,7 +69,21 @@ The basic HTML above is exactly the same as what Kev's article has. The CSS is w
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
The `position`, `bottom`, and `right` lines are what tell your browser to render the item in the bottom right. The position is `fixed` so that means we can put it wherever on the page we want and it will stay there as the user scrolls. `right` and `bottom` say that the element is to be positioned 10 pixels above the bottom of the page and 10 pixels from the right. It's rather hidden on desktop but I'm not expecting desktop users to click it very often; that's what the `Home` key is for, after all, and it works across every website. I'm expecting mobile users to make use of it the most.
|
The `position`, `bottom`, and `right` lines are what tell your browser
|
||||||
|
to render the item in the bottom right. The position is `fixed` so that
|
||||||
|
means we can put it wherever on the page we want and it will stay there
|
||||||
|
as the user scrolls. `right` and `bottom` say that the element is to be
|
||||||
|
positioned 10 pixels above the bottom of the page and 10 pixels from the
|
||||||
|
right. It's rather hidden on desktop but I'm not expecting desktop users
|
||||||
|
to click it very often; that's what the `Home` key is for, after all,
|
||||||
|
and it works across every website. I'm expecting mobile users to make
|
||||||
|
use of it the most.
|
||||||
|
|
||||||
---
|
---
|
||||||
This was posted as part of [#100DaysToOffload](https://100daystooffload.com/), an [awesome idea](https://fosstodon.org/@kev/104053977554016690) from [Kev Quirk](https://kevq.uk/). If you want to participate, just write something every day for 100 days and post a link on social media with the hashtag!
|
|
||||||
|
This was posted as part of
|
||||||
|
[#100DaysToOffload](https://100daystooffload.com/), an [awesome
|
||||||
|
idea](https://fosstodon.org/@kev/104053977554016690) from [Kev
|
||||||
|
Quirk](https://kevq.uk/). If you want to participate, just write
|
||||||
|
something every day for 100 days and post a link on social media with
|
||||||
|
the hashtag!
|
||||||
|
|
|
@ -10,13 +10,49 @@ tags:
|
||||||
- Arch Linux
|
- Arch Linux
|
||||||
- Arch Spin
|
- Arch Spin
|
||||||
---
|
---
|
||||||
Today I had an orthodontist appointment and a voice lesson. The appointment was at 15:00 and the voice lesson at 16:00. I got to the orthodontist's office 10 minutes early, was told to right to the back (like always), I sat down in the seat, and the orthodontist came over after a few minutes with another patient. He looked at my teeth, had me put my retainers in, checked how they fit, then said I don't ever need to come back (unless I do need to). That all took about 7 or 8 minutes. My voice lesson was ~5 minutes away so I had an hour to kill. I drove to the college (where the lesson was), went into the computer lab, and booted my [multibootable](http://multibootusb.org/) bootable.
|
|
||||||
|
|
||||||
I went through the distros I had and chose the [i3 spin of Manjaro](https://manjaro.org/category/community-editions/i3/), forgetting that it hadn't written correctly and was corrupt. I went through a couple of other distros that were as well and settled on [Parrot Home](https://www.parrotsec.org/download-home.php). While I love Parrot Home for security reasons, it wasn't what I was looking for. I started trying to think of a distro that fit all my daily needs that I could take on a flash drive with me wherever I went and . . . I couldn't.
|
Today I had an orthodontist appointment and a voice lesson. The
|
||||||
|
appointment was at 15:00 and the voice lesson at 16:00. I got to the
|
||||||
|
orthodontist's office 10 minutes early, was told to right to the back
|
||||||
|
(like always), I sat down in the seat, and the orthodontist came over
|
||||||
|
after a few minutes with another patient. He looked at my teeth, had me
|
||||||
|
put my retainers in, checked how they fit, then said I don't ever need
|
||||||
|
to come back (unless I do need to). That all took about 7 or 8 minutes.
|
||||||
|
My voice lesson was ~5 minutes away so I had an hour to kill. I drove to
|
||||||
|
the college (where the lesson was), went into the computer lab, and
|
||||||
|
booted my [multibootable](http://multibootusb.org/) bootable.
|
||||||
|
|
||||||
I would boot it, try to install some app I'm missing (Telegram, for instance), find that I need to first update everything then upgrade some packages then have no space left to install Telegram. There isn't one distro I can think of that I wouldn't have to do that with. So I thought I'd try my hand at installing Arch on a flash drive.
|
I went through the distros I had and chose the [i3 spin of
|
||||||
|
Manjaro,](https://manjaro.org/category/community-editions/i3/)
|
||||||
|
forgetting that it hadn't written correctly and was corrupt. I went
|
||||||
|
through a couple of other distros that were as well and settled on
|
||||||
|
[Parrot Home.](https://www.parrotsec.org/download-home.php) While I love
|
||||||
|
Parrot Home for security reasons, it wasn't what I was looking for. I
|
||||||
|
started trying to think of a distro that fit all my daily needs that I
|
||||||
|
could take on a flash drive with me wherever I went and . . . I
|
||||||
|
couldn't.
|
||||||
|
|
||||||
As I was reading, I decided I would rather make a *live* system. This way, I can log into whatever I need to and, as soon as I turn it off, whatever I did disappears. I asked around in the Arch [Telegram channel](https://t.me/archlinuxgroup) and was given a few pages to read up on the wiki as well as a youtube video. First is [building the arch iso](https://wiki.archlinux.org/index.php/archiso), [making a custom repo](https://wiki.archlinux.org/index.php/Pacman/Tips_and_tricks#Custom_local_repository) for installing AUR packages, building them in a [chroot](https://wiki.archlinux.org/index.php/DeveloperWiki:Building_in_a_Clean_Chroot) so you don't mess with your current setup, and the [YouTube videos](https://www.youtube.com/watch?v=DqV1BJtJXEA) that help tie it all together:
|
I would boot it, try to install some app I'm missing (Telegram, for
|
||||||
|
instance), find that I need to first update everything then upgrade some
|
||||||
|
packages then have no space left to install Telegram. There isn't one
|
||||||
|
distro I can think of that I wouldn't have to do that with. So I thought
|
||||||
|
I'd try my hand at installing Arch on a flash drive.
|
||||||
|
|
||||||
# Summary
|
As I was reading, I decided I would rather make a *live* system. This
|
||||||
That'll be it for this post. It was originally a lot longer but I think I want to keep them to a quick read so it's easier to pick up where you left off. I'm not sure what the next post will contain but I am sure that it talks about setting up your dev environment 😉
|
way, I can log into whatever I need to and, as soon as I turn it off,
|
||||||
|
whatever I did disappears. I asked around in the Arch [Telegram
|
||||||
|
channel](https://t.me/archlinuxgroup) and was given a few pages to read
|
||||||
|
up on the wiki as well as a youtube video. First is [building the arch
|
||||||
|
iso,](https://wiki.archlinux.org/index.php/archiso) [making a custom
|
||||||
|
repo](https://wiki.archlinux.org/index.php/Pacman/Tips_and_tricks#Custom_local_repository)
|
||||||
|
for installing AUR packages, building them in a
|
||||||
|
[chroot](https://wiki.archlinux.org/index.php/DeveloperWiki:Building_in_a_Clean_Chroot)
|
||||||
|
so you don't mess with your current setup, and the [YouTube
|
||||||
|
videos](https://www.youtube.com/watch?v=DqV1BJtJXEA) that help tie it
|
||||||
|
all together:
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
That'll be it for this post. It was originally a lot longer but I think
|
||||||
|
I want to keep them to a quick read so it's easier to pick up where you
|
||||||
|
left off. I'm not sure what the next post will contain but I am sure
|
||||||
|
that it talks about setting up your dev environment 😉
|
||||||
|
|
|
@ -10,10 +10,16 @@ Tags:
|
||||||
- Arch Linux
|
- Arch Linux
|
||||||
- Arch Spin
|
- Arch Spin
|
||||||
---
|
---
|
||||||
|
|
||||||
*I **think** I'm going to call it a spin . . .*
|
*I **think** I'm going to call it a spin . . .*
|
||||||
* Install the package `archiso` from the official repos or `archiso-git` from the AUR
|
* Install the package `archiso` from the official repos or `archiso-git`
|
||||||
|
from the AUR
|
||||||
* `$ mkdir ~/<build-directory>`
|
* `$ mkdir ~/<build-directory>`
|
||||||
* Replace `<build-directory>` with wherever you want the iso build to be stored. This is where we'll be spending all of our time configuring. Mine is at `~/liveiso/` and that's the path I'll be using in this and future posts
|
* Replace `<build-directory>` with wherever you want the iso build
|
||||||
|
to be stored. This is where we'll be spending all of our time
|
||||||
|
configuring. Mine is at `~/liveiso/` and that's the path I'll be
|
||||||
|
using in this and future posts
|
||||||
* `$ sudo cp -r /usr/share/archiso/configs/releng/ ~/liveiso`
|
* `$ sudo cp -r /usr/share/archiso/configs/releng/ ~/liveiso`
|
||||||
* Edit `~/liveiso/packages.x86_64` to install desired software
|
* Edit `~/liveiso/packages.x86_64` to install desired software
|
||||||
* This will be addressed in the next post, `packages.x86_64`, where I also give some quick ways to install everything you might want.
|
* This will be addressed in the next post, `packages.x86_64`, where
|
||||||
|
I also give some quick ways to install everything you might want.
|
||||||
|
|
|
@ -9,11 +9,33 @@ tags:
|
||||||
- Arch Linux
|
- Arch Linux
|
||||||
- Arch Spin
|
- Arch Spin
|
||||||
---
|
---
|
||||||
# Package configuration
|
|
||||||
As I said in the last post, this is the file in which you list the applications you wish to install. I won't list the defaults because there a lot. *However*, this basic setup only builds to a total of ~440 MB so you can add *many* more applications.
|
|
||||||
|
|
||||||
I want the setup on this bootable to be exactly the same as what I currently have on my system. I did not want to manually enter every single package though. Thankfully, pacman is a feature-complete tool and it lets you get a *lot* of information about installed packages. `pacman -Qne` lists all the currently installed packages that you explicitly installed. It does not list dependencies of those applications. What I did was run `pacman -Qne >> ~/liveiso/packages.x86_64` to add all the apps I have installed from the official Arch repos to the end of the file so nothing was overwritten.
|
## Package configuration
|
||||||
|
As I said in the last post, this is the file in which you list the
|
||||||
|
applications you wish to install. I won't list the defaults because
|
||||||
|
there a lot. *However*, this basic setup only builds to a total of ~440
|
||||||
|
MB so you can add *many* more applications.
|
||||||
|
|
||||||
After, I ran `pacman -Qni >> official.txt` so I could get information about all those packages and decide whether or not I wanted to keep them. For example, I removed some stuff from deepin that I no longer used, SuperTuxKart, and a lot of other stuff. This shrunk my iso from 3.6 GB to 2.5. Now I have a lot of space to use for installing my applications from the AUR. This includes [making a custom repo](https://wiki.archlinux.org/index.php/Pacman/Tips_and_tricks#Custom_local_repository) for the packages and [building them in a chroot](https://wiki.archlinux.org/index.php/DeveloperWiki:Building_in_a_Clean_Chroot) so you make *sure* you have all the needed dependencies while keeping your system from being messed up while building.
|
I want the setup on this bootable to be exactly the same as what I
|
||||||
|
currently have on my system. I did not want to manually enter every
|
||||||
|
single package though. Thankfully, pacman is a feature-complete tool and
|
||||||
|
it lets you get a *lot* of information about installed packages. `pacman
|
||||||
|
-Qne` lists all the currently installed packages that you explicitly
|
||||||
|
installed. It does not list dependencies of those applications. What I
|
||||||
|
did was run `pacman -Qne >> ~/liveiso/packages.x86_64` to add all the
|
||||||
|
apps I have installed from the official Arch repos to the end of the
|
||||||
|
file so nothing was overwritten.
|
||||||
|
|
||||||
|
After, I ran `pacman -Qni >> official.txt` so I could get information
|
||||||
|
about all those packages and decide whether or not I wanted to keep
|
||||||
|
them. For example, I removed some stuff from deepin that I no longer
|
||||||
|
used, SuperTuxKart, and a lot of other stuff. This shrunk my iso from
|
||||||
|
3.6 GB to 2.5. Now I have a lot of space to use for installing my
|
||||||
|
applications from the AUR. This includes [making a custom
|
||||||
|
repo](https://wiki.archlinux.org/index.php/Pacman/Tips_and_tricks#Custom_local_repository)
|
||||||
|
for the packages and [building them in a
|
||||||
|
chroot](https://wiki.archlinux.org/index.php/DeveloperWiki:Building_in_a_Clean_Chroot)
|
||||||
|
so you make *sure* you have all the needed dependencies while keeping
|
||||||
|
your system from being messed up while building.
|
||||||
|
|
||||||
All of this will be discussed in the next blog post (when I get to it).
|
All of this will be discussed in the next blog post (when I get to it).
|
||||||
|
|
|
@ -11,14 +11,66 @@ tags:
|
||||||
- 100 Days To Offload
|
- 100 Days To Offload
|
||||||
date: 2020-04-28T02:13:16-04:00
|
date: 2020-04-28T02:13:16-04:00
|
||||||
---
|
---
|
||||||
When I was younger, I prided myself on being a classical musician. I played piano and organ, I was in a nearby fine arts university's choir (singing soprano of course), and, quite honestly, I was rather stuck up about it. I didn't know any bluegrass musicians so I had never really interacted with them or gotten "into" the genre but, whenever my mother would show me a group of people with a double bass, a banjo, a mandolin, and a fiddle, I would listen for a few seconds and write it off as "boring country". It wasn't until I started taking lessons that I grew fond of genre.
|
|
||||||
|
|
||||||
One of the things I had always wanted to play was double bass. However, lessons were *extremely* expensive and the instrument was even more so. Coming from a rather poor family of just me and my mother, classical lessons were completely out of the question. She did end up finding a way for me to take bluegrass lessons at an incredibly cheap rate; I won't say what the program is called because my name is plastered all over the internet for the branch in this area but it allows student to take lessons at a greatly reduced cost. Pricing was based on school lunch status and, with this particular branch, I was able to take free lessons and rent a bass for something like $30/semester. I picked it up quickly and started to really enjoy it, learning some classical pieces on the side and playing with a violin bow rather than the expensive bass bows. Throughout the lessons, my main goal was not to get "roped into" doing bluegrass for the rest of my life because I was entirely uninterested in that; I wanted to keep bluegrass in the back and classical in front.
|
When I was younger, I prided myself on being a classical musician. I
|
||||||
|
played piano and organ, I was in a nearby fine arts university's choir
|
||||||
|
(singing soprano of course), and, quite honestly, I was rather stuck up
|
||||||
|
about it. I didn't know any bluegrass musicians so I had never really
|
||||||
|
interacted with them or gotten "into" the genre but, whenever my mother
|
||||||
|
would show me a group of people with a double bass, a banjo, a mandolin,
|
||||||
|
and a fiddle, I would listen for a few seconds and write it off as
|
||||||
|
"boring country". It wasn't until I started taking lessons that I grew
|
||||||
|
fond of genre.
|
||||||
|
|
||||||
Because I picked it up so quickly, the style is very common in this area, and bass players in something of a shortage, I ended up playing for a number of different groups at different levels. In one of them, the youngest member was 12 and, in another, I was the youngest with the next being 30 years older. With all of these groups, I ended up meeting *many* amazing and wonderful people, playing *so much music*, and getting to travel quite a lot. It was very slow but, about three years after first picking up a bass, I'm actively seeking out more bluegrass to learn, recently picking up fingerstyle guitar, banjo, and maybe mandolin in the future.
|
One of the things I had always wanted to play was double bass. However,
|
||||||
|
lessons were *extremely* expensive and the instrument was even more so.
|
||||||
|
Coming from a rather poor family of just me and my mother, classical
|
||||||
|
lessons were completely out of the question. She did end up finding a
|
||||||
|
way for me to take bluegrass lessons at an incredibly cheap rate; I
|
||||||
|
won't say what the program is called because my name is plastered all
|
||||||
|
over the internet for the branch in this area but it allows student to
|
||||||
|
take lessons at a greatly reduced cost. Pricing was based on school
|
||||||
|
lunch status and, with this particular branch, I was able to take free
|
||||||
|
lessons and rent a bass for something like $30/semester. I picked it up
|
||||||
|
quickly and started to really enjoy it, learning some classical pieces
|
||||||
|
on the side and playing with a violin bow rather than the expensive bass
|
||||||
|
bows. Throughout the lessons, my main goal was not to get "roped into"
|
||||||
|
doing bluegrass for the rest of my life because I was entirely
|
||||||
|
uninterested in that; I wanted to keep bluegrass in the back and
|
||||||
|
classical in front.
|
||||||
|
|
||||||
In opening my mind to the genre, I also discovered a lot of beautiful music that's...not quite bluegrass but...not quite anything else I've heard either. I absolutely *love* the style and can't wait to meet up with a friend of mine and put some pieces together. The main band I've been following is [The Punch Brothers](https://www.punchbrothers.com/). [Chris Thile](https://wikipedia.org/wiki/Chris_Thile), the leader...holy shit he's a *musician*. From classical to bluegrass to jazz, he's an absolute madman. A couple of my favourite songs that The Punch Brothers do are written by him: *[My Oh My](https://invidio.us/watch?v=staHSMEE1pw)*, *[Julep]( https://invidio.us/watch?v=lLdtEiUKDig)*, *[Patchwork Girlfriend](https://invidio.us/watch?v=CMtyWB_Pzic)*, and *[Between 1st and A](https://invidio.us/watch?v=2hsXcl4X5vQ)*. The style is just so unique and different yet has those evident bluegrass roots underpinning it all.
|
Because I picked it up so quickly, the style is very common in this
|
||||||
|
area, and bass players in something of a shortage, I ended up playing
|
||||||
|
for a number of different groups at different levels. In one of them,
|
||||||
|
the youngest member was 12 and, in another, I was the youngest with the
|
||||||
|
next being 30 years older. With all of these groups, I ended up meeting
|
||||||
|
*many* amazing and wonderful people, playing *so much music*, and
|
||||||
|
getting to travel quite a lot. It was very slow but, about three years
|
||||||
|
after first picking up a bass, I'm actively seeking out more bluegrass
|
||||||
|
to learn, recently picking up fingerstyle guitar, banjo, and maybe
|
||||||
|
mandolin in the future.
|
||||||
|
|
||||||
|
In opening my mind to the genre, I also discovered a lot of beautiful
|
||||||
|
music that's...not quite bluegrass but...not quite anything else I've
|
||||||
|
heard either. I absolutely *love* the style and can't wait to meet up
|
||||||
|
with a friend of mine and put some pieces together. The main band I've
|
||||||
|
been following is [The Punch Brothers.](https://www.punchbrothers.com/)
|
||||||
|
[Chris Thile](https://wikipedia.org/wiki/Chris_Thile), the leader...holy
|
||||||
|
shit he's a *musician*. From classical to bluegrass to jazz, he's an
|
||||||
|
absolute madman. A couple of my favourite songs that The Punch Brothers
|
||||||
|
do are written by him: *[My Oh
|
||||||
|
My,](https://invidio.us/watch?v=staHSMEE1pw)* *[Julep,](
|
||||||
|
https://invidio.us/watch?v=lLdtEiUKDig)* *[Patchwork
|
||||||
|
Girlfriend,](https://invidio.us/watch?v=CMtyWB_Pzic)* and *[Between 1st
|
||||||
|
and A.](https://invidio.us/watch?v=2hsXcl4X5vQ)* The style is just so
|
||||||
|
unique and different yet has those evident bluegrass roots underpinning
|
||||||
|
it all.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
This was posted as part of [#100DaysToOffload](https://100daystooffload.com/), an [awesome idea](https://fosstodon.org/@kev/104053977554016690) from [Kev Quirk](https://kevq.uk/). If you want to participate, just write something every day for 100 days and post a link on social media with the hashtag!
|
This was posted as part of
|
||||||
|
[#100DaysToOffload,](https://100daystooffload.com/) an [awesome
|
||||||
|
idea](https://fosstodon.org/@kev/104053977554016690) from [Kev
|
||||||
|
Quirk.](https://kevq.uk/) If you want to participate, just write
|
||||||
|
something every day for 100 days and post a link on social media with
|
||||||
|
the hashtag!
|
||||||
|
|
|
@ -12,9 +12,20 @@ tags:
|
||||||
- 100 Days To Offload
|
- 100 Days To Offload
|
||||||
---
|
---
|
||||||
|
|
||||||
I recently started using [calcurse](https://github.com/lfos/calcurse) for my calendar and one of its limitations is good notification support in the generally accepted meaning of the word. The developer has [a different opinion](https://github.com/lfos/calcurse/issues/285#issuecomment-620841221) and that's perfectly alright but traditional notifications are a feature I heavily rely on and calcurse doesn't handle handle them very well; it leaves the user to figure something out on their own. Inspired by [one individual's issue](https://github.com/lfos/calcurse/issues/286#issue-608118188), I did just that.
|
I recently started using [calcurse](https://github.com/lfos/calcurse)
|
||||||
|
for my calendar and one of its limitations is good notification support
|
||||||
|
in the generally accepted meaning of the word. The developer has [a
|
||||||
|
different
|
||||||
|
opinion](https://github.com/lfos/calcurse/issues/285#issuecomment-620841221)
|
||||||
|
and that's perfectly alright but traditional notifications are a feature
|
||||||
|
I heavily rely on and calcurse doesn't handle handle them very well; it
|
||||||
|
leaves the user to figure something out on their own. Inspired by [one
|
||||||
|
individual's
|
||||||
|
issue,](https://github.com/lfos/calcurse/issues/286#issue-608118188) I
|
||||||
|
did just that.
|
||||||
|
|
||||||
A quick glance at `man calcurse` reveals this section:
|
A quick glance at `man calcurse` reveals this section:
|
||||||
|
|
||||||
``` text
|
``` text
|
||||||
-n, --next
|
-n, --next
|
||||||
Print the first appointment within the next 24 hours. The
|
Print the first appointment within the next 24 hours. The
|
||||||
|
@ -22,49 +33,97 @@ A quick glance at `man calcurse` reveals this section:
|
||||||
this appointment.
|
this appointment.
|
||||||
```
|
```
|
||||||
|
|
||||||
The output of running `calcurse -n`, for me and at the moment, looks like this:
|
The output of running `calcurse -n`, for me and at the moment, looks
|
||||||
|
like this:
|
||||||
|
|
||||||
``` text
|
``` text
|
||||||
❯ calcurse -n
|
❯ calcurse -n
|
||||||
next appointment:
|
next appointment:
|
||||||
[17:25] DnD on Mumble
|
[17:25] DnD on Mumble
|
||||||
```
|
```
|
||||||
|
|
||||||
It's all well and good but not really something you'd want in a notification; it needs to be filtered down so it only shows the name of the event, `DnD on Mumble`. To do this, I turned to the man pages of standard CLI utilities `tail` and `cut`. `tail` allows us to filter the output to only the last line[^1] with `tail -1`. `cut` is a little more complicated but will allow us to remove the first few columns of text. `cut -d ' ' -f 5-` is the next snippet in this one-liner. `-d ' '` tells cut to use a single space as the delimiter, `-f` specifies the fields to keep, and `-5` says to use all fields starting with the 5th because there are a few spaces preceding the content we want. Chain all of this mess together with pipes and we get:
|
It's all well and good but not really something you'd want in a
|
||||||
|
notification; it needs to be filtered down so it only shows the name of
|
||||||
|
the event, `DnD on Mumble`. To do this, I turned to the man pages of
|
||||||
|
standard CLI utilities `tail` and `cut`. `tail` allows us to filter the
|
||||||
|
output to only the last line[^1] with `tail -1`. `cut` is a little more
|
||||||
|
complicated but will allow us to remove the first few columns of text.
|
||||||
|
`cut -d ' ' -f 5-` is the next snippet in this one-liner. `-d ' '` tells
|
||||||
|
cut to use a single space as the delimiter, `-f` specifies the fields to
|
||||||
|
keep, and `-5` says to use all fields starting with the 5th because
|
||||||
|
there are a few spaces preceding the content we want. Chain all of this
|
||||||
|
mess together with pipes and we get:
|
||||||
|
|
||||||
``` bash
|
``` bash
|
||||||
calcurse -n | tail -1 | cut -d ' ' -f 5-
|
calcurse -n | tail -1 | cut -d ' ' -f 5-
|
||||||
```
|
```
|
||||||
|
|
||||||
Great. Now we need to actually get a notification containing the resulting string. This can be achieved by storing it in a variable then using it with `notify-send`. You likely already have `notify-send` installed if you're using Linux but, if you don't, I would recommend looking around to see what's default and using that instead.
|
Great. Now we need to actually get a notification containing the
|
||||||
|
resulting string. This can be achieved by storing it in a variable then
|
||||||
|
using it with `notify-send`. You likely already have `notify-send`
|
||||||
|
installed if you're using Linux but, if you don't, I would recommend
|
||||||
|
looking around to see what's default and using that instead.
|
||||||
|
|
||||||
``` bash
|
``` bash
|
||||||
CONT="$(calcurse -n | tail -1 | cut -d ' ' -f 5- -)" && notify-send "Calcurse Event" "$CONT"
|
CONT="$(calcurse -n | tail -1 | cut -d ' ' -f 5- -)" && notify-send "Calcurse Event" "$CONT"
|
||||||
```
|
```
|
||||||
|
|
||||||
Now we're actually getting somewhere. With my setup, the notification looks like this:
|
Now we're actually getting somewhere. With my setup, the notification
|
||||||
![It's a screenshot of my desktop with a notification in the top right corner. The title is "Calcurse Event" and the text below is "DnD on Mumble". Surrounding the text is a solid border. Its position and the border are all that designate it as a notification: the background and text colour match the rest of my desktop which is themed with the base16-unikitty-dark scheme](/assets/jpgs/notification.jpg)
|
looks like this: ![It's a screenshot of my desktop with a notification
|
||||||
|
in the top right corner. The title is "Calcurse Event" and the text
|
||||||
|
below is "DnD on Mumble". Surrounding the text is a solid border. Its
|
||||||
|
position and the border are all that designate it as a notification: the
|
||||||
|
background and text colour match the rest of my desktop which is themed
|
||||||
|
with the base16-unikitty-dark scheme](/assets/jpgs/notification.jpg)
|
||||||
|
|
||||||
|
It's certainly passable and sufficient for some but I'd like an icon so
|
||||||
|
I can see what the notification is for out of the corner of my eye and
|
||||||
|
decide whether or not to glance over. Thankfully, `notify-send` has this
|
||||||
|
built in with the `-i` flag.
|
||||||
|
|
||||||
It's certainly passable and sufficient for some but I'd like an icon so I can see what the notification is for out of the corner of my eye and decide whether or not to glance over. Thankfully, `notify-send` has this built in with the `-i` flag.
|
|
||||||
``` text
|
``` text
|
||||||
-i, --icon=ICON[,ICON...]
|
-i, --icon=ICON[,ICON...]
|
||||||
Specifies an icon filename or stock icon to display.
|
Specifies an icon filename or stock icon to display.
|
||||||
```
|
```
|
||||||
|
|
||||||
Now it's just a matter of figuring out what icon to use. You can certainly pass the path of whatever image you want to it, such as `~/Pictures/calendar-icon.png`, but I want something that fits in with the rest of my icons. These are found in:
|
Now it's just a matter of figuring out what icon to use. You can
|
||||||
|
certainly pass the path of whatever image you want to it, such as
|
||||||
|
`~/Pictures/calendar-icon.png`, but I want something that fits in with
|
||||||
|
the rest of my icons. These are found in:
|
||||||
|
|
||||||
``` bash
|
``` bash
|
||||||
/usr/share/icons/<theme>/it/depends/on/theme
|
/usr/share/icons/<theme>/it/depends/on/theme
|
||||||
```
|
```
|
||||||
I use [Suru++ Dark](https://github.com/gusbemacbe/suru-plus-dark) and the icon I'm using can be found at:
|
|
||||||
|
I use [Suru++ Dark](https://github.com/gusbemacbe/suru-plus-dark) and
|
||||||
|
the icon I'm using can be found at:
|
||||||
|
|
||||||
``` bash
|
``` bash
|
||||||
/usr/share/icons/Suru++-Dark/apps/32@2x/calendar.svg
|
/usr/share/icons/Suru++-Dark/apps/32@2x/calendar.svg
|
||||||
```
|
```
|
||||||
It's different for Adwaita and all the rest though; you'll have to do some digging. It's also worth noting that, if you don't have this theme installed on another device, the icon won't show up.
|
|
||||||
|
It's different for Adwaita and all the rest though; you'll have to do
|
||||||
|
some digging. It's also worth noting that, if you don't have this theme
|
||||||
|
installed on another device, the icon won't show up.
|
||||||
|
|
||||||
After all that, here's my notification command and a screenshot.
|
After all that, here's my notification command and a screenshot.
|
||||||
|
|
||||||
``` bash
|
``` bash
|
||||||
CONT="$(calcurse -n | tail -1 | cut -d ' ' -f 5-)" && notify-send -i /usr/share/icons/Suru++-Dark/apps/32@2x/calendar.svg "Calcurse Event" "$CONT"
|
CONT="$(calcurse -n | tail -1 | cut -d ' ' -f 5-)" && notify-send -i /usr/share/icons/Suru++-Dark/apps/32@2x/calendar.svg "Calcurse Event" "$CONT"
|
||||||
```
|
```
|
||||||
![This is a screenshot like the last one but with an attractive icon to the left of the text](/assets/jpgs/notification-icon.jpg)
|
|
||||||
|
![This is a screenshot like the last one but with an attractive icon to
|
||||||
|
the left of the text](/assets/jpgs/notification-icon.jpg)
|
||||||
|
|
||||||
---
|
---
|
||||||
This was posted as part of [#100DaysToOffload](https://100daystooffload.com/), an [awesome idea](https://fosstodon.org/@kev/104053977554016690) from [Kev Quirk](https://kevq.uk/). If you want to participate, just write something every day for 100 days and post a link on social media with the hashtag!
|
|
||||||
|
|
||||||
[^1]: The opposite of `tail` is `head` and allows for exactly the same thing in reverse: `head -1` will return the first line of whatever input it's given.
|
This was posted as part of
|
||||||
|
[#100DaysToOffload,](https://100daystooffload.com/) an [awesome
|
||||||
|
idea](https://fosstodon.org/@kev/104053977554016690) from [Kev
|
||||||
|
Quirk.](https://kevq.uk/) If you want to participate, just write
|
||||||
|
something every day for 100 days and post a link on social media with
|
||||||
|
the hashtag!
|
||||||
|
|
||||||
|
[^1]: The opposite of `tail` is `head` and allows for exactly the same
|
||||||
|
thing in reverse: `head -1` will return the first line of whatever
|
||||||
|
input it's given.
|
||||||
|
|
|
@ -17,40 +17,76 @@ tags:
|
||||||
- Workflow
|
- Workflow
|
||||||
toc: true
|
toc: true
|
||||||
---
|
---
|
||||||
I [recently posted](https://social.nixnet.services/@amolith/103918629088941744) about getting through 487 feed items in less than half an hour and I thought I would write about my setup here. There are three primary applications that require some configuration:
|
|
||||||
|
I [recently
|
||||||
|
posted](https://social.nixnet.services/@amolith/103918629088941744)
|
||||||
|
about getting through 487 feed items in less than half an hour and I
|
||||||
|
thought I would write about my setup here. There are three primary
|
||||||
|
applications that require some configuration:
|
||||||
* [Feed reader](https://tt-rss.org/)
|
* [Feed reader](https://tt-rss.org/)
|
||||||
* [Browser](https://www.mozilla.org/firefox/new/)
|
* [Browser](https://www.mozilla.org/firefox/new/)
|
||||||
* [Read-it-later service](https://wallabag.org)
|
* [Read-it-later service](https://wallabag.org)
|
||||||
|
|
||||||
## Tiny Tiny RSS
|
## Tiny Tiny RSS
|
||||||
My feed reader of choice is TT-RSS. It's one of the most advanced readers I've ever used and can be tailored for any workflow. My basic preferences are below:
|
My feed reader of choice is TT-RSS. It's one of the most advanced
|
||||||
|
readers I've ever used and can be tailored for any workflow. My basic
|
||||||
|
preferences are below:
|
||||||
|
|
||||||
* ✅ Enable categories
|
* ✅ Enable categories
|
||||||
* ✅ Combined mode
|
* ✅ Combined mode
|
||||||
* ✅ Always expand articles[^1]
|
* ✅ Always expand articles[^1]
|
||||||
* ✅ Show content preview in headlines
|
* ✅ Show content preview in headlines
|
||||||
|
|
||||||
Making use of the categories is *very* important; if you have a lot of feeds, getting through them is much easier when you can go topic by topic and leave some for when you have more time.
|
Making use of the categories is *very* important; if you have a lot of
|
||||||
|
feeds, getting through them is much easier when you can go topic by
|
||||||
|
topic and leave some for when you have more time.
|
||||||
|
|
||||||
In addition to categories, the *big* feature I make use of is keyboard shortcuts. You can view those from the hamburger menu[^2] in the top right at `Keyboard shortcuts help`. `n` and `o` is what I make use of more than any other; `n` goes to the next article (or scrolls in particularly long ones) and `o` opens the source in a new tab. This would be great except that most browsers automatically switch to that new tab. If you're just wanting to get it up there to deal with later as I do, this diversion is *incredibly* annoying. Thankfully, it can be disabled in Firefox 😏
|
In addition to categories, the *big* feature I make use of is keyboard
|
||||||
|
shortcuts. You can view those from the hamburger menu[^2] in the top
|
||||||
|
right at `Keyboard shortcuts help`. `n` and `o` is what I make use of
|
||||||
|
more than any other; `n` goes to the next article (or scrolls in
|
||||||
|
particularly long ones) and `o` opens the source in a new tab. This
|
||||||
|
would be great except that most browsers automatically switch to that
|
||||||
|
new tab. If you're just wanting to get it up there to deal with later as
|
||||||
|
I do, this diversion is *incredibly* annoying. Thankfully, it can be
|
||||||
|
disabled in Firefox 😏
|
||||||
|
|
||||||
## Firefox
|
## Firefox
|
||||||
This setting is pretty damn easy; open `about:config`, search for `loadDivertedInBackground`, and set it to true.
|
This setting is pretty damn easy; open `about:config`, search for
|
||||||
|
`loadDivertedInBackground`, and set it to true.
|
||||||
|
|
||||||
When you right-click something and open it in a new tab, you're automatically diverted to it. In some cases, this is convenient but I've always found it annoying and worked around it by middle clicking links. Changing this setting in `about:config` will make it so *all* tabs open in the background leaving your current tab focused.
|
When you right-click something and open it in a new tab, you're
|
||||||
|
automatically diverted to it. In some cases, this is convenient but I've
|
||||||
|
always found it annoying and worked around it by middle clicking links.
|
||||||
|
Changing this setting in `about:config` will make it so *all* tabs open
|
||||||
|
in the background leaving your current tab focused.
|
||||||
|
|
||||||
## wallabag
|
## wallabag
|
||||||
My read-it-later application is [wallabag](https://wallabag.org), a libre alternative to Mozilla's Pocket (which they still haven't made open source 👀). I use the [Firefox Add-on](https://addons.mozilla.org/en-US/firefox/addon/wallabagger/) so simply clicking the icon will send the URL to my server for download. I also have an application on [my eReader](https://us.kobobooks.com/products/kobo-aura-one-limited-edition) called [Wallabako](https://gitlab.com/anarcat/wallabako/). It downloads articles from wallabag as ePubs so I can read online articles while I'm offline as if they were books. A dream come true 😉
|
My read-it-later application is [wallabag,](https://wallabag.org) a
|
||||||
|
libre alternative to Mozilla's Pocket (which they still haven't made
|
||||||
|
open source 👀). I use the [Firefox
|
||||||
|
Add-on](https://addons.mozilla.org/en-US/firefox/addon/wallabagger/) so
|
||||||
|
simply clicking the icon will send the URL to my server for download. I
|
||||||
|
also have an application on [my
|
||||||
|
eReader](https://us.kobobooks.com/products/kobo-aura-one-limited-edition)
|
||||||
|
called [Wallabako.](https://gitlab.com/anarcat/wallabako/) It downloads
|
||||||
|
articles from wallabag as ePubs so I can read online articles while I'm
|
||||||
|
offline as if they were books. A dream come true 😉
|
||||||
|
|
||||||
## Entire workflow
|
## Entire workflow
|
||||||
With all that out of the way, here's my entire workflow.
|
With all that out of the way, here's my entire workflow.
|
||||||
|
|
||||||
1. Select topic of interest (category)
|
1. Select topic of interest (category)
|
||||||
2. Start at the top and use `n` to quickly view the `n`ext headline and maybe a short preview of the content
|
2. Start at the top and use `n` to quickly view the `n`ext headline and
|
||||||
|
maybe a short preview of the content
|
||||||
3. If you want to read more, `o`pen it in the background
|
3. If you want to read more, `o`pen it in the background
|
||||||
4. Continue pressing `n` and/or `o` until you get to the bottom
|
4. Continue pressing `n` and/or `o` until you get to the bottom
|
||||||
5. If you have time, move to the next category
|
5. If you have time, move to the next category
|
||||||
6. Use `CTRL+Tab` to cycle through all the links you opened and send them to wallabag for consuming later
|
6. Use `CTRL+Tab` to cycle through all the links you opened and send
|
||||||
|
them to wallabag for consuming later
|
||||||
|
|
||||||
[^1]: Depending on what feeds you add, you might want to disable this. Slashdot makes up the bulk of my feed items and they generally fit on one page.
|
[^1]: Depending on what feeds you add, you might want to disable this.
|
||||||
[^2]: A hamburger menu is three parallel horizontal lines typically styled as a button that expands to show a menu of some kind.
|
Slashdot makes up the bulk of my feed items and they generally fit
|
||||||
|
on one page.
|
||||||
|
[^2]: A hamburger menu is three parallel horizontal lines typically
|
||||||
|
styled as a button that expands to show a menu of some kind.
|
||||||
|
|
|
@ -13,21 +13,66 @@ tags:
|
||||||
- 100 Days To Offload
|
- 100 Days To Offload
|
||||||
toc: true
|
toc: true
|
||||||
---
|
---
|
||||||
The other day, I decided that I wanted to start streaming. I'll definitely be playing some games but I might also stream some other things like me playing music. We'll see where that goes. In any case, I don't like relying on third parties for things and didn't want to use Twitch so I started figuring out how to build my own open source and privacy-friendly "platform" (which is really just a [page](/live)).
|
|
||||||
|
The other day, I decided that I wanted to start streaming. I'll
|
||||||
|
definitely be playing some games but I might also stream some other
|
||||||
|
things like me playing music. We'll see where that goes. In any case, I
|
||||||
|
don't like relying on third parties for things and didn't want to use
|
||||||
|
Twitch so I started figuring out how to build my own open source and
|
||||||
|
privacy-friendly "platform" (which is really just a [page.](/live))
|
||||||
|
|
||||||
## The search for a platform
|
## The search for a platform
|
||||||
Before settling on my own custom thing, I did some digging into ready-made platforms I could just throw on one of my servers and run. Two of the ones I found were [OpenStreamingPlatform](https://openstreamingplatform.com/) and [Restreamer](https://datarhei.github.io/restreamer/). The latter isn't exactly what I was looking for but it could have worked quite well. The former, at first glance, was absolutely *perfect*. On a functional level, it still is. However, take a look at [the installation guide](https://wiki.openstreamingplatform.com/Install/Manual).
|
Before settling on my own custom thing, I did some digging into
|
||||||
|
ready-made platforms I could just throw on one of my servers and run.
|
||||||
|
Two of the ones I found were
|
||||||
|
[OpenStreamingPlatform](https://openstreamingplatform.com/) and
|
||||||
|
[Restreamer.](https://datarhei.github.io/restreamer/) The latter isn't
|
||||||
|
exactly what I was looking for but it could have worked quite well. The
|
||||||
|
former, at first glance, was absolutely *perfect*. On a functional
|
||||||
|
level, it still is. However, take a look at [the installation
|
||||||
|
guide.](https://wiki.openstreamingplatform.com/Install/Manual)
|
||||||
|
|
||||||
`<rant>`
|
`<rant>`
|
||||||
|
|
||||||
Steps 3 and 7 are unnecessary unless you feel like manually compiling your web server; it's already available in the [Debian repos](https://packages.debian.org/buster/libnginx-mod-rtmp) and, by extension, Ubuntu's. It's even been backported to Stretch. In step 4, he has `sed -i 's/appendfsync everysec/appendfsync no/'`. Like so many application developers, he's assuming that this is the only project that will be installed on the system. If someone is already using redis in production and they have a different value there, that command will fail. In step 9, the commands are copying the SystemD service files to `/lib/systemd/` but this is where the package manager, `apt`, stores its services. When you have your own that you're writing or copying from somewhere else, best practise is to put them in `/etc/systemd/system`. In addition, all of this is scripted for the "standard" install. Yes, you're always supposed to review scripts before running them but who really does that? When I see a project whose only supported installation method is a script, I nope right on out of there for exactly this reason. I know how my system *is* set up and I know how I *want* it set up. I can't stand it when they assume they know what's best. Just tell me what you *recommend* and I'll make decisions from there.
|
Steps 3 and 7 are unnecessary unless you feel like manually compiling
|
||||||
|
your web server; it's already available in the [Debian
|
||||||
|
repos](https://packages.debian.org/buster/libnginx-mod-rtmp) and, by
|
||||||
|
extension, Ubuntu's. It's even been backported to Stretch. In step 4, he
|
||||||
|
has `sed -i 's/appendfsync everysec/appendfsync no/'`. Like so many
|
||||||
|
application developers, he's assuming that this is the only project that
|
||||||
|
will be installed on the system. If someone is already using redis in
|
||||||
|
production and they have a different value there, that command will
|
||||||
|
fail. In step 9, the commands are copying the SystemD service files to
|
||||||
|
`/lib/systemd/` but this is where the package manager, `apt`, stores its
|
||||||
|
services. When you have your own that you're writing or copying from
|
||||||
|
somewhere else, best practise is to put them in `/etc/systemd/system`.
|
||||||
|
In addition, all of this is scripted for the "standard" install. Yes,
|
||||||
|
you're always supposed to review scripts before running them but who
|
||||||
|
really does that? When I see a project whose only supported installation
|
||||||
|
method is a script, I nope right on out of there for exactly this
|
||||||
|
reason. I know how my system *is* set up and I know how I *want* it set
|
||||||
|
up. I can't stand it when they assume they know what's best. Just tell
|
||||||
|
me what you *recommend* and I'll make decisions from there.
|
||||||
|
|
||||||
`</rant>`
|
`</rant>`
|
||||||
|
|
||||||
## NGINX & RTMP
|
## NGINX & RTMP
|
||||||
RTMP stands for [Real-Time Messaging Protocol](https://wikipedia.org/wiki/Real-Time_Messaging_Protocol) and facilitates streaming audio, video, and other data over the internet in real-time. The NGINX module mentioned above adds functionality to NGINX that allows it to handle RTMP streams and turn them into something a browser or media streaming client can use. Connecting directly via `rtmp://example.com/live/stream` is not very widely supported so protocols such as [MPEG-DASH](https://wikipedia.org/wiki/Dynamic_Adaptive_Streaming_over_HTTP) and [HLS](https://wikipedia.org/wiki/HTTP_Live_Streaming) are used instead.
|
RTMP stands for [Real-Time Messaging
|
||||||
|
Protocol](https://wikipedia.org/wiki/Real-Time_Messaging_Protocol) and
|
||||||
|
facilitates streaming audio, video, and other data over the internet in
|
||||||
|
real-time. The NGINX module mentioned above adds functionality to NGINX
|
||||||
|
that allows it to handle RTMP streams and turn them into something a
|
||||||
|
browser or media streaming client can use. Connecting directly via
|
||||||
|
`rtmp://example.com/live/stream` is not very widely supported so
|
||||||
|
protocols such as
|
||||||
|
[MPEG-DASH](https://wikipedia.org/wiki/Dynamic_Adaptive_Streaming_over_HTTP)
|
||||||
|
and [HLS](https://wikipedia.org/wiki/HTTP_Live_Streaming) are used
|
||||||
|
instead.
|
||||||
|
|
||||||
On Debian-based systems, adding RTMP functionality to NGINX is as simple as `apt install libnginx-mod-rtmp`. After that, you'll need to add some things to your `nginx.conf` and whatever host file you're using for your website.
|
On Debian-based systems, adding RTMP functionality to NGINX is as simple
|
||||||
|
as `apt install libnginx-mod-rtmp`. After that, you'll need to add some
|
||||||
|
things to your `nginx.conf` and whatever host file you're using for your
|
||||||
|
website.
|
||||||
|
|
||||||
``` c
|
``` c
|
||||||
rtmp {
|
rtmp {
|
||||||
|
@ -49,12 +94,20 @@ rtmp {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
`1935` is the default RTMP port. `deny publish all` means you are denying *anyone* from publishing a stream (that includes you. `allow publish 127.0.0.1` allows *local* connections to publish content. I'm using this as a form of authentication---before streaming anything, I have to tunnel my connection to my server via SSH or a VPN. At the moment, I'm using SSH:
|
`1935` is the default RTMP port. `deny publish all` means you are
|
||||||
|
denying *anyone* from publishing a stream (that includes you. `allow
|
||||||
|
publish 127.0.0.1` allows *local* connections to publish content. I'm
|
||||||
|
using this as a form of authentication---before streaming anything, I
|
||||||
|
have to tunnel my connection to my server via SSH or a VPN. At the
|
||||||
|
moment, I'm using SSH:
|
||||||
|
|
||||||
``` text
|
``` text
|
||||||
ssh -L 1935:localhost:1935 user@example.com
|
ssh -L 1935:localhost:1935 user@example.com
|
||||||
```
|
```
|
||||||
|
|
||||||
The other options are just the basics needed to get DASH and HLS to work. The only other thing to do is use NGINX as a reverse proxy (sort of) to serve the streams. Add this to your site's virtual host.
|
The other options are just the basics needed to get DASH and HLS to
|
||||||
|
work. The only other thing to do is use NGINX as a reverse proxy (sort
|
||||||
|
of) to serve the streams. Add this to your site's virtual host.
|
||||||
|
|
||||||
``` c
|
``` c
|
||||||
location /dash {
|
location /dash {
|
||||||
|
@ -65,21 +118,32 @@ location /hls {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
That's it! Now you'll need to test your stream and verify that it actually works.
|
That's it! Now you'll need to test your stream and verify that it
|
||||||
|
actually works.
|
||||||
|
|
||||||
``` bash
|
``` bash
|
||||||
ffmpeg -re -i video.mp4 -vcodec copy -loop -1 -c:a aac -b:a 160k -ar 44100 -strict -2 -f flv rtmp://example.com/live/stream
|
ffmpeg -re -i video.mp4 -vcodec copy -loop -1 -c:a aac -b:a 160k -ar 44100 -strict -2 -f flv rtmp://example.com/live/stream
|
||||||
```
|
```
|
||||||
|
|
||||||
This command has FFmpeg play the video and stream it to the server. You should then be able to open the stream in something like [VLC](https://www.videolan.org/) or [MPV](https://mpv.io/) and watch it from anywhere.
|
This command has FFmpeg play the video and stream it to the server. You
|
||||||
|
should then be able to open the stream in something like
|
||||||
|
[VLC](https://www.videolan.org/) or [MPV](https://mpv.io/) and watch it
|
||||||
|
from anywhere.
|
||||||
|
|
||||||
``` bash
|
``` bash
|
||||||
mpv https://example.com/dash/stream.mpd
|
mpv https://example.com/dash/stream.mpd
|
||||||
```
|
```
|
||||||
|
|
||||||
However, I also wanted to embed it in a website and this is where it gets a little unstable.
|
However, I also wanted to embed it in a website and this is where it
|
||||||
|
gets a little unstable.
|
||||||
|
|
||||||
## Browser playback
|
## Browser playback
|
||||||
`dash.js` is currently one of the best ways to play a live stream in a browser plus it's pretty easy to work with. The code can be found [on GitHub](https://github.com/Dash-Industry-Forum/dash.js). Using the setup with NGINX I detailed above, this should work perfectly fine out of the box.
|
`dash.js` is currently one of the best ways to play a live stream in a
|
||||||
|
browser plus it's pretty easy to work with. The code can be found [on
|
||||||
|
GitHub.](https://github.com/Dash-Industry-Forum/dash.js) Using the setup
|
||||||
|
with NGINX I detailed above, this should work perfectly fine out of the
|
||||||
|
box.
|
||||||
|
|
||||||
``` js
|
``` js
|
||||||
<div>
|
<div>
|
||||||
<video id="videoPlayer" poster="/assets/jpgs/stream.jpg" controls></video>
|
<video id="videoPlayer" poster="/assets/jpgs/stream.jpg" controls></video>
|
||||||
|
@ -95,13 +159,37 @@ However, I also wanted to embed it in a website and this is where it gets a litt
|
||||||
```
|
```
|
||||||
|
|
||||||
## Web chat
|
## Web chat
|
||||||
The last thing every stream needs is something for web chat. I tried a few different solutions and had mixed results. The first was [KiwiIRC](https://kiwiirc.com/) but the iframe wouldn't even finish loading because it connected to so many third parties with a lot of tracking. It functions very well and I might set it up on my own site eventually but it was a bit much to go through at the time. As an intermediate solution, I embedded [my instance](https://irc.nixnet.services) of [The Lounge](https://thelounge.chat), a fully-functional web-based IRC client. This loaded perfectly right out of the box but it wasn't quite what I wanted; there were *too* many options and the friends of mine who tested it got frustrated because some of the essential UI elements were hidden due to the small viewport. It's just not quite suitable for embedded webchat.
|
The last thing every stream needs is something for web chat. I tried a
|
||||||
|
few different solutions and had mixed results. The first was
|
||||||
|
[KiwiIRC](https://kiwiirc.com/) but the iframe wouldn't even finish
|
||||||
|
loading because it connected to so many third parties with a lot of
|
||||||
|
tracking. It functions very well and I might set it up on my own site
|
||||||
|
eventually but it was a bit much to go through at the time. As an
|
||||||
|
intermediate solution, I embedded [my
|
||||||
|
instance](https://irc.nixnet.services) of [The
|
||||||
|
Lounge,](https://thelounge.chat) a fully-functional web-based IRC
|
||||||
|
client. This loaded perfectly right out of the box but it wasn't quite
|
||||||
|
what I wanted; there were *too* many options and the friends of mine who
|
||||||
|
tested it got frustrated because some of the essential UI elements were
|
||||||
|
hidden due to the small viewport. It's just not quite suitable for
|
||||||
|
embedded webchat.
|
||||||
|
|
||||||
Finally, I landed on [qwebirc](https://qwebirc.org/) and it was pretty much *exactly* what I wanted. When the iframe loads, you're prompted to enter a nick, you click connect, wait a minute, and done! My one complaint is that the theme is very bright but I'll work on that later on. It's good enough for now 😉
|
Finally, I landed on [qwebirc](https://qwebirc.org/) and it was pretty
|
||||||
|
much *exactly* what I wanted. When the iframe loads, you're prompted to
|
||||||
|
enter a nick, you click connect, wait a minute, and done! My one
|
||||||
|
complaint is that the theme is very bright but I'll work on that later
|
||||||
|
on. It's good enough for now 😉
|
||||||
|
|
||||||
**EDIT:** Since the time of writing, I have switched to hosting [KiwiIRC](https://kiwiirc.com/) on [Secluded.Site](https://chat.secluded.site) so all of the trackers and third parties aren't in use. My configs are below but I recommend going through [the wiki](https://github.com/kiwiirc/kiwiirc/wiki/Configuration-Options) and making your own decisions.
|
**EDIT:** Since the time of writing, I have switched to hosting
|
||||||
|
[KiwiIRC](https://kiwiirc.com/) on
|
||||||
|
[Secluded.Site](https://chat.secluded.site) so all of the trackers and
|
||||||
|
third parties aren't in use. My configs are below but I recommend going
|
||||||
|
through [the
|
||||||
|
wiki](https://github.com/kiwiirc/kiwiirc/wiki/Configuration-Options) and
|
||||||
|
making your own decisions.
|
||||||
|
|
||||||
`/etc/kiwiirc/config.conf`
|
`/etc/kiwiirc/config.conf`
|
||||||
|
|
||||||
``` ini
|
``` ini
|
||||||
logLevel = 3
|
logLevel = 3
|
||||||
identd = false
|
identd = false
|
||||||
|
@ -147,6 +235,7 @@ webirc = ""
|
||||||
```
|
```
|
||||||
|
|
||||||
`/etc/kiwiirc/client.json`
|
`/etc/kiwiirc/client.json`
|
||||||
|
|
||||||
``` json
|
``` json
|
||||||
{
|
{
|
||||||
"windowTitle": "Secluded.Site Chat",
|
"windowTitle": "Secluded.Site Chat",
|
||||||
|
@ -211,14 +300,48 @@ webirc = ""
|
||||||
```
|
```
|
||||||
|
|
||||||
## Actually streaming
|
## Actually streaming
|
||||||
Once you're ready to start streaming content, I recommend using [OBS Studio](https://github.com/obsproject/obs-studio/). If you're noticing issues with stream performance, play around with your output resolution and FPS---those are the biggest factors. To use OBS with NGINX, you'll need to go to `Settings`, `Stream`, and set `Server` to `rtmp://localhost/live/`. If you're using my configs as they are, the key will need to be `stream`. Literally every component requires specific paths so, unless you're careful, things will break and you'll spend hours trying figure it out like I did. Also don't forget that the connection *has* to be tunnelled if you want authentication as I mentioned above. If you don't have `localhost:1935` on your streaming machine tunnelled to port 1935 on your server, OBS is going to throw errors about not being able to connect.
|
Once you're ready to start streaming content, I recommend using [OBS
|
||||||
|
Studio.](https://github.com/obsproject/obs-studio/) If you're noticing
|
||||||
|
issues with stream performance, play around with your output resolution
|
||||||
|
and FPS---those are the biggest factors. To use OBS with NGINX, you'll
|
||||||
|
need to go to `Settings`, `Stream`, and set `Server` to
|
||||||
|
`rtmp://localhost/live/`. If you're using my configs as they are, the
|
||||||
|
key will need to be `stream`. Literally every component requires
|
||||||
|
specific paths so, unless you're careful, things will break and you'll
|
||||||
|
spend hours trying figure it out like I did. Also don't forget that the
|
||||||
|
connection *has* to be tunnelled if you want authentication as I
|
||||||
|
mentioned above. If you don't have `localhost:1935` on your streaming
|
||||||
|
machine tunnelled to port 1935 on your server, OBS is going to throw
|
||||||
|
errors about not being able to connect.
|
||||||
|
|
||||||
## Summary
|
## Summary
|
||||||
I'm pretty proud of [the set up](/live) I have now but it could still do with some improvements. For example, I plan to mess with the CSS and make both the video and chat panes *much* wider as well as side-by-side rather than on top of each other. Everything is crammed together and it's not a very good experience.
|
I'm pretty proud of [the set up](/live) I have now but it could still do
|
||||||
|
with some improvements. For example, I plan to mess with the CSS and
|
||||||
|
make both the video and chat panes *much* wider as well as side-by-side
|
||||||
|
rather than on top of each other. Everything is crammed together and
|
||||||
|
it's not a very good experience.
|
||||||
|
|
||||||
## References
|
## References
|
||||||
This post has pieces taken from a few other articles and sites that also deserve a mention as well as a read. NGINX actually has an [official blog post](https://www.nginx.com/blog/video-streaming-for-remote-learning-with-nginx/) on setting up RTMP streaming (though they compile NGINX from source as well) that was a *massive* help. I also found another post that is very similar to this one about [HTML5 Live Streaming with MPEG-DASH](https://www.isrv.pw/html5-live-streaming-with-mpeg-dash). A good number of the parts are the same but I used the NGINX module in Debian repos and they used a fork of it with additional features. My NGINX setup was mostly from the NGINX blog post and the embedded stream was primarily from Inanity's. I figured out some of the components I could use for all of this from [Drew DeVault](https://live.drewdevault.com/).
|
This post has pieces taken from a few other articles and sites that also
|
||||||
|
deserve a mention as well as a read. NGINX actually has an [official
|
||||||
|
blog
|
||||||
|
post](https://www.nginx.com/blog/video-streaming-for-remote-learning-with-nginx/)
|
||||||
|
on setting up RTMP streaming (though they compile NGINX from source as
|
||||||
|
well) that was a *massive* help. I also found another post that is very
|
||||||
|
similar to this one about [HTML5 Live Streaming with
|
||||||
|
MPEG-DASH.](https://www.isrv.pw/html5-live-streaming-with-mpeg-dash) A
|
||||||
|
good number of the parts are the same but I used the NGINX module in
|
||||||
|
Debian repos and they used a fork of it with additional features. My
|
||||||
|
NGINX setup was mostly from the NGINX blog post and the embedded stream
|
||||||
|
was primarily from Inanity's. I figured out some of the components I
|
||||||
|
could use for all of this from [Drew
|
||||||
|
DeVault.](https://live.drewdevault.com/)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
This was posted as part of [#100DaysToOffload](https://100daystooffload.com/), an [awesome idea](https://fosstodon.org/@kev/104053977554016690) from [Kev Quirk](https://kevq.uk/). If you want to participate, just write something every day for 100 days and post a link on social media with the hashtag!
|
This was posted as part of
|
||||||
|
[#100DaysToOffload,](https://100daystooffload.com/) an [awesome
|
||||||
|
idea](https://fosstodon.org/@kev/104053977554016690) from [Kev
|
||||||
|
Quirk.](https://kevq.uk/) If you want to participate, just write
|
||||||
|
something every day for 100 days and post a link on social media with
|
||||||
|
the hashtag!
|
||||||
|
|
|
@ -10,10 +10,27 @@ tags:
|
||||||
- 100 Days To Offload
|
- 100 Days To Offload
|
||||||
date: 2020-04-27T23:15:04-04:00
|
date: 2020-04-27T23:15:04-04:00
|
||||||
---
|
---
|
||||||
Well I had planned to write a post about music this evening but I just spend two hours making the post's cover image, a guitar. Lately, I've been *basing* my images on [Feather Icons](https://feathericons.com/) or [Font Awesome](https://fontawesome.com/). I might download one to use as a reference, download and modify, etc. but I've stopped using the icons as they are. This guitar, however, is an exception; I used the [Bezier Pen](https://www.tutorviacomputer.com/inkscape/the-bezier-tool/) and created it completely from scratch. It's still just a silhouette but I've always avoided this tool because it's so hard to use. You can view it on [my Gitea instance](https://git.nixnet.xyz/Amolith/secluded/src/branch/master/content/assets/pngs/guitar.png).
|
|
||||||
|
|
||||||
Anyway, this is my anti-climactic third day out of 100! Prepare for some music tomorrow 😉
|
Well I had planned to write a post about music this evening but I just
|
||||||
|
spend two hours making the post's cover image, a guitar. Lately, I've
|
||||||
|
been *basing* my images on [Feather Icons](https://feathericons.com/) or
|
||||||
|
[Font Awesome.](https://fontawesome.com/) I might download one to use as
|
||||||
|
a reference, download and modify, etc. but I've stopped using the icons
|
||||||
|
as they are. This guitar, however, is an exception; I used the [Bezier
|
||||||
|
Pen](https://www.tutorviacomputer.com/inkscape/the-bezier-tool/) and
|
||||||
|
created it completely from scratch. It's still just a silhouette but
|
||||||
|
I've always avoided this tool because it's so hard to use. You can view
|
||||||
|
it on [my Gitea
|
||||||
|
instance.](https://git.nixnet.xyz/Amolith/secluded/src/branch/master/content/assets/pngs/guitar.png)
|
||||||
|
|
||||||
|
Anyway, this is my anti-climactic third day out of 100! Prepare for some
|
||||||
|
music tomorrow 😉
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
This was posted as part of [#100DaysToOffload](https://100daystooffload.com/), an [awesome idea](https://fosstodon.org/@kev/104053977554016690) from [Kev Quirk](https://kevq.uk/). If you want to participate, just write something every day for 100 days and post a link on social media with the hashtag!
|
This was posted as part of
|
||||||
|
[#100DaysToOffload,](https://100daystooffload.com/) an [awesome
|
||||||
|
idea](https://fosstodon.org/@kev/104053977554016690) from [Kev
|
||||||
|
Quirk.](https://kevq.uk/) If you want to participate, just write
|
||||||
|
something every day for 100 days and post a link on social media with
|
||||||
|
the hashtag!
|
||||||
|
|
|
@ -13,24 +13,86 @@ tags:
|
||||||
- NixNet
|
- NixNet
|
||||||
- 100 Days To Offload
|
- 100 Days To Offload
|
||||||
---
|
---
|
||||||
I haven't been able to come up with a specific topic for today so this is just a kind of generic update about me.
|
|
||||||
|
I haven't been able to come up with a specific topic for today so this
|
||||||
|
is just a kind of generic update about me.
|
||||||
|
|
||||||
## Zettelkasten
|
## Zettelkasten
|
||||||
In my [previous post about Vim](/vim-as-a-markdown-editor/), I briefly mentioned being inspired to create a Zettelkasten by Daryl Sun in [his fourth 100 Days To Offload post](https://write.privacytools.io/darylsun/100-days-to-offload-day-4). A Zettelkasten is a personal knowledge management tool that allows one to quickly retrieve useful information about a subject, relearn forgotten concepts, and discover connections between those concepts to form entirely new ideas. There are different processes recommended by different people but I think it's a very personal choice and depends on what your workflow will look like. Mine will be as follows.
|
In my [previous post about Vim,](/vim-as-a-markdown-editor/) I briefly
|
||||||
|
mentioned being inspired to create a Zettelkasten by Daryl Sun in [his
|
||||||
|
fourth 100 Days To Offload
|
||||||
|
post.](https://write.privacytools.io/darylsun/100-days-to-offload-day-4)
|
||||||
|
A Zettelkasten is a personal knowledge management tool that allows one
|
||||||
|
to quickly retrieve useful information about a subject, relearn
|
||||||
|
forgotten concepts, and discover connections between those concepts to
|
||||||
|
form entirely new ideas. There are different processes recommended by
|
||||||
|
different people but I think it's a very personal choice and depends on
|
||||||
|
what your workflow will look like. Mine will be as follows.
|
||||||
|
|
||||||
1. Take *very* concise notes on something I learned in a *physical* notebook
|
1. Take *very* concise notes on something I learned in a *physical*
|
||||||
2. When I'm able, go through those notes and add them to my [digital Zettelkasten](https://git.nixnet.xyz/Amolith/zettelkasten), expanding them a little and fleshing the thought out more
|
notebook
|
||||||
|
2. When I'm able, go through those notes and add them to my [digital
|
||||||
|
Zettelkasten,](https://git.nixnet.xyz/Amolith/zettelkasten) expanding
|
||||||
|
them a little and fleshing the thought out more
|
||||||
|
|
||||||
The last step is *the most important* as this is the one where you sit down and think about what you're adding and try to draw connections between it and what you already know. The goal is not to make the longest and most complete notes in the world but to add value to each *concise* thought by linking it with others and build a web for you to explore later. You might not see immediate benefits but a mature Zettelkasten with hundreds of entries will constantly surprise you as you tumble into your own store of knowledge and rediscover things. That surprise is actually one of the greatest benefits to this kind of knowledge management system; when something is surprising, we tend to remember it better.
|
The last step is *the most important* as this is the one where you sit
|
||||||
|
down and think about what you're adding and try to draw connections
|
||||||
|
between it and what you already know. The goal is not to make the
|
||||||
|
longest and most complete notes in the world but to add value to each
|
||||||
|
*concise* thought by linking it with others and build a web for you to
|
||||||
|
explore later. You might not see immediate benefits but a mature
|
||||||
|
Zettelkasten with hundreds of entries will constantly surprise you as
|
||||||
|
you tumble into your own store of knowledge and rediscover things. That
|
||||||
|
surprise is actually one of the greatest benefits to this kind of
|
||||||
|
knowledge management system; when something is surprising, we tend to
|
||||||
|
remember it better.
|
||||||
|
|
||||||
## Doom Emacs
|
## Doom Emacs
|
||||||
A friend of mine convinced my to try [Doom Emacs](https://github.com/hlissner/doom-emacs) and, so far, I am very impressed. Emacs itself is very powerful but, from what I can tell, this configuration adds a *lot* of value. The main one being Vim keybindings 😉 I'm looking forward to learning [org-mode](https://orgmode.org/) and seeing what it can do for my productivity. As a text editor and programming tool, I plan to stick with [Neovim](https://neovim.io/) on desktop/laptop, [Vim](https://www.vim.org/) on Debian-based systems, [vi](https://wikipedia.org/wiki/Vi) wherever else.
|
A friend of mine convinced my to try [Doom
|
||||||
|
Emacs](https://github.com/hlissner/doom-emacs) and, so far, I am very
|
||||||
|
impressed. Emacs itself is very powerful but, from what I can tell, this
|
||||||
|
configuration adds a *lot* of value. The main one being Vim keybindings
|
||||||
|
😉 I'm looking forward to learning [org-mode](https://orgmode.org/) and
|
||||||
|
seeing what it can do for my productivity. As a text editor and
|
||||||
|
programming tool, I plan to stick with [Neovim](https://neovim.io/) on
|
||||||
|
desktop/laptop, [Vim](https://www.vim.org/) on Debian-based systems,
|
||||||
|
[vi](https://wikipedia.org/wiki/Vi) wherever else.
|
||||||
|
|
||||||
## NixNet plans
|
## NixNet plans
|
||||||
Today, I fleshed out some of my thoughts on reprovisioning all of my over the summer. I'm going to have [Ansible](https://docs.ansible.com/) or [Salt](https://docs.saltstack.com/en/latest/) build and deploy [LXC](https://linuxcontainers.org/lxc/introduction/) containers to a baremetal server from [Hetzner](https://www.hetzner.com/sb) running a *very* minimal [Alpine Linux](https://alpinelinux.org/) installation. Whatever setup I have for those will of course be available on [Gitea](https://git.nixnet.xyz/NixNet). From there, my local NAS will use something like [borgmatic](https://torsion.org/borgmatic/) to back up files and databases from all of my servers and [LXD](https://linuxcontainers.org/lxd/introduction/) to create container snapshots[^1]. All of that will be mirrored to [BackBlaze](https://www.backblaze.com/) likely using their B2 model as paying per GB per month is generally the most reliable option. Under one of the others, there's always the possibility that I might upload more than they think is reasonable and start limiting me in some way.
|
Today, I fleshed out some of my thoughts on reprovisioning all of my
|
||||||
|
over the summer. I'm going to have [Ansible](https://docs.ansible.com/)
|
||||||
|
or [Salt](https://docs.saltstack.com/en/latest/) build and deploy
|
||||||
|
[LXC](https://linuxcontainers.org/lxc/introduction/) containers to a
|
||||||
|
baremetal server from [Hetzner](https://www.hetzner.com/sb) running a
|
||||||
|
*very* minimal [Alpine Linux](https://alpinelinux.org/) installation.
|
||||||
|
Whatever setup I have for those will of course be available on
|
||||||
|
[Gitea.](https://git.nixnet.xyz/NixNet) From there, my local NAS will
|
||||||
|
use something like [borgmatic](https://torsion.org/borgmatic/) to back
|
||||||
|
up files and databases from all of my servers and
|
||||||
|
[LXD](https://linuxcontainers.org/lxd/introduction/) to create container
|
||||||
|
snapshots[^1]. All of that will be mirrored to
|
||||||
|
[BackBlaze](https://www.backblaze.com/) likely using their B2 model as
|
||||||
|
paying per GB per month is generally the most reliable option. Under one
|
||||||
|
of the others, there's always the possibility that I might upload more
|
||||||
|
than they think is reasonable and start limiting me in some way.
|
||||||
|
|
||||||
Short-term, I'm going to consolidate some of my servers to a single baremetal machine from Hetzner. Long-term, I'm going to look into building and racking my own servers in a datacenter in Germany, likely one of Hetzner's. This comes with a plethora of benefits but a pretty major detriment: the up-front cost will be absolutely *massive*. Building a rack server worth putting in a datacenter will be incredibly expensive at the start. Following that, all I have to pay is a monthly fee for however much space it uses in the rack and it won't be too much. Before any of that is even considered, I'm going to be spending a lot of time discussing things with my father; he did a lot of racking before he got his current sysadmin job and has a ton of advice to give, from using VoIP to powercycle the server to what networking gear to look at and how to organise everything within the rack.
|
Short-term, I'm going to consolidate some of my servers to a single
|
||||||
|
baremetal machine from Hetzner. Long-term, I'm going to look into
|
||||||
|
building and racking my own servers in a datacenter in Germany, likely
|
||||||
|
one of Hetzner's. This comes with a plethora of benefits but a pretty
|
||||||
|
major detriment: the up-front cost will be absolutely *massive*.
|
||||||
|
Building a rack server worth putting in a datacenter will be incredibly
|
||||||
|
expensive at the start. Following that, all I have to pay is a monthly
|
||||||
|
fee for however much space it uses in the rack and it won't be too much.
|
||||||
|
Before any of that is even considered, I'm going to be spending a lot of
|
||||||
|
time discussing things with my father; he did a lot of racking before he
|
||||||
|
got his current sysadmin job and has a ton of advice to give, from using
|
||||||
|
VoIP to powercycle the server to what networking gear to look at and how
|
||||||
|
to organise everything within the rack.
|
||||||
|
|
||||||
I have a lot of really big plans.
|
I have a lot of really big plans.
|
||||||
|
|
||||||
[^1]: This one isn't *really* necessary as building the containers with Ansible/Salt is automated and it's a simple process to rebuild them. Snapshots might just take less time to redeploy should something go wrong.
|
[^1]: This one isn't *really* necessary as building the containers with
|
||||||
|
Ansible/Salt is automated and it's a simple process to rebuild them.
|
||||||
|
Snapshots might just take less time to redeploy should something go
|
||||||
|
wrong.
|
||||||
|
|
|
@ -14,9 +14,27 @@ tags:
|
||||||
toc: true
|
toc: true
|
||||||
---
|
---
|
||||||
|
|
||||||
Much to my chagrin, I've hardly posted anything at all the past couple of weeks. This is partly due to university summer classes starting and partly due to me putting some work into [NixNet's documentation](https://docs.nixnet.services). After listening to [Episode 4 of 2.5 Admins](https://2.5admins.com/2-5-admins-04/), I decided to change some things up with my infrastructure planning and, instead of automating all the things, document it first. Only after writing extensive documentation will I look into automating *portions* my setup, like hardening a server directly following installation. To that end, I've decided to use [MediaWiki](https://www.mediawiki.org/wiki/MediaWiki).
|
Much to my chagrin, I've hardly posted anything at all the past couple
|
||||||
|
of weeks. This is partly due to university summer classes starting and
|
||||||
|
partly due to me putting some work into [NixNet's
|
||||||
|
documentation.](https://docs.nixnet.services) After listening to
|
||||||
|
[Episode 4 of 2.5 Admins,](https://2.5admins.com/2-5-admins-04/) I
|
||||||
|
decided to change some things up with my infrastructure planning and,
|
||||||
|
instead of automating all the things, document it first. Only after
|
||||||
|
writing extensive documentation will I look into automating *portions*
|
||||||
|
my setup, like hardening a server directly following installation. To
|
||||||
|
that end, I've decided to use
|
||||||
|
[MediaWiki.](https://www.mediawiki.org/wiki/MediaWiki)
|
||||||
|
|
||||||
After [downloading](https://www.mediawiki.org/wiki/Download) and [installing](https://www.mediawiki.org/wiki/Manual:Installation_guide) MediaWiki, a very straightforward process[^1], the next step is configuring it. There is of course [a guide](https://www.mediawiki.org/wiki/Manual:System_administration) but I think it can be useful to see someone else's configuration to get ideas from as well, especially considering how many extensions there are. I won't go through *all* of the settings, just the maybe less obvious ones.
|
After [downloading](https://www.mediawiki.org/wiki/Download) and
|
||||||
|
[installing](https://www.mediawiki.org/wiki/Manual:Installation_guide)
|
||||||
|
MediaWiki, a very straightforward process,[^1] the next step is
|
||||||
|
configuring it. There is of course [a
|
||||||
|
guide](https://www.mediawiki.org/wiki/Manual:System_administration) but
|
||||||
|
I think it can be useful to see someone else's configuration to get
|
||||||
|
ideas from as well, especially considering how many extensions there
|
||||||
|
are. I won't go through *all* of the settings, just the maybe less
|
||||||
|
obvious ones.
|
||||||
|
|
||||||
## URLs
|
## URLs
|
||||||
The first thing in `LocalSettings.php` is `$wgScriptPath`. Different wikis take vastly different approaches for this. Some fill that variable with `"/w"` (default), some with `"/view"`, and some with something entirely different. [Wikipedia](https://wikipedia.org/wiki/MediaWiki) and all of its children use `"/wiki"`. While well and good, the default configuration will have your URLs appearing as `example.com/wiki/index.php?title=<page>` and this is bad practise for SEO; if you want your pages easily discoverable, the URLs need to be a bit shorter. The easiest way I've found to do this is add all of six lines to my NGINX config and set `$wgScriptPath` to `""` (an empty string).
|
The first thing in `LocalSettings.php` is `$wgScriptPath`. Different wikis take vastly different approaches for this. Some fill that variable with `"/w"` (default), some with `"/view"`, and some with something entirely different. [Wikipedia](https://wikipedia.org/wiki/MediaWiki) and all of its children use `"/wiki"`. While well and good, the default configuration will have your URLs appearing as `example.com/wiki/index.php?title=<page>` and this is bad practise for SEO; if you want your pages easily discoverable, the URLs need to be a bit shorter. The easiest way I've found to do this is add all of six lines to my NGINX config and set `$wgScriptPath` to `""` (an empty string).
|
||||||
|
@ -29,12 +47,37 @@ location @rewrite {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
The snippet above tells NGINX to rewrite all of your site's base URLs and remove `index.php?title=` from them. This is a similar approach to what [Mozilla](https://wiki.mozilla.org/Main_Page) has done. The result is cleaner URLs that comply with SEO best practises and a setup that avoids [moving MediaWiki to the site's root](https://www.mediawiki.org/wiki/Manual:Wiki_in_site_root_directory).
|
The snippet above tells NGINX to rewrite all of your site's base URLs
|
||||||
|
and remove `index.php?title=` from them. This is a similar approach to
|
||||||
|
what [Mozilla](https://wiki.mozilla.org/Main_Page) has done. The result
|
||||||
|
is cleaner URLs that comply with SEO best practises and a setup that
|
||||||
|
avoids [moving MediaWiki to the site's
|
||||||
|
root.](https://www.mediawiki.org/wiki/Manual:Wiki_in_site_root_directory)
|
||||||
|
|
||||||
## Mobile view
|
## Mobile view
|
||||||
I see a *lot* of MediaWiki instances without a good mobile version and, other than keeping the number of extensions down, I don't really understand why. Setting it up is incredibly easy and gives everyone a *much* better experience. The [Minerva Neue](https://www.mediawiki.org/wiki/Special:MyLanguage/Skin:Minerva_Neue) skin is designed specifically for use on mobile devices and is also much more aggressive about optimisation. Though editing is a terrible experience, it also looks great on desktop. The [MobileFrontend](https://www.mediawiki.org/wiki/Extension:MobileFrontend) extension is used to detect the reader's device and serve them either the configured desktop skin or Minerva Neue. You *could* serve a different skin on mobile but I've found that Minerva Neue looks the best by far.
|
I see a *lot* of MediaWiki instances without a good mobile version and,
|
||||||
|
other than keeping the number of extensions down, I don't really
|
||||||
|
understand why. Setting it up is incredibly easy and gives everyone a
|
||||||
|
*much* better experience. The [Minerva
|
||||||
|
Neue](https://www.mediawiki.org/wiki/Special:MyLanguage/Skin:Minerva_Neue)
|
||||||
|
skin is designed specifically for use on mobile devices and is also much
|
||||||
|
more aggressive about optimisation. Though editing is a terrible
|
||||||
|
experience, it also looks great on desktop. The
|
||||||
|
[MobileFrontend](https://www.mediawiki.org/wiki/Extension:MobileFrontend)
|
||||||
|
extension is used to detect the reader's device and serve them either
|
||||||
|
the configured desktop skin or Minerva Neue. You *could* serve a
|
||||||
|
different skin on mobile but I've found that Minerva Neue looks the best
|
||||||
|
by far.
|
||||||
|
|
||||||
|
To set them up, you'll need to download [the
|
||||||
|
skin](https://www.mediawiki.org/wiki/Special:SkinDistributor/MinervaNeue)
|
||||||
|
and [the
|
||||||
|
extension.](https://www.mediawiki.org/wiki/Special:ExtensionDistributor/MobileFrontend)
|
||||||
|
From there, you'll need to add a few lines to your config file. On a
|
||||||
|
side note, I love how dynamic MediaWiki can be, especially with
|
||||||
|
downloads; providing a copy/paste extraction command that doesn't use
|
||||||
|
wildcards and puts it in the correct directory is *awesome*.
|
||||||
|
|
||||||
To set them up, you'll need to download [the skin](https://www.mediawiki.org/wiki/Special:SkinDistributor/MinervaNeue) and [the extension](https://www.mediawiki.org/wiki/Special:ExtensionDistributor/MobileFrontend). From there, you'll need to add a few lines to your config file. On a side note, I love how dynamic MediaWiki can be, especially with downloads; providing a copy/paste extraction command that doesn't use wildcards and puts it in the correct directory is *awesome*.
|
|
||||||
``` php
|
``` php
|
||||||
# I recommend putting this with the rest of your extensions
|
# I recommend putting this with the rest of your extensions
|
||||||
wfLoadExtension( 'MobileFrontend' );
|
wfLoadExtension( 'MobileFrontend' );
|
||||||
|
@ -44,25 +87,57 @@ $wgMFDefaultSkinClass = 'SkinMinerva';
|
||||||
$wgMFAutodetectMobileView = true;
|
$wgMFAutodetectMobileView = true;
|
||||||
```
|
```
|
||||||
|
|
||||||
With the skin and extension in place and those lines in your config, save and reload and there should be a link at the bottom of your wiki called `Mobile view`. Click it and you'll see Minerva! On a phone, MobileFrontend will automatically serve it but you can force your default theme by clicking `Desktop view` in the same location.
|
With the skin and extension in place and those lines in your config,
|
||||||
|
save and reload and there should be a link at the bottom of your wiki
|
||||||
|
called `Mobile view`. Click it and you'll see Minerva! On a phone,
|
||||||
|
MobileFrontend will automatically serve it but you can force your
|
||||||
|
default theme by clicking `Desktop view` in the same location.
|
||||||
|
|
||||||
![Screenshot of the mobile versions of my MediaWiki instance. The left uses Minerva Neue and the right uses Vector. The left has buttons and icons that are much larger and easier to tap making for better accessibility. Though the text is readable, the touch targets are much too small navigation is hell](/assets/pngs/mediawiki-skins.png)
|
![Screenshot of the mobile versions of my MediaWiki instance. The left
|
||||||
<center><p>Left is Vector (default) and right is Minerva Neue</p></center>
|
uses Minerva Neue and the right uses Vector. The left has buttons and
|
||||||
|
icons that are much larger and easier to tap making for better
|
||||||
|
accessibility. Though the text is readable, the touch targets are much
|
||||||
|
too small navigation is hell](/assets/pngs/mediawiki-skins.png)
|
||||||
|
|
||||||
## Discussion pages
|
## Discussion pages
|
||||||
The default discussion page for MediaWiki works but, unless you're already used to it, it can be quite odd for new people. That's where the [StructuredDiscussions](https://www.mediawiki.org/wiki/Structured_Discussions) extension comes in. Here's a comparison of before and after enabling it.
|
The default discussion page for MediaWiki works but, unless you're
|
||||||
![side-by-side screenshot of my wiki before and after enabling the extension. the left really is just the default content editor. it's like giving someone a text editor on a server and asking them to have a conversation with someone else by editing the same file and saving it to see replies. the right side is with the extension enabled and gives buttons to browse by topic and a field to create a new topic. it's very similar to github's issue tracker, for example, but without the ability to sort by tags](/assets/pngs/talk-before-after.png)
|
already used to it, it can be quite odd for new people. That's where the
|
||||||
|
[StructuredDiscussions](https://www.mediawiki.org/wiki/Structured_Discussions)
|
||||||
|
extension comes in. Here's a comparison of before and after enabling it.
|
||||||
|
|
||||||
<center><p>Left is without StructuredDiscussions and right is with</p></center>
|
![side-by-side screenshot of my wiki before and after enabling the
|
||||||
|
extension. the left really is just the default content editor. it's like
|
||||||
|
giving someone a text editor on a server and asking them to have a
|
||||||
|
conversation with someone else by editing the same file and saving it to
|
||||||
|
see replies. the right side is with the extension enabled and gives
|
||||||
|
buttons to browse by topic and a field to create a new topic. it's very
|
||||||
|
similar to github's issue tracker, for example, but without the ability
|
||||||
|
to sort by tags](/assets/pngs/talk-before-after.png)
|
||||||
|
|
||||||
|
As I said, the left works but most people wouldn't know what to do when
|
||||||
|
given the default MediaWiki editor and it raises the barrier for entry.
|
||||||
|
The right is *much* more user-friendly and works exactly how one would
|
||||||
|
expect. StructuredDiscussions does have a few dependencies but they're
|
||||||
|
easy to add. [Echo](https://www.mediawiki.org/wiki/Extension:Echo) is
|
||||||
|
for notifications and the others are included by default. After
|
||||||
|
[installing
|
||||||
|
it,](https://www.mediawiki.org/wiki/Special:ExtensionDistributor/Echo)
|
||||||
|
and
|
||||||
|
[StructuredDiscussions,](https://www.mediawiki.org/wiki/Special:ExtensionDistributor/Flow)
|
||||||
|
add the following lines to your `LocalSettings.php`.
|
||||||
|
|
||||||
As I said, the left works but most people wouldn't know what to do when given the default MediaWiki editor and it raises the barrier for entry. The right is *much* more user-friendly and works exactly how one would expect. StructuredDiscussions does have a few dependencies but they're easy to add. [Echo](https://www.mediawiki.org/wiki/Extension:Echo) is for notifications and the others are included by default. After [installing it](https://www.mediawiki.org/wiki/Special:ExtensionDistributor/Echo), and [StructuredDiscussions](https://www.mediawiki.org/wiki/Special:ExtensionDistributor/Flow), add the following lines to your `LocalSettings.php`.
|
|
||||||
``` php
|
``` php
|
||||||
# With the rest of your extensions
|
# With the rest of your extensions
|
||||||
wfLoadExtension( 'Echo' );
|
wfLoadExtension( 'Echo' );
|
||||||
wfLoadExtension( 'Flow' );
|
wfLoadExtension( 'Flow' );
|
||||||
```
|
```
|
||||||
|
|
||||||
Running the following commands is necessary because MediaWiki's database needs modification to support the extension. General talk pages are `--ns=1` and `User:Talk` pages are `--ns=3`. If you only want Structured Discussions enabled for one of them, only run that one. I personally recommend doing it for all.
|
Running the following commands is necessary because MediaWiki's database
|
||||||
|
needs modification to support the extension. General talk pages are
|
||||||
|
`--ns=1` and `User:Talk` pages are `--ns=3`. If you only want Structured
|
||||||
|
Discussions enabled for one of them, only run that one. I personally
|
||||||
|
recommend doing it for all.
|
||||||
|
|
||||||
``` text
|
``` text
|
||||||
php maintenance/populateContentModel.php --wiki=somewiki --ns=1 --table=revision
|
php maintenance/populateContentModel.php --wiki=somewiki --ns=1 --table=revision
|
||||||
php maintenance/populateContentModel.php --wiki=somewiki --ns=1 --table=archive
|
php maintenance/populateContentModel.php --wiki=somewiki --ns=1 --table=archive
|
||||||
|
@ -73,7 +148,10 @@ php maintenance/populateContentModel.php --wiki=somewiki --ns=3 --table=archive
|
||||||
php maintenance/populateContentModel.php --wiki=somewiki --ns=3 --table=page
|
php maintenance/populateContentModel.php --wiki=somewiki --ns=3 --table=page
|
||||||
```
|
```
|
||||||
|
|
||||||
After that, add these to actually enable the extension. To temporarily disable it, you can comment them out but I don't know how that will affect talk pages that already exist.
|
After that, add these to actually enable the extension. To temporarily
|
||||||
|
disable it, you can comment them out but I don't know how that will
|
||||||
|
affect talk pages that already exist.
|
||||||
|
|
||||||
``` php
|
``` php
|
||||||
# Flow (discussions) configuration
|
# Flow (discussions) configuration
|
||||||
$wgNamespaceContentModels[NS_TALK] = 'flow-board';
|
$wgNamespaceContentModels[NS_TALK] = 'flow-board';
|
||||||
|
@ -81,14 +159,33 @@ $wgNamespaceContentModels[NS_USER_TALK] = 'flow-board';
|
||||||
```
|
```
|
||||||
|
|
||||||
## Subpages
|
## Subpages
|
||||||
One of the features I'll be making heavy use of for my [Privacy Policies](https://docs.nixnet.services/Category:Privacy_policies) and [Terms of Service](https://docs.nixnet.services/Category:Terms_of_Service) pages is [Subpages](https://www.mediawiki.org/wiki/Help:Subpages). This allows you to create pages entitled `Parent/Child` and the child automatically links back to the parent at the top. This can be seen in [Mozilla](https://wiki.mozilla.org/Apps/Security/Other) and [Arch Linux's](https://wiki.archlinux.org/index.php/Firefox/Privacy) wikis right under the header and [in mine as well](https://docs.nixnet.services/DNS/Privacy). Enabling it is quite simple; just add the following line to your config.
|
|
||||||
|
One of the features I'll be making heavy use of for my [Privacy
|
||||||
|
Policies](https://docs.nixnet.services/Category:Privacy_policies) and
|
||||||
|
[Terms of
|
||||||
|
Service](https://docs.nixnet.services/Category:Terms_of_Service) pages
|
||||||
|
is [Subpages.](https://www.mediawiki.org/wiki/Help:Subpages) This allows
|
||||||
|
you to create pages entitled `Parent/Child` and the child automatically
|
||||||
|
links back to the parent at the top. This can be seen in
|
||||||
|
[Mozilla](https://wiki.mozilla.org/Apps/Security/Other) and [Arch
|
||||||
|
Linux's](https://wiki.archlinux.org/index.php/Firefox/Privacy) wikis
|
||||||
|
right under the header and [in mine as
|
||||||
|
well.](https://docs.nixnet.services/DNS/Privacy) Enabling it is quite
|
||||||
|
simple; just add the following line to your config.
|
||||||
|
|
||||||
``` php
|
``` php
|
||||||
## Enable subpages for all namespaces
|
## Enable subpages for all namespaces
|
||||||
$wgNamespacesWithSubpages[NS_MAIN] = true;
|
$wgNamespacesWithSubpages[NS_MAIN] = true;
|
||||||
```
|
```
|
||||||
|
|
||||||
## Syntax highlighting
|
## Syntax highlighting
|
||||||
The final configuration change I've made (so far) has been to enable syntax highlighting in the default editor with [CodeMirror](https://www.mediawiki.org/wiki/Extension:CodeMirror). After [installing it](https://www.mediawiki.org/wiki/Special:ExtensionDistributor/CodeMirror), add these lines to your config and you're done!
|
The final configuration change I've made (so far) has been to enable
|
||||||
|
syntax highlighting in the default editor with
|
||||||
|
[CodeMirror.](https://www.mediawiki.org/wiki/Extension:CodeMirror) After
|
||||||
|
[installing
|
||||||
|
it,](https://www.mediawiki.org/wiki/Special:ExtensionDistributor/CodeMirror)
|
||||||
|
add these lines to your config and you're done!
|
||||||
|
|
||||||
``` php
|
``` php
|
||||||
# Place with the other extensions as always
|
# Place with the other extensions as always
|
||||||
wfLoadExtension( 'CodeMirror' );
|
wfLoadExtension( 'CodeMirror' );
|
||||||
|
@ -96,12 +193,33 @@ wfLoadExtension( 'CodeMirror' );
|
||||||
$wgDefaultUserOptions['usecodemirror'] = 1;
|
$wgDefaultUserOptions['usecodemirror'] = 1;
|
||||||
```
|
```
|
||||||
|
|
||||||
![screenshot of the mediawiki editor. headers are larger, code blocks are highlighted, links blue with link text black so it's easy to pick out, etc. In all, it's a much nicer experience.](/assets/pngs/mediawiki-highlight.png)
|
![screenshot of the mediawiki editor. headers are larger, code blocks
|
||||||
|
are highlighted, links blue with link text black so it's easy to pick
|
||||||
|
out, etc. In all, it's a much nicer
|
||||||
|
experience.](/assets/pngs/mediawiki-highlight.png)
|
||||||
|
|
||||||
## Editing in Vim
|
## Editing in Vim
|
||||||
The final tip I have is that you can edit pretty much *any* MediaWiki instance in Vim, including Wikipedia itself, with [a simple plugin](https://github.com/aquach/vim-mediawiki-editor). The only drawback I've found is that, unless you store your password in your config, you'll have to enter it every time you close and reopen Vim. You can also give Vim [Wikitext syntax highlighting](https://en.wikipedia.org/wiki/Help:Text_editor_support#Vim) for creating MediaWiki pages when offline. A few days ago, my wiki was completely offline while taking a disk image backup but I still wrote the majority of the [libvirt](https://docs.nixnet.services/Libvirt) and [Debian](https://docs.nixnet.services/Debian) pages while I waited and the highlighting was really nice.
|
The final tip I have is that you can edit pretty much *any* MediaWiki
|
||||||
|
instance in Vim, including Wikipedia itself, with [a simple
|
||||||
|
plugin.](https://github.com/aquach/vim-mediawiki-editor) The only
|
||||||
|
drawback I've found is that, unless you store your password in your
|
||||||
|
config, you'll have to enter it every time you close and reopen Vim. You
|
||||||
|
can also give Vim [Wikitext syntax
|
||||||
|
highlighting](https://en.wikipedia.org/wiki/Help:Text_editor_support#Vim)
|
||||||
|
for creating MediaWiki pages when offline. A few days ago, my wiki was
|
||||||
|
completely offline while taking a disk image backup but I still wrote
|
||||||
|
the majority of the [libvirt](https://docs.nixnet.services/Libvirt) and
|
||||||
|
[Debian](https://docs.nixnet.services/Debian) pages while I waited and
|
||||||
|
the highlighting was really nice.
|
||||||
|
|
||||||
---
|
---
|
||||||
This was posted as part of [#100DaysToOffload](https://100daystooffload.com/), an [awesome idea](https://fosstodon.org/@kev/104053977554016690) from [Kev Quirk](https://kevq.uk/). If you want to participate, just write something every day for 100 days and post a link on social media with the hashtag!
|
|
||||||
|
|
||||||
[^1]: If you're having issues, feel free to contact me and I'll help where I can.
|
This was posted as part of
|
||||||
|
[#100DaysToOffload,](https://100daystooffload.com/) an [awesome
|
||||||
|
idea](https://fosstodon.org/@kev/104053977554016690) from [Kev
|
||||||
|
Quirk.](https://kevq.uk/) If you want to participate, just write
|
||||||
|
something every day for 100 days and post a link on social media with
|
||||||
|
the hashtag!
|
||||||
|
|
||||||
|
[^1]: If you're having issues, feel free to contact me and I'll help
|
||||||
|
where I can.
|
||||||
|
|
|
@ -12,13 +12,20 @@ tags:
|
||||||
- Training
|
- Training
|
||||||
toc: true
|
toc: true
|
||||||
---
|
---
|
||||||
|
|
||||||
## Forward
|
## Forward
|
||||||
Every month, Linux Academy releases courses for free. I'm a very busy college student and don't have time to whirl through everything I want to before it goes behind their paywall again so I figured out how to download a course or two every month using [`youtube-dl`](https://github.com/ytdl-org/youtube-dl/).
|
Every month, Linux Academy releases courses for free. I'm a very busy
|
||||||
|
college student and don't have time to whirl through everything I want
|
||||||
|
to before it goes behind their paywall again so I figured out how to
|
||||||
|
download a course or two every month using
|
||||||
|
[`youtube-dl`.](https://github.com/ytdl-org/youtube-dl/)
|
||||||
|
|
||||||
## Setup
|
## Setup
|
||||||
* Install [`youtube-dl`](https://ytdl-org.github.io/youtube-dl/download.html)
|
* Install
|
||||||
|
[`youtube-dl`](https://ytdl-org.github.io/youtube-dl/download.html)
|
||||||
* Make sure you have a browser handy
|
* Make sure you have a browser handy
|
||||||
* Create a community account on [Linux Academy](https://linuxacademy.com/join/community)
|
* Create a community account on [Linux
|
||||||
|
Academy](https://linuxacademy.com/join/community)
|
||||||
* Get some food
|
* Get some food
|
||||||
* Maybe a drink
|
* Maybe a drink
|
||||||
* Sit back down in your chair
|
* Sit back down in your chair
|
||||||
|
@ -28,7 +35,8 @@ Every month, Linux Academy releases courses for free. I'm a very busy college st
|
||||||
## Downloading
|
## Downloading
|
||||||
* Log into your account
|
* Log into your account
|
||||||
* Pick the course you want
|
* Pick the course you want
|
||||||
* Open the developer console and go to `Network` (Ctrl+Shift+E in Firefox)
|
* Open the developer console and go to `Network` (Ctrl+Shift+E in
|
||||||
|
Firefox)
|
||||||
* You'll want to select `Media` as shown in the screenshot below
|
* You'll want to select `Media` as shown in the screenshot below
|
||||||
|
|
||||||
![](/assets/posts/linux-academy/scrot-1.png)
|
![](/assets/posts/linux-academy/scrot-1.png)
|
||||||
|
@ -50,15 +58,26 @@ amolith@poseidon:~ $ youtube-dl https://video-cdn.linuxacademy.com/vods3/_defins
|
||||||
* Press enter
|
* Press enter
|
||||||
* Watch the magic unfold
|
* Watch the magic unfold
|
||||||
|
|
||||||
At a high level, `youtube-dl` is acting like your browser and following the `m3u` playlist to download chunks of the file. After it fetches them all, it runs them through `ffmpeg` to stitch them together into a single video!
|
At a high level, `youtube-dl` is acting like your browser and following
|
||||||
|
the `m3u` playlist to download chunks of the file. After it fetches them
|
||||||
|
all, it runs them through `ffmpeg` to stitch them together into a single
|
||||||
|
video!
|
||||||
|
|
||||||
I found it useful to open a text editor and script downloading a whole course at a time. All you have to do is type `youtube-dl -o` and copy/paste it however many times there are videos. Then, copy and paste the video title in quotes after `-o` and add `.mp4` to the end (command example below). After that, paste the URL. Do that with every video in the series, save the script, run `chmod +x <script>`, then `./<script>` and (after a bit) you'll have an entire course you can watch at your leasure!
|
I found it useful to open a text editor and script downloading a whole
|
||||||
|
course at a time. All you have to do is type `youtube-dl -o` and
|
||||||
|
copy/paste it however many times there are videos. Then, copy and paste
|
||||||
|
the video title in quotes after `-o` and add `.mp4` to the end (command
|
||||||
|
example below). After that, paste the URL. Do that with every video in
|
||||||
|
the series, save the script, run `chmod +x <script>`, then `./<script>`
|
||||||
|
and (after a bit) you'll have an entire course you can watch at your
|
||||||
|
leasure!
|
||||||
|
|
||||||
``` bash
|
``` bash
|
||||||
amolith@poseidon:~ $ youtube-dl -o "04 - Conclusion and Next Steps.mp4" https://video-cdn.linuxacademy.com/vods3/_definst_/smil:box/cdnstore/modules/lots-of-stuff-here
|
amolith@poseidon:~ $ youtube-dl -o "04 - Conclusion and Next Steps.mp4" https://video-cdn.linuxacademy.com/vods3/_definst_/smil:box/cdnstore/modules/lots-of-stuff-here
|
||||||
```
|
```
|
||||||
|
|
||||||
**NOTE:** You may want to set up your directory structure beforehand so it's easier to script the process. Here's an example of one of mine:
|
**NOTE:** You may want to set up your directory structure beforehand so
|
||||||
|
it's easier to script the process. Here's an example of one of mine:
|
||||||
|
|
||||||
``` bash
|
``` bash
|
||||||
amolith@poseidon:~/Videos/Courses/Ansible - Playbooks Deep Dive $ tree
|
amolith@poseidon:~/Videos/Courses/Ansible - Playbooks Deep Dive $ tree
|
||||||
|
|
|
@ -12,27 +12,74 @@ tags:
|
||||||
- Sysadmin
|
- Sysadmin
|
||||||
toc: true
|
toc: true
|
||||||
---
|
---
|
||||||
## Preface
|
|
||||||
There may be a myriad of reasons you want to do this, from removing sensitive information to regaining a measure of control over your content. Whatever your purpose, below should be a quick and easy way to achieve it.
|
|
||||||
## For domains you own
|
|
||||||
The easiest way to verify you own a domain is to put a text file in an easily accessible location and email [info@archive.org](mailto:info@archive.org) asking for removal and link to it. Mine is at [removal-request.txt](https://nixnet.services/removal-request.txt). It would be better if you didn't copy mine word-for-word and wrote your own instead though 😉
|
|
||||||
|
|
||||||
If that's all you intend to do, this should be sufficient and there's no need to read any further. If you want to exclude your *profiles* as well (for example, all your GitHub repos, Twitter, Mastodon, etc.) read on.
|
## Preface
|
||||||
|
There may be a myriad of reasons you want to do this, from removing
|
||||||
|
sensitive information to regaining a measure of control over your
|
||||||
|
content. Whatever your purpose, below should be a quick and easy way to
|
||||||
|
achieve it.
|
||||||
|
|
||||||
|
## For domains you own
|
||||||
|
The easiest way to verify you own a domain is to put a text file in an
|
||||||
|
easily accessible location and email
|
||||||
|
[info@archive.org](mailto:info@archive.org) asking for removal and link
|
||||||
|
to it. Mine is at
|
||||||
|
[removal-request.txt.](https://nixnet.services/removal-request.txt) It
|
||||||
|
would be better if you didn't copy mine word-for-word and wrote your own
|
||||||
|
instead though 😉
|
||||||
|
|
||||||
|
If that's all you intend to do, this should be sufficient and there's no
|
||||||
|
need to read any further. If you want to exclude your *profiles* as well
|
||||||
|
(for example, all your GitHub repos, Twitter, Mastodon, etc.) read on.
|
||||||
|
|
||||||
## For domains you *don't* own
|
## For domains you *don't* own
|
||||||
There are a few things I used that worked in harmony to verify my other accounts. [Keybase](https://keybase.io/) was the most useful for this purpose. It is a proprietary service but I deem the level of proof it facilitates worth compromising for.
|
There are a few things I used that worked in harmony to verify my other
|
||||||
|
accounts. [Keybase](https://keybase.io/) was the most useful for this
|
||||||
|
purpose. It is a proprietary service but I deem the level of proof it
|
||||||
|
facilitates worth compromising for.
|
||||||
|
|
||||||
The other tool I used was [GPG](https://gnupg.org/). For the sake of keeping it simple, *this* guide will just deal with GPG from within Keybase. I ***really*** recommend actually learning to use GPG on its own; it's wonderful for protecting your privacy and verifying your identity in a multitude of situations. The next post will be on using GPG *outside* of Keybase for this so [stay tuned](/posts/index.xml).
|
The other tool I used was [GPG.](https://gnupg.org/) For the sake of
|
||||||
|
keeping it simple, *this* guide will just deal with GPG from within
|
||||||
|
Keybase. I ***really*** recommend actually learning to use GPG on its
|
||||||
|
own; it's wonderful for protecting your privacy and verifying your
|
||||||
|
identity in a multitude of situations. The next post will be on using
|
||||||
|
GPG *outside* of Keybase for this so [stay tuned.](/posts/index.xml)
|
||||||
|
|
||||||
### Generating your key
|
### Generating your key
|
||||||
After creating your Keybase account, click "add a PGP key", "I need a public key", then enter the requisite information. You should use whatever name is associated with the account you'll be emailing Archive.org from as well as that address. Wait a bit while it generates the key . . .
|
After creating your Keybase account, click "add a PGP key", "I need a
|
||||||
|
public key", then enter the requisite information. You should use
|
||||||
|
whatever name is associated with the account you'll be emailing
|
||||||
|
Archive.org from as well as that address. Wait a bit while it generates
|
||||||
|
the key...
|
||||||
|
|
||||||
### Verifying some accounts
|
### Verifying some accounts
|
||||||
This is where you verify whatever accounts you want removed. Just click the option and go through the steps! Aside from personal websites, Twitter, GitHub, Reddit, etc., you can also prove accounts on a lot of other services (including Mastodon). More are being added every day so check back if there's something specific you want to address.
|
This is where you verify whatever accounts you want removed. Just click
|
||||||
|
the option and go through the steps! Aside from personal websites,
|
||||||
|
Twitter, GitHub, Reddit, etc., you can also prove accounts on a lot of
|
||||||
|
other services (including Mastodon). More are being added every day so
|
||||||
|
check back if there's something specific you want to address.
|
||||||
|
|
||||||
Once this is done, you'll be ready to contact Archive.org about getting your stuff removed.
|
Once this is done, you'll be ready to contact Archive.org about getting
|
||||||
|
your stuff removed.
|
||||||
|
|
||||||
### Signing some messages
|
### Signing some messages
|
||||||
In the top right of Keybase, you'll see this pencil: <i class="fa fa-pencil"></i>. Click it and you'll be taken to a page with a text box. This is where you'll type your email and the text file for your website proof. For the text file, copy the signed message and paste it into your text editor, save, and put it at the root of your website. For example, mine is at [removal-request.txt](https://nixnet.services/removal-request.txt). It would be better if you didn't copy mine word for word and wrote your own 😉 For the email, you'll do the same thing but paste the signed message into your email client, whether that's Thunderbird, ProtonMail, Tutanota, etc. The text file only needs to contain the request for the (sub)domain removal. The email needs to contain the request for everything along with links to the text file, you Keybase account, and whatever you want removed.
|
In the top right of Keybase, you'll see a pencil. Click it and you'll be
|
||||||
|
taken to a page with a text box. This is where you'll type your email
|
||||||
|
and the text file for your website proof. For the text file, copy the
|
||||||
|
signed message and paste it into your text editor, save, and put it at
|
||||||
|
the root of your website. For example, mine is at
|
||||||
|
[removal-request.txt.](https://nixnet.services/removal-request.txt) It
|
||||||
|
would be better if you didn't copy mine word for word and wrote your own
|
||||||
|
😉 For the email, you'll do the same thing but paste the signed message
|
||||||
|
into your email client, whether that's Thunderbird, ProtonMail,
|
||||||
|
Tutanota, etc. The text file only needs to contain the request for the
|
||||||
|
(sub)domain removal. The email needs to contain the request for
|
||||||
|
everything along with links to the text file, you Keybase account, and
|
||||||
|
whatever you want removed.
|
||||||
|
|
||||||
Before sending it, you should also go back to your profile, click your key, and copy everything in the text box that starts with `-----BEGIN PGP PUBLIC KEY BLOCK-----`. Paste that into another text file but save it with the `.asc` extension. For example, `key.asc`. Attach this to the email, send it to [info@archive.org](mailto:info@archive.org), wait a couple days, and you're done!
|
Before sending it, you should also go back to your profile, click your
|
||||||
|
key, and copy everything in the text box that starts with `-----BEGIN
|
||||||
|
PGP PUBLIC KEY BLOCK-----`. Paste that into another text file but save
|
||||||
|
it with the `.asc` extension. For example, `key.asc`. Attach this to the
|
||||||
|
email, send it to [info@archive.org,](mailto:info@archive.org) wait a
|
||||||
|
couple days, and you're done!
|
||||||
|
|
|
@ -11,21 +11,43 @@ tags:
|
||||||
- CLI
|
- CLI
|
||||||
- Minimalism
|
- Minimalism
|
||||||
---
|
---
|
||||||
I've been trying off and on for the past few weeks to figure out how to record my 1920x1080 monitor. The recording is going to be some music videos for a friend. Originally, it was just going to be a single background image for the whole video then I had the idea of using [cava](https://github.com/karlstav/cava) in a transparent terminal on top of the background. This didn't work at all because it actually kept freezing when I tried to record it. So I tried switching to [ncmpcpp](http://ncmpcpp.rybczak.net/)'s visualiser. This still had horrible lag so I've been puzzling over how to use ffmpeg to *losslessly* record my second monitor. The reason OBS and similar screen recorders are so slow is because, most of the time, they encode to the end format while recording and that uses a lot of system resources. I finally figured it out and have pasted the command below.
|
|
||||||
|
I've been trying off and on for the past few weeks to figure out how to
|
||||||
|
record my 1920x1080 monitor. The recording is going to be some music
|
||||||
|
videos for a friend. Originally, it was just going to be a single
|
||||||
|
background image for the whole video then I had the idea of using
|
||||||
|
[cava](https://github.com/karlstav/cava) in a transparent terminal on
|
||||||
|
top of the background. This didn't work at all because it actually kept
|
||||||
|
freezing when I tried to record it. So I tried switching to
|
||||||
|
[ncmpcpp's visualiser.](http://ncmpcpp.rybczak.net/) This still had
|
||||||
|
horrible lag so I've been puzzling over how to use ffmpeg to
|
||||||
|
*losslessly* record my second monitor. The reason OBS and similar screen
|
||||||
|
recorders are so slow is because, most of the time, they encode to the
|
||||||
|
end format while recording and that uses a lot of system resources. I
|
||||||
|
finally figured it out and have pasted the command below.
|
||||||
|
|
||||||
``` bash
|
``` bash
|
||||||
ffmpeg -video_size 1920x1080 -framerate 30 -f x11grab -draw_mouse 0 -i :0.0+1366,0 -c:v libx264 -crf 0 -preset ultrafast output.mkv
|
ffmpeg -video_size 1920x1080 -framerate 30 -f x11grab -draw_mouse 0 -i :0.0+1366,0 -c:v libx264 -crf 0 -preset ultrafast output.mkv
|
||||||
```
|
```
|
||||||
|
|
||||||
Above is exactly what I used for my 1080p monitor with 768p laptop screen. I've modified the command so you can see what you need to edit for your use-case.
|
Above is exactly what I used for my 1080p monitor with 768p laptop
|
||||||
|
screen. I've modified the command so you can see what you need to edit
|
||||||
|
for your use-case.
|
||||||
|
|
||||||
``` bash
|
``` bash
|
||||||
ffmpeg -video_size <target-resolution> -framerate 30 -f x11grab -i :0.0+<width-of-unused-monitor>,0 -c:v libx264 -crf 0 -preset ultrafast <filename>.mkv
|
ffmpeg -video_size <target-resolution> -framerate 30 -f x11grab -i :0.0+<width-of-unused-monitor>,0 -c:v libx264 -crf 0 -preset ultrafast <filename>.mkv
|
||||||
```
|
```
|
||||||
|
|
||||||
If you do *not* want the cursor recorded, add `-draw_mouse 0` directly after `x11grab` like I did in the first command.
|
If you do *not* want the cursor recorded, add `-draw_mouse 0` directly
|
||||||
|
after `x11grab` like I did in the first command.
|
||||||
|
|
||||||
My video was 470mb for a ~13 minute video. If you're going to archive the recording or are concerned about file size, re-encode it with a slower preset. This will be a lot slower and take a lot of CPU but the resulting file is *significantly* smaller than the original and still lossless. I this as a general purpose screen recorder. Previously, I was using OBS and the lag in the video was incredible but with ffmpeg, it's smooth as butter. The command for re-encoding is below:
|
My video was 470mb for a ~13 minute video. If you're going to archive
|
||||||
|
the recording or are concerned about file size, re-encode it with a
|
||||||
|
slower preset. This will be a lot slower and take a lot of CPU but the
|
||||||
|
resulting file is *significantly* smaller than the original and still
|
||||||
|
lossless. I this as a general purpose screen recorder. Previously, I was
|
||||||
|
using OBS and the lag in the video was incredible but with ffmpeg, it's
|
||||||
|
smooth as butter. The command for re-encoding is below:
|
||||||
|
|
||||||
``` bash
|
``` bash
|
||||||
ffmpeg -i output.mkv -c:v libx264 -crf 0 -preset veryslow output-smaller.mkv
|
ffmpeg -i output.mkv -c:v libx264 -crf 0 -preset veryslow output-smaller.mkv
|
||||||
|
@ -34,4 +56,7 @@ ffmpeg -i output.mkv -c:v libx264 -crf 0 -preset veryslow output-smaller.mkv
|
||||||
![](/assets/gifs/ffmpeg-lossless.gif)
|
![](/assets/gifs/ffmpeg-lossless.gif)
|
||||||
|
|
||||||
## Note
|
## Note
|
||||||
This command only works with X, not Wayland. Skimming `ffmpeg`'s man page, I see that `video4linux2` is another option for capturing video so you may be able to replace `x11grab` with it for the same result. I have not tested this so I don't know if it'll work or not.
|
This command only works with X, not Wayland. Skimming `ffmpeg`'s man
|
||||||
|
page, I see that `video4linux2` is another option for capturing video so
|
||||||
|
you may be able to replace `x11grab` with it for the same result. I have
|
||||||
|
not tested this so I don't know if it'll work or not.
|
||||||
|
|
|
@ -1,13 +0,0 @@
|
||||||
---
|
|
||||||
title: "Moving My Old Blog"
|
|
||||||
description: "Moving my blog on nixnet.services to Secluded.Site"
|
|
||||||
cover: /assets/pngs/editor.png
|
|
||||||
date: 2020-09-23T18:09:15-04:00
|
|
||||||
categories:
|
|
||||||
- Meta
|
|
||||||
---
|
|
||||||
|
|
||||||
Just a heads up to those subscribed to this RSS feed: I'll be moving my posts on nixnet.services to secluded.site either today or tomorrow. I'm leaving their timestamps as they are so I don't know how they'll appear in your feed. I apologise for any mess they cause!
|
|
||||||
|
|
||||||
|
|
||||||
Hello world!
|
|
|
@ -13,36 +13,162 @@ tags:
|
||||||
- Missouri Meerschaum
|
- Missouri Meerschaum
|
||||||
- Mauro Armellini
|
- Mauro Armellini
|
||||||
---
|
---
|
||||||
Continuing with my journey into the world of pipe smoking, I thought I would show what my *cellar*[^1] looks like. It's not much—just some jars and a pipe stand on my dresser—but it's more than what I've seen some other people have[^2]. I'll talk about tobacco in another post; this one is just about what's on the left of the picture below. The paper is something I saw in a YouTube video and I thought it was a really cool idea; rather than pinching your tobacco out of the jar, sprinkling it into the bowl, and inevitably spilling some, simply dump it onto a sheet of paper. From there, you can pull apart any clumps that may have formed, fill the bowl, then fold the paper in half lengthwise and pour what's left back into to the jar.
|
|
||||||
|
|
||||||
![Picture of my dresser with some pipes, accessories, and tobacco. To the right, there are 12 big jars of tobacco along with a smaller one. On the left is my half-full pipe stand with three pipes in it, my lighter, a pipe tool, a wind cap, a smaller single stand to the right, and a sheet of paper in the front.](/assets/jpgs/dresser.jpg)
|
Continuing with my journey into the world of pipe smoking, I thought I
|
||||||
|
would show what my *cellar*[^1] looks like. It's not much—just some jars
|
||||||
|
and a pipe stand on my dresser—but it's more than what I've seen some
|
||||||
|
other people have[^2]. I'll talk about tobacco in another post; this one
|
||||||
|
is just about what's on the left of the picture below. The paper is
|
||||||
|
something I saw in a YouTube video and I thought it was a really cool
|
||||||
|
idea; rather than pinching your tobacco out of the jar, sprinkling it
|
||||||
|
into the bowl, and inevitably spilling some, simply dump it onto a sheet
|
||||||
|
of paper. From there, you can pull apart any clumps that may have
|
||||||
|
formed, fill the bowl, then fold the paper in half lengthwise and pour
|
||||||
|
what's left back into to the jar.
|
||||||
|
|
||||||
The small stand to the right of the big one is the [Single Pipe Stand from SmokingPipes](https://www.smokingpipes.com/accessories/pipe%20accessories/moreinfo.cfm?product_id=120415). I do like it but it's really only suitable for pipes with straight[^3] stems; with bent stems, the mouthpiece ends up resting on the table. I haven't tried it but I would recommend going with the [solid version](https://www.smokingpipes.com/accessories/pipe%20accessories/moreinfo.cfm?product_id=120414) if you're wanting a stand for a single pipe because it's more versatile. The larger one, below, is the [Woodmere 6 Pipe Stand](https://www.smokingpipes.com/accessories/pipe%20accessories/moreinfo.cfm?product_id=120414) from the same website. It has the same problem as the first but it's not as pronounced; pipes with bent stems need to be pushed forward in the divot in the base so they can lean back against the bar. Otherwise, the weight of the stem and shank[^4] will cause them to fall forward.
|
![Picture of my dresser with some pipes, accessories, and tobacco. To
|
||||||
|
the right, there are 12 big jars of tobacco along with a smaller one. On
|
||||||
|
the left is my half-full pipe stand with three pipes in it, my lighter,
|
||||||
|
a pipe tool, a wind cap, a smaller single stand to the right, and a
|
||||||
|
sheet of paper in the front.](/assets/jpgs/dresser.jpg)
|
||||||
|
|
||||||
Pipes will be described further down so the next thing is the metal object that looks like a sink drain. It's a [wind cap from The Country Squire](https://www.thecountrysquireonline.com/product/wind-cap/) (which also has a great [podcast](https://www.podastery.com/podcast-country-squire-radio)). I've found it to be very handy at my university when it's windy. The next item is just a simple "Czech pipe tool" that can be purchased from pretty much any store that sells pipes, both brick-and-mortar and online retailers. The last thing is a Zippo *pipe* lighter. These are entirely different from normal Zippo lighters because they're meant to be held sideways over the bowl of a pipe. This design lets you put the flame directly to the tobacco rather than drawing it over the side of the bowl and scorching the rim. I ordered mine from Amazon a year or so ago but have since stopped using Amazon due to ethical and privacy concerns. I can't find the same product on [Zippo's website](https://www.zippo.com/collections/pipe-lighters) so here's a link to it from [Wal-mart](https://www.walmart.com/ip/Zippo-Red-Pipe-High-Polished-Brass-Windproof-Lighter-28322-NEW-L-K/628527710). I also dislike using Wal-mart but it's marginally better than Amazon.
|
The small stand to the right of the big one is the [Single Pipe Stand
|
||||||
|
from
|
||||||
|
SmokingPipes](https://www.smokingpipes.com/accessories/pipe%20accessories/moreinfo.cfm?product_id=120415).
|
||||||
|
I do like it but it's really only suitable for pipes with straight[^3]
|
||||||
|
stems; with bent stems, the mouthpiece ends up resting on the table. I
|
||||||
|
haven't tried it but I would recommend going with the [solid
|
||||||
|
version](https://www.smokingpipes.com/accessories/pipe%20accessories/moreinfo.cfm?product_id=120414)
|
||||||
|
if you're wanting a stand for a single pipe because it's more versatile.
|
||||||
|
The larger one, below, is the [Woodmere 6 Pipe
|
||||||
|
Stand](https://www.smokingpipes.com/accessories/pipe%20accessories/moreinfo.cfm?product_id=120414)
|
||||||
|
from the same website. It has the same problem as the first but it's not
|
||||||
|
as pronounced; pipes with bent stems need to be pushed forward in the
|
||||||
|
divot in the base so they can lean back against the bar. Otherwise, the
|
||||||
|
weight of the stem and shank[^4] will cause them to fall forward.
|
||||||
|
|
||||||
![This picture is pretty much the same as the earlier one but without the tobacco and paper.](/assets/jpgs/pipes.jpg)
|
Pipes will be described further down so the next thing is the metal
|
||||||
|
object that looks like a sink drain. It's a [wind cap from The Country
|
||||||
|
Squire](https://www.thecountrysquireonline.com/product/wind-cap/) (which
|
||||||
|
also has [a great
|
||||||
|
podcast](https://www.podastery.com/podcast-country-squire-radio)). I've
|
||||||
|
found it to be very handy at my university when it's windy. The next
|
||||||
|
item is just a simple "Czech pipe tool" that can be purchased from
|
||||||
|
pretty much any store that sells pipes, both brick-and-mortar and online
|
||||||
|
retailers. The last thing is a Zippo *pipe* lighter. These are entirely
|
||||||
|
different from normal Zippo lighters because they're meant to be held
|
||||||
|
sideways over the bowl of a pipe. This design lets you put the flame
|
||||||
|
directly to the tobacco rather than drawing it over the side of the bowl
|
||||||
|
and scorching the rim. I ordered mine from Amazon a year or so ago but
|
||||||
|
have since stopped using Amazon due to ethical and privacy concerns. I
|
||||||
|
can't find the same product on [Zippo's
|
||||||
|
website](https://www.zippo.com/collections/pipe-lighters) so here's a
|
||||||
|
link to it from
|
||||||
|
[Wal-mart.](https://www.walmart.com/ip/Zippo-Red-Pipe-High-Polished-Brass-Windproof-Lighter-28322-NEW-L-K/628527710)
|
||||||
|
I also dislike using Wal-mart but it's marginally better than Amazon.
|
||||||
|
|
||||||
Now the fun part 😉 The first pipe I got was the [Missouri Pride from Missouri Meerschaum](https://corncobpipe.com/missouri-pride-corncob-pipe.html). An *excellent* starter pipe, I ended up giving it to my room mate after he showed an interest in the hobby. However, a close friend of mine had given me one of his old pipes and I fell in love with it. Unfortunately, I know absolutely *nothing* about it other than it was made by [Mauro Armellini](https://pipedia.org/wiki/Armellini), an Italian craftsman who died several years ago. I'm considering sending an email to the company and seeing if they can tell me anything about it. On one side of the shank is the name *Mauro Armellini*, the bottom has the number *705*, and the other side says *Verona* with the word *ARCOBALENO* below it. If anyone reading this knows something about the pipe, please [send me an email](mailto:amolith@secluded.site).
|
![This picture is pretty much the same as the earlier one but without
|
||||||
|
the tobacco and paper.](/assets/jpgs/pipes.jpg)
|
||||||
|
|
||||||
![A picture of my pipe from Mauro Armellini. It's sitting on my porch rail with the yard in the background; the grass is a light green and the leaves of the woods further on are darker. The pipe is a rich brown with a cream-coloured opalescent stem. There is a mother-of-pearl inlay on top of the stem.](/assets/jpgs/armellini.jpg)
|
Now the fun part 😉 The first pipe I got was the [Missouri Pride from
|
||||||
|
Missouri
|
||||||
|
Meerschaum.](https://corncobpipe.com/missouri-pride-corncob-pipe.html)
|
||||||
|
An *excellent* starter pipe, I ended up giving it to my room mate after
|
||||||
|
he showed an interest in the hobby. However, a close friend of mine had
|
||||||
|
given me one of his old pipes and I fell in love with it. Unfortunately,
|
||||||
|
I know absolutely *nothing* about it other than it was made by [Mauro
|
||||||
|
Armellini](https://pipedia.org/wiki/Armellini), an Italian craftsman who
|
||||||
|
died several years ago. I'm considering sending an email to the company
|
||||||
|
and seeing if they can tell me anything about it. On one side of the
|
||||||
|
shank is the name *Mauro Armellini*, the bottom has the number *705*,
|
||||||
|
and the other side says *Verona* with the word *ARCOBALENO* below it. If
|
||||||
|
anyone reading this knows something about the pipe, please let me know.
|
||||||
|
|
||||||
The first "real" pipe I bought myself was a churchwarden[^5] from [Nørding Pipes](https://www.nordingpipes.com/). If you're curious about the company or the founder, Erik Nørding, listen to this episode of the [Country Squire Radio](https://countrysquireradio.fireside.fm/341). After I heard it, I decided to make one of their pipes my first purchase. What I ended up getting was a Partially Rusticated[^6] Churchwarden from [SmokingPipes](https://www.smokingpipes.com/pipes/new/Nording/moreinfo.cfm?product_id=363601). I've been using it for a month or so now and absolutely love it, especially when I'm sitting on the porch reading or going lunting[^7].
|
![A picture of my pipe from Mauro Armellini. It's sitting on my porch
|
||||||
|
rail with the yard in the background; the grass is a light green and the
|
||||||
|
leaves of the woods further on are darker. The pipe is a rich brown with
|
||||||
|
a cream-coloured opalescent stem. There is a mother-of-pearl inlay on
|
||||||
|
top of the stem.](/assets/jpgs/armellini.jpg)
|
||||||
|
|
||||||
![This is also a picture of a pipe on my porch rail. It is significantly longer at about 10.5 inches or 265 millimetres. The stem has a gentle curve. The bowl is the same deep brown as the Armellini pipe but the finish is newer so it shines more. The rustication will be hard to describe. The rest of the pipe is brown but the rusticated part is black. The texture is rough but smooth—the edges that might have been jagged were sanded down. The bottom of the bowl is what's rusticated; the top is normal. When held upside down, it almost looks as if the rusticated part is dripping onto the normal part and the same for the stem.](/assets/jpgs/churchwarden-nording.jpg)
|
The first "real" pipe I bought myself was a churchwarden[^5] from
|
||||||
|
[Nørding Pipes.](https://www.nordingpipes.com/) If you're curious about
|
||||||
|
the company or the founder, Erik Nørding, listen to this episode of the
|
||||||
|
[Country Squire Radio.](https://countrysquireradio.fireside.fm/341)
|
||||||
|
After I heard it, I decided to make one of their pipes my first
|
||||||
|
purchase. What I ended up getting was a Partially Rusticated[^6]
|
||||||
|
Churchwarden from
|
||||||
|
[SmokingPipes.](https://www.smokingpipes.com/pipes/new/Nording/moreinfo.cfm?product_id=363601)
|
||||||
|
I've been using it for a month or so now and absolutely love it,
|
||||||
|
especially when I'm sitting on the porch reading or going lunting[^7].
|
||||||
|
|
||||||
My latest acquisition is [The Emerald](https://corncobpipe.com/the-emerald-corn-cob-pipe) from [Missouri Meerschaum](https://corncobpipe.com). It is a corn cob pipe but not like the Missouri Pride; this model has very obviously been sanded smooth and sealed so that it *almost* feels like finished wood. The stem is a higher quality acrylic than their other models and much more pleasant to look at as well. This is the model they released for Saint Patrick's Day in 2019 but, due to popular demand, they started producing it again. I'm hoping to purchase this year's as well and start building a collection.
|
![This is also a picture of a pipe on my porch rail. It is significantly
|
||||||
|
longer at about 10.5 inches or 265 millimetres. The stem has a gentle
|
||||||
|
curve. The bowl is the same deep brown as the Armellini pipe but the
|
||||||
|
finish is newer so it shines more. The rustication will be hard to
|
||||||
|
describe. The rest of the pipe is brown but the rusticated part is
|
||||||
|
black. The texture is rough but smooth—the edges that might have been
|
||||||
|
jagged were sanded down. The bottom of the bowl is what's rusticated;
|
||||||
|
the top is normal. When held upside down, it almost looks as if the
|
||||||
|
rusticated part is dripping onto the normal part and the same for the
|
||||||
|
stem.](/assets/jpgs/churchwarden-nording.jpg)
|
||||||
|
|
||||||
![This pipe is a light cream colour. The bowl looks like the cob of an ear of corn (that's what it is) with a short wooden tube sticking out of it. The bent stem is a deep marbled green.](/assets/jpgs/emerald.jpg)
|
My latest acquisition is [The
|
||||||
|
Emerald](https://corncobpipe.com/the-emerald-corn-cob-pipe) from
|
||||||
|
[Missouri Meerschaum.](https://corncobpipe.com) It is a corn cob pipe
|
||||||
|
but not like the Missouri Pride; this model has very obviously been
|
||||||
|
sanded smooth and sealed so that it *almost* feels like finished wood.
|
||||||
|
The stem is a higher quality acrylic than their other models and much
|
||||||
|
more pleasant to look at as well. This is the model they released for
|
||||||
|
Saint Patrick's Day in 2019 but, due to popular demand, they started
|
||||||
|
producing it again. I'm hoping to purchase this year's as well and start
|
||||||
|
building a collection.
|
||||||
|
|
||||||
This last picture is of me sitting on my porch with a book, my churchwarden, my lighter, and my pipe tool. It was a warm and peaceful afternoon and I had a strong urge to capture the moment because this is one of the *big* reasons I enjoy smoking a pipe. In the rigorous life of a university student, musician, and systems administrator, this is my rare chance to just slow down and simply be in the moment without worrying over anything else.
|
![This pipe is a light cream colour. The bowl looks like the cob of an
|
||||||
|
ear of corn (that's what it is) with a short wooden tube sticking out of
|
||||||
|
it. The bent stem is a deep marbled green.](/assets/jpgs/emerald.jpg)
|
||||||
|
|
||||||
![In this picture, you can see the top edge of the book I'm reading, my crossed legs resting on the porch rail, my churchwarden to the left, and my light and pipe tool to the right. This is the same "warm" scene as described in the picture of Armellini's pipe; it's very peaceful](/assets/jpgs/porch.jpg)
|
This last picture is of me sitting on my porch with a book, my
|
||||||
|
churchwarden, my lighter, and my pipe tool. It was a warm and peaceful
|
||||||
|
afternoon and I had a strong urge to capture the moment because this is
|
||||||
|
one of the *big* reasons I enjoy smoking a pipe. In the rigorous life of
|
||||||
|
a university student, musician, and systems administrator, this is my
|
||||||
|
rare chance to just slow down and simply be in the moment without
|
||||||
|
worrying over anything else.
|
||||||
|
|
||||||
[^1]: In this context, a cellar is simply a place to store pipes and pipe tobacco. When someone says they're going to *cellar* their tobacco, they mean they're going to prepare it for long-term storage.
|
![In this picture, you can see the top edge of the book I'm reading, my
|
||||||
[^2]: One was literally just a cardboard box with some jars inside and a few pipes laying on top. There's nothing wrong with that but I prefer to have a little more space.
|
crossed legs resting on the porch rail, my churchwarden to the left, and
|
||||||
[^3]: The stem is the part of the pipe where the mouthpiece is. In these pictures, it's opalescent for the first, marbled for the second, and solid black for the third.
|
my light and pipe tool to the right. This is the same "warm" scene as
|
||||||
[^4]: The shank is where the stem is inserted; it's in between that and the bowl and made from the same material as the bowl.
|
described in the picture of Armellini's pipe; it's very
|
||||||
[^5]: *Churchwarden* refers to the length of the pipe. There are many theories about why it's named so but one I find interesting is that it's after real [churchwardens](https://en.wikipedia.org/wiki/Churchwarden). They would have to stay up all night guarding the church and couldn't be expected to go that long without smoking. However, the smoke from a traditional pipe would often obscure their vision because it was so close to their face. The churchwarden was invented so the bowl was significantly further away and wouldn't get in their line of sight.
|
peaceful](/assets/jpgs/porch.jpg)
|
||||||
[^6]: Rustication is the process of adding texture to the bowl (or shank) of a pipe. Generally, this is done to hide imperfections in the briar so the pipe still looks good. Personally, I stay away from *fully* rusticated pipes not just because I don't like the aesthetics but because the wood is likely poor quality. This is certainly not *always* the case, however.
|
|
||||||
[^7]: Lunting is *the act of taking a leisurely stroll whilst smoking a tobacco pipe ([Lunting.org](https://www.lunting.org/)).* When I go hiking, I'll often take my pipe with me; it's a calm and contemplative time to simply think and enjoy a good tobacco.
|
[^1]: In this context, a cellar is simply a place to store pipes and
|
||||||
|
pipe tobacco. When someone says they're going to *cellar* their
|
||||||
|
tobacco, they mean they're going to prepare it for long-term
|
||||||
|
storage.
|
||||||
|
[^2]: One was literally just a cardboard box with some jars inside and a
|
||||||
|
few pipes laying on top. There's nothing wrong with that but I
|
||||||
|
prefer to have a little more space.
|
||||||
|
[^3]: The stem is the part of the pipe where the mouthpiece is. In these
|
||||||
|
pictures, it's opalescent for the first, marbled for the second, and
|
||||||
|
solid black for the third.
|
||||||
|
[^4]: The shank is where the stem is inserted; it's in between that and
|
||||||
|
the bowl and made from the same material as the bowl.
|
||||||
|
[^5]: *Churchwarden* refers to the length of the pipe. There are many
|
||||||
|
theories about why it's named so but one I find interesting is that
|
||||||
|
it's after real
|
||||||
|
[churchwardens.](https://en.wikipedia.org/wiki/Churchwarden) They
|
||||||
|
would have to stay up all night guarding the church and couldn't be
|
||||||
|
expected to go that long without smoking. However, the smoke from a
|
||||||
|
traditional pipe would often obscure their vision because it was so
|
||||||
|
close to their face. The churchwarden was invented so the bowl was
|
||||||
|
significantly further away and wouldn't get in their line of sight.
|
||||||
|
[^6]: Rustication is the process of adding texture to the bowl (or
|
||||||
|
shank) of a pipe. Generally, this is done to hide imperfections in
|
||||||
|
the briar so the pipe still looks good. Personally, I stay away from
|
||||||
|
*fully* rusticated pipes not just because I don't like the
|
||||||
|
aesthetics but because the wood is likely poor quality. This is
|
||||||
|
certainly not *always* the case, however.
|
||||||
|
[^7]: Lunting is *the act of taking a leisurely stroll whilst smoking a
|
||||||
|
tobacco pipe ([Lunting.org](https://www.lunting.org/)).* When I go
|
||||||
|
hiking, I'll often take my pipe with me; it's a calm and
|
||||||
|
contemplative time to simply think and enjoy a good tobacco.
|
||||||
|
|
|
@ -9,4 +9,13 @@ tags:
|
||||||
- School
|
- School
|
||||||
- 100 Days To Offload
|
- 100 Days To Offload
|
||||||
---
|
---
|
||||||
I'm only 8 days into [100 Days To Offload](https://100daystooffload.com/) and I've already missed two. The biggest reason is that this is finals week and all my time right now is taken up by studying for exams. [As I said on the Fediverse](https://social.nixnet.services/@amolith/104103245015944134), I have been exhausted the past little while and I'm not getting nearly as much sleep as I really need. I've enjoyed it so far but I'm going to take a break until finals are over; I'll still be coming up with post ideas, however, I just won't actually write or publish them.
|
|
||||||
|
I'm only 8 days into [100 Days To
|
||||||
|
Offload](https://100daystooffload.com/) and I've already missed two. The
|
||||||
|
biggest reason is that this is finals week and all my time right now is
|
||||||
|
taken up by studying for exams. [As I said on the
|
||||||
|
Fediverse,](https://social.nixnet.services/@amolith/104103245015944134)
|
||||||
|
I have been exhausted the past little while and I'm not getting nearly
|
||||||
|
as much sleep as I really need. I've enjoyed it so far but I'm going to
|
||||||
|
take a break until finals are over; I'll still be coming up with post
|
||||||
|
ideas, however, I just won't actually write or publish them.
|
||||||
|
|
|
@ -3,7 +3,20 @@ title: "(Temporary?) Death of the Campaign"
|
||||||
description: Unfortunately, we had to end the campaign before we got further than five sessions
|
description: Unfortunately, we had to end the campaign before we got further than five sessions
|
||||||
date: 2020-04-03T09:13:20-04:00
|
date: 2020-04-03T09:13:20-04:00
|
||||||
cover: /assets/pngs/axe.png
|
cover: /assets/pngs/axe.png
|
||||||
|
categories:
|
||||||
|
- Dungeons & Dragons
|
||||||
---
|
---
|
||||||
With the emergence of COVID-19, our university shutting down, and everything going remote, this campaign has ended. Our DM and a few of the other guys don't like playing without face-to-face interaction. It's unfortunate but I do understand; half of our sessions consisted of us being complete dumbasses and dying laughing at something stupid one of us did. I did have half-finished notes that were going to be made into stories like [the first]({{< relref "pr-1.md" >}}) but I don't remember enough of what else happened to complete them.
|
|
||||||
|
|
||||||
We might pick things up in the Fall once the university opens and we can move back in or we might just start a new one; it remains to be seen. Whatever happens, there will be a new post in [the category](/categories/dungeons-dragons/).
|
With the emergence of COVID-19, our university shutting down, and
|
||||||
|
everything going remote, this campaign has ended. Our DM and a few of
|
||||||
|
the other guys don't like playing without face-to-face interaction. It's
|
||||||
|
unfortunate but I do understand; half of our sessions consisted of us
|
||||||
|
being complete dumbasses and dying laughing at something stupid one of
|
||||||
|
us did. I did have half-finished notes that were going to be made into
|
||||||
|
stories like [the first]({{< relref "pr-1.md" >}}) but I don't remember
|
||||||
|
enough of what else happened to complete them.
|
||||||
|
|
||||||
|
We might pick things up in the Fall once the university opens and we can
|
||||||
|
move back in or we might just start a new one; it remains to be seen.
|
||||||
|
Whatever happens, there will be a new post in [the
|
||||||
|
category.](/categories/dungeons-dragons/)
|
||||||
|
|
|
@ -10,24 +10,73 @@ tags:
|
||||||
- Reading
|
- Reading
|
||||||
- TIL
|
- TIL
|
||||||
---
|
---
|
||||||
|
|
||||||
## Reading methods
|
## Reading methods
|
||||||
Today, I learned that there are three primary ways people read. The first and most common is *mental reading* and this is when you "say" the words in your head as if you were speaking them[^1]. I find this useful when writing because it's as if I'm *actually* speaking them; picking out sentences and phrases that don't sound quite right is easier. In writing courses, the instructor's advice is often to read your work aloud and see how it sounds as mistakes, word choices, and grammatical errors are typically much more prominent. Personally, I find doing it in my head sufficient though. Mental reading is the slowest method but also where your comprehension is at its peak; you are forced to slow down and that gives your brain more time to process the information it's being fed. The average speed is 250 WPM[^2].
|
Today, I learned that there are three primary ways people read. The
|
||||||
|
first and most common is *mental reading* and this is when you "say" the
|
||||||
|
words in your head as if you were speaking them.[^1] I find this useful
|
||||||
|
when writing because it's as if I'm *actually* speaking them; picking
|
||||||
|
out sentences and phrases that don't sound quite right is easier. In
|
||||||
|
writing courses, the instructor's advice is often to read your work
|
||||||
|
aloud and see how it sounds as mistakes, word choices, and grammatical
|
||||||
|
errors are typically much more prominent. Personally, I find doing it in
|
||||||
|
my head sufficient though. Mental reading is the slowest method but also
|
||||||
|
where your comprehension is at its peak; you are forced to slow down and
|
||||||
|
that gives your brain more time to process the information it's being
|
||||||
|
fed. The average speed is 250 WPM.[^2]
|
||||||
|
|
||||||
The second method is called *auditory reading* and it's just listening to words spoken by a person or a TTS[^3] engine. Because listening is generally more passive, it's much easier to completely miss individual words while still understanding the meaning of the phrase or passage. This is significantly faster than mental reading at an average of around 450 WPM. However, comprehension takes a hit because you have less time to process the information.
|
The second method is called *auditory reading* and it's just listening
|
||||||
|
to words spoken by a person or a TTS[^3] engine. Because listening is
|
||||||
|
generally more passive, it's much easier to completely miss individual
|
||||||
|
words while still understanding the meaning of the phrase or passage.
|
||||||
|
This is significantly faster than mental reading at an average of around
|
||||||
|
450 WPM. However, comprehension takes a hit because you have less time
|
||||||
|
to process the information.
|
||||||
|
|
||||||
*Visual reading* is the last and fastest. The concept may be kind of hard to grasp at first but the next paragraph about Stutter will hopefully make it clearer. Visual reading is understanding the meaning of the word without having to hear it or say it in your head, recognising it based on its shape and the letters it's comprised of. Comprehension is at its lowest here but speed peaks. The *average* reader who uses this method can consume 700 words per minute. To put that in perspective, it's 2.8x faster than mental reading. While comprehension is low, it is not nonexistent. The best way to understand what I mean is to try it for yourself.
|
*Visual reading* is the last and fastest. The concept may be kind of
|
||||||
|
hard to grasp at first but the next paragraph about Stutter will
|
||||||
|
hopefully make it clearer. Visual reading is understanding the meaning
|
||||||
|
of the word without having to hear it or say it in your head,
|
||||||
|
recognising it based on its shape and the letters it's comprised of.
|
||||||
|
Comprehension is at its lowest here but speed peaks. The *average*
|
||||||
|
reader who uses this method can consume 700 words per minute. To put
|
||||||
|
that in perspective, it's 2.8x faster than mental reading. While
|
||||||
|
comprehension is low, it is not nonexistent. The best way to understand
|
||||||
|
what I mean is to try it for yourself.
|
||||||
|
|
||||||
**Note:** [Some sources](https://steemit.com/content/@jacor/speed-reading-a-wonderful-skill-to-obtain) say that, with practise and when done correctly, there is no difference in comprehension, rather the opposite; you retain information *significantly* better when speed reading properly. This is where I would recommend actually doing it and deciding for yourself.
|
**Note:** [Some
|
||||||
|
sources](https://steemit.com/content/@jacor/speed-reading-a-wonderful-skill-to-obtain)
|
||||||
|
say that, with practise and when done correctly, there is no difference
|
||||||
|
in comprehension, rather the opposite; you retain information
|
||||||
|
*significantly* better when speed reading properly. This is where I
|
||||||
|
would recommend actually doing it and deciding for yourself.
|
||||||
|
|
||||||
## Stutter
|
## Stutter
|
||||||
[Stutter](https://github.com/jamestomasino/stutter) is a Firefox and Chrome extension that brings RSVP[^4] to your browser and lets you develop visual reading skills. It specifically makes use of *peripheral reading* and displays a single word at time but moves through them at rapid pace. It highlights a single character of the current word just to the left of the centre. This is because a word can usually be recognised by its first few characters; the rest aren't as important. The highlight remains in a fixed position so you never have to move your eyes. Because of that, Stutter is able to display new words much more quickly; the average reader can usually comfortably start at 500 WPM but it is possible to reach speeds of over 1200 WPM with regular practise. I haven't gotten that far yet 😉
|
[Stutter](https://github.com/jamestomasino/stutter) is a Firefox and
|
||||||
|
Chrome extension that brings RSVP[^4] to your browser and lets you
|
||||||
|
develop visual reading skills. It specifically makes use of *peripheral
|
||||||
|
reading* and displays a single word at time but moves through them at
|
||||||
|
rapid pace. It highlights a single character of the current word just to
|
||||||
|
the left of the centre. This is because a word can usually be recognised
|
||||||
|
by its first few characters; the rest aren't as important. The highlight
|
||||||
|
remains in a fixed position so you never have to move your eyes. Because
|
||||||
|
of that, Stutter is able to display new words much more quickly; the
|
||||||
|
average reader can usually comfortably start at 500 WPM but it is
|
||||||
|
possible to reach speeds of over 1200 WPM with regular practise. I
|
||||||
|
haven't gotten that far yet 😉
|
||||||
|
|
||||||
For more information on speed reading, the [Wikipedia page](https://wikipedia.org/wiki/Speed_reading) (where I got most of my information) is really interesting and well-worth a read.
|
For more information on speed reading, the [Wikipedia
|
||||||
|
page](https://wikipedia.org/wiki/Speed_reading) (where I got most of my
|
||||||
|
information) is really interesting and well-worth a read.
|
||||||
|
|
||||||
## Edits
|
## Edits
|
||||||
* [@caltlgin](https://masto.nixnet.xyz/@caltlgin) recommended [flrdr](https://octobanana.com/software/fltrdr), a TUI tool for reading with RSVP
|
* [@caltlgin](https://masto.nixnet.xyz/@caltlgin) recommended
|
||||||
|
[flrdr,](https://octobanana.com/software/fltrdr) a TUI tool for
|
||||||
|
reading with RSVP
|
||||||
|
|
||||||
[^1]: The technical term is *[subvocalisation](https://wikipedia.org/wiki/Subvocalization)*
|
[^1]: The technical term is
|
||||||
|
*[subvocalisation](https://wikipedia.org/wiki/Subvocalization)*
|
||||||
[^2]: Words per minute
|
[^2]: Words per minute
|
||||||
[^3]: [Text-to-speech](https://wikipedia.org/wiki/Speech_synthesis)
|
[^3]: [Text-to-speech](https://wikipedia.org/wiki/Speech_synthesis)
|
||||||
[^4]: *[Rapid serial visual presentation](https://en.wikipedia.org/wiki/Rapid_serial_visual_presentation)*
|
[^4]: *[Rapid serial visual
|
||||||
|
presentation](https://en.wikipedia.org/wiki/Rapid_serial_visual_presentation)*
|
||||||
|
|
|
@ -12,38 +12,66 @@ tags:
|
||||||
- Sysadmin
|
- Sysadmin
|
||||||
toc: true
|
toc: true
|
||||||
---
|
---
|
||||||
## Preface
|
|
||||||
If you simply want to remove your website and nothing else, read through the setup and verifying identities sections then continue from the [For domains you own](/removing-your-site-from-the-wayback-machine-keybase/#for-domains-you-own) section of the previous post. If you're wanting to address accounts/profiles on websites you don't own, read on.
|
|
||||||
|
|
||||||
In addition to dealing with the Wayback Machine, this article is also supposed to help you get started using GPG in every-day life for general security and privacy.
|
## Preface
|
||||||
|
If you simply want to remove your website and nothing else, read through
|
||||||
|
the setup and verifying identities sections then continue from the [For
|
||||||
|
domains you
|
||||||
|
own](/removing-your-site-from-the-wayback-machine-keybase/#for-domains-you-own)
|
||||||
|
section of the previous post. If you're wanting to address
|
||||||
|
accounts/profiles on websites you don't own, read on.
|
||||||
|
|
||||||
|
In addition to dealing with the Wayback Machine, this article is also
|
||||||
|
supposed to help you get started using GPG in every-day life for general
|
||||||
|
security and privacy.
|
||||||
|
|
||||||
## Getting set up
|
## Getting set up
|
||||||
### Installation & Generating Keys
|
### Installation & Generating Keys
|
||||||
First of all, you'll want to install GPG. The package on most distributions should be just be `gnupg`.
|
First of all, you'll want to install GPG. The package on most
|
||||||
|
distributions should be just be `gnupg`.
|
||||||
- Debian: `sudo apt install gnupg`
|
- Debian: `sudo apt install gnupg`
|
||||||
- Arch: `sudo pacman -S gnupg`
|
- Arch: `sudo pacman -S gnupg`
|
||||||
- Fedora: `sudo dnf install gnupg`
|
- Fedora: `sudo dnf install gnupg`
|
||||||
|
|
||||||
The next step is generating your key. While it will take a bit longer to generate, a stronger key will be more secure. Also make sure you read this excerpt from the `man` page as it contains a useful warning.
|
The next step is generating your key. While it will take a bit longer to
|
||||||
|
generate, a stronger key will be more secure. Also make sure you read
|
||||||
|
this excerpt from the `man` page as it contains a useful warning.
|
||||||
|
|
||||||
>**WARNINGS**
|
>**WARNINGS**
|
||||||
>
|
>
|
||||||
>Use a *good* password for your user account and a *good* passphrase to protect your secret key. This passphrase is the weakest part of the whole system. Programs to do dictionary attacks on your secret keyring are very easy to write and so you should protect your "~/.gnupg/" directory very well.
|
>Use a *good* password for your user account and a *good* passphrase to
|
||||||
|
>protect your secret key. This passphrase is the weakest part of the
|
||||||
|
>whole system. Programs to do dictionary attacks on your secret keyring
|
||||||
|
>are very easy to write and so you should protect your `~/.gnupg/`
|
||||||
|
>directory very well.
|
||||||
|
|
||||||
With that said, use `gpg --full-gen-key` to get started. Keep in mind that you don't actually have to use your real name or personal email address. If you *want* a personal key, go ahead and create one but you can also use a pseudonym and fake address if you'd like.
|
With that said, use `gpg --full-gen-key` to get started. Keep in mind
|
||||||
|
that you don't actually have to use your real name or personal email
|
||||||
|
address. If you *want* a personal key, go ahead and create one but you
|
||||||
|
can also use a pseudonym and fake address if you'd like.
|
||||||
|
|
||||||
1. I would use the default (1) of "RSA and RSA".
|
1. I would use the default (1) of "RSA and RSA".
|
||||||
2. Again, you can use default but I would recommend 4096 bits because it's much more secure. This does mean, however, that it will take longer to generate the key.
|
2. Again, you can use default but I would recommend 4096 bits because
|
||||||
3. An expiry date is recommended but you don't necessarily have to set one.
|
it's much more secure. This does mean, however, that it will take
|
||||||
4. You *don't* have to use your real name. You can use a pseudonym if you wish.
|
longer to generate the key.
|
||||||
5. You *don't* have to use your personal email. You can use a pseudonymous one if you wish.
|
3. An expiry date is recommended but you don't necessarily have to set
|
||||||
|
one.
|
||||||
|
4. You *don't* have to use your real name. You can use a pseudonym if
|
||||||
|
you wish.
|
||||||
|
5. You *don't* have to use your personal email. You can use a
|
||||||
|
pseudonymous one if you wish.
|
||||||
6. You don't need a comment
|
6. You don't need a comment
|
||||||
7. Confirm
|
7. Confirm
|
||||||
8. Come up with a ***secure*** password or, even better, a pass*phrase*.
|
8. Come up with a ***secure*** password or, even better, a pass*phrase*.
|
||||||
9. Move your mouse around a bit, type, something like that while it's generating the key.
|
9. Move your mouse around a bit, type, something like that while it's
|
||||||
|
generating the key.
|
||||||
|
|
||||||
### Email
|
### Email
|
||||||
I use [Thunderbird](https://www.thunderbird.net/) for email and there is a great addon for it called [Enigmail](https://enigmail.net/). It's quite easy to set up and use but there is a really annoying bug that you'll experience when replying in threaded mode. If you want to encrypt a reply, simply open the editor in a new window.
|
I use [Thunderbird](https://www.thunderbird.net/) for email and there is
|
||||||
|
a great addon for it called [Enigmail](https://enigmail.net/). It's
|
||||||
|
quite easy to set up and use but there is a really annoying bug that
|
||||||
|
you'll experience when replying in threaded mode. If you want to encrypt
|
||||||
|
a reply, simply open the editor in a new window.
|
||||||
|
|
||||||
## Verifying Identities
|
## Verifying Identities
|
||||||
In general, all you'll have to do is type something along the lines of:
|
In general, all you'll have to do is type something along the lines of:
|
||||||
|
@ -53,15 +81,37 @@ In general, all you'll have to do is type something along the lines of:
|
||||||
> - Account 2 - \<link\>
|
> - Account 2 - \<link\>
|
||||||
> - Etc.
|
> - Etc.
|
||||||
|
|
||||||
You'll save that in a text file, run `gpg --clearsign file.txt`, copy the output, then paste it wherever it needs to go, whether that's a blog, a GitHub gist, etc. With Twitter/Mastodon and their character limit, this won't quite work. The best solution there is probably to post a link to a gpg-signed message on your website that links back to the post.
|
You'll save that in a text file, run `gpg --clearsign file.txt`, copy
|
||||||
|
the output, then paste it wherever it needs to go, whether that's a
|
||||||
|
blog, a GitHub gist, etc. With Twitter/Mastodon and their character
|
||||||
|
limit, this won't quite work. The best solution there is probably to
|
||||||
|
post a link to a gpg-signed message on your website that links back to
|
||||||
|
the post.
|
||||||
|
|
||||||
Really, all you have to do is tie all of your accounts together in as close-knit a web as you can and sign with your GPG key wherever possible. Linking everything to everything else would definitely work but it should also be enough to link everything to a single document on your website (or a gist in GitHub etc.) that links back to all of those.
|
Really, all you have to do is tie all of your accounts together in as
|
||||||
|
close-knit a web as you can and sign with your GPG key wherever
|
||||||
|
possible. Linking everything to everything else would definitely work
|
||||||
|
but it should also be enough to link everything to a single document on
|
||||||
|
your website (or a gist in GitHub etc.) that links back to all of those.
|
||||||
|
|
||||||
I'm probably not explaining very well so here's a diagram showing it.
|
I'm probably not explaining very well so here's a diagram showing it.
|
||||||
|
|
||||||
![a diagram illustrating the text below](/assets/pngs/archive-diagram.png)
|
![a diagram illustrating the text
|
||||||
|
below](/assets/pngs/archive-diagram.png)
|
||||||
|
|
||||||
Note that the email links to everything else but nothing links back to the email. It's the main document that's at the centre of it all. Make sure both it and the email are signed. If you toot, link to the toot in the main document. If you make a gist, link to the gist in the main document.
|
Note that the email links to everything else but nothing links back to
|
||||||
|
the email. It's the main document that's at the centre of it all. Make
|
||||||
|
sure both it and the email are signed. If you toot, link to the toot in
|
||||||
|
the main document. If you make a gist, link to the gist in the main
|
||||||
|
document.
|
||||||
|
|
||||||
## Sending the email
|
## Sending the email
|
||||||
Once you have all the groundwork laid out, you'll be ready to send the email; the address is [info@archive.org](mailto:info@archive.org). Explain what you would like done and link to the document requesting your domain exclusion first as that's the easiest to verify. In the next paragraph, I would explain a little bit about what you've set up with signing messages and creating the "Web of Verification" (lol). Under that, I would link to the posts asking for the accounts to be removed. Make sure those posts also link back to the main document. Be polite, say thank you, then send the email!
|
Once you have all the groundwork laid out, you'll be ready to send the
|
||||||
|
email; the address is [info@archive.org.](mailto:info@archive.org)
|
||||||
|
Explain what you would like done and link to the document requesting
|
||||||
|
your domain exclusion first as that's the easiest to verify. In the next
|
||||||
|
paragraph, I would explain a little bit about what you've set up with
|
||||||
|
signing messages and creating the "Web of Verification" (lol). Under
|
||||||
|
that, I would link to the posts asking for the accounts to be removed.
|
||||||
|
Make sure those posts also link back to the main document. Be polite,
|
||||||
|
say thank you, then send the email!
|
||||||
|
|
|
@ -13,18 +13,21 @@ tags:
|
||||||
- Media
|
- Media
|
||||||
- Automation
|
- Automation
|
||||||
---
|
---
|
||||||
|
|
||||||
Omar Roth, the developer of Invidious, recently wrote a blog post about
|
Omar Roth, the developer of Invidious, recently wrote a blog post about
|
||||||
*[Stepping away from open source](https://omar.yt/posts/stepping-away-from-open-source)*.
|
*[Stepping away from open
|
||||||
While I never used the official instance, I thought this was a good
|
source.](https://omar.yt/posts/stepping-away-from-open-source)* While I
|
||||||
opportunity to create a tool that downloads videos from YouTubers I'm
|
never used the official instance, I thought this was a good opportunity
|
||||||
subscribed to so I can watch them offline in whatever manner I prefer.
|
to create a tool that downloads videos from YouTubers I'm subscribed to
|
||||||
|
so I can watch them offline in whatever manner I prefer.
|
||||||
|
|
||||||
To that end, [youtube-dl](https://github.com/ytdl-org/youtube-dl) is by
|
To that end, [youtube-dl](https://github.com/ytdl-org/youtube-dl) is by
|
||||||
far the most reliable and versatile option. Having been around since
|
far the most reliable and versatile option. Having been around since
|
||||||
before 2008[^1], I don't think the project is going anywhere.
|
before 2008[^1], I don't think the project is going anywhere.
|
||||||
[MPV](https://mpv.io/) is my media player of choice and it relies on
|
[MPV](https://mpv.io/) is my media player of choice and it relies on
|
||||||
youtube-dl for watching online content from Twitch to YouTube to
|
youtube-dl for watching online content from Twitch to YouTube to PornHub
|
||||||
PornHub to [much more](https://ytdl-org.github.io/youtube-dl/supportedsites.html).
|
to [much
|
||||||
|
more.](https://ytdl-org.github.io/youtube-dl/supportedsites.html)
|
||||||
|
|
||||||
Conveniently, youtube-dl comes with all of the tools and flags needed
|
Conveniently, youtube-dl comes with all of the tools and flags needed
|
||||||
for exactly this purpose so scripting and automating it is incredibly
|
for exactly this purpose so scripting and automating it is incredibly
|
||||||
|
@ -79,21 +82,21 @@ other highest-quality format will be used and embedded instead.
|
||||||
```
|
```
|
||||||
|
|
||||||
## Limiting downloads
|
## Limiting downloads
|
||||||
When switching to this method, the initial download will pull
|
When switching to this method, the initial download will pull *all* of a
|
||||||
*all* of a channel's videos. I certainly don't want this so they should
|
channel's videos. I certainly don't want this so they should be limited
|
||||||
be limited in some way. `--dateafter` and `--playlist-end` serve very
|
in some way. `--dateafter` and `--playlist-end` serve very nicely. The
|
||||||
nicely. The former will only download videos published *after* a certain
|
former will only download videos published *after* a certain date and
|
||||||
date and the latter will only download X number of videos.
|
the latter will only download X number of videos.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
--dateafter 20200801 --playlist-end 5
|
--dateafter 20200801 --playlist-end 5
|
||||||
```
|
```
|
||||||
|
|
||||||
**EDIT:** A reader sent me an email with this improvement to the archive
|
**EDIT:** A reader sent me an email with this improvement to the archive
|
||||||
functionality. Rather than checking the last five days of videos to see if
|
functionality. Rather than checking the last five days of videos to see
|
||||||
they've already been downloaded, this snippet will check when the archive file
|
if they've already been downloaded, this snippet will check when the
|
||||||
was last edited and use that as the `--dateafter` parameter, making the script a
|
archive file was last edited and use that as the `--dateafter`
|
||||||
bit more efficient.
|
parameter, making the script a bit more efficient.
|
||||||
|
|
||||||
``` bash
|
``` bash
|
||||||
AFTER=$(date -r .archives/"$1".txt +%Y%m%d 2>/dev/null || date +%Y%m%d)
|
AFTER=$(date -r .archives/"$1".txt +%Y%m%d 2>/dev/null || date +%Y%m%d)
|
||||||
|
@ -116,8 +119,8 @@ I don't yet have a good method for getting notifications when there are
|
||||||
*new* videos but there is a simple way to get notified when the script
|
*new* videos but there is a simple way to get notified when the script
|
||||||
is finished running. `notify-send` is one of the easiest and has pretty
|
is finished running. `notify-send` is one of the easiest and has pretty
|
||||||
simple syntax as well: the first string is the notification summary and
|
simple syntax as well: the first string is the notification summary and
|
||||||
the second is a longer description. You can optionally pass an icon
|
the second is a longer description. You can optionally pass an icon name
|
||||||
name to make it look a little better.
|
to make it look a little better.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
notify-send -i video-x-generic "Downloads finished" "Check the YouTube folder for new videos"
|
notify-send -i video-x-generic "Downloads finished" "Check the YouTube folder for new videos"
|
||||||
|
@ -125,7 +128,8 @@ notify-send -i video-x-generic "Downloads finished" "Check the YouTube folder fo
|
||||||
|
|
||||||
For some reason, I don't get icons when the generic name is specified
|
For some reason, I don't get icons when the generic name is specified
|
||||||
but I know the command will work on most systems. On mine, I have to
|
but I know the command will work on most systems. On mine, I have to
|
||||||
pass the path to the icon file I want: `-i /usr/share/icons/Suru++-Dark/apps/64/video.svg`
|
pass the path to the icon file I want: `-i
|
||||||
|
/usr/share/icons/Suru++-Dark/apps/64/video.svg`
|
||||||
|
|
||||||
## Writing the script
|
## Writing the script
|
||||||
I want to store the videos in `~/Videos/YouTube` and I want the archive
|
I want to store the videos in `~/Videos/YouTube` and I want the archive
|
||||||
|
@ -164,18 +168,19 @@ dl () {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Because it's in a function that's called repeatedly, the `AFTER` variable will
|
Because it's in a function that's called repeatedly, the `AFTER`
|
||||||
be reevaluated each time using a different archive file to ensure no videos are
|
variable will be reevaluated each time using a different archive file to
|
||||||
missed. The backslashes at the end (`\`) tell bash that it's a single command
|
ensure no videos are missed. The backslashes at the end (`\`) tell bash
|
||||||
spanning multiple lines. At the bottom, `sleep` just waits 5 seconds before
|
that it's a single command spanning multiple lines. At the bottom,
|
||||||
downloading the next channel. It's unlikely that YouTube will ratelimit a
|
`sleep` just waits 5 seconds before downloading the next channel. It's
|
||||||
residential address for this but it is still possible. Waiting a bit before
|
unlikely that YouTube will ratelimit a residential address for this but
|
||||||
continuing reduces the likelihood further.
|
it is still possible. Waiting a bit before continuing reduces the
|
||||||
|
likelihood further.
|
||||||
|
|
||||||
Note the use of `"$1"` and `"$2"` in the archive path and at the very
|
Note the use of `"$1"` and `"$2"` in the archive path and at the very
|
||||||
end of the youtube-dl command. This lets the user define what the archive file
|
end of the youtube-dl command. This lets the user define what the
|
||||||
should be named and what channel to download videos from. A line using
|
archive file should be named and what channel to download videos from. A
|
||||||
the function would be something like:
|
line using the function would be something like:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
dl linustechtips https://www.youtube.com/user/LinusTechTips
|
dl linustechtips https://www.youtube.com/user/LinusTechTips
|
||||||
|
@ -217,28 +222,19 @@ dl () {
|
||||||
sleep 5
|
sleep 5
|
||||||
}
|
}
|
||||||
|
|
||||||
dl ding https://www.youtube.com/channel/UClq42foiSgl7sSpLupnugGA
|
|
||||||
dl meute https://www.youtube.com/channel/UCY3cAFsquIk7VGMuk-V8S3g
|
|
||||||
dl vsauce https://www.youtube.com/user/Vsauce
|
dl vsauce https://www.youtube.com/user/Vsauce
|
||||||
dl ardour https://www.youtube.com/channel/UCqeg5vkTkH-DYxmOO9FJOHA
|
|
||||||
dl pewdiepie https://www.youtube.com/user/PewDiePie
|
dl pewdiepie https://www.youtube.com/user/PewDiePie
|
||||||
dl techaltar https://www.youtube.com/channel/UCtZO3K2p8mqFwiKWb9k7fXA
|
dl techaltar https://www.youtube.com/channel/UCtZO3K2p8mqFwiKWb9k7fXA
|
||||||
dl avikaplan https://www.youtube.com/user/AviKaplanMusic
|
dl avikaplan https://www.youtube.com/user/AviKaplanMusic
|
||||||
dl lukesmith https://www.youtube.com/channel/UC2eYFnH61tmytImy1mTYvhA
|
dl lukesmith https://www.youtube.com/channel/UC2eYFnH61tmytImy1mTYvhA
|
||||||
dl techlinked https://www.youtube.com/c/techlinked/
|
dl techlinked https://www.youtube.com/c/techlinked/
|
||||||
dl robscallon https://www.youtube.com/user/robs70986987
|
dl robscallon https://www.youtube.com/user/robs70986987
|
||||||
dl setheverman https://www.youtube.com/user/SethEverman
|
|
||||||
dl logosbynick https://www.youtube.com/channel/UCEQXp_fcqwPcqrzNtWJ1w9w
|
dl logosbynick https://www.youtube.com/channel/UCEQXp_fcqwPcqrzNtWJ1w9w
|
||||||
dl techquickie https://www.youtube.com/user/Techquickie
|
dl techquickie https://www.youtube.com/user/Techquickie
|
||||||
dl yanntiersen https://www.youtube.com/user/YannTiersenOfficial
|
|
||||||
dl andrewhuang https://www.youtube.com/user/songstowearpantsto
|
dl andrewhuang https://www.youtube.com/user/songstowearpantsto
|
||||||
dl aurahandpan https://www.youtube.com/user/Jantzulu
|
|
||||||
dl jamesveitch https://www.youtube.com/user/james948
|
dl jamesveitch https://www.youtube.com/user/james948
|
||||||
dl brandonacker https://www.youtube.com/user/brandonacker
|
dl brandonacker https://www.youtube.com/user/brandonacker
|
||||||
dl unboxtherapy https://www.youtube.com/user/unboxtherapy
|
|
||||||
dl linustechtips https://www.youtube.com/user/LinusTechTips
|
dl linustechtips https://www.youtube.com/user/LinusTechTips
|
||||||
dl michaelreeves https://www.youtube.com/channel/UCtHaxi4GTYDpJgMSGy7AeSw
|
|
||||||
dl countrysquire https://www.youtube.com/channel/UCdrw_DN_OmFIic0gTZJDVCQ
|
|
||||||
dl roomieofficial https://www.youtube.com/user/RoomieOfficial
|
dl roomieofficial https://www.youtube.com/user/RoomieOfficial
|
||||||
dl fridaycheckout https://www.youtube.com/channel/UCRG_N2uO405WO4P3Ruef9NA
|
dl fridaycheckout https://www.youtube.com/channel/UCRG_N2uO405WO4P3Ruef9NA
|
||||||
dl lastweektonight https://www.youtube.com/user/LastWeekTonight
|
dl lastweektonight https://www.youtube.com/user/LastWeekTonight
|
||||||
|
@ -261,9 +257,9 @@ This is a very simple process.
|
||||||
|
|
||||||
The pasted line runs the script every 6th hour of every day, every week,
|
The pasted line runs the script every 6th hour of every day, every week,
|
||||||
every month, and every year. To change the frequency just run `crontab
|
every month, and every year. To change the frequency just run `crontab
|
||||||
-e`, edit the line, and save. [Crontab Generator](https://crontab-generator.org/)
|
-e`, edit the line, and save. [Crontab
|
||||||
or [Crontab Guru](https://crontab.guru/) might be useful if the syntax
|
Generator](https://crontab-generator.org/) or [Crontab
|
||||||
is confusing.
|
Guru](https://crontab.guru/) might be useful if the syntax is confusing.
|
||||||
|
|
||||||
Have fun!
|
Have fun!
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@ tags:
|
||||||
|
|
||||||
Many people will disagree but I think IRC is still one of the best chat
|
Many people will disagree but I think IRC is still one of the best chat
|
||||||
platforms there is for a [number of
|
platforms there is for a [number of
|
||||||
reasons](https://drewdevault.com/2019/07/01/Absence-of-features-in-IRC.html).
|
reasons.](https://drewdevault.com/2019/07/01/Absence-of-features-in-IRC.html)
|
||||||
However, the documentation surrounding it is sometimes lacking, commands
|
However, the documentation surrounding it is sometimes lacking, commands
|
||||||
are esoteric and can differ from server to server, some networks have
|
are esoteric and can differ from server to server, some networks have
|
||||||
stupid requirements/defaults, etc. But who says you have to join them?
|
stupid requirements/defaults, etc. But who says you have to join them?
|
||||||
|
@ -28,8 +28,8 @@ First, `ircd` is short for *IRC daemon*; it's just a server running in
|
||||||
the background. Second, there are a *ton* of choices, from
|
the background. Second, there are a *ton* of choices, from
|
||||||
[charybdis](https://github.com/charybdis-ircd/charybdis) and
|
[charybdis](https://github.com/charybdis-ircd/charybdis) and
|
||||||
[ngIRCd](https://github.com/ngircd/ngircd/) to
|
[ngIRCd](https://github.com/ngircd/ngircd/) to
|
||||||
[UnrealIRCd](https://www.unrealircd.org/),
|
[UnrealIRCd,](https://www.unrealircd.org/)
|
||||||
[InspIRCd](https://www.inspircd.org/), and many others. The ircd this
|
[InspIRCd,](https://www.inspircd.org/) and many others. The ircd this
|
||||||
guide will focus on is [Oragono](https://oragono.io/) because it's one
|
guide will focus on is [Oragono](https://oragono.io/) because it's one
|
||||||
of the simpler options yet has support for [IRCv3](https://ircv3.net/)
|
of the simpler options yet has support for [IRCv3](https://ircv3.net/)
|
||||||
and comes with [services](https://en.wikipedia.org/wiki/IRC_services)
|
and comes with [services](https://en.wikipedia.org/wiki/IRC_services)
|
||||||
|
@ -70,7 +70,7 @@ specific options and values I recommend.
|
||||||
cloaks](https://meta.wikimedia.org/wiki/IRC/Cloaks) to indicate
|
cloaks](https://meta.wikimedia.org/wiki/IRC/Cloaks) to indicate
|
||||||
position, status, or affiliation, set `lookup-hostnames: true` and
|
position, status, or affiliation, set `lookup-hostnames: true` and
|
||||||
`forward-confirm-hostnames: false`.
|
`forward-confirm-hostnames: false`.
|
||||||
* Always make a cool MoTD. It's essential for any IRC server[^2]. I
|
* Always make a cool MoTD. It's essential for any IRC server.[^2] I
|
||||||
recommend using something like
|
recommend using something like
|
||||||
[TAAG](https://www.patorjk.com/software/taag/) to come up with it.
|
[TAAG](https://www.patorjk.com/software/taag/) to come up with it.
|
||||||
* You *may* want to enable email authentication but it's a pain to set
|
* You *may* want to enable email authentication but it's a pain to set
|
||||||
|
@ -103,13 +103,13 @@ and nothing is wrong in the config.
|
||||||
|
|
||||||
You can always run Oragono in [tmux](https://en.wikipedia.org/wiki/Tmux)
|
You can always run Oragono in [tmux](https://en.wikipedia.org/wiki/Tmux)
|
||||||
or something but it would be much better to do it with
|
or something but it would be much better to do it with
|
||||||
[systemd](https://en.wikipedia.org/wiki/Systemd),
|
[systemd,](https://en.wikipedia.org/wiki/Systemd)
|
||||||
[OpenRC](https://en.wikipedia.org/wiki/OpenRC),
|
[OpenRC,](https://en.wikipedia.org/wiki/OpenRC)
|
||||||
[runit](https://en.wikipedia.org/wiki/Runit), etc. I personally use
|
[runit,](https://en.wikipedia.org/wiki/Runit) etc. I personally use
|
||||||
systemd and this service file should go in
|
systemd and this service file should go in
|
||||||
`/etc/systemd/system/oragono.service` or something similar.
|
`/etc/systemd/system/oragono.service` or something similar.
|
||||||
|
|
||||||
{{< highlight ini "lineAnchors=service" >}}
|
``` ini
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=oragono
|
Description=oragono
|
||||||
After=network.target
|
After=network.target
|
||||||
|
@ -127,7 +127,7 @@ LimitNOFILE=1048576
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
{{< / highlight >}}
|
```
|
||||||
|
|
||||||
Run the following commands to ensure Oragono starts when your server boots.
|
Run the following commands to ensure Oragono starts when your server boots.
|
||||||
|
|
||||||
|
@ -159,7 +159,7 @@ them and discover what each does.
|
||||||
You've reached the end of the post. You are now disallowed from telling
|
You've reached the end of the post. You are now disallowed from telling
|
||||||
anyone that IRC is too complicated. If you want to test a server you're
|
anyone that IRC is too complicated. If you want to test a server you're
|
||||||
setting up, feel free to use my instance of [The
|
setting up, feel free to use my instance of [The
|
||||||
Lounge](https://thelounge.chat/); it's at
|
Lounge;](https://thelounge.chat/) it's at
|
||||||
[irc.nixnet.services](https://irc.nixnet.services/) and any IRCd details
|
[irc.nixnet.services](https://irc.nixnet.services/) and any IRCd details
|
||||||
can be entered but mine are default. Speaking of my IRC server, you
|
can be entered but mine are default. Speaking of my IRC server, you
|
||||||
should [join #secluded](ircs://irc.nixnet.services:6697/secluded) and
|
should [join #secluded](ircs://irc.nixnet.services:6697/secluded) and
|
||||||
|
|
|
@ -9,18 +9,90 @@ tags:
|
||||||
- Fonts
|
- Fonts
|
||||||
- Typography
|
- Typography
|
||||||
---
|
---
|
||||||
I just got a couple of new (and rather expensive) fonts. So far, I'm incredibly happy with them and think it was money well-spent for a few reasons. Created by [Matthew Butterick](https://en.wikipedia.org/wiki/Matthew_Butterick), [Valkyrie](https://mbtype.com/fonts/valkyrie/) and [Concourse](https://mbtype.com/fonts/concourse/) are simply beautiful. I don't know which I like more but they both have their places on this website and will find their way onto others in the future. Because Concourse is a [sans-serif](https://en.wikipedia.org/wiki/Sans-serif), it will be the default used all across Secluded.Site. Valkyrie is a [serif font](https://en.wikipedia.org/wiki/Serif) and, though the type seems to be losing its place on the web, I think it adds a lot when reading content that's focused on a narrative rather than simply being informative. Because of that, it will be used for my posts about [pipe smoking](/categories/pipe-smoking/) and [Dungeons & Dragons](/categories/dungeons-dragons/). I might come up with other categories where Valkyrie fits as well but it will likely remain limited to those two.
|
|
||||||
|
|
||||||
In addition to simply changing the fonts, I've also modified some styles on the site. Headers (such as the title of this post) are now in proper small caps[^1] and I did some work to improve font size relative to the content width. Previously, the text was smaller than I would have liked which meant longer lines; there are some studies[^2] indicating that lines with a lower character count, while decreasing reading speed[^3], are generally more comfortable and hold the reader's attention more effectively. The width hasn't changed but the size has increased and thus decreased the number of characters per line.
|
I just got a couple of new (and rather expensive) fonts. So far, I'm
|
||||||
|
incredibly happy with them and think it was money well-spent for a few
|
||||||
|
reasons. Created by [Matthew
|
||||||
|
Butterick,](https://en.wikipedia.org/wiki/Matthew_Butterick)
|
||||||
|
[Valkyrie](https://mbtype.com/fonts/valkyrie/) and
|
||||||
|
[Concourse](https://mbtype.com/fonts/concourse/) are simply beautiful. I
|
||||||
|
don't know which I like more but they both have their places on this
|
||||||
|
website and will find their way onto others in the future. Because
|
||||||
|
Concourse is a [sans-serif,](https://en.wikipedia.org/wiki/Sans-serif)
|
||||||
|
it will be the default used all across Secluded.Site. Valkyrie is a
|
||||||
|
[serif font](https://en.wikipedia.org/wiki/Serif) and, though the type
|
||||||
|
seems to be losing its place on the web, I think it adds a lot when
|
||||||
|
reading content that's focused on a narrative rather than simply being
|
||||||
|
informative. Because of that, it will be used for my posts about [pipe
|
||||||
|
smoking](/categories/pipe-smoking/) and [Dungeons &
|
||||||
|
Dragons.](/categories/dungeons-dragons/) I might come up with other
|
||||||
|
categories where Valkyrie fits as well but it will likely remain limited
|
||||||
|
to those two.
|
||||||
|
|
||||||
One of the reasons I decided to buy the fonts was simply that I love the way they look and they have a lot of [features](https://mbtype.com/fonts/concourse/features.html) I wanted. In addition to that, however, I also wanted to support Matthew. His book, *[Practical Typography](https://practicaltypography.com/)* is an amazing resource for anyone that does anything with text. He has put a massive amount of work into it and simply [asks readers to pay](https://practicaltypography.com/why-you-should-pay.html). There is no pay*wall* and no ads either; it's completely supported by readers. There are a few [ways to contribute](https://practicaltypography.com/how-to-pay-for-this-book.html) and one of them is buying his fonts. Interestingly enough, if you read his [first](https://practicaltypography.com/economics-year-one.html), [second](https://practicaltypography.com/effluents-influence-affluence.html), and [third](https://practicaltypography.com/to-pay-or-not-to-pay.html) year summaries, more people bought his fonts for a higher price than simply paid him directly:
|
In addition to simply changing the fonts, I've also modified some styles
|
||||||
|
on the site. Headers (such as the title of this post) are now in proper
|
||||||
|
small caps[^1] and I did some work to improve font size relative to the
|
||||||
|
content width. Previously, the text was smaller than I would have liked
|
||||||
|
which meant longer lines; there are some studies[^2] indicating that
|
||||||
|
lines with a lower character count, while decreasing reading speed,[^3]
|
||||||
|
are generally more comfortable and hold the reader's attention more
|
||||||
|
effectively. The width hasn't changed but the size has increased and
|
||||||
|
thus decreased the number of characters per line.
|
||||||
|
|
||||||
> What’s most interesting to me, however, is that so many more readers were willing to buy a font license (at $59–299) than to make a direct payment (at $5–10). Don’t get me wrong—I’m utterly grateful. But it’s counterintuitive: I never expected that the cheaper option would be so much less popular. Economists, I invite your explanations.
|
One of the reasons I decided to buy the fonts was simply that I love the
|
||||||
|
way they look and they have a lot of
|
||||||
|
[features](https://mbtype.com/fonts/concourse/features.html) I wanted.
|
||||||
|
In addition to that, however, I also wanted to support Matthew. His
|
||||||
|
book, *[Practical Typography](https://practicaltypography.com/)* is an
|
||||||
|
amazing resource for anyone that does anything with text. He has put a
|
||||||
|
massive amount of work into it and simply [asks readers to
|
||||||
|
pay.](https://practicaltypography.com/why-you-should-pay.html) There is
|
||||||
|
no pay*wall* and no ads either; it's completely supported by readers.
|
||||||
|
There are a few [ways to
|
||||||
|
contribute](https://practicaltypography.com/how-to-pay-for-this-book.html)
|
||||||
|
and one of them is buying his fonts. Interestingly enough, if you read
|
||||||
|
his [first,](https://practicaltypography.com/economics-year-one.html)
|
||||||
|
[second,](https://practicaltypography.com/effluents-influence-affluence.html)
|
||||||
|
and [third](https://practicaltypography.com/to-pay-or-not-to-pay.html)
|
||||||
|
year summaries, more people bought his fonts for a higher price than
|
||||||
|
simply paid him directly:
|
||||||
|
|
||||||
|
> What’s most interesting to me, however, is that so many more readers
|
||||||
|
> were willing to buy a font license (at $59–299) than to make a direct
|
||||||
|
> payment (at $5–10). Don’t get me wrong—I’m utterly grateful. But it’s
|
||||||
|
> counterintuitive: I never expected that the cheaper option would be so
|
||||||
|
> much less popular. Economists, I invite your explanations.
|
||||||
>
|
>
|
||||||
> — *[The Economics of a Web-based Book: Year One](https://practicaltypography.com/economics-year-one.html)*
|
> — *[The Economics of a Web-based Book: Year
|
||||||
|
> One](https://practicaltypography.com/economics-year-one.html)*
|
||||||
|
|
||||||
I won't speculate as to why but it is thought-provoking. Regardless, his approach is very similar to that of any developer who creates open source software. They pour their time and energy into projects they might get no compensation for and rely on the community to fund their efforts. I have a *great* deal of respect for these people and try to support them whenever I'm able. $200 is a small price for two incredible fonts in addition to *Practical Typography*!
|
I won't speculate as to why but it is thought-provoking. Regardless, his
|
||||||
|
approach is very similar to that of any developer who creates open
|
||||||
|
source software. They pour their time and energy into projects they
|
||||||
|
might get no compensation for and rely on the community to fund their
|
||||||
|
efforts. I have a *great* deal of respect for these people and try to
|
||||||
|
support them whenever I'm able. $200 is a small price for two incredible
|
||||||
|
fonts in addition to *Practical Typography*!
|
||||||
|
|
||||||
[^1]: Small caps are a font style where the letters that would otherwise be lower case are a shorter version of the upper case form. Many people simulate small caps by reducing the font size of regular capital letters to that of lower case characters but the results are too tall and their vertical lines too thin; they've only been scaled down. *Proper* small caps are an additional set of letters added to a font file as [OpenType features](https://practicaltypography.com/opentype-features.html). For a comparison, see the related page on *[Practical Typography](https://practicaltypography.com/small-caps.html)*.
|
[^1]: Small caps are a font style where the letters that would otherwise
|
||||||
[^2]: I took mental note when reading an article about it but have since forgotten what it was and can't find it again. There are, however, various other sources, such as *[The Elements of Typographic Style Applied to the Web](http://webtypography.net/2.1.2)* and *[Readability: the Optimal Line Length](https://baymard.com/blog/line-length-readability)*.
|
be lower case are a shorter version of the upper case form. Many
|
||||||
[^3]: A [rather short study](https://web.archive.org/web/20170918212943/http://psychology.wichita.edu/surl/usabilitynews/72/LineLength.asp) from Wichita State University found that increased line length resulted in greater reading efficiency. However, there were no significant effects on comprehension and the preference for longer or shorter lines was fairly evenly distributed.
|
people simulate small caps by reducing the font size of regular
|
||||||
|
capital letters to that of lower case characters but the results are
|
||||||
|
too tall and their vertical lines too thin; they've only been scaled
|
||||||
|
down. *Proper* small caps are an additional set of letters added to
|
||||||
|
a font file as [OpenType
|
||||||
|
features.](https://practicaltypography.com/opentype-features.html)
|
||||||
|
For a comparison, see the related page on *[Practical
|
||||||
|
Typography.](https://practicaltypography.com/small-caps.html)*
|
||||||
|
[^2]: I took mental note when reading an article about it but have since
|
||||||
|
forgotten what it was and can't find it again. There are, however,
|
||||||
|
various other sources, such as *[The Elements of Typographic Style
|
||||||
|
Applied to the Web](http://webtypography.net/2.1.2)* and
|
||||||
|
*[Readability: the Optimal Line
|
||||||
|
Length.](https://baymard.com/blog/line-length-readability)*
|
||||||
|
[^3]: A [rather short
|
||||||
|
study](https://web.archive.org/web/20170918212943/http://psychology.wichita.edu/surl/usabilitynews/72/LineLength.asp)
|
||||||
|
from Wichita State University found that increased line length
|
||||||
|
resulted in greater reading efficiency. However, there were no
|
||||||
|
significant effects on comprehension and the preference for longer
|
||||||
|
or shorter lines was fairly evenly distributed.
|
||||||
|
|
|
@ -3,8 +3,10 @@ title: "The Guilded Mouse"
|
||||||
description: "Our adventurers launch right into the campaign after meeting with two prospective employers at The Guilded Mouse."
|
description: "Our adventurers launch right into the campaign after meeting with two prospective employers at The Guilded Mouse."
|
||||||
date: 2020-04-07T12:53:05-04:00
|
date: 2020-04-07T12:53:05-04:00
|
||||||
cover: /assets/pngs/axe.png
|
cover: /assets/pngs/axe.png
|
||||||
|
categories:
|
||||||
|
- Dungeons & Dragons
|
||||||
---
|
---
|
||||||
A few days ago, [@klaatu](https://mastodon.xyz/@klaatu) asked [if anyone was up for a game of D&D 5e](https://mastodon.xyz/@klaatu/103907619917870037). I didn't notice it until I saw [@ShellOwl](https://social.nixnet.services/@shellowl)'s reply in my local timeline and simply had to join in; my last D&D campaign has been [put on hold](/temporary-death-of-the-campaign/) for the foreseeable future but of course I still want to play. We met up last Thursday, had our first session, and I thoroughly enjoyed myself; I'm looking forward to the next few weeks!
|
A few days ago, [@klaatu](https://mastodon.xyz/@klaatu) asked [if anyone was up for a game of D&D 5e.](https://mastodon.xyz/@klaatu/103907619917870037) I didn't notice it until I saw [@ShellOwl's](https://social.nixnet.services/@shellowl) reply in my local timeline and simply had to join in; my last D&D campaign has been [put on hold](/temporary-death-of-the-campaign/) for the foreseeable future but of course I still want to play. We met up last Thursday, had our first session, and I thoroughly enjoyed myself; I'm looking forward to the next few weeks!
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
title: "The House of San Balay"
|
title: "The House of San Balay"
|
||||||
date: 2020-05-14T16:04:05-04:00
|
date: 2020-05-14T16:04:05-04:00
|
||||||
cover: /assets/pngs/axe.png
|
cover: /assets/pngs/axe.png
|
||||||
|
categories:
|
||||||
|
- Dungeons & Dragons
|
||||||
---
|
---
|
||||||
Today, our primary purpose was to gather information. We rose, ate a quick breakfast, and then headed into the city. Saltmarsh is a very busy, bustling little town. Ships were loading and unloading at the docks, there were taverns, historical centres, statues, restaurants, people going about their day and hurrying off in this direction or that, etc. In the distance and to the right, we noticed a little house on a cliff overlooking the ocean. That was the house we were to inspect.
|
Today, our primary purpose was to gather information. We rose, ate a quick breakfast, and then headed into the city. Saltmarsh is a very busy, bustling little town. Ships were loading and unloading at the docks, there were taverns, historical centres, statues, restaurants, people going about their day and hurrying off in this direction or that, etc. In the distance and to the right, we noticed a little house on a cliff overlooking the ocean. That was the house we were to inspect.
|
||||||
|
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
---
|
|
||||||
title: "Ssos 3"
|
|
||||||
date: 2020-05-14T16:17:14-04:00
|
|
||||||
draft: true
|
|
||||||
---
|
|
||||||
don't like him for reasons, he doesn't care, we investigated the house, found books for you, a bunch of nothing happened. Fight broke out with centipedes (don't know English, eye hurts). We survived the fight, I went to the cellar to grab my bell and we are now in trouble.
|
|
||||||
|
|
|
@ -12,21 +12,60 @@ tags:
|
||||||
- Privacy
|
- Privacy
|
||||||
- Decentralisation
|
- Decentralisation
|
||||||
---
|
---
|
||||||
Much like XMPP[^1], email was designed to be fully decentralised. Individuals can run servers for themselves and maybe some friends and family. As long as they have a public address, they can be contacted.
|
|
||||||
|
Much like XMPP[^1], email was designed to be fully decentralised.
|
||||||
|
Individuals can run servers for themselves and maybe some friends and
|
||||||
|
family. As long as they have a public address, they can be contacted.
|
||||||
|
|
||||||
## History
|
## History
|
||||||
|
|
||||||
## The fundamental problem
|
## The fundamental problem
|
||||||
First and foremost, over all else, Google is an advertising company; their entire business model depends on harvesting user data to more accurately serve you personalised ads. Emails sent and received with Gmail are stored unencrypted on Google's servers[^2]. This allows them to scan the text for keywords and extract data that can be used to build a detailed profile on you. If you've ever gotten an email from someone mentioning something about a mechanical keyboard and, a day or two later, you start seeing ads[^3] about them, that's why.
|
First and foremost, over all else, Google is an advertising company;
|
||||||
|
their entire business model depends on harvesting user data to more
|
||||||
|
accurately serve you personalised ads. Emails sent and received with
|
||||||
|
Gmail are stored unencrypted on Google's servers[^2]. This allows them
|
||||||
|
to scan the text for keywords and extract data that can be used to build
|
||||||
|
a detailed profile on you. If you've ever gotten an email from someone
|
||||||
|
mentioning something about a mechanical keyboard and, a day or two
|
||||||
|
later, you start seeing ads[^3] about them, that's why.
|
||||||
|
|
||||||
This is generally pretty well-known and doesn't bother those who aren't really concerned with privacy. However, these people don't think about how their decision affects people who *do*. In choosing to remain with Gmail, they give it more and more power over the world of this distributed-by-design technology. *It is in Google's interest* to make it difficult for others to interact with the platform.
|
This is generally pretty well-known and doesn't bother those who aren't
|
||||||
|
really concerned with privacy. However, these people don't think about
|
||||||
|
how their decision affects people who *do*. In choosing to remain with
|
||||||
|
Gmail, they give it more and more power over the world of this
|
||||||
|
distributed-by-design technology. *It is in Google's interest* to make
|
||||||
|
it difficult for others to interact with the platform.
|
||||||
|
|
||||||
Consider this. An individual decides he wants to run his own mail server. He sets everything up properly, [SPF](https://en.wikipedia.org/wiki/Sender_Policy_Framework), [DKIM](https://en.wikipedia.org/wiki/DomainKeys_Identified_Mail), [DMARC](https://en.wikipedia.org/wiki/DMARC), [DANE](https://en.wikipedia.org/wiki/DNS-based_Authentication_of_Named_Entities), etc., sets the website and webmail client up with [TLS](https://en.wikipedia.org/wiki/Transport_Layer_Security), implements some form of [email antivirus](https://en.wikipedia.org/wiki/Clam_AntiVirus) and [spam filtration system](https://www.rspamd.com/), basically uses all the standard components for a good email server. He tests it, it works, it's fast, and it's reliable. In his spam testing, his system gets a negative score[^4] and passes all the requirments with flying colours. He decides it's time to reconfigure his web applications to send mail using it rather than his domain registrar's servers. Everything works well for a bit, approximately two weeks.
|
Consider this. An individual decides he wants to run his own mail
|
||||||
|
server. He sets everything up properly,
|
||||||
|
[SPF,](https://en.wikipedia.org/wiki/Sender_Policy_Framework)
|
||||||
|
[DKIM,](https://en.wikipedia.org/wiki/DomainKeys_Identified_Mail)
|
||||||
|
[DMARC,](https://en.wikipedia.org/wiki/DMARC)
|
||||||
|
[DANE,](https://en.wikipedia.org/wiki/DNS-based_Authentication_of_Named_Entities)
|
||||||
|
etc., sets the website and webmail client up with
|
||||||
|
[TLS,](https://en.wikipedia.org/wiki/Transport_Layer_Security)
|
||||||
|
implements some form of [email
|
||||||
|
antivirus](https://en.wikipedia.org/wiki/Clam_AntiVirus) and [spam
|
||||||
|
filtration system,](https://www.rspamd.com/) basically uses all the
|
||||||
|
standard components for a good email server. He tests it, it works, it's
|
||||||
|
fast, and it's reliable. In his spam testing, his system gets a negative
|
||||||
|
score[^4] and passes all the requirments with flying colours. He decides
|
||||||
|
it's time to reconfigure his web applications to send mail using it
|
||||||
|
rather than his domain registrar's servers. Everything works well for a
|
||||||
|
bit, approximately two weeks.
|
||||||
|
|
||||||
**Enter Google.**
|
**Enter Google.**
|
||||||
|
|
||||||
Sayonara sucker. The email giant decides that his services are sending spam and blocks the domain.
|
Sayonara sucker. The email giant decides that his services are sending
|
||||||
|
spam and blocks the domain.
|
||||||
|
|
||||||
[^1]: The e*X*tensible *M*essaging & *P*resence *P*rotocol
|
[^1]: *XMPP* stands for the e*X*tensible *M*essaging & *P*resence
|
||||||
[^2]: For more information on how insecure email is, [read this](https://nixnet.email/docs/privacy-and-opsec/)
|
*P*rotocol. You can be more information about it in [NixNet's
|
||||||
[^3]: I recommend [uBlockOrigin](https://addons.mozilla.org/en-US/firefox/addon/ublock-origin/) for blocking ads
|
documentation.](https://docs.nixnet.services/XMPP)
|
||||||
[^4]: A positive score means emails from there are likely to be marked as spam. A negative score is *good*.
|
[^2]: For more information on how insecure email is, [read
|
||||||
|
this](https://nixnet.email/docs/privacy-and-opsec/)
|
||||||
|
[^3]: I recommend
|
||||||
|
[uBlockOrigin](https://addons.mozilla.org/en-US/firefox/addon/ublock-origin/)
|
||||||
|
for blocking ads
|
||||||
|
[^4]: A positive score means emails from there are likely to be marked
|
||||||
|
as spam. A negative score is *good*.
|
||||||
|
|
|
@ -13,32 +13,71 @@ categories:
|
||||||
cover: /assets/pngs/keyboard.png
|
cover: /assets/pngs/keyboard.png
|
||||||
toc: true
|
toc: true
|
||||||
---
|
---
|
||||||
My first computer was an [Acer C710 Chromebook](https://www.cnet.com/products/acer-c710-2055-chromebook/specs/). There were a *lot* of problems with it but one thing I always appreciated were its dead keys. Until a few days ago, I had *completely* forgotten what the feature was called. Once I figured it out, however, I was able to do some digging and find the answer fairly quickly.
|
|
||||||
|
My first computer was an [Acer C710
|
||||||
|
Chromebook.](https://www.cnet.com/products/acer-c710-2055-chromebook/specs/)
|
||||||
|
There were a *lot* of problems with it but one thing I always
|
||||||
|
appreciated were its dead keys. Until a few days ago, I had *completely*
|
||||||
|
forgotten what the feature was called. Once I figured it out, however, I
|
||||||
|
was able to do some digging and find the answer fairly quickly.
|
||||||
|
|
||||||
## Dead keys
|
## Dead keys
|
||||||
Dead keys[^1] are actually a type of modifier, like `Ctrl` or `Shift`. They allow people to type accented characters that don't appear on their keyboard. For example, I have a US keyboard and there is no enye (the diactric[^2] mark over the ñ) as can be found on Spanish and Latin American layouts.
|
Dead keys[^1] are actually a type of modifier, like `Ctrl` or `Shift`.
|
||||||
|
They allow people to type accented characters that don't appear on their
|
||||||
|
keyboard. For example, I have a US keyboard and there is no enye (the
|
||||||
|
diactric[^2] mark over the ñ) as can be found on Spanish and Latin
|
||||||
|
American layouts.
|
||||||
|
|
||||||
I'm not exactly sure why but dead keys don't have to be held down when you want to use them but they don't; simply strike the dead key then the character you intend to modify and the resulting accented character will be rendered properly.
|
I'm not exactly sure why but dead keys don't have to be held down when
|
||||||
|
you want to use them but they don't; simply strike the dead key then the
|
||||||
|
character you intend to modify and the resulting accented character will
|
||||||
|
be rendered properly.
|
||||||
|
|
||||||
Dead keys allow writers to use far more characters that just the accented ones found in various alphabets. Indeed, one can type a *very* wide variety of symbols:
|
Dead keys allow writers to use far more characters that just the
|
||||||
|
accented ones found in various alphabets. Indeed, one can type a *very*
|
||||||
|
wide variety of symbols:
|
||||||
|
|
||||||
``` text
|
``` text
|
||||||
™ © ® § ¶ ∵ € ¢ ¥ ⅞ x³ ∞ ¬ ÷ ± × ≠ ♪ ♬ ♭ ♮ ♯ → ⇒ ☭ ㉔ ⓐ ß æ ø Œ
|
™ © ® § ¶ ∵ € ¢ ¥ ⅞ x³ ∞ ¬ ÷ ± × ≠ ♪ ♬ ♭ ♮ ♯ → ⇒ ☭ ㉔ ⓐ ß æ ø Œ
|
||||||
```
|
```
|
||||||
|
|
||||||
The full list of all possible combinations (on Linux) can be found in [the documentation from David Monniaux](https://cgit.freedesktop.org/xorg/lib/libX11/plain/nls/en_US.UTF-8/Compose.pre). For a shorter but easier-to-read list, refer to the [GtkComposeTable from Ubuntu](https://help.ubuntu.com/community/GtkComposeTable).
|
The full list of all possible combinations (on Linux) can be found in
|
||||||
|
[the documentation from David
|
||||||
|
Monniaux.](https://cgit.freedesktop.org/xorg/lib/libX11/plain/nls/en_US.UTF-8/Compose.pre)
|
||||||
|
For a shorter but easier-to-read list, refer to the [GtkComposeTable
|
||||||
|
from Ubuntu.](https://help.ubuntu.com/community/GtkComposeTable)
|
||||||
|
|
||||||
## Compose key
|
## Compose key
|
||||||
If you write code *at all*, enabling dead keys alone would be an absolute *nightmare*. To get double quotes, you would have type `"` then `Space` every single time. The same goes for `'`, `:`, `;`, `~`, etc. The compose key[^3] makes this *much* less of an issue. When struck, it indicates that the next few keys (2 or more) are to function as dead keys. With this enabled, you can write code without abusing your space bar but also type résumé[^4] correctly.
|
If you write code *at all*, enabling dead keys alone would be an
|
||||||
|
absolute *nightmare*. To get double quotes, you would have type `"` then
|
||||||
|
`Space` every single time. The same goes for `'`, `:`, `;`, `~`, etc.
|
||||||
|
The compose key[^3] makes this *much* less of an issue. When struck, it
|
||||||
|
indicates that the next few keys (2 or more) are to function as dead
|
||||||
|
keys. With this enabled, you can write code without abusing your space
|
||||||
|
bar but also type résumé[^4] correctly.
|
||||||
|
|
||||||
I have found this absolutely invaluable in my German course. I am able to type something like *Linux ist großartig* without searching "eszet" and copying it from Wikipedia[^5].
|
I have found this absolutely invaluable in my German course. I am able
|
||||||
|
to type something like *Linux ist großartig* without searching "eszet"
|
||||||
|
and copying it from Wikipedia[^5].
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
How you enable dead keys or the compose key depends *entirely* on your operating system. I'm sure most Linux distributions that ship with a DE[^6] like [GNOME](https://www.gnome.org/), [KDE](https://kde.org/), [XFCE](https://xfce.org/), etc. will have a GUI option in the settings. I use [Arch Linux](https://archlinux.org/) with [i3-gaps](https://github.com/Airblader/i3) and thus don't have a GUI to manage these kinds of things. That's where the [Arch Wiki](https://wiki.archlinux.org/index.php/) comes in.
|
How you enable dead keys or the compose key depends *entirely* on your
|
||||||
|
operating system. I'm sure most Linux distributions that ship with a
|
||||||
|
DE[^6] like [GNOME,](https://www.gnome.org/) [KDE,](https://kde.org/)
|
||||||
|
[XFCE,](https://xfce.org/) etc. will have a GUI option in the settings.
|
||||||
|
I use [Arch Linux](https://archlinux.org/) with
|
||||||
|
[i3-gaps](https://github.com/Airblader/i3) and thus don't have a GUI to
|
||||||
|
manage these kinds of things. That's where the [Arch
|
||||||
|
Wiki](https://wiki.archlinux.org/index.php/) comes in.
|
||||||
|
|
||||||
Depending on whether you want dead keys or a compose key, there are different commands to run. I'm not sure how to enable the former—you'll need to read [the page for that](https://wiki.archlinux.org/index.php/Xorg/Keyboard_configuration) yourself—but mapping an existing key to compose is really easy.
|
Depending on whether you want dead keys or a compose key, there are
|
||||||
|
different commands to run. I'm not sure how to enable the former—you'll
|
||||||
|
need to read [the page for
|
||||||
|
that](https://wiki.archlinux.org/index.php/Xorg/Keyboard_configuration)
|
||||||
|
yourself—but mapping an existing key to compose is really easy.
|
||||||
|
|
||||||
List what your options are
|
List what your options are
|
||||||
|
|
||||||
``` text
|
``` text
|
||||||
grep "compose:" /usr/share/X11/xkb/rules/base.lst
|
grep "compose:" /usr/share/X11/xkb/rules/base.lst
|
||||||
```
|
```
|
||||||
|
@ -53,17 +92,40 @@ I mapped mine to the right `Alt` key as I never use it and it's near the space b
|
||||||
setxkbmap -option compose:ralt
|
setxkbmap -option compose:ralt
|
||||||
```
|
```
|
||||||
|
|
||||||
For other interesting things you can do with your keyboard, check [that whole section](https://wiki.archlinux.org/index.php/Xorg/Keyboard_configuration#Frequently_used_XKB_options) of the Arch Wiki. It's really one of the best resources there is for this kind of thing.
|
For other interesting things you can do with your keyboard, check [that
|
||||||
|
whole
|
||||||
|
section](https://wiki.archlinux.org/index.php/Xorg/Keyboard_configuration#Frequently_used_XKB_options)
|
||||||
|
of the Arch Wiki. It's really one of the best resources there is for
|
||||||
|
this kind of thing.
|
||||||
|
|
||||||
## Edit
|
## Edit
|
||||||
Since the time of publication, I've started using [Wayland](https://wayland.freedesktop.org/) and configuring your keyboard with `setxkbmap` doesn't work. Instead, assuming you're running [sway](https://github.com/swaywm/sway/), add something along this vein to your config. If you want to use something other than your right `Alt` key, make sure you change that.
|
Since the time of publication, I've started using
|
||||||
|
[Wayland](https://wayland.freedesktop.org/) and configuring your
|
||||||
|
keyboard with `setxkbmap` doesn't work. Instead, assuming you're running
|
||||||
|
[sway,](https://github.com/swaywm/sway/) add something along this vein
|
||||||
|
to your config. If you want to use something other than your right `Alt`
|
||||||
|
key, make sure you change that.
|
||||||
|
|
||||||
``` text
|
``` text
|
||||||
input type:keyboard xkb_options compose:ralt
|
input type:keyboard xkb_options compose:ralt
|
||||||
```
|
```
|
||||||
|
|
||||||
[^1]: They're called dead keys because, with most keyboards and operating systems, there is no visual indication that it's been struck; the key appears to be dead.
|
[^1]: They're called dead keys because, with most keyboards and
|
||||||
[^2]: [Dictionary.com](https://www.dictionary.com/browse/diacritic?s=t): "*a mark, point, or sign added or attached to a letter or character to distinguish it from another of similar form, to give it a particular phonetic value, to indicate stress, etc.*”
|
operating systems, there is no visual indication that it's been
|
||||||
|
struck; the key appears to be dead.
|
||||||
|
[^2]: [Dictionary.com](https://www.dictionary.com/browse/diacritic?s=t):
|
||||||
|
"*a mark, point, or sign added or attached to a letter or character
|
||||||
|
to distinguish it from another of similar form, to give it a
|
||||||
|
particular phonetic value, to indicate stress, etc.*”
|
||||||
[^3]: Also known as a *multi key*
|
[^3]: Also known as a *multi key*
|
||||||
[^4]: Yes, résumé is the correct spelling. Resume is *accepted* but it's *more* correct with the diacritical[^2] marks.
|
[^4]: Yes, résumé is the correct spelling. Resume is *accepted* but it's
|
||||||
[^5]: I also had to do the same when I wanted to add an [umlaut](https://wikipedia.org/wiki/Diaeresis_(diacritic)) to anything, as in *über*
|
*more* correct with the diacritical[^2] marks.
|
||||||
[^6]: *DE* is short for *Desktop Environment*. If you're not familiar with the term, a DE is basically a suite of applications and programs that make up the interface a computer user interacts with. The dock on macOS, the start menu on Windows, your file manager, these are all examples of *tightly* integrated applications that provide the core functionality of whatever operating system you use.
|
[^5]: I also had to do the same when I wanted to add an
|
||||||
|
[umlaut](https://wikipedia.org/wiki/Diaeresis_(diacritic)) to
|
||||||
|
anything, as in *über*
|
||||||
|
[^6]: *DE* is short for *Desktop Environment*. If you're not familiar
|
||||||
|
with the term, a DE is basically a suite of applications and
|
||||||
|
programs that make up the interface a computer user interacts with.
|
||||||
|
The dock on macOS, the start menu on Windows, your file manager,
|
||||||
|
these are all examples of *tightly* integrated applications that
|
||||||
|
provide the core functionality of whatever operating system you use.
|
||||||
|
|
|
@ -12,32 +12,62 @@ tags:
|
||||||
- 100 Days To Offload
|
- 100 Days To Offload
|
||||||
toc: true
|
toc: true
|
||||||
---
|
---
|
||||||
I've recently decided to attempt to keep all of my notes and everything I've learned in a [Zettelkasten](https://zettelkasten.de/). After reading [Daryl Sun's blog post](https://write.privacytools.io/darylsun/100-days-to-offload-day-4), I started looking more into the method and found it *incredibly* intriguing. I've tried the "Evernote way" of throwing everything I come across in a single place but it inevitable gets lost. I don't remember what it was called but I tried another app that actually tags your files and organises them in a nice manner. This worked well for the most part but the graphical client was badly optimised Electron and *very* heavy. I've also tried keeping notes in books but I was never really able to keep up with any of it. The thing that is especially compelling about a Zettelkasten is that I put *everything* I learn in a single text file but link around to as many different ideas as I can, drawing my *own* connections for me to rediscover later on.
|
|
||||||
|
|
||||||
Because it's all in a simple text file, I'm also able to create a keybinding in [Sway](https://github.com/swaywm/sway/) that will open it in Vim, jump to the bottom, and have a nice markdown environment ready for me to write in. It did take a bit of configuration and looking around for different plugins but I'm very happy with what I have so far.
|
I've recently decided to attempt to keep all of my notes and everything
|
||||||
|
I've learned in a [Zettelkasten.](https://zettelkasten.de/) After
|
||||||
|
reading [Daryl Sun's blog
|
||||||
|
post,](https://write.privacytools.io/darylsun/100-days-to-offload-day-4)
|
||||||
|
I started looking more into the method and found it *incredibly*
|
||||||
|
intriguing. I've tried the "Evernote way" of throwing everything I come
|
||||||
|
across in a single place but it inevitable gets lost. I don't remember
|
||||||
|
what it was called but I tried another app that actually tags your files
|
||||||
|
and organises them in a nice manner. This worked well for the most part
|
||||||
|
but the graphical client was badly optimised Electron and *very* heavy.
|
||||||
|
I've also tried keeping notes in books but I was never really able to
|
||||||
|
keep up with any of it. The thing that is especially compelling about a
|
||||||
|
Zettelkasten is that I put *everything* I learn in a single text file
|
||||||
|
but link around to as many different ideas as I can, drawing my *own*
|
||||||
|
connections for me to rediscover later on.
|
||||||
|
|
||||||
|
Because it's all in a simple text file, I'm also able to create a
|
||||||
|
keybinding in [Sway](https://github.com/swaywm/sway/) that will open it
|
||||||
|
in Vim, jump to the bottom, and have a nice markdown environment ready
|
||||||
|
for me to write in. It did take a bit of configuration and looking
|
||||||
|
around for different plugins but I'm very happy with what I have so far.
|
||||||
|
|
||||||
The first thing is telling Vim to treat all `.md` files as Markdown
|
The first thing is telling Vim to treat all `.md` files as Markdown
|
||||||
|
|
||||||
``` vim
|
``` vim
|
||||||
" Treat all .md files as markdown
|
" Treat all .md files as markdown
|
||||||
autocmd BufNewFile,BufRead *.md set filetype=markdown
|
autocmd BufNewFile,BufRead *.md set filetype=markdown
|
||||||
```
|
```
|
||||||
|
|
||||||
## Visuals
|
## Visuals
|
||||||
In a long text file with a great many lines, it can be useful to find your cursor quickly without having to search around the screen for it.
|
In a long text file with a great many lines, it can be useful to find
|
||||||
|
your cursor quickly without having to search around the screen for it.
|
||||||
|
|
||||||
``` vim
|
``` vim
|
||||||
" Highlight the line the cursor is on
|
" Highlight the line the cursor is on
|
||||||
autocmd FileType markdown set cursorline
|
autocmd FileType markdown set cursorline
|
||||||
```
|
```
|
||||||
|
|
||||||
It can also be nice to not see a ton of \[links](https\://example.com) and \*\*bold** or \*italic* text everywhere. Sure, my eye has gotten used to it but still. I'd rather have my terminal actually render bold text as bold.
|
It can also be nice to not see a ton of \[links](https\://example.com)
|
||||||
|
and \*\*bold** or \*italic* text everywhere. Sure, my eye has gotten
|
||||||
|
used to it but still. I'd rather have my terminal actually render bold
|
||||||
|
text as bold.
|
||||||
|
|
||||||
``` vim
|
``` vim
|
||||||
" Hide and format markdown elements like **bold**
|
" Hide and format markdown elements like **bold**
|
||||||
autocmd FileType markdown set conceallevel=2
|
autocmd FileType markdown set conceallevel=2
|
||||||
```
|
```
|
||||||
|
|
||||||
If you use the `vim-markdown` plugin mentioned further on, I recommend using its option for concealing rather than Vim's.
|
If you use the `vim-markdown` plugin mentioned further on, I recommend using its option for concealing rather than Vim's.
|
||||||
|
|
||||||
## Spell check
|
## Spell check
|
||||||
One of the things every good editor needs is spell check and Vim is no exception. This line enables spell check with British English for all markdown files.
|
One of the things every good editor needs is spell check and Vim is no
|
||||||
|
exception. This line enables spell check with British English for all
|
||||||
|
markdown files.
|
||||||
|
|
||||||
``` vim
|
``` vim
|
||||||
" Set spell check to British English
|
" Set spell check to British English
|
||||||
autocmd FileType markdown setlocal spell spelllang=en_gb
|
autocmd FileType markdown setlocal spell spelllang=en_gb
|
||||||
|
@ -50,19 +80,33 @@ Here's a short crash course in Vim spelling commands:
|
||||||
- `zg` to add the word to your dictionary
|
- `zg` to add the word to your dictionary
|
||||||
|
|
||||||
## Goyo
|
## Goyo
|
||||||
The very first component is something I use across *all* markdown files. [Goyo](https://github.com/junegunn/goyo.vim) is one of the first plugins I install on any machine I'll be writing with. It enables a "distraction-free writing environment" and I absolutely love it. It disables pretty much all visual elements in Vim except for what mode you're in: visual, command, insert, etc. I have a keybinding set to quickly open/close Goyo because there is an odd issue when I switch workspaces to and away from Vim. With two taps of `Ctrl+g`, it's back to normal.
|
The very first component is something I use across *all* markdown files.
|
||||||
|
[Goyo](https://github.com/junegunn/goyo.vim) is one of the first plugins
|
||||||
|
I install on any machine I'll be writing with. It enables a
|
||||||
|
"distraction-free writing environment" and I absolutely love it. It
|
||||||
|
disables pretty much all visual elements in Vim except for what mode
|
||||||
|
you're in: visual, command, insert, etc. I have a keybinding set to
|
||||||
|
quickly open/close Goyo because there is an odd issue when I switch
|
||||||
|
workspaces to and away from Vim. With two taps of `Ctrl+g`, it's back to
|
||||||
|
normal.
|
||||||
|
|
||||||
``` vim
|
``` vim
|
||||||
nnoremap <C-g> :Goyo<CR>
|
nnoremap <C-g> :Goyo<CR>
|
||||||
```
|
```
|
||||||
|
|
||||||
Another line in my Vim config automatically opens Goyo for all markdown files:
|
Another line in my Vim config automatically opens Goyo for all markdown
|
||||||
|
files:
|
||||||
|
|
||||||
``` vim
|
``` vim
|
||||||
autocmd FileType markdown Goyo
|
autocmd FileType markdown Goyo
|
||||||
```
|
```
|
||||||
|
|
||||||
## vim-markdown
|
## vim-markdown
|
||||||
That latest plugin I installed is [vim-markdown](https://github.com/plasticboy/vim-markdown) and it is *wonderful*. I really recommend reading about all of the options but here's what I have set.
|
That latest plugin I installed is
|
||||||
|
[vim-markdown](https://github.com/plasticboy/vim-markdown) and it is
|
||||||
|
*wonderful*. I really recommend reading about all of the options but
|
||||||
|
here's what I have set.
|
||||||
|
|
||||||
``` vim
|
``` vim
|
||||||
" Configuration for vim-markdown
|
" Configuration for vim-markdown
|
||||||
let g:vim_markdown_conceal = 2
|
let g:vim_markdown_conceal = 2
|
||||||
|
@ -76,10 +120,16 @@ let g:vim_markdown_edit_url_in = 'tab'
|
||||||
let g:vim_markdown_follow_anchor = 1
|
let g:vim_markdown_follow_anchor = 1
|
||||||
```
|
```
|
||||||
|
|
||||||
In addition to the rest of the awesome features, the main one I wanted is the last: `follow_anchor`. With this, I can create internal links within the same markdown document and jump between them with `ge`. It also lets me open both files and URLs from within Vim and without ever having to reach for the mouse.
|
In addition to the rest of the awesome features, the main one I wanted
|
||||||
|
is the last: `follow_anchor`. With this, I can create internal links
|
||||||
|
within the same markdown document and jump between them with `ge`. It
|
||||||
|
also lets me open both files and URLs from within Vim and without ever
|
||||||
|
having to reach for the mouse.
|
||||||
|
|
||||||
## General Vim things
|
## General Vim things
|
||||||
Other, more general Vim settings that I use globally but might also be nice for editing markdown
|
Other, more general Vim settings that I use globally but might also be
|
||||||
|
nice for editing markdown
|
||||||
|
|
||||||
``` vim
|
``` vim
|
||||||
" Have lines wrap instead of continue off-screen
|
" Have lines wrap instead of continue off-screen
|
||||||
set linebreak
|
set linebreak
|
||||||
|
@ -105,19 +155,31 @@ set mouse=
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
In all, I'm hoping that the work I've done today for improving my markdown workflow will help me create a more effective Zettelkasten. The *big* thing was really being able to follow internal links around because that's the main thing with keeping a Zettelkasten: following your ideas to see where they lead and discovering what connections you can make to form entirely new ideas. Mine will be stored in [Gitea](https://git.nixnet.xyz/Amolith/zettelkasten) for now but I'm thinking about putting it here at some point. It would be cool to have a map of my own mind very easily accessible from anywhere.
|
In all, I'm hoping that the work I've done today for improving my
|
||||||
|
markdown workflow will help me create a more effective Zettelkasten. The
|
||||||
|
*big* thing was really being able to follow internal links around
|
||||||
|
because that's the main thing with keeping a Zettelkasten: following
|
||||||
|
your ideas to see where they lead and discovering what connections you
|
||||||
|
can make to form entirely new ideas. Mine will be stored in
|
||||||
|
[Gitea](https://git.nixnet.xyz/Amolith/zettelkasten) for now but I'm
|
||||||
|
thinking about putting it here at some point. It would be cool to have a
|
||||||
|
map of my own mind very easily accessible from anywhere.
|
||||||
|
|
||||||
![screenshot of my setup](/assets/jpgs/zettelkasten.jpg)
|
![screenshot of my setup](/assets/jpgs/zettelkasten.jpg)
|
||||||
|
|
||||||
## Edit
|
## Edit
|
||||||
### Time stamps
|
### Time stamps
|
||||||
|
|
||||||
``` vim
|
``` vim
|
||||||
" Insert timestamp at the end of the line in this format: 20200527T113245
|
" Insert timestamp at the end of the line in this format: 20200527T113245
|
||||||
nnoremap <C-t><C-s> m'A<C-R>=strftime('%Y%m%dT%H%M%S')<CR>
|
nnoremap <C-t><C-s> m'A<C-R>=strftime('%Y%m%dT%H%M%S')<CR>
|
||||||
```
|
```
|
||||||
|
|
||||||
### Portable `autocmd`s
|
### Portable `autocmd`s
|
||||||
Put all the `autocmd` lines in the `if` statement so they don't throw errors when the config is added to a version of vim without `autocmd` support
|
Put all the `autocmd` lines in the `if` statement so they don't throw
|
||||||
|
errors when the config is added to a version of vim without `autocmd`
|
||||||
|
support
|
||||||
|
|
||||||
``` vim
|
``` vim
|
||||||
" Only enable autocommands when Vim supports them
|
" Only enable autocommands when Vim supports them
|
||||||
if has("autocmd")
|
if has("autocmd")
|
||||||
|
@ -136,8 +198,15 @@ if has("autocmd")
|
||||||
endif
|
endif
|
||||||
```
|
```
|
||||||
|
|
||||||
I won't keep editing this post to provide updates on my config. Instead, I recommend looking at my ["production" version on Gitea](https://git.nixnet.xyz/Amolith/dotfiles/src/branch/master/dotfiles/pc/.config/nvim/init.vim).
|
I won't keep editing this post to provide updates on my config. Instead,
|
||||||
|
I recommend looking at my ["production" version on
|
||||||
|
Gitea.](https://git.nixnet.xyz/Amolith/dotfiles/src/branch/master/dotfiles/pc/.config/nvim/init.vim)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
This was posted as part of [#100DaysToOffload](https://100daystooffload.com/), an [awesome idea](https://fosstodon.org/@kev/104053977554016690) from [Kev Quirk](https://kevq.uk/). If you want to participate, just write something every day for 100 days and post a link on social media with the hashtag!
|
This was posted as part of
|
||||||
|
[#100DaysToOffload,](https://100daystooffload.com/) an [awesome
|
||||||
|
idea](https://fosstodon.org/@kev/104053977554016690) from [Kev
|
||||||
|
Quirk.](https://kevq.uk/) If you want to participate, just write
|
||||||
|
something every day for 100 days and post a link on social media with
|
||||||
|
the hashtag!
|
||||||
|
|
|
@ -11,21 +11,92 @@ tags:
|
||||||
- Indian Summer
|
- Indian Summer
|
||||||
- Lord of the Rings
|
- Lord of the Rings
|
||||||
---
|
---
|
||||||
The Lord of the Rings is one the greatest book series I have ever read as well as one of my favourite movie trilogies; when I was younger, I watched them so often that I knew *almost* exactly where all the scenes were in the timeline and could quote a fair few of the lines verbatim 😉 Pipe smoking was very prominent throughout, from the hobbits to the humans to the dwarves, and I was always intrigued by it. In my second year of high school/college[^1], I took a public speaking course and decided to do my persuasive speech on the topic; my purpose was not to convince people *to* smoke a pipe, rather that they shouldn't judge pipe smokers as harshly. In conducting my research, I ended up wanting to try it for myself.
|
|
||||||
|
|
||||||
Another influence was likely my grandfather. I don't remember it *particularly* well other than a few scattered images here and there but I do know he smoked everything from cigarettes to cigars, cigarillos, and pipes. A few days ago, my grandmother commented on my pipe stand and said he had had one very similar before his stroke[^2].
|
The Lord of the Rings is one the greatest book series I have ever read
|
||||||
|
as well as one of my favourite movie trilogies; when I was younger, I
|
||||||
|
watched them so often that I knew *almost* exactly where all the scenes
|
||||||
|
were in the timeline and could quote a fair few of the lines verbatim 😉
|
||||||
|
Pipe smoking was very prominent throughout, from the hobbits to the
|
||||||
|
humans to the dwarves, and I was always intrigued by it. In my second
|
||||||
|
year of high school/college,[^1] I took a public speaking course and
|
||||||
|
decided to do my persuasive speech on the topic; my purpose was not to
|
||||||
|
convince people *to* smoke a pipe, rather that they shouldn't judge pipe
|
||||||
|
smokers as harshly. In conducting my research, I ended up wanting to try
|
||||||
|
it for myself.
|
||||||
|
|
||||||
Shortly after my 18th birthday, I ordered [my first corn cob pipe](https://corncobpipe.com/missouri-pride-corncob-pipe.html) from [Missouri Meerschaum](https://corncobpipe.com/) and ended up falling in love. I went to my local tobacconist and asked what he recommended for someone who was just getting into it. He suggested two blends I think they created in-house; one was an aromatic[^3] called *Indian Summer* and the other was an English[^3] which I've forgotten the name of.
|
Another influence was likely my grandfather. I don't remember it
|
||||||
|
*particularly* well other than a few scattered images here and there but
|
||||||
|
I do know he smoked everything from cigarettes to cigars, cigarillos,
|
||||||
|
and pipes. A few days ago, my grandmother commented on my pipe stand and
|
||||||
|
said he had had one very similar before his stroke.[^2]
|
||||||
|
|
||||||
The first one I tried was Indian Summer as people typically start with an aromatic. It's sort of like drinking beer before brandy (I've never had brandy so I don't know what it actually tastes like); the former is palatable to most while the latter is an acquired taste. The flavour was a little odd but I enjoyed it nonetheless. The English on the other hand . . . suffice it to say[^4] that my palate hadn't (and still hasn't) developed that far. When I open the jar, my nose is assaulted with a smell reminiscent of burning rubber; it's very sharp and acrid. Other than smelling it and promptly deciding to leave it for another day, that blend has stayed in the same jar since I made the purchase.
|
Shortly after my 18th birthday, I ordered [my first corn cob
|
||||||
|
pipe](https://corncobpipe.com/missouri-pride-corncob-pipe.html) from
|
||||||
|
[Missouri Meerschaum](https://corncobpipe.com/) and ended up falling in
|
||||||
|
love. I went to my local tobacconist and asked what he recommended for
|
||||||
|
someone who was just getting into it. He suggested two blends I think
|
||||||
|
they created in-house; one was an aromatic[^3] called *Indian Summer*
|
||||||
|
and the other was an English[^3] which I've forgotten the name of.
|
||||||
|
|
||||||
The pipe I started with, the [Missouri Pride](https://corncobpipe.com/missouri-pride-corncob-pipe.html), is one that pretty much every podcast, blog post, and tutorial recommends. There's no reason to pay over $100 for an artisan pipe when you can get a feel for the hobby spending less than $15 including tobacco, tamper, and pipe cleaners. It wasn't a *stellar* experience but I would certainly recommend it to anyone that's curious; corn cob pipes are the best way to see if you'll enjoy the activity. In addition, many pipe smokers still buy cobs because of their low price. You can take one out with you and, if you drop and break it, you're really not out that much. My [Emerald](https://corncobpipe.com/the-emerald-corn-cob-pipe) is supposed to get here sometime tomorrow (I know that website is down at the moment; I'll edit this and add a picture or two once the pipe arrives).
|
The first one I tried was Indian Summer as people typically start with
|
||||||
|
an aromatic. It's sort of like drinking beer before brandy (I've never
|
||||||
|
had brandy so I don't know what it actually tastes like); the former is
|
||||||
|
palatable to most while the latter is an acquired taste. The flavour was
|
||||||
|
a little odd but I enjoyed it nonetheless. The English on the other hand
|
||||||
|
. . . suffice it to say[^4] that my palate hadn't (and still hasn't)
|
||||||
|
developed that far. When I open the jar, my nose is assaulted with a
|
||||||
|
smell reminiscent of burning rubber; it's very sharp and acrid. Other
|
||||||
|
than smelling it and promptly deciding to leave it for another day, that
|
||||||
|
blend has stayed in the same jar since I made the purchase.
|
||||||
|
|
||||||
One of my favourite aspects of smoking a pipe is the "ritual" associated with it. You pick which pipe you're in the mood for, select the tobacco, go through the stages of packing the bowl, striking the "false light"[^5], letting it go out, tamping it down again, striking the "true light", and then, finally, sitting back to enjoy the flavour whilst reading a good book. It's one of the most relaxing hobbies I've ever had. Another aspect I appreciate is the *rich* history and tradition associated with pipe smoking. I may discuss this further in another post but, for now, I'll say that tradition and history are *incredibly* important to me.[^6]
|
The pipe I started with, the [Missouri
|
||||||
|
Pride,](https://corncobpipe.com/missouri-pride-corncob-pipe.html) is one
|
||||||
|
that pretty much every podcast, blog post, and tutorial recommends.
|
||||||
|
There's no reason to pay over $100 for an artisan pipe when you can get
|
||||||
|
a feel for the hobby spending less than $15 including tobacco, tamper,
|
||||||
|
and pipe cleaners. It wasn't a *stellar* experience but I would
|
||||||
|
certainly recommend it to anyone that's curious; corn cob pipes are the
|
||||||
|
best way to see if you'll enjoy the activity. In addition, many pipe
|
||||||
|
smokers still buy cobs because of their low price. You can take one out
|
||||||
|
with you and, if you drop and break it, you're really not out that much.
|
||||||
|
My [Emerald](https://corncobpipe.com/the-emerald-corn-cob-pipe) is
|
||||||
|
supposed to get here sometime tomorrow (I know that website is down at
|
||||||
|
the moment; I'll edit this and add a picture or two once the pipe
|
||||||
|
arrives).
|
||||||
|
|
||||||
[^1]: I attended an Early College; I was taking college courses *instead of* some high school courses yet getting credit for both. I ended up going to high school for five years and coming out with three Associate Degrees.
|
One of my favourite aspects of smoking a pipe is the "ritual" associated
|
||||||
[^2]: When I was 7 or 8, he had a severe stroke due to a blood clot likely caused by how often he smoked. He spent the next 9 years paralysed on his left side and wheelchair-bound.
|
with it. You pick which pipe you're in the mood for, select the tobacco,
|
||||||
[^3]: You can read about the different styles and flavours of pipe tobacco at the [Pipedia](https://pipedia.org/wiki/Pipe_Tobaccos), a fantastic resource on pipe smoking.
|
go through the stages of packing the bowl, striking the "false
|
||||||
[^4]: [Dictionary.com](https://www.dictionary.com/browse/suffice-it-to-say): "It is enough to say this and no more, as in *Suffice it to say that the judge was furious when the invitation was withdrawn.*"
|
light",[^5] letting it go out, tamping it down again, striking the "true
|
||||||
[^5]: When you're lighting a pipe, you first put the flame to the tobacco and move it around the bowl trying to evenly "toast" it, all the while drawing the flame down further by sucking as you would on a straw (*not* inhaling). After doing this for 15-20 seconds, you stop and let the flame die. The tobacco will fluff up from the heat (like when lighting any other fire with tinder) so you tamp it back down. The next time you light it, it will stay lit. This is the "true light".
|
light", and then, finally, sitting back to enjoy the flavour whilst
|
||||||
[^6]: Because this is my blog and I don't have to conform to any academic standards, I'm ending it here. Goodbye and thanks for reading 😁
|
reading a good book. It's one of the most relaxing hobbies I've ever
|
||||||
|
had. Another aspect I appreciate is the *rich* history and tradition
|
||||||
|
associated with pipe smoking. I may discuss this further in another post
|
||||||
|
but, for now, I'll say that tradition and history are *incredibly*
|
||||||
|
important to me.[^6]
|
||||||
|
|
||||||
|
[^1]: I attended an Early College; I was taking college courses *instead
|
||||||
|
of* some high school courses yet getting credit for both. I ended up
|
||||||
|
going to high school for five years and coming out with three
|
||||||
|
Associate Degrees.
|
||||||
|
[^2]: When I was 7 or 8, he had a severe stroke due to a blood clot
|
||||||
|
likely caused by how often he smoked. He spent the next 9 years
|
||||||
|
paralysed on his left side and wheelchair-bound.
|
||||||
|
[^3]: You can read about the different styles and flavours of pipe
|
||||||
|
tobacco at the [Pipedia](https://pipedia.org/wiki/Pipe_Tobaccos), a
|
||||||
|
fantastic resource on pipe smoking.
|
||||||
|
[^4]:
|
||||||
|
[Dictionary.com](https://www.dictionary.com/browse/suffice-it-to-say):
|
||||||
|
"It is enough to say this and no more, as in *Suffice it to say that
|
||||||
|
the judge was furious when the invitation was withdrawn.*"
|
||||||
|
[^5]: When you're lighting a pipe, you first put the flame to the
|
||||||
|
tobacco and move it around the bowl trying to evenly "toast" it, all
|
||||||
|
the while drawing the flame down further by sucking as you would on
|
||||||
|
a straw (*not* inhaling). After doing this for 15-20 seconds, you
|
||||||
|
stop and let the flame die. The tobacco will fluff up from the heat
|
||||||
|
(like when lighting any other fire with tinder) so you tamp it back
|
||||||
|
down. The next time you light it, it will stay lit. This is the
|
||||||
|
"true light".
|
||||||
|
[^6]: Because this is my blog and I don't have to conform to any
|
||||||
|
academic standards, I'm ending it here. Goodbye and thanks for
|
||||||
|
reading 😁
|
||||||
|
|
Loading…
Reference in New Issue