Begin le blog

This commit is contained in:
mcneb10 2024-06-23 23:55:59 -05:00
commit fffd548947
25 changed files with 606 additions and 0 deletions

3
.gitignore vendored Normal file
View file

@ -0,0 +1,3 @@
deploy
.hugo_build.lock
/public/

3
.gitmodules vendored Normal file
View file

@ -0,0 +1,3 @@
[submodule "themes/no-js-hugo-theme"]
path = themes/no-js-hugo-theme
url = https://github.com/stevenengler/no-js-hugo-theme.git

5
archetypes/default.md Normal file
View file

@ -0,0 +1,5 @@
+++
title = '{{ replace .File.ContentBaseName "-" " " | title }}'
date = {{ .Date }}
draft = true
+++

41
content/_index.md Normal file
View file

@ -0,0 +1,41 @@
+++
title = 'Home'
[menu.main]
weight = 100
+++
Welcome to my blog. This is where I (mcneb10) will post stuff I find interesting or my interpretations and opinions on current events.
> The stairs go on forever.
>
> They could be steel.
> They could be stone.
> They could even be paper.
>
> Are they leading up or down?
>
> &mdash; <cite>Yukihiro Takahashi</cite>
You'll never know who or what you can truly rely on.
Always have a backup plan and never put all trust into one entity.
On this site I run various open source services I find useful, the public ones being (all regs are currently closed):
- [Email Server](https://mail.themcgovern.net)
- [Git](https://git.themcgovern.net)
- Monero Node
- [Peertube](https://peertube.themcgovern.net)
- [XMPP Server](https://themcgovern.net:5281/conversejs)
Planned Services:
- Other Crypto Nodes
- SearxNG + Open Source frontends?
- Fedi stuff
- A lot more
### Webrings
Dinhe: [Previous](https://webring.dinhe.net/prev/https://themcgovern.net) [Random](https://webring.dinhe.net/random) [Next](https://webring.dinhe.net/next/https://themcgovern.net)
{{<raw_html>}}
<a style="display: none;" rel="me" href="https://mstdn.social/@mcneb10">Mastodon</a>
{{</raw_html>}}

21
content/badges.md Normal file
View file

@ -0,0 +1,21 @@
+++
title = 'Badges'
menu = 'main'
+++
# Friends
Nobody for now...
# People's sites I found interesting
[![Ari::Web](/badges/ariweb.png)](https://ari.lt)
[![Array in a Matrix](/badges/array_in_a_matrix.gif)](https://arrayinamatrix.xyz)
[![georgemoody](/badges/georgemoody.png)](https://tilde.town/~georgemoody/)
[![ethereal](/badges/fsky.png)](https://fsky.io/)
[![LDA](/badges/lda.png)](https://freetards.xyz/)
[Nihilist](https://nihilism.network)
[PurpleBored](https://purplebored.pl)
# My 88x31s
[![mcneb10 YMO](/badges/mcneb10_ymo.gif)](https://themcgovern.net)
[![mcneb10 CC](/badges/mcneb10_cc.gif)](https://themcgovern.net)

61
content/contact.md Normal file
View file

@ -0,0 +1,61 @@
+++
menu = 'main'
title = 'Contact'
+++
{{<raw_html>}}
Here are some ways you can contact me (<span id='name_var'>mcneb10</span>)
<br><br>
<s>Email<span id='inst'> (interpolate)</span>: <span id='e_address'>${NAME_IN_PARENTHESIS}@themcgovern.net</span></s> Doesn't work, screw LMTP, port 25 blocks, and the email mafia.
<br>
<a rel="me" href="https://mstdn.social/@mcneb10">Mastodon</a>
<br>
Matrix: <span id='matrix_user'>@${NAME_IN_PARENTHESIS}:envs.net</span>
<br>
Nostr: <span id='nostr'>${NAME_IN_PARENTHESIS}@themcgovern.net</span>
<br>
XMPP (preferred, use E2E): <span id='xmpp_jid'>${NAME_IN_PARENTHESIS}@themcgovern.net</span>
<br>
<script>
//document.addEventListener('load', function() {
var n = document.getElementById('name_var').innerHTML;
var ac = document.getElementById('e_address').innerHTML;
var mu = document.getElementById('matrix_user').innerHTML;
var e = ac.replace('${NAME_IN_PARENTHESIS}', n);
var m = mu.replace('${NAME_IN_PARENTHESIS}', n);
document.getElementById('xmpp_jid').innerHTML = document.getElementById('xmpp_jid').innerHTML.replace('${NAME_IN_PARENTHESIS}', n);
document.getElementById('inst').remove();
document.getElementById('e_address').innerHTML = '<a href=\'mailto:' + e + '\'>' + e + '</a>';
document.getElementById('matrix_user').innerHTML = '<a href=\'https://matrix.to/#/' + m + '\'>' + m + '</a>';
document.getElementById('nostr').innerHTML = document.getElementById('nostr').innerHTML.replace('${NAME_IN_PARENTHESIS}', n);
//});
</script>
{{</raw_html>}}
[GitHub](https://github.com/mcneb10/)
Notice a pattern here?
{{<details "PGP Public Key">}}
```
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEZjauQBYJKwYBBAHaRw8BAQdAUWQ8DzVjcE4dxgLybTNcv5TG1wPCNwLXMIe8
IdnigR+0IW1jbmViMTAgPG1jbmViMTBAdGhlbWNnb3Zlcm4ubmV0PoiZBBMWCgBB
AhsDBQsJCAcCAiICBhUKCQgLAgQWAgMBAh4HAheAFiEEGU/PhNqNdMjo4IUx+zSF
9X8P4uIFAmY2r/kFCQlmAzkACgkQ+zSF9X8P4uLvlgEAx/i7LrFQRq0hVlaNno6T
ietWwb8NSxhF2alkNAMlls0A/3sFyFSCt49tIO5Ub9Whe8PkO6ZfSPh33Ocv3EgS
VscPuDgEZjauQBIKKwYBBAGXVQEFAQEHQLKCruyWiyC+rQK0OKvnOq/josAUMBWg
afkYBfGwYYAMAwEIB4h+BBgWCgAmAhsMFiEEGU/PhNqNdMjo4IUx+zSF9X8P4uIF
AmY2sDQFCQlnttMACgkQ+zSF9X8P4uL49QEAyVfJv2qhCeL772xRc++WmasMLGZJ
dB2cI+mQj/0lu9UA/RhUPhgtGErbBEPQNN6aIRkQ8UeNdbA7Uey5IsarE38G
=DTTq
-----END PGP PUBLIC KEY BLOCK-----
```
{{</details>}}

10
content/donate.md Normal file
View file

@ -0,0 +1,10 @@
+++
title = 'Donate'
menu = 'main'
+++
If you want to support me or what I do, please consider flipping some coins my way through one of the accepted method(s):
Monero address: [`{{<param "donate.monero">}}`](monero:{{<param "donate.monero">}}?recipient_name=mcneb10)
You can also do OpenAlias with the `themcgovern.net` domain

16
content/links.md Normal file
View file

@ -0,0 +1,16 @@
+++
title = 'Links'
menu = 'main'
+++
# Useful onion services
|Link|Description|
|-|-|
|[~vern](http://vernccvbvyi5qhfzyqengccj7lkove6bjot2xhh5kajhwvidqafczrad.onion/)|Tilde services|
|[KYCnot.me](http://kycnotmezdiftahfmc34pqbpicxlnx3jbf5p7jypge7gdvduu7i6qjqd.onion/)|Non-KYC services|
|[Kyunhost](http://kyunnnckhnkl6oevonhwbltenwbgxwxf54mcpvmicphmaeqr5ourgqyd.onion/)|Private VPS service|
|[Mullvad](http://o54hon2e2vj6c7m3aqqu6uyece65by3vgoxxhlqlsvkmacw6a7m7kiad.onion/)|Privacy respecting VPN service|
|[OpenPGP.org key server](http://zkaan2xfbuxia2wpf7ofnkbz6r5zdbbvxbunvp5g2iebopbfc4iqmbad.onion/)|Server for storing PGP keys|
|[QubesOS](http://qubesosfasa4zl44o4tws22di6kepyzfeqv3tg4e3ztknltfxqrymdad.onion)|Comparmentalized, very private and secure OS|
|[SporeStack](http://spore64i5sofqlfz5gq2ju4msgzojjwifls7rok2cti624zyq3fcelad.onion/)|Non-KYC VPS|

View file

@ -0,0 +1,126 @@
+++
title = 'Command Line Call'
date = 2024-05-27T20:15:23-05:00
draft = true
+++
# Calling from the command line
I was thinking about setting up Jitsi recently and have been researching internet audio and video calling.
# One to one example code
```bash
# Record audio and send it to whatever's listening on 127.0.0.1:6969
arecord -f S16 -r 48000 - | nc -u 127.0.0.1 6969
# Receive audio from port 6969 and play it
nc -lvp 6969 | aplay -f S16 -r 48000 -
```
# Multiple people chat example
## Client(s)
```bash
# Record audio and send it to whatever's listening on 127.0.0.1:6969
#arecord -f S16 -r 48000 - | nc -u 127.0.0.1 6969
# Receive audio from port 6969 and play it
#nc -u <server> 6970 | aplay -f S16 -r 48000 -
arecord -f S16 -r 48000 - | nc -u <server> 6969 | aplay -f S16 -r 48000 -
```
## Server
```perl
#!/usr/bin/env perl
use v5.36;
use IO::Socket::INET;
use Time::HiRes 'gettimeofday';
my $listen_addr = "0.0.0.0";
my $port = 6969;
my $udp_max_datagram_size = 65535;
my $sample_rate = 48000;
my $sample_template = "s";
my $last_time;
my $buffer;
sub fit_together($audio_in) {
my @temp1 = unpack "$sample_template*", $buffer;
my @temp2 = unpack "$sample_template*", $audio_in;
my $time_diff = gettimeofday() - $last_time;
my $sample_skip = floor($time_diff * $sample_rate);
@temp1 = @temp1[ $sample_skip .. $#temp1 ];
while ($#temp1 < $#temp2) {
push @temp1, 0;
}
while ($#temp2 < $#temp1) {
push @temp2, 0;
}
$last_time = gettimeofday();
return (@temp1, @temp2);
}
sub process_audio_in($peer, $audio_in) {
if(not $last_time) {
$last_time = gettimeofday();
$buffer = $audio_in;
} else {
my (@temp1, @temp2) = fit_together($audio_in);
$buffer = pack "$sample_template*",
map {
my $addition = $temp1[$_]+$temp2[$_];
if($addition > $sample_max) {
$sample_max
} elsif($addition < $sample_min) {
$sample_min
} else {
$addition
}
} 0..$#temp1;
}
}
my $sock = IO::Socket::INET->new(
LocalAddr => "$listen_addr:$port",
Proto => "udp"
) or die "INET Socket no work :( $@";
say "Listening for clients on addr $listen_addr:$port";
while("humanity" != "extinct") {
my $audio_data_in = eval {
$sock->recv($udp_max_datagram_size) or die "INET Socket recv() fail: $!";
};
if ($@) {
say "Peer ".$sock->peername." sent invalid request, skipping: $@";
next;
}
process_audio($sock->peername, $audio_data_in);
eval {
$sock->send($buffer, $#next_packet) or die "INET Socket recv() fail: $!";
}
if ($@) {
say "Failed to send audio packet to ".$sock->peername.": $@";
}
}
```
The issue with this is that it's not private or anonymous. My attempts to tackle these issues is detailed below:
# Making it secure
Anonymity and privacy can be easily added by simply running nc with `torsocks` on the sending end and running `nc` behind `tor` on the receiving end. i2p could also probably be used for this.
```bash
arecord -f S16 -r 48000 - | torsocks nc example.onion 6969
```
The audio will be anonymous due to tor's design. The audio will also be encrypted by the hidden service tunnel.
# Authentication
TOR Access Keys

View file

@ -0,0 +1,31 @@
+++
title = 'First Post'
date = 2024-05-04T16:18:58-05:00
draft = false
toc = true
+++
## Hello!
This is my cool site where I will post stuff. This site is generated by Hugo with the theme `no-js-hugo-theme`.
## Some useful tools
Here are some cool things that I have been messing with lately
### Get IP from command line
```bash
curl "https://api.ipify.org"
```
Outputs IP as `x.x.x.x` on a new line
### Play radio stations
If you have the call sign of a broadcasting radio station, you can play it by `mpv`ing the URL.
Example using classical station with the call sign `KUSC`
```bash
mpv "https://provisioning.streamtheworld.com/pls/KUSC.pls"
```

View file

@ -0,0 +1,68 @@
+++
title = 'Lightning Has No Thunder'
date = 2024-06-13T20:30:56-05:00
+++
# Bitcoin Lightning
Bitcoin Lightning is a L2 network of (a network built on top of) Bitcoin that tries to solve some of the issues associated with Bitcoin[^1]. It is very popular with Bitcoiners and Nostr users, being a part of the Nostr protocol and it's culture [^2]. Why? That's a good question as it's pretty subpar compared to other cryptocurrencies. This will be explored in the article
# The Many Flaws of Bitcoin
We all know Bitcoin. It's the original and still to this day most popular cryptocurrency. It's a monumental piece of software and one of the most pivotal projects of this age, providing the foundations for most modern cryptocurrencies[^3]. Despite this, it's just a stepping stone of a greater movement, which some people haven't moved on from.
## Mining
Bitcoin uses the sha256 hashing algorithm for it's Proof of Work algorithm to validate transactions[^4]. sha256's algorithm was easily adapted to ASICs (Application Specific Integrated Circuits), which in this case are devices which their sole purpose is to efficiently mine and do so better than any computer[^5]. These devices are very expensive, resulting in the centralization of mining power as these mining operations require investment from the wealthy. If one entity were to gain more than 50% of the mining power, the entire network could be compromised. This is known as the feared 51% attack[^6].
## Transaction Fees
Due to Bitcoin's design, only around 7 transactions can be verified per second[^7]. Due to this, transaction times are very slow and fees are very high[^8] during times of heavy traffic. This obviously makes Bitcoin much less usable especially for slow transfers.
## No Privacy
Bitcoin's blockchain exposes all addresses involved in transactions[^9]. There is nothing stopping exchanges from tying these addresses to people. It may even be easier to trace Bitcoin that regular bank transfers, as law enforcement does not need a warrant to inspect the Blockchain.
# Introducing Lightning
Lighting, as describe earlier, is a payment system built on top of the Bitcoin blockchain[^1]. Transactions are made in "channels", where funds are transferred until they are closed. When the channels are closed, the net transfer of funds is transferred as a single regular Bitcoin transaction. This results in lower transaction fees due to less transactions and faster speeds, as the balance is based on the channel's transactions instead of mined transactions. To secure transactions without the blockchain, "watchtowers" are employed. These watchtowers moderate trasanctions between people in the network to resolve disputes.
# Lightning Has No Thunder
Lightning tries, and fails to solve some of Bitcoins issues, introducing some new ones in the process.
## Mining and Privacy
These issues are not addressed by the Lightning network. The channels provide some secrecy with the transactions, but all parties involved and all net transfers are still available through the Bitcoin network.
## Fees
At the end of the day, Lightning is still built on top of Bitcoin. As a result, somebody still has to pay the fees. This happens when the channel closes, and the funds are sent on the base layer of the Bitcoin network. Everything that happens in between does not get recorded on the blockchain and as a result has less security[^10].
## New Issues
### Centralization
Due to the complexity of Lightning's architecture and fees with regards to channels, providers help users make transactions on the Lightning network. A user will likely just create a single channel to the provider, which then provides channels to other nodes to form the full Lightning network[^11]. In this case the user is putting their trust into one or few entities, as it costs more to form more channels (its the cost of a regular Bitcoin transaction).
In addition the watchtower is a single entity, who can be more easily compromised into favoring one side than an entire cryptocurrency network can.
In addition to the centralization of the network itself, there is also the centralization of control of funds. Almost all Lightning users use a custodial wallets (which are also Lightning providers), as Nostr Zaps require LNURL endpoints for payment which are extremely difficult to self host[^12]. In these wallets, the wallet developers control the wallet private keys and thus the funds of all their users.
These wallets, such as the "Wallet of Satoshi"[^13] instill a deep sense of irony, as the this is the antithesis of Satoshi Nakamoto's original vision of a peer-to-peer decentralized currency system.
Now you know why Lightning has no thunder.
[^1]: [Lightning Network Website](https://lightning.network/)
[^2]: [What are Zaps?](https://nostr.how/en/zaps)
[^3]: [Bitcoin Whitepaper](https://bitcoin.org/bitcoin.pdf)
[^4]: [Bitcoin Proof of Work]()
[^5]: [Bitcoin.it ASIC Wiki Page](https://en.bitcoin.it/wiki/ASIC)
[^6]: [51% Attack and Double Spending](https://en.wikipedia.org/wiki/Double-spending)
[^7]: [Bitcoind Scalability Problem](https://en.wikipedia.org/wiki/Bitcoin_scalability_problem)
[^8]: [Bitcoin Transaction Fee Chart](https://ycharts.com/indicators/bitcoin_average_transaction_fee)
[^9]: [Bitcoin Blockchain Explorer](https://bitcoinexplorer.org/)
[^10]: [Bitcoin Lightning Whitepaper](https://lightning.network/lightning-network-paper.pdf)
[^11]: [Lightning Service Provider](https://docs.lightning.engineering/the-lightning-network/liquidity/lightning-service-provider)
[^12]: [LNURL](https://thebitcoinmanual.com/articles/what-is-ln-url-and-how-does-it-work/)
[^13]: [Wallet of Satoshi](https://www.walletofsatoshi.com)

View file

@ -0,0 +1,10 @@
+++
title = 'Monero Node Up!'
date = 2024-06-20T02:37:00-05:00
+++
Today I decided to open my Monero node for public access. It is accessible port 18080 p2p, 18081 rpc, and 18084 zmq via the domains `themcgovern.net` and `mcgovern7dgred44sj754dqvjlj26ri2fmalo6fsoj2p2nlczijeguad.onion`.
I am also considering starting up an LTC node as well, as LTC is a pretty good way of getting in to Monero via crypto ATM.
Hope this is just one of many more public services to come!

View file

@ -0,0 +1,72 @@
+++
title = 'Mullvad Split Tunnel Config for qBittorrent'
date = 2024-05-10T21:17:50-05:00
draft = false
toc = true
+++
## Configuring Mullvad (or any OpenVPN service)
I get it, you want to download your Linux ISOs in peace. However, there may be some issues. For example, certain countries block access to based Linux distributions such as Qubes OS or Tails.
To circumvent this, you can use a VPN. However, for various reasons, you may not want to route your traffic through the VPN as well. This is where split tunneling comes in.
This tutorial will show you how to set up an OpenVPN so only one IP is actually is routed through, which hosts a SOCKS5 proxy (Mullvad does this) so you can set the proxy settings manually for each program.
## Steps
### Get the config files
First, get your config files for OpenVPN. In the case of Mullvad, you can follow the tutorial [here](http://mullvad.net/en/help/linux-openvpn-installation) ([onion, JS required](http://o54hon2e2vj6c7m3aqqu6uyece65by3vgoxxhlqlsvkmacw6a7m7kiad.onion/en/help/linux-openvpn-installation)) and follow for your distro of choice. There are also tutorials for MacOS and Windows, but you'll have to adapt the rest of this tutorial to them.
### Add rules to the OpenVPN config file
{{<notice info>}}
The only traffic that will be routed through the VPN with this configuration will be traffic sent by programs tunneled through the SOCKS5 proxy
{{</notice>}}
Go ahead and open the `/etc/openvpn/mullvad-xx.conf` file in the editor of your choice.
Then, add the following content
```
route-nopull
route 10.8.0.1 255.255.255.255
```
The first rule prevents the VPN tunnel from routing anything by default.
The second rule tells OpenVPN to route the IP `10.8.0.1` through the tunnel.
Be sure to replace the IP with your SOCKS5 proxy IP behind the VPN tunnel (it's `10.8.0.1` for Mullvad)
After that, you can run OpenVPN and open the tunnel
### Configure qBittorent
{{<notice warning>}}
This qBittorrent config will turn you into a leecher!
Mullvad doesn't support port forwarding so it's not possible to seed anyway.
{{</notice>}}
After your VPN tunnel and SOCKS5 proxy have been set, open qBittorrent and go to `Tools > Preferences`
Change the following options inside the `Connection` menu:
1. Change `Peer connection protocol` to `TCP`
2. Uncheck `Use UPnP / NAT-PMP port forwarding from my router`
3. Set up the proxy server
1. Select type of proxy (`SOCKS5` for Mullvad)
2. Select host of proxy (`10.8.0.1` for Mullvad when using OpenVPN)
3. Select proxy port (`1080` for Mullvad, may vary)
4. Check `Use proxy for peer connections` and `Use proxy for hostname lookups` but NOT `Use proxy only for torrents`
5. Fill in the `Authentication` area if need (Mullvad doesn't need this)
Change the following options inside the `BitTorrent` menu
1. Uncheck `Enable DHT, PeX, and Local Peer Discovery`
2. Check `Enable anonymous mode`
Now apply the config and you are ready to go!
Perhaps in the future, if there is demand to do so, I will make a WireGuard version of this tutorial

View file

@ -0,0 +1,41 @@
+++
title = 'RIP LocalMonero'
date = 2024-05-09T00:11:28-05:00
draft = false
toc = true
+++
## The Announcement
As you may have heard, LocalMonero [announced recently](https://forums.localmonero.co/t/localmonero-agoradesk-will-be-winding-down-its-operations/6502) (May 7th, 2024) that they decided to shutdown.
This announcement was abrupt, with all new sign-ups and ad postings being disabled with the release of the announcement.
Trades will be disabled May 14th 2024, 1 week after the announcement.
The reasons for closure was "due to a combination of internal and external factors".
The maintainers of the site seem to be hopeful that DEXs and atomic swaps will allow for continues private purchase methods for Monero.
## My theories
I do not doubt that the "external factors" were caused by regulatory pressure.
It is no secret that the current U.S. congress and the Biden administration is hostile to this sort of thing.
President Biden himself recently said he wanted to ban decentralized finance. Based on what I have heard, the `alphabet boys` will act how the president wants them to in regards to certain issues, so it makes sense that Monero and exchanges are under attack.
## My thoughts
I find this to be very sad news.
I also am distressed by the state of politics here in the U.S.
Both parties do not have the interests of the populace as a main focus and/or are not approaching things correctly.
People have to choose between a wannabe dictator (who will destroy our alliances, international influence/policy, and make things suck in general) or some other guy that will at best keep the ship afloat (while trying to ban Monero/Cryptocurrency and potentially hurting the economy).
If the political landscape is similar to this in around 15 years, expect some new contenders :wink:
Even if someone crypto and privacy friendly is in power (there is already a decent pro-crypto voting block in the senate) it is still difficult to support Monero as people need to be taxed unless some radical changes take place. You don't know if someone used their money to buy a yacht or help impoverished people and can't tax accordingly.
I don't know about you, but I don't want to live in some technocrat anarchist utopia where there are no taxes and therefore no public services and everything is just a crumbling pile of bones.
I mean some could say that is our current state of affairs...

16
hugo.toml Normal file
View file

@ -0,0 +1,16 @@
baseURL = 'https://themcgovern.net/'
languageCode = 'en-us'
title = 'The McGovern'
theme = 'no-js-hugo-theme'
enableEmoji = true
sectionPagesMenu = 'main'
[params]
themeStyleSwitcher = true
onionLocation = "http://mcgovern7dgred44sj754dqvjlj26ri2fmalo6fsoj2p2nlczijeguad.onion"
[params.donate]
monero = "46qeUbExxGSLT1pAkssG2LMBnLPsbiTNMcikp1B8PwFnShPkTRxt9c12Tcw2KaAagRTAju5j2NUYYNwCAp54zKMqBpoUZEg"
[markup.highlight]
#noClasses = false
style = "solarized-light"

74
layouts/posts/rss.xml Normal file
View file

@ -0,0 +1,74 @@
{{- /* Deprecate site.Author.email in favor of site.Params.author.email */}}
{{- $authorEmail := "" }}
{{- with site.Params.author }}
{{- if reflect.IsMap . }}
{{- with .email }}
{{- $authorEmail = . }}
{{- end }}
{{- end }}
{{- else }}
{{- with site.Author.email }}
{{- $authorEmail = . }}
{{- warnf "The author key in site configuration is deprecated. Use params.author.email instead." }}
{{- end }}
{{- end }}
{{- /* Deprecate site.Author.name in favor of site.Params.author.name */}}
{{- $authorName := "" }}
{{- with site.Params.author }}
{{- if reflect.IsMap . }}
{{- with .name }}
{{- $authorName = . }}
{{- end }}
{{- else }}
{{- $authorName = . }}
{{- end }}
{{- else }}
{{- with site.Author.name }}
{{- $authorName = . }}
{{- warnf "The author key in site configuration is deprecated. Use params.author.name instead." }}
{{- end }}
{{- end }}
{{- $pctx := . }}
{{- if .IsHome }}{{ $pctx = .Site }}{{ end }}
{{- $pages := slice }}
{{- if or $.IsHome $.IsSection }}
{{- $pages = $pctx.RegularPages }}
{{- else }}
{{- $pages = $pctx.Pages }}
{{- end }}
{{- $limit := .Site.Config.Services.RSS.Limit }}
{{- if ge $limit 1 }}
{{- $pages = $pages | first $limit }}
{{- end }}
{{- printf "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>" | safeHTML }}
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>{{ if eq .Title .Site.Title }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{ . }} on {{ end }}{{ .Site.Title }}{{ end }}</title>
<link>{{ .Permalink }}</link>
<description>Recent content {{ if ne .Title .Site.Title }}{{ with .Title }}in {{ . }} {{ end }}{{ end }}on {{ .Site.Title }}</description>
<generator>Hugo</generator>
<language>{{ site.Language.LanguageCode }}</language>{{ with $authorEmail }}
<managingEditor>{{.}}{{ with $authorName }} ({{ . }}){{ end }}</managingEditor>{{ end }}{{ with $authorEmail }}
<webMaster>{{ . }}{{ with $authorName }} ({{ . }}){{ end }}</webMaster>{{ end }}{{ with .Site.Copyright }}
<copyright>{{ . }}</copyright>{{ end }}{{ if not .Date.IsZero }}
<lastBuildDate>{{ (index $pages.ByLastmod.Reverse 0).Lastmod.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</lastBuildDate>{{ end }}
{{- with .OutputFormats.Get "RSS" }}
{{ printf "<atom:link href=%q rel=\"self\" type=%q />" .Permalink .MediaType | safeHTML }}
{{- end }}
{{- range $pages }}
<item>
<title>{{ .Title }}</title>
<link>{{ .Permalink }}</link>
<pubDate>{{ .PublishDate.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</pubDate>
{{- with $authorEmail }}<author>{{ . }}{{ with $authorName }} ({{ . }}){{ end }}</author>{{ end }}
<guid>{{ .Permalink }}</guid>
<description>{{ .Summary | transform.XMLEscape | safeHTML }}</description>
<content:encoded>
{{ printf "<![CDATA[%s]]>" .Content | safeHTML }}
</content:encoded>
</item>
{{- end }}
</channel>
</rss>

View file

@ -0,0 +1,4 @@
<details>
<summary>{{ (.Get 0) | markdownify }}</summary>
{{ .Inner | markdownify }}
</details>

View file

@ -0,0 +1,3 @@
{{ print "<!-- Begin raw HTML fragment -->" | safeHTML }}
{{ .Inner }}
{{ print "<!-- End raw HTML fragment -->" | safeHTML }}

BIN
static/badges/ariweb.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
static/badges/fsky.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

BIN
static/badges/lda.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 520 KiB

@ -0,0 +1 @@
Subproject commit 6d547d6ddf28bd1327043243cb39834cfe201e7a