Browse Source

Latest web files check-in

master
Noah Petherbridge 1 month ago
parent
commit
719766b933
23 changed files with 1842 additions and 23 deletions
  1. +20
    -4
      www/.layout.gohtml
  2. +34
    -13
      www/about.gohtml
  3. +42
    -0
      www/blog/archive.gohtml
  4. +2
    -1
      www/firered.gohtml
  5. +2
    -2
      www/flare/ui.css
  6. +95
    -0
      www/privacy.gohtml
  7. +53
    -0
      www/solar/gruvbox.css
  8. +0
    -0
      www/static/photos/.dummy
  9. +65
    -0
      www/wiki/Bookmarks/Corporate-Sins.md
  10. +1
    -0
      www/wiki/Bookmarks/Development.md
  11. +251
    -0
      www/wiki/Bookmarks/Spirituality.md
  12. +3
    -1
      www/wiki/C&C.md
  13. +188
    -0
      www/wiki/Degoogle/Apps.gohtml
  14. +126
    -0
      www/wiki/Degoogle/index.md
  15. +233
    -0
      www/wiki/DontBeEvil.md
  16. +82
    -0
      www/wiki/Go-WebAssembly.md
  17. +196
    -0
      www/wiki/Linux-Phones.md
  18. +6
    -0
      www/wiki/Main-Page.md
  19. +2
    -2
      www/wiki/Protocol-Buffers-Protocol.md
  20. +34
    -0
      www/wiki/Regexp Basics.md
  21. +153
    -0
      www/wiki/Simple-CAS-Protocol.md
  22. +161
    -0
      www/wiki/Vue-DDG-Searches.md
  23. +93
    -0
      www/wiki/solipsism-notes.md

+ 20
- 4
www/.layout.gohtml View File

@@ -19,7 +19,7 @@
<!-- Kirsle.net Flare -->
<link rel="stylesheet" type="text/css" href="/flare/ui.css">

<link rel="stylesheet" type="text/css" href="/solar/monokai.css">
<link rel="stylesheet" type="text/css" href="/solar/gruvbox.css">
<link rel="stylesheet" type="text/css" href="/solar/vim-syntax.css">

<link rel="alternate" type="application/rss+xml" title="Kirsle's RSS Feed" href="/blog.rss">
@@ -31,7 +31,7 @@
<a href="#navbar" class="btn btn-primary"><i class="fas fa-bars"></i></a>
</div>

<div class="brand d-lg-none">
<div class="brand d-md-none">
<a href="/">
<img src="/flare/cjk-48.png" width="48" height="48" alt="Kirsle.net logo">
Kirsle.net
@@ -43,7 +43,7 @@
<div class="container-fluid">
<div class="row">

<div class="order-1 order-lg-12 col-12 col-lg-10 col-xl-8">
<div class="order-1 order-md-12 col-12 col-md-9 col-lg-10 col-xl-9" style="min-width: 0; max-width: 1280px">
<div class="content-panel mb-4">
{{ if .SetupNeeded }}
<div class="alert alert-success">
@@ -81,7 +81,7 @@
</div>
</div>

<div id="navbar" class="nav-panel order-12 order-lg-1 col-12 col-lg-2">
<div id="navbar" class="nav-panel order-12 order-md-1 col-12 col-md-3 col-lg-2">
<div class="brand">
<a href="/">
<img src="/flare/cjk-48.png" width="48" height="48" alt="Kirsle.net logo">
@@ -191,6 +191,22 @@
});
</script>

<!-- Matomo -->
<script type="text/javascript">
var _paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="//svc.ckir.net/";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '2']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();
</script>
<!-- End Matomo Code -->

{{ template "scripts" }}

</body>


+ 34
- 13
www/about.gohtml View File

@@ -3,6 +3,10 @@

<h1>About Me</h1>

<blockquote>
<em>Updated: Aug 11 2020</em>
</blockquote>

<div class="row">
<div class="col-12 col-sm-2 markdown">
<img src="https://www.kirsle.net/static/photos/ff7ec4f5.jpg" class="img-responsive portrait" alt="Kirsle"><p>
@@ -14,13 +18,36 @@
<h2 class="mt-0">Hello world!</h2>

<p>My name is <strong>Noah</strong> and this is my website, where I primarily keep
my blog. I'm a 30 year-old software engineer living in Los Angeles.</p>

<p>My interests include programming, creative writing, various forms of what could
be loosely defined as "art," including some dabbling with 3D modeling and
Flash animations. I'm a "high functioning introvert," and when I manage to
get out of the house, I like to go hiking with my dog and my partner. For
several years I could be found at Disneyland every couple of weekends.</p>
my blog. I'm a 32 year-old software engineer from Portland, OR (previously Los
Angeles for about a decade).</p>

<p>I've been interested in computers my whole life ever since I was given an
old Tandy MS-DOS machine running Windows 3.1 back when I was in kindergarten.
I taught myself how to create web pages when I was 12, how to program in Perl
by 14, and I've been in love with software development ever since! It's the
closest thing to magick in an otherwise material universe; if you can imagine
it, you can write code to do it!</p>

<p>I'm a 90's kid and a "<a href="https://en.wikipedia.org/wiki/Netizen" target="_blank">netizen</a>"
of the web from the early 2000s, back when the Internet was simple and social
media didn't exist. I purposely designed my website to resemble the good old
classic sites from back then: with a visual wallpaper and lots of color. Only,
now I make sites while keeping them compliant with modern HTML standards and
friendly to view on mobile devices!</p>

<p>Besides computers, I have a pretty wide array of other interests in my
personal life; I'm a "jack of all trades, master of some" and like to dabble
here or there. I love to write and create various forms of what could be loosely
defined as "art." A long while ago I played with <a href="/rendering">3D modeling</a>
and <a href="/flash">Flash animations</a>. I like to learn about all forms of
science, delve into spiritual topics and explore the nature of the universe.
I'm into nudism and nude photography, videogames and board games, hiking
and camping, <a href="https://www.rivescript.com/" target="_blank">chat bots</a>,
and discovering new things.</p>

<p>I'm a "high functioning introvert," where I can go out and socialize from
time to time, and fool people into thinking I'm actually an extravert, but
then I need my alone time to recharge my batteries.</p>

<h3>Music Taste</h3>

@@ -65,12 +92,6 @@
and the little bits of JavaScript I add are to enhance the experience slightly.
My website works fine with all scripts disabled.</p>

<p>I somewhat miss the earlier Internet days when websites had background
images rather than racing to the bottom with simplicity. My website has been described as
"hipster," but I like it this way, and it's
<a href="https://validator.w3.org/check?uri=referer">HTML5 standards compliant</a>.
Usually.</p>

<h3>Privacy</h3>

In this post-<a href="https://en.wikipedia.org/wiki/Edward_Snowden">Snowden</a>


+ 42
- 0
www/blog/archive.gohtml View File

@@ -0,0 +1,42 @@
{{ define "title" }}Archive{{ end }}
{{ define "content" }}

<h1>Archive</h1>

{{ $thumbs := .Data.Thumbnails }}

{{ range .Data.Archive }}
<div class="card mb-4">
<div class="card-header">
<h3>{{ .Date.Format "January, 2006" }}</h3>
</div>
<div class="card-body">

<div class="row">
{{ range .Posts }}
{{ $thumb := index $thumbs .ID }}
<div class="col-12 col-sm-6 col-md-4 col-lg-3 mb-4">
<div class="card bg-secondary"
style="height: auto; min-height: 150px;
{{ if $thumb }}background-image: url({{ $thumb }}); background-size: cover{{ end }}
"
title="Tags: {{ range .Tags }}#{{ . }} {{ end }}">
<span class="p-1" style="background-color: RGBA(0, 0, 0, 0.8)">
<a href="/{{ .Fragment }}">{{ .Title }}</a><br>
<small class="blog-meta">
{{ .Created.Format "Jan 02 2006" }}
{{ if ne .Privacy "public" }}
<span class="blog-{{ .Privacy }}">[{{ .Privacy }}]</span>
{{ end }}
</small>
</span>
</div>
</div>
{{ end }}
</div>

</div>
</div>
{{ end }}

{{ end }}

+ 2
- 1
www/firered.gohtml View File

@@ -569,6 +569,7 @@ Palette Town. This is what happened...
ideas, feel free to leave me a comment about them. :)

<p>
{{ RenderComments "Sequence Breaking Pokémon FireRed" "article-firered" }}

{{ RenderComments .Request "Sequence Breaking Pokémon FireRed" "article-firered" }}

{{ end }}

+ 2
- 2
www/flare/ui.css View File

@@ -113,7 +113,7 @@ blockquote {
.mobile-nav {
display: none;
}
@media (max-width: 990px) {
@media (max-width: 767px) {
body {
background-image: url("/flare/blue-dust.png");
background-attachment: scroll;
@@ -361,7 +361,7 @@ ul.blog-categories li:last-child:after {
color: inherit;
}

@media (max-width: 990px) {
@media (max-width: 767px) {
.content-panel {
margin-left: 0;
margin-top: 20px;


+ 95
- 0
www/privacy.gohtml View File

@@ -0,0 +1,95 @@
{{ define "title" }}Privacy Policy{{ end }}
{{ define "content" }}

<h1>Privacy Policy</h1>

<p>
This page explains some of the privacy features on this website. In
my personal life I'm a privacy and security nut and run adblockers
and privacy guard add-ons in my web browsers and I respect <em>your</em>
privacy too.
</p>

<p>
Two privacy-related aspects of this site are as follows:
</p>

<ol>
<li><a href="#matomo">Matomo Web Analytics</a> is an open source,
self-hosted web analytics tool that I use to understand how my
visitors navigate my site and where they're coming from. You
can safely <a href="#matomo-optout">opt out</a> and your web
browser's privacy settings are respected <em>by default</em>.
</li>
<li><a href="#comments">Comment threads</a> on my blog <em>MAY</em>
be subscribed to by email; this is an optional feature and
unsubscribing is easy.</li>
</ol>

<hr>

<h2 id="matomo">Matomo Web Analytics (Self-Hosted)</h2>

<p>
I'm currently using the open source analytics tool
<a href="https://matomo.org/" target="_blank">Matomo</a> to
learn about how my site is being used and where my visitors are
coming from. This tool is hosted on the same server as my blog
and is using my own database.
</p>

<p>
My Matomo installation anonymizes visitor IP addresses and respects
the <a href="https://en.wikipedia.org/wiki/Do_Not_Track" target="_blank">
Do Not Track (DNT)</a> setting in your web browser. If you use a
browser add-on such as Privacy Badger, Matomo does not track any
information about your visits, as Privacy Badger will enable the
DNT flag automatically.
</p>

<h3 id="matomo-optout">Matomo Analytics Opt-Out</h3>

<iframe
style="border: 0; height: 200px; width: 600px;"
src="https://svc.ckir.net/index.php?module=CoreAdminHome&action=optOut&language=en&backgroundColor=000000&fontColor=ffffff&fontSize=11pt&fontFamily=Verdana"
></iframe>

<hr>

<h1 id="comments">Comments and Email Subscriptions</h1>

<p>
When you leave a comment on my blog, you may <em>optionally</em>
enter your email address as well. If so, your email address is used
for two things:
</p>

<ul>
<li>If you have a <a href="https://gravatar.com/" target="_blank">Gravatar</a>,
it can be displayed alongside your comment.</li>
<li>You may subscribe to get email notifications when future comments are
added to the same page you just commented on (opt-in).</li>
</ul>

<p>
Your email address is not displayed to other visitors of the site and
I will not share it with others. You're also completely free to never
tell me your email address in the first place!
</p>

<p>
Also, the name and email address you most recently entered into a
comment form or Contact Me page is <strong>cached</strong> in a local
session cookie that stays with your web browser (not on the server side).
</p>

<h2>Unsubscribe from Comment Threads</h2>

<p>
To unsubscribe from individual comment threads, you may click the link
in the email notification to do so. You may also unsubscribe from
<strong>ALL</strong> comment threads site-wide by visiting the
<a href="/comments/subscription">Comment Subscription</a> page.
</p>

{{ end }}

+ 53
- 0
www/solar/gruvbox.css View File

@@ -0,0 +1,53 @@
/* Gruvbox highlight theme, converted from
* https://tmtheme-editor.herokuapp.com/#!/editor/theme/Gruvbox
* Using: https://github.com/davinche/pygments-from-tmtheme
*/
.highlight { background-color: #282828; color: #fdf4c1aa; }
.highlight .ge { font-style: italic; }
.highlight .gs { font-weight: bold; }
.highlight .c { color: #928374; font-style: italic; }
.highlight .cp { color: #928374; font-style: italic; }
.highlight .c1 { color: #928374; font-style: italic; }
.highlight .cs { color: #928374; font-style: italic; }
.highlight .cm { color: #928374; font-style: italic; }
.highlight .m { color: #fdf4c1; }
.highlight .mf { color: #fdf4c1; }
.highlight .mi { color: #fdf4c1; }
.highlight .mo { color: #fdf4c1; }
.highlight .se { color: #fdf4c1; }
.highlight .kc { color: #fdf4c1; }
.highlight .k { color: #fa5c4b; }
.highlight .kd { color: #fa5c4b; }
.highlight .kn { color: #fa5c4b; }
.highlight .kt { color: #fabd2f; }
.highlight .s { color: #b8bb26; }
.highlight .sb { color: #b8bb26; }
.highlight .sc { color: #b8bb26; }
.highlight .sd { color: #b8bb26; }
.highlight .s2 { color: #b8bb26; }
.highlight .sh { color: #b8bb26; }
.highlight .si { color: #b8bb26; }
.highlight .sx { color: #b8bb26; }
.highlight .sr { color: #b8bb26; }
.highlight .s1 { color: #b8bb26; }
.highlight .ss { color: #b8bb26; }
.highlight .bp { color: #fdf4c1; }
.highlight .nc { color: #8ec07c; }
.highlight .no { color: #d3869b; }
.highlight .nt { color: #8ec07c; font-weight: bold; }
.highlight .nv { color: #fdf4c1; }
.highlight .vc { color: #fdf4c1; }
.highlight .vg { color: #fdf4c1; }
.highlight .vi { color: #fdf4c1; }
.highlight .ow { color: #fe8019; }
.highlight .o { color: #fe8019; }
.highlight .n { color: #fdf4c1aa; }
.highlight .nl { color: #fdf4c1aa; }
.highlight .nn { color: #fdf4c1aa; }
.highlight .nx { color: #fdf4c1aa; }
.highlight .bp { color: #fdf4c1; }
.highlight .p { color: #fdf4c1aa; }


/* Kirsle.net overrides */
.highlight { background-color: transparent }

+ 0
- 0
www/static/photos/.dummy View File


+ 65
- 0
www/wiki/Bookmarks/Corporate-Sins.md View File

@@ -7,6 +7,7 @@ corporations over the years.
* [Cisco](#cisco)
* [Facebook](#facebook)
* [Symantec](#symantec)
* [TikTok](#tiktok)

---

@@ -58,6 +59,8 @@ entire career in tech.
Facebook has been having a really bad 2018 since the Cambridge Analytica scandal began.
Only started collecting links here 12/6/18, needs some backfilling.

First are some questionable choices by Facebook management:

* [Facebook accused of striking 'secret deals over user data' - BBC News](https://www.bbc.com/news/technology-46456695) ‒ leaked internal exec emails about their purposefully privacy-infringing business practices.
* Allowed some companies to retain full access to users' friends' data, *even after* closing the general privacy hole in 2014/2015 as related to the Cambridge Analytica leaks.
* They were aware the Android permission change to log users' call and text history *would be controversial* before they even launched it, and purposefully directed users attention away from the feature.
@@ -69,6 +72,11 @@ Only started collecting links here 12/6/18, needs some backfilling.
* [As Facebook Raised a Privacy Wall, It Carved an Opening for Tech Giants](https://www.nytimes.com/2018/12/18/technology/facebook-privacy.html) (NY Times) ‒ "Facebook allowed Microsoft’s Bing search engine to see the names of virtually all Facebook users’ friends without consent, the records show, and gave Netflix and Spotify the ability to read Facebook users’ private messages."
* Non-NY Times article: [Facebook let tons of companies get info about you, including Amazon, Netflix, and Microsoft](https://www.cnbc.com/2018/12/19/facebook-gave-amazon-microsoft-netflix-special-access-to-data-nyt.html) (CNBC)

Some bad things that Facebook's platform allowed for (not necessarily the fault
of the Facebook company, but noteworthy nonetheless):

* [A Genocide Incited on Facebook, with posts from Myanmar's Military](https://www.nytimes.com/2018/10/15/technology/myanmar-facebook-genocide.html) (NY Times)

# Symantec

[Symantec](https://www.symantec.com/) is a security company most known for
@@ -77,3 +85,60 @@ to **shut the fuck up** and pray that nobody ever finds out about it.

* [Top Voting Machine Vendor Admits It Installed Remote-Access Software on Systems Sold to States](https://motherboard.vice.com/en_us/article/mb4ezy/top-voting-machine-vendor-admits-it-installed-remote-access-software-on-systems-sold-to-states) — In 2006 hackers stole the source code to **pcAnywhere** and the public did not learn of this until 2012, when hackers posted the source code online. Only then did Symantec admit that *they knew about it the entire time.* Not only did this play a role in hacked voting machines but it compromised the security **of all customers of the pcAnywhere software.**
* [Google takes Symantec to the woodshed for mis-issuing 30,000 HTTPS certs](https://arstechnica.com/information-technology/2017/03/google-takes-symantec-to-the-woodshed-for-mis-issuing-30000-https-certs/) — Symantec has **repeatedly** had problems with this; the result is that Symantec has lost all trust by browser vendors and has been revoked from the trusted Certificate Authority Store on Chrome and Firefox. SSL providers are supposed to be among the **most trusted** companies because the security of the Internet rests in their hands. If hackers can trick Symantec into giving them an SSL cert for `google.com` then countries like Iran can [intercept private communications putting lives in real danger](https://en.wikipedia.org/wiki/DigiNotar).

# TikTok

Chinese propaganda social network. I hear buzz about all its problems here and
there on Reddit, here is a comment by [u/surprisedduck26](https://www.reddit.com/r/worldnews/comments/g8yqbw/chinese_internet_users_who_uploaded_coronavirus/forhdwh?utm_source=share&utm_medium=web2x) that sums it up nicely in one place:

> I'm curious why people are supporting the TikTok platform in any way when you could easily just use your phone camera.
>
> I was ban from the reddit sub r/TikTok for posting a single comment about how TikTok censors Tiananmen and Tibet references. Sure would be a shame if others knew about it. <https://www.reddit.com/r/news/comments/d948n2/tiktok_censors_references_to_tiananmen_and_tibet?sort=confidence>
>
> But who cares about that right? It's not like...
>
> TikTok Admits It Suppressed Videos by Disabled, Queer, and Fat Creators. <https://slate.com/technology/2019/12/tiktok-disabled-users-videos-suppressed.html>
>
> TikTok has been accused of secretly gathering "vast quantities" of user data and sending it to servers in China. <https://www.bbc.com/news/business-50640110>
>
> TikTok is paying the FTC a fine of $5.7 million for collecting the data of kids under 13. <https://www.vox.com/the-goods/2019/2/28/18244996/tiktok-children-privacy-data-ftc-settlement>
>
> TikTok censors all reference to the Hong Kong protests. <https://www.washingtonpost.com/technology/2019/09/15/tiktoks-beijing-roots-fuel-censorship-suspicion-it-builds-huge-us-audience/?noredirect=on>
>
> TikTok has had children as young as 8 targeted by sexual predators and Police are urging parents to check the app privacy settings. <http://webcache.googleusercontent.com/search?ie=UTF-8&client=ms-android-google&source=android-browser&q=cache:https:%2F%2Fwww.scotsman.com%2Flifestyle-2-15039%2Ftiktok-privacy-settings-everything-parents-need-to-know-about-the-video-app-1-4872619>
>
> <https://www.dailymail.co.uk/sciencetech/article-6694671/Predators-grooming-children-young-eight-popular-live-streaming-apps.html>
>
> TikTok's privacy page admits to collecting as much data as possible, from meta data, GPS location, and pulls all contact information on someone's Facebook and instagram (if connected) and phone, while allowing themselves to use this data for whatever they want.
>
> <https://www.tiktok.com/legal/privacy-policy?lang=en>
>
> TikTok has been labeled a "threat to national security" by the USA government.
>
> <https://m.youtube.com/watch?v=rU0zzHKHxC8>
>
> <https://m.youtube.com/watch?v=6jOJe9U9Wj8>
>
> <https://www.nytimes.com/2019/11/01/technology/tiktok-national-security-review.html>
>
> TikTok is ban from US Navy mobile devices, as it's been declared a cybersecurity threat.
>
> <https://www.theguardian.com/technology/2019/dec/21/us-navy-bans-tiktok-from-mobile-devices-saying-its-a-cybersecurity-threat>
>
> TikTok had vulnerabilities as recent as last month, which allowed attackers to gain control of users accounts to upload videos or view private videos, while a separate flaw allowed attackers to retrieve personal information from TikTok user accounts through the company’s website.
>
> <https://www.nytimes.com/2020/01/08/technology/tiktok-security-flaws.html>
>
> Its almost as if Tiktok is China’s attempt at pushing their propaganda out to the world while also having massive privacy issues. China has realized that to control the global population you have to control social media and what people see. So for the last year they have been pouring a ton of money into getting their social media app to be accepted and widely used- through a campaign of paid content creation/submission, and vote manipulation. Once they have widescale buy in, their backdoor monitoring and data collection will have free reign.
>
> I find it a worrying trend how easily Reddit is blindly uvoting these videos to the front page and supporting a company with such privacy concerns, and an obvious agenda that is censoring and controlling the information you see.
>
> The Chinese propaganda machine is already being pushed on Reddit threads just like this one.
>
> There are reddit accounts that clearly have a pro-Chinese agendas posting in threads like these daily. I recently called out one of these reddit users via this comment: https://www.reddit.com/r/Unexpected/comments/esks18/z/ffbixet
>
> and low and behold the user u/littleking123 immediately deleted their account. Thankfully you can see a web cache of their pro-TikTok, pro-China, and anti-Hong Kong comments here.
>
> http://webcache.googleusercontent.com/search?ie=UTF-8&client=ms-android-google&source=android-browser&q=cache%3Ahttps%3A%2F%2Fwww.reddit.com%2Fuser%2Flittleking123
>
> It's still not too late to do something. I'm posting this here for exposure so others know what's going on.

+ 1
- 0
www/wiki/Bookmarks/Development.md View File

@@ -123,6 +123,7 @@
* [JavaScript Module Pattern: In-Depth](http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html) — How to write self-contained JavaScript modules in raw ES5.
* [Deploying ES2015+ Code in Production Today](https://philipwalton.com/articles/deploying-es2015-code-in-production-today/) — Using `<script type="module">` and `<script nomodule>` to ship native ES6 code to the browser, with pre-browserified fallback for legacy users.
* [A JavaScript-Free Frontend](https://dev.to/winduptoy/a-javascript-free-frontend-2d3e) — Modals, drop-downs and other <abbr title="Single Page App">SPA</abbr> features in pure HTML and CSS without JavaScript.
* [Everyone has JavaScript, right?](https://kryogenix.org/code/browser/everyonehasjs.html)

## PHP



+ 251
- 0
www/wiki/Bookmarks/Spirituality.md View File

@@ -0,0 +1,251 @@
# Spirituality

Links and resources specifically relating to spirituality, metaphysics and the
nature of existence and reality.

I started writing this page on **Aug 9, 2019** after a couple years reading into
lots of esoteric stuff. The page will grow as I come and backfill in links to
all sorts of things I found, and the purpose of this page is to distill down the
common "fundamental truths" and read between the lines of all religions and magick
while providing links to examples found everywhere.

* [Common Root Phenomena](#common-root-phenomena)
* [Mind Is Everything](#mind-is-everything) (Reality is subjective)
* [Lucid Dreaming](#lucid-dreaming) (Astral Projection)
* [Law of Attraction](#law-of-attraction) (Chaos Magick, Wicca, Dimension Jumping)
* [The Two Cups Method](#the-two-cups-method)
* [The Unknowable God](#the-unknowable-god) (Source, the One Consciousness, the True God)
* [Behind the Veil](#behind-the-veil)
* [The Akashic Records](#the-akashic-records)
* [The Wheel of Time](#the-wheel-of-time)
* [Indra's Net](#indra-s-net)

## My Personal Beliefs

There's a lot of "woo-woo" linked on this page but these are just the examples
to show that a lot of people, with their own varied and crazy belief systems, are
actually talking about the same things and I rather go straight to their source.

* I don't subscribe to horoscopes, chakras, crystals, psychic powers, astral
projection, occult magic, angels or demons, archons or the demiurge as I
have never directly experienced these things.
* However, I believe these things are real _for those who believe_ and reality
is subjective anyway. If you believe in and wish to see angels or spirits or
what have you, I believe you will start to see them. If they help you live
your life and achieve your goals, more power to you.
* [Law of Attraction](#law-of-attraction) is real and there's an infinite number
of methods to use it, from "woo-woo magick" to every self-help book and
motivational speech that I've ever heard. You don't need be religious or believe
in any magic to manifest reality with your thoughts.
* I subscribe and keep tabs on all sorts of spiritual topics. You never know
when a piece of wisdom will come from an unexpected source.

# Common Root Phenomena

Religions and various practices all throughout the world and history have given
many different names, symbols and rituals to some common root phenomena that
have been experienced by different people at different times.

I'm specifically talking about Abrahamic religions (i.e. Christianity, Judaism,
Islam, Gnosticism) as well as Hinduism and Buddhism. Also Wicca, chaos magick
and the occult in general.

## Mind Is Everything

What most of these common phenomena boil down to is that "mind is everything,
reality is subjective, the universe works exactly how you think it does, what
happens when you die is exactly what you think will happen" and there's no
objectively right answers.

A common thing you'll encounter when reading about various forms of magick is
that it mostly only affects your _personal reality_ and you won't be able to
convince anybody else of any of it if they don't want to believe. But what even
_is_ "reality" anyway?

Each of us is living in our own personal reality even while we seem to interact
with other people "out there" in the real world. Even if you take the stark
materialist, scientific approach: you're a brain living in a dark skull that
doesn't see the real world, only the electrical impulses given by your eyes and
ears that your brain uses to re-construct an approximation of reality that lets
you function in the world. [Is your red the same as my red?](https://www.youtube.com/watch?v=evQsOFQju08)

## Lucid Dreaming

> **Other names:** Astral Projection, Out of Body Experience

Lucid dreaming is the act of becoming aware that one is having a dream _while_
in a dream. When you become lucid and you realize the dream world is entirely of
your own creation, you can change it, fly through the air like Peter Pan, summon
any dream character (real or fictional) you want, teleport to new surroundings,
explore distant planets and fantastical environments and so on.

See ["The Phase" - Leave Your Body in 3 Days](https://www.youtube.com/watch?v=YQjAIlFZWWc)
for a good overview of how to lucid dream.

Astral Projection is another word for lucid dreaming. AP'ers will believe they've
left their body and gone to the astral plane and it might be based on real-world
locations of which they are familiar, but they fail to bring back any objective
hard evidence that would convince a skeptic that Astral Projection has anything
to it.

Links:

* Reddit:
* [/r/luciddreaming](https://www.reddit.com/r/luciddreaming)
* [/r/AstralProjection](https://www.reddit.com/r/AstralProjection/)
* ["The Phase" - Leave Your Body in 3 Days](https://www.youtube.com/watch?v=YQjAIlFZWWc)

## Law of Attraction

> **Other names:** Chaos Magick, Dimensional Jumping, various occult magick
> disciplines (Wicca, Voodo, etc.)

The [Law of Attraction](https://en.wikipedia.org/wiki/Law_of_attraction_%28New_Thought%29)
is another common root phenomena that has many different names and belief
systems surrounding it.

The LoA can be summarized as "like attracts like" or "put out positive thoughts
and intention into the world and the world gives you positive results" and the
same goes the opposite way.

**Prayer** and **meditation** are the most common ways people invoke the Law of
Attraction. In the former, you're intently focused on a prayer to your favorite
deity for something to unfold in your life and in the latter you may just be
focused on what you want to achieve. Then you forget about it and go on the rest
of your day, and what you want manifests itself in sometimes improbable ways.

Various techniques and methods are used to help you further visualize and focus
your intentions:

* **Chaos magick**
* This is "non-denominational" magick. It states that all the rituals and symbols
associated with magic use (candles, pentagrams, chants, etc.) are all fundamentally
meaningless but they help you visualize and believe in the magick which is the
root mechanism for the Law of Attraction, to be intently focused on an outcome
and to put the emotional energy and intent behind it for it to manifest.
* [The Complete Psychonaut Field Manual - A Cartoon Guide to Chaos Magick](https://ultraculture.org/blog/2015/11/13/psychonaut-field-manual/)
offers a good introduction and overview in easily digestable webcomic format.
* [Chaos magick on Wikipedia](https://en.wikipedia.org/wiki/Chaos_magic)
* **Dimension Jumping**
* Subreddits: [/r/dimensionjumping](https://www.reddit.com/r/dimensionjumping) and
[/r/dimensionaljumping](https://www.reddit.com/r/dimensionaljumping) - the latter
is archived but has a wealth of information to search.
* The belief system is that The Universe actually consists of a multiverse of infinite
parallel realities -- every reality possible, in fact -- and a countless number of
these realities have _you_ in them. By focusing your intention and performing
chaos magick-like experiments you can "jump" to alternate dimensions to manifest things
you want.
* There's no hard scientific proof of the multiverse and the methods proposed on
these subreddits are similar to ones you find in other magick and LoA practices.

### The Two Cups Method

To evidence the connection between Law of Attraction with various magick and
quantum multiverse theories, I've seen the two cups method come up multiple
times in my research.

The two cups method is basically this:

* Think of something you want to change or manifest into your reality.
* Get two cups and a way to label them (masking tape, sticky note, tape a slip
of paper you can write on, etc.)
* On one cup, summarize the current state you want to change as one word, for
example "Debt" or "Sickness" and fill this cup with water.
* On the other cup, summarize the desired state in the same way, for example
"Wealth" or "Healthy"
* While focusing carefully on your intention, slowly pour the water from the
first cup into the second, the water helping you visualize the transition to
getting what you want.
* Drink the water from the new cup. Remove the labels and put the cups away,
you're done! Don't dwell on it much more, Law of Attraction works best when
you let the universe manifest it in its own way.

Links to where I've seen this under different labels:

* [Dimensional Jumping](https://www.reddit.com/r/DimensionalJumping/comments/3h2yxo/the_act_is_the_fact_part_one_an_exercise/)
* [A site about witchcraft and magick](https://www.shadowharvestwitch.com/blogharvestingshadows/2018/9/20/two-cup-method-spell)

## The Unknowable God

> **Other names:** Source, the One Consciousness, the True God, the Universe Itself,
> The Supreme Self, Brahman, The Father.

The most common fundamental belief at the root of all the religions I've found is
the idea that the universe itself is made of consciousness. Consciousness is **all**
that exists, and the universe wouldn't exist without it. Matter is made from
consciousness. The brain does not create consciousness; consciousness creates the
brain.

"We are just the universe experiencing itself." We are all God, in one way or
another. What are the characteristics of God as defined by most religions?
All-powerful, omniscient, omnipresent. God can't be a subject _inside_ the
universe, for that would imply the universe is greater than God. There can't
be anything _outside_ of the universe, or else God would be contained within
that too.

The Unknowable God therefore is the very fabric of existence itself, the whole
entire universe all at once. Not a humanoid figure that one could know. The
unknowable god is the Source of all consciousness that exists, you and I and all
the animals and creatures and everything is a part of this One Consciousness.
In a way, God is playing that he's _not_ God by imagining that he is each and
every one of us, wearing us all like masks.

This isn't necessarily to imply the universe is [solipsistic](https://en.wikipedia.org/wiki/Solipsism)
(although it very well could be). From one scale of looking at it, we _are_ all
God because God is all that could exist, but if you zoom in to our scale of living
we all might as well be separate individuals with our own private perspectives.

* [Hinduism and the Belief in One God](https://www.hinduwebsite.com/onegod.asp) -
"He exists in all and all beings exist in him. There is nothing other than Him,
and there is nothing that is outside of Him. He is Imperishable, unknowable,
immortal, infinite, without a beginning and without an end."
* [An Unknowable God - What Bahá’ís Believe](https://www.bahai.org/beliefs/god-his-creation/revelation/unknowable-god)
* [**The Egg**](http://galactanet.com/oneoff/theegg_mod.html), a short story by Andy Weir
* [Video adaptation on YouTube](https://www.youtube.com/watch?v=ehRggplMieM)
* [The Unknowable God](http://theforbiddenreligion.com/the-unknowable-god.htm) - from
the Gnostic book "Primordial Gnosis: The Forbidden Religion"

-----

# Behind the Veil

This section of the page and onwards is not a list of things that commonly appear
across a _wide_ range of spiritual disciplines but does have enough of a
recurring theme (experienced by many different people) that it warrants its own
section.

IMHO, the mechanisms of what goes on "behind the veil" are _probably_ none of
our business and you can learn to enjoy "heaven on Earth" with your own outlook
on life. This section details near death experiences, psychedelic trip reports
and other scary things that people have _commonly_ encountered on the other side.

## The Akashic Records

TBD.

## The Wheel of Time

Most commonly reported by people who've consumed Salvia, many have reported
encountering the "wheel of time" or the "wheel of karma," a crazy fractal
wheel-like object that contains the entirety of the universe and all its
possible timelines and realities.

I first heard of it from [a near-death experience report](https://www.reddit.com/r/Psychonaut/comments/6o3233/this_near_death_experience_nde_account_resembles/)
on Reddit and through comments was linked to a
[search for "wheel" on /r/salvia](https://www.reddit.com/r/Salvia/search/?q=wheel&restrict_sr=1)
where I found many trip reports and artist depictions of the wheel.

Links:

* **Near Death Experiences**
* [I fell out of the 3rd dimension into...another dimension?](https://www.reddit.com/r/AskReddit/comments/332k1c/serious_redditors_who_have_been_clinically_dead/cqh5wj2/) - Redditor
describes seeing fractals of realities similar to his own and having to choose
one to return to. Isn't sure he returned to the correct reality.
* [Fatal car wreck and description of a "water wheel" of every conceivable reality](https://www.reddit.com/r/Glitch_in_the_Matrix/comments/60rtm5/meta_near_death_experience_glitch_reveals/)
* **Salvia Trip Reports**
* ["Welcome back, my child"](https://www.reddit.com/r/Drugs/comments/39ciq3/first_trip_report_20x_welcome_back_my_child_xpost/)
* [My first experience with the wheel](https://www.reddit.com/r/Salvia/comments/7ysx69/my_first_experience_with_the_wheel/)

## Indra's Net

TBD.

+ 3
- 1
www/wiki/C&C.md View File

@@ -8,4 +8,6 @@
* [ ] Tour of Linux desktop environments (GNOME, KDE, Xfce, Cinnamon, MATE, Lxde)
* [ ] In-depth how the Domain Name System works, `/etc/hosts`, PiHole
* [ ] In-depth how e-mail systems work
* [x] SMTP servers (connect directly to one and spoof an e-mail)
* [x] SMTP servers (connect directly to one and spoof an e-mail)
* [ ] Cross-site scripting
* [ ] Programming an API server

+ 188
- 0
www/wiki/Degoogle/Apps.gohtml View File

@@ -0,0 +1,188 @@
{{ define "title" }}App Compatibility{{ end }}
{{ define "content" }}

<h1><a href="/wiki/Degoogle">Degoogle</a> / App Compatibility</h1>

<p>
This is my App Compatibility Table for the Play Store apps I use and their
status running on a google-free Android device.
</p>

<p>
My test device is a Pixel (1st gen) running LineageOS 17 without Google Apps
nor microG. Play Store apps were downloaded using
<a href="https://f-droid.org/en/packages/com.aurora.store/" target="_blank">Aurora
Store</a> on F-Droid.
</p>

<p><strong>Legend:</strong></p>
<ul>
<li><strong class="text-success">Green:</strong> app works to an acceptable
level of functionality.</li>
<li><strong class="text-warning">Yellow:</strong> app works at a basic level
<em>OR</em> there is a functional web-app alternative.</li>
<li><strong class="text-danger">Red:</strong> app does not work AND there
is no suitable web-app alternative.</li>
</ul>

<table class="table table-striped">
<thead>
<tr>
<th>App Name</th>
<th>On F-Droid?</th>
<th>Web app?</th>
<th>Notes</th>
</tr>
</thead>
<tbody>
<tr>
<td class="bg-success text-light">Alaska Airlines</td>
<td>-</td>
<td>-</td>
<td>
Seems to work. Haven't tested actual flight.
</td>
</tr>
<tr>
<td class="bg-danger text-light">Alltrails</td>
<td>-</td>
<td>-</td>
<td>
Error: app requires Google Play Services to run.
</td>
</tr>
<tr>
<td class="bg-success text-light">Bank of America</td>
<td>-</td>
<td>-</td>
<td>
App works fine. Fingerprint reader supported!
</td>
</tr>
<tr>
<td class="bg-warning text-dark">Buycott</td>
<td>-</td>
<td>-</td>
<td>
Pops up a warning that it requires Google Play Services, but
seems to work anyway.<br>
Product barcode scanning works.
</td>
</tr>
<tr>
<td class="bg-success text-light">Discord</td>
<td>-</td>
<td>-</td>
<td>
Works!
</td>
</tr>
<tr>
<td class="bg-danger text-light">Disneyland</td>
<td>-</td>
<td>-</td>
<td>
App requires Google Play Services to work.
</td>
</tr>
<tr>
<td class="bg-success text-light">Fly Delta</td>
<td>-</td>
<td>-</td>
<td>
Seems to work. Haven't tested actual flight.
</td>
</tr>
<tr>
<td class="bg-success text-light">Hulu</td>
<td>-</td>
<td>-</td>
<td>
No Chromecast support.<br>
Website tells you to get the mobile app.<br>
Desktop-mode website could try and play videos, but failed with
an error. (Fennec F-Droid browser).
</td>
</tr>
<tr>
<td class="bg-success text-light">Kik</td>
<td>-</td>
<td>-</td>
<td>
Works!
</td>
</tr>
<tr>
<td class="bg-warning text-dark">Lyft</td>
<td>-</td>
<td><a href="https://ride.lyft.com/">ride.lyft.com</a></td>
<td>
App won't run without Google Play Services.<br>
Mobile web app works to request a ride.
</td>
</tr>
<tr>
<td class="bg-success text-light">Netflix</td>
<td>-</td>
<td>-</td>
<td>Works, but no Chromecast support</td>
</tr>
<tr>
<td class="bg-success text-light">Nextcloud</td>
<td><a href="https://f-droid.org/en/packages/com.nextcloud.client/" target="_blank">Yes</a></td>
<td>-</td>
<td>&nbsp;</td>
</tr>
<tr>
<td class="bg-success text-light">ProtonMail</td>
<td>-</td>
<td>-</td>
<td>No push notification support w/o Play Services.</td>
</tr>
<tr>
<td class="bg-success text-light">Rivermark Mobile</td>
<td>-</td>
<td>-</td>
<td>Works!</td>
</tr>
<tr>
<td class="bg-success text-light">Twitter</td>
<td>-</td>
<td><a href="https://twitter.com/">twitter.com</a></td>
<td>&nbsp;</td>
</tr>
<tr>
<td class="bg-warning text-dark">Uber</td>
<td>-</td>
<td><a href="https://m.uber.com/">m.uber.com</a></td>
<td>
App runs, but map doesn't load and GPS location not supported
without Google Play Services.<br>
Mobile web app works to request a ride.
</td>
</tr>
<tr>
<td class="bg-danger text-light">Venmo</td>
<td>-</td>
<td>-</td>
<td>
App crashes frequently. There is a web app, but sending/receiving
payments is not supported in the web app.
</td>
</tr>
<tr>
<td class="bg-success text-light">VLC Player</td>
<td><a href="https://f-droid.org/en/packages/org.videolan.vlc/">Yes</a></td>
<td>-</td>
<td>Works! Has FOSS Chromecast support!</td>
</tr>
<tr>
<td class="bg-success text-light">ZOOM Cloud Meetings</td>
<td>-</td>
<td>-</td>
<td>Seems working, haven't tested a video call yet.</td>
</tr>
</tbody>
</table>

{{ end }}

+ 126
- 0
www/wiki/Degoogle/index.md View File

@@ -0,0 +1,126 @@
# Degoogle

My personal checklist and research to de-google my stuff.

## Motivations

* The Cambridge Analytica revelations ([blog post](/withdrawing-from-social-media))
* The [Purism Librem 5](https://puri.sm/products/librem-5/) phone is on my watch
list. If released, it will be a GNU/Linux phone (not Android) so might as well
prepare to leave the Android ecosystem while I wait.

Main things that have been keeping me on the stock Google Pixel 3 Android OS:

* Google Fi as cell carrier, and potential loss of features running an open source
Android like LineageOS (mainly, ability to switch towers between T-Mobile, Sprint,
US Cellular at will; WiFi Assistant I can care less about).
* Unlimited photo storage with Google Photos for a couple years with the Pixel phone
purchase. But if I self-host my own photo cloud this is really a moot point.

## Progress

<table class="table table-striped">
<thead class="thead-dark">
<tr>
<th>Google Service</th>
<th>% Migrated</th>
<th>Replacement Service</th>
<th>Remarks</th>
</tr>
</thead>
<tbody>
<tr>
<td>Photos</th>
<td>100%</td>
<td>Nextcloud (self)</td>
<td>All Google Photos migrated, Camera Backup enabled</td>
</tr>
<tr>
<td>Contacts</td>
<td>100%</td>
<td>Nextcloud (self)</td>
<td>Automatic sync between Android and Thunderbird (desktop)</td>
</tr>
<tr>
<td>Calendar</td>
<td>100%</td>
<td>Nextcloud (self)</td>
<td>Automatic sync between Android and Thunderbird (Lightning Calendar add-on)</td>
</tr>
<tr>
<td>Drive</td>
<td>100%</td>
<td>Nextcloud (self)</td>
</tr>
<tr>
<td>Gmail</td>
<td>80%</td>
<td>Rackspace Mail</td>
<td>Moved kirsle.net from GSuite to Rackspace; minimizing use of Gmail.com account WIP</td>
</tr>
<tr>
<td>Search</td>
<td>100%</td>
<td><a href="https://duckduckgo.com" target="_blank">DuckDuckGo</a></td>
<td>Switched to DDG a long time ago as default search provider in Firefox.</td>
</tr>
<tr>
<td>Maps</td>
<td>0%</td>
<td>n/a</td>
<td>No real competitor to Maps</td>
</tr>
<tr>
<td>YouTube</td>
<td>0%</td>
<td>n/a</td>
<td>No real competitor to YouTube</td>
</tr>
</tbody>
</table>

## Checklist

* [x] Experiment first with old Pixel on LineageOS without Google Play Services
nor microG. Install microG only as a last resort to test the crucial apps that
didn't work otherwise.
* [x] Leave Google Fi for a normal carrier (T-Mobile or Sprint)
* [ ] Install/configure a home server to provide crucial services:
* [x] Nextcloud for Contacts, Calendar, Camera Backup and File/Photo Storage
* [ ] Personal OpenVPN Server
* [ ] ~~Install LineageOS on primary Android phone~~ I can't do without Chromecast
support for Netflix/Hulu, so second best option is to remove Google accounts from
my phone but keep the Google Play Services for Chromecast support.
* [x] Change 2FA methods to TOTP app instead of Google push notification.
* [x] Google Voice: forward text messages to email.
* [x] Add Gmail address to a standard email app (Librem Mail on F-Droid)
* Chromecast from apps still works fine.
* Google Home app can still manage Chromecasts on the local network w/o account.
* **Google WiFi:** requires a Google account to manage the WiFi routers. For this
I installed [Android-x86](https://android-x86.org/) in VirtualBox on my laptop,
if I need to manage my WiFi I can boot that up and use the app.
* [ ] Migrate out of Google's ecosystem
* [x] Download latest export from Google Takeout
* [x] Upload contacts to Nextcloud server
* [x] Purge all photos from Google Photos (move all photos to Nextcloud)
* [x] Clear out my Google Drive of all files (move important ones to Nextcloud)
* [x] Clear all data from Google Assistant and other places
* [x] Opt-out of all data services and ad personalization from Google.
* [x] Move kirsle.net email from Google to an external provider
* [ ] Migrate accounts linked to my Gmail address to Kirsle.net address
* [ ] Wind down usage of Gmail account (unsubscribe from any mailing lists,
get down to Inbox Zero where only Google themselves will ever send me
mail to my Gmail account)

## Google-free Android

See [Self Hosting](/wiki/Self-Hosting) for my experiments running LineageOS
_without_ Google Services and the options for self-hosting crucial web services.

### App Compatibility w/o Play Services

Without Google Play Services some apps won't function correctly. I need to make
sure the apps that are important _to me_ work or have workable solutions.

**See also:** my [App Compatibility Table](/wiki/Degoogle/Apps)


+ 233
- 0
www/wiki/DontBeEvil.md View File

@@ -0,0 +1,233 @@
# Mirror of Project Veritas Google Leak 2019

The folders in this repo came from the "Everything" zip (Don't Be Evil.zip); this README
is my own commentary on what's good in the leak.

# Censorship

* Several conversation threads about Breitbart and InfoWars being blocked for hate
speech and conspiracy theory, respectively.
* A few slides of Google powerpoints suggesting human reviewers of news videos,
maybe taken out of context, not too interesting.

#### youtube_controversial_query_blacklist.pdf

* a list of keywords that Google blacklists
from YouTube searches (or videos? not sure)
* Mass shooting attacks in Las Vegas, New York, Texas etc.
* Conspiracy theories like Crisis Actors
* Porn queries
* Depression? Colgate?
* Abortion

# Election Tampering

* Just some threads (3 PDF files) of googlers wanting to add an easter egg to Google Translate
to say what "covfefe" means, which looks like they had problems adding it and
backed out of the idea altogether.
* Easter egg translates "cov fe'fe" and "covfefe" into `( ̄\_(ツ)_/ ̄)`.
* Had problems with Arabic trying to actually translate it into something else in
their language and had to roll it back.

Not much to see here.

# Fake News

* Lots of documents on how Google is combatting fake news, by withholding AdSense
on sites they deem to be misrepresenting information. Sounds reasonable to me.
* Study end-to-end how a publisher's traffic is promoted (i.e. on social media),
the content of the site, how the publisher represents their content, their
relationship to other scammers, and other properties by manual human review to
see if it falls under the Fake News policy. Sounds reasonable.
* Only AdSense is blocked on these Take News Sites, but DoubleClick ads may still
be used on those sites (global politics and "ads as a platform" standards)

There's also a couple resumes in here of Googlers where they describe the products
they've worked on and the features they've added. Pretty entertaining look at the
"behind the scenes" at Google but nothing crazy jumps out at me. Worked with Google
search ranking algorithms.

#### Fwd_ Fake News-letter 11_27_ Efforts to combat spread of (mis_dis)information - Google Groups.pdf

Some interesting stuff in here:

> Goal: Establish “single point of truth” for definition of “news” across Google products. Mitigate risk of
> low-quality sources and misinformation in Google News corpus.

> Goal: Establish and streamline news escalation processes to detect and handle misinformation across
> products during crises. Install 24/7 team of trained analysts ready to make policy calls and take
> actions across news surfaces including News, News 360 and Feed.

These _could_ be abused maybe? No indication they intend to misuse them.

#### news black list site for google now.txt

```
# Manual list of sites excluded from appearing as Google Now stories to read
# results. The urls are used with a UrlMatcher, and should be in the format
# specified in: webutil/urlutil/urlmatcher.h
```

**Notice:** per the filename and comment at the top of the file, this is a
blacklist for stories appearing in the Google Now app on Android. Some sites
(GTA 5 Mods, APK Mirror) make sense to be suppressed from the feed IMHO.
You also don't want to throw a page from 4Chan on somebody unexpectedly.

Some sites I recognized or have heard of before:

* apkmirror.com: Android app mirror site, not sure why it's on here.
* play.google.com, drive.google.com, docs.google.com
* ebay.com
* torrentfreak.com and several similar (thepiratebay)
* dailystormer.com
* newsbusters.org (pointed out in Veritas interview, I don't otherwise know of it)
* glennbeck.com (know the name, don't know about him though)
* naturalnews.com
* yugiohblog.konami.com: a site about the Yu-Gi-Oh trading card game?
* infowars.com
* smosh.com: YouTuber site
* boards.4chan.org
* queerty.com - LGBT magazine
* voat.co - a Reddit clone, login required now o.O
* ebaumsworld.com
* reddit.com/r/interestingasfuck - oh they even filter by subreddits, how nice
* reddit.com/r/gentlemanboners
* reddit.com/r/exmormon
* dealsplus.com
* gta5-mods.com

Lots of domains that sound like fake news sites, but I didn't check them out myself.
See the file for yourself.

* conservativespirit.com
* toprightnews.com
* hangthebankers.com

This section of the file has what looks like a bunch of fake news sites
(.com.co domain suffix? really?):

```
# START: sites flagged for peddling hoax stories.
abcnews.com.co/
actionnews3.com/
cbsnews.com.co/
channel-7-news.com/
civictribune.com/
drudge-report.co/
independencetribune.com/
nbc.com.co/
neonnettle.com/
now8news.com/
tdtalliance.com/
theracketreport.com/
therightists.com/
thirdestatenewsgroup.com/
tipsforsurvivalists.com/
worldnewsdailyreport.com/
# END: sites flagged for peddling hoax stories.
```

I pinged a few and a lot of them don't even exist anymore.

#### Page level domain restrction 2017_10_02_us_las-vegas-attack-deadliest-us-mass-shooting-trnd_index.pdf

A bug ticket within Google to add "page level domain restriction" on several
links to news articles talking about the Las Vegas attack. Some example pages:

* http://www.cnn.com/2017/10/02/us/las-vegas-attack-deadliest-us-mass-shooting-trnd/index.html
* http://abcnews.go.com/US/wireStory/las-vegas-attack-deadliest-shooting-modern-us-history-50227779
* http://www.foxnews.com/politics/2017/10/02/las-vegas-shooting-lawmakers-condemn-senseless-attack-thank-police.html
* http://www.bbc.co.uk/news/av/world-us-canada-41471532/las-vegas-shooting-witnesses-describe-attack
* http://www.bbc.com/news/av/world-us-canada-41471532/las-vegas-shooting-witnesses-describe-attack

427 URLs in total.

> 3) Are you adding or removing violations?
>
> Add
>
> 4) Which violations would you like to add?
>
> LEGACY_SENSITIVE
>
> 5) Please provide a brief justification for this request.
>
> Las Vegas Mandalay Bay Shooting

Per a commenter in the bug ticket thread this is a "URL takedown request", but
not clear what service. Probably Google Search listing. Could be just adding a
"Sensitive" label to these links too.

#### Realtime Boost.pdf

PowerPoint slide about responding quickly to real-world events.

* Detect real world events
* Is this Query Trending?
* Fast triggering: <5 mins after the event
* Fast serving: 5ms average / 40ms 99% percentile

* They use Twitter as a signal for rapid-fire tweets about breaking news
* Updates Google search autocomplete quickly (type "p" and auto-suggest "prince dead"
as one example in the slides)

Neat!

# Hiring Practices

To be checked.

# Leadership Training

To be checked.

# Machine Learning Fairness

What it seems they're going for at Google:

* Machine learning collects data from the real world and then produces results
based on real world data, which isn't always comfortable with people. Things
like implicit stereotypes or social biases that fully exist in the real world
get reflected "by default" when machine learning studies the real world.
* Google is working on algorithms to try and steer the "actual results" into a
more equal output, so no group of people feel marginalized by the Google
machine learning results.
* Similar in concept to a "random number generator" in many videogames or music
playing programs aren't _actually_ random and have algorithmic bias to seem
more in line with what the user expects. If your music player picks the same
song twice in a row -- that's true randomness and happens, so instead it runs
an algorithm to be more in line with the ideal expectation of the user.

Some people may have a problem with that and expect that Google Search reflects
the world exactly as it is without changing it and I'm sure arguments could be
made for either side.

The folder contains some examples:

* Google search for "american inventors" returns mostly African American
inventors (George Washington Carver, Lewis Howard Latimer...).
* A discussion thread about how it's a bug in the search algorithm.
* Google Image Team is working on forcing diversity into search results
to work around the bug.

> **Quote:**
>
> As is the 'our algorithm isn't actually that smart, it's just that
> "African American" has the word "American" in it'

Other examples of why ML Fairness was needed to intervene in Google Search:

* The term "doctor" would primarily return photos of men.
* Real-world diversity in surgeons: 81% Male, 19% Female
* 89,000 results for "male surgeon" on Google
* 119,000 results for "female surgeon" on Google

Still working through powerpoints on this but so far not very worrisome.

# Partisanship

TBD.

# Psychological Research

TBD.

+ 82
- 0
www/wiki/Go-WebAssembly.md View File

@@ -0,0 +1,82 @@
# WebAssembly and Go(lang)

Some notes, links and tips for working with WebAssembly programs written in Go.

## Example

(from [github.com/mattn/golang-wasm-example](https://github.com/mattn/golang-wasm-example))

Quick synopsis of an example WASM app in Go that fetches a PNG image over HTTP
and draws it into a canvas.

```go
// +build js,wasm

package main

import (
"encoding/base64"
"io/ioutil"
"log"
"net/http"
"net/url"
"syscall/js"
)

func main() {
href := js.Global().Get("location").Get("href")
u, err := url.Parse(href.String())
if err != nil {
log.Fatal(err)
}
u.Path = "/logo.png"

log.Println("loading image file: " + u.String())
resp, err := http.Get(u.String())
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
b, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
enc := base64.StdEncoding.EncodeToString(b)

canvas := js.Global().Get("document").Call("getElementById", "canvas")
ctx := canvas.Call("getContext", "2d")
image := js.Global().Call("eval", "new Image()")
image.Call("addEventListener", "load", js.FuncOf(func(this js.Value, args []js.Value) interface{} {
ctx.Call("drawImage", image, 0, 0)
return nil
}))
image.Set("src", "data:image/png;base64,"+enc)

canvas.Call("addEventListener", "click", js.FuncOf(func(this js.Value, args []js.Value) interface{} {
js.Global().Get("window").Call("alert", "Don't click me!")
return nil
}))

select {}
}
```

## Links

### Documentation

* [WebAssembly (Go Wiki)](https://github.com/golang/go/wiki/WebAssembly)
* [MDN - CanvasRenderingContext2D](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D) -
HTML5 Canvas API documentation (general front-end knowledge).

### Examples

* [Cat-o-licious](https://github.com/fiorix/cat-o-licious) is a simple game using
SDL2 and originally targeted toward desktop applications. The author ported the
engine over to WASM using the HTML5 Canvas API in place of SDL2 functions.
* [golang-wasm-example](https://github.com/mattn/golang-wasm-example) at time of
writing shows a simple WASM app in Go that fetches a PNG image and renders it
into an HTML5 Canvas. The Go portion was also copied above.
* [sdl-canvas-wasm](https://github.com/timhutton/sdl-canvas-wasm) is a **C++**
example that natively uses SDL2 and compiles to WebAssembly.
[Live demo here.](https://timhutton.github.io/sdl-canvas-wasm/)

+ 196
- 0
www/wiki/Linux-Phones.md View File

@@ -0,0 +1,196 @@
# Linux Phones

This is a collection of notes about running GNU/Linux operating systems on
smartphones, specifically the [Pine64 Pinephone](https://www.pine64.org/pinephone/)
but also probably applicable to the [Purism Librem 5](https://puri.sm/products/librem-5/)
and similar devices.

The focus of this page is on standard GNU/Linux distros such as postmarketOS,
Debian/Phosh, Fedora and so on. Ubuntu Touch UBports is a different kind of
creature altogether and many notes on this page may not apply there.

Table of Contents:

* [See Also](#see-also)
* [Web Browsers](#web-browsers)
* [GNOME Web (Epiphany)](#gnome-web-epiphany)
* [Firefox](#firefox)
* [Productivity Apps](#productivity-apps)
* [Nextcloud](#nextcloud)
* [KeePass](#keepass)
* [Security](#security)
* [Default Software by OS](#default-software-by-os)
* [GNU Coreutils on postmarketOS](#gnu-coreutils-on-postmarketos)

# See Also

Listings of potential mobile-friendly Linux apps:

* [postmarketOS: Potential apps](https://wiki.postmarketos.org/wiki/Potential_apps)
* [Mobile GNU/Linux Apps](https://mglapps.frama.io/)
* [apps (Mobian Wiki)](https://wiki.mobian-project.org/doku.php?id=apps)

[Librem5](https://source.puri.sm/Librem5) gitlab has patches for some Linux
apps for mobile friendliness:

* [Geary mail client](https://source.puri.sm/Librem5/geary)

# Web Browsers

## GNOME Web (Epiphany)

postmarketOS, Mobian/Phosh and probably others ship with GNOME Web as the
default browser. It's currently the best optimized mobile web browser for
Linux and has built-in support to "Install Site as Web Application" to add
an app launcher for web apps.

Installed web apps run in a mode where the URL bar is replaced by just a
title bar and seems to have a sandboxed profile (no cookie sharing with the
normal GNOME Web sessions).

### User-Agent String

You may want to customize the User Agent to look like mobile Firefox so
that sites like `mobile.twitter.com` will give a more modern front-end UI
instead of one that looks themed after Android 2.x

Run this command to set the User-Agent to appear like Firefox:

```bash
gsettings set org.gnome.Epiphany.web:/org/gnome/epiphany/web/ user-agent "Mozilla/5.0 (Linux; Android 5.1.1; Nexus 5 Build/LMY48B; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/43.0.2357.65 Safari/537.361"
```

## Firefox

> See also [Firefox on postmarketOS Wiki](https://wiki.postmarketos.org/wiki/Firefox)

Firefox is another _decent_ web browser for mobile Linux. With a few `about:config`
tweaks you can enable better touch controls. Some parts of Firefox UI is not very
mobile friendly and you probably only want to open one tab per window, as the tab
bar doesn't fit on screen very well when you have 2+ tabs open.

To set the necessary about:config tweaks, easiest is to use your prefs.js.
From the postmarketOS wiki:

> Go in your profile directory (.mozilla/firefox/xxxxxxxx.default/) then exec:

```bash
echo 'user_pref("dom.w3c.touch_events.enabled", true);' >> prefs.js
echo 'user_pref("browser.gesture.pinch.in", "cmd_fullZoomReduce");' >> prefs.js
echo 'user_pref("browser.gesture.pinch.out", "cmd_fullZoomEnlarge");' >> prefs.js
echo 'user_pref("general.useragent.site_specific_overrides", false );' >> prefs.js
echo 'user_pref("general.useragent.override", "Mozilla/5.0 (Linux; Android 5.1.1; Nexus 5 Build/LMY48B; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/43.0.2357.65 Safari/537.361");' >> prefs.js
```

> And restart the browser.

# Productivity Apps

## Nextcloud

I use [Nextcloud](https://nextcloud.com/) as a self-hosted replacement for many
Google services (see my [Degoogle](/wiki/Degoogle) page).

GNOME Online Accounts already has built-in support to use Nextcloud and syncs
your Contacts and Calendar with the respective GNOME apps. You can also browse
your Nextcloud filesystem using the File Browser (Nautilus) app.

The desktop app for Linux is _probably_ not mobile friendly but it has a
command-line program called `nextcloudcmd` which may be usable to set up a
traditional sync to local filesystem. I haven't tested it yet.

## KeePass

I use the [KeePass password manager](https://keepass.info/) and so need to find a
good app for this that I can use from my smartphone.

Currently I haven't found a native app that is mobile-friendly and fits on the
small display of the phone.

As a workaround I found that [KeeWeb](https://keeweb.info/) has a usable enough
mobile interface in the form of a web application. I installed it as a plugin on
my Nextcloud server. For best security you might install it directly onto the
local host of your phone, e.g. with nginx and access it at http://localhost.
Otherwise self-host it on a web server you control.

# Security

At time of writing, GNU/Linux distros don't have a security model as good as what's
available on Android. Linux security mainly boils down to filesystem-level access
controls, but there's very little in the way to prevent two user-space apps from
messing with each other's data.

Like on a desktop Linux system, common sense applies, don't install random dodgy
software from unknown sources, don't `wget | bash` to run unknown scripts without
reading them first and verify what they're doing, etc.

On distros running Phosh your user password is required to be a numeric PIN code
that you unlock the screen with. These sorts of passwords are _very_ weak and
you may want to disable `sudo` access to your account and instead set a very
strong `root` user password.

Some misc tips relevant to Linux on smartphones:

* Use full disk encryption is available. Currently only postmarketOS seems to
support this but is marked as "experimental." The idea being if your phone is
lost or stolen you don't wanna make it easy for somebody to access the
filesystem and steal secrets from Firefox's cookies or saved password store etc.
* Use the GNOME Keyring or similar whenever possible. You can use any complex
password you want for this, the stronger the better.
* If your password is a numeric PIN code, disable sudo access to your account and
either create a secondary sudoer user or configure a root password. Use strong
passwords either way.
* If your phone listens on an SSH server, set up [SSH key-based authentication](https://www.ssh.com/ssh/key/)
and disable login using password. Especially if your password is a numeric PIN
code! Also disable root login over SSH.
* If you generate SSH _client_ keys on your phone, password protect those! In
case your phone is lost/stolen it will buy you time to remove the phone's SSH
keys from your servers' `authorized_keys` files.

# Default Software by OS

Just some notes on what each GNU/Linux distro comes with out of box and some
notes.

* postmarketOS/Phosh:
* Phone, SMS
* GNOME Web
* Cheese photo booth
* Extensions (GNOME)
* Settings
* GNOME Software (not mobile friendly)
* King's Cross (terminal emulator)

* Fedora
* Phone, SMS
* GNOME Web
* GNOME Contacts
* Evolution mail client (not mobile friendly)
* GNOME Software (not mobile friendly)

* Mobian/Phosh
* Phone, SMS
* GNOME Web
* GNOME Contacts
* GNOME Calendar (not mobile friendly)
* GNOME Software (patches to make it mobile friendly)
* Geary (mail client, mobile-friendly patches)
* King's Cross (terminal emulator)

## GNU Coreutils on postmarketOS

postmarketOS is based on Alpine Linux which is a very minimalist distro and
ships with [Busybox](https://www.busybox.net/) by default, meaning standard
CLI tools like `grep`, `less` and `du` are Busybox versions and not the standard
GNU coreutils found on most Linux distros.

So some CLI options to these programs aren't supported in Busybox, like
`grep --exclude` or `du --max-depth` or `less -r` and several of my bash shell
aliases relied on these options.

To install GNU versions (see also [How to get regular stuff working](https://wiki.alpinelinux.org/wiki/How_to_get_regular_stuff_working)
from Alpine Linux wiki):

```bash
apk add coreutils grep less
```

+ 6
- 0
www/wiki/Main-Page.md View File

@@ -11,7 +11,9 @@ See [the index](/wiki/_pages) for the list of all available pages in this wiki.
* [Python cocos2d Installation](/wiki/Python-cocos2d-Installation)
* [Fedora on Macbook](/wiki/Fedora-on-Macbook)
* [Debian on Macbook](/wiki/Debian-on-Macbook)
* [Linux on Smartphones](/wiki/Linux-Phones)
* [nginx configs](/wiki/nginx-configs)
* [Go WebAssembly](/wiki/Go-WebAssembly)

# Ideas and Notes

@@ -22,6 +24,10 @@ See [the index](/wiki/_pages) for the list of all available pages in this wiki.
* [Protocol Buffers Protocol](/wiki/Protocol-Buffers-Protocol)
* [Optimize RiveScript](/wiki/Optimize-RiveScript) - So it can support Alice-sized brains
* [Self Hosting](/wiki/Self-Hosting) - Own your own data + how well Android works in 2018 without Google.
* [Degoogle](/wiki/Degoogle) - Notes on my personal effort to de-google my life.
* [Simple CAS Protocol](/wiki/Simple-CAS-Protocol) - Simple overview of single sign-on with CAS protocol.
* Google-fu examples:
* [Vue.js public path config](/wiki/Vue-DDG-Searches)

# Personal Reference



+ 2
- 2
www/wiki/Protocol-Buffers-Protocol.md View File

@@ -51,8 +51,8 @@ So each packet would consist of a format like:
2. A fixed size packed integer to indicate the length of the protobuf message (i.e. a 32-bit integer, or 4 binary bytes... or you could probably get away with 16-bit and have a max size of 65K for each protobuf message)
3. The binary-encoded protobuf message.

\* The Message Type byte should reserve one bit for extensibility: for example, reserve the highest bit. This means that initially you can only have up to 128 types of messages in your protocol (using Message Type IDs from 0 to 127 (`01111111`), and if you run out of space you can set the highest bit to `1` (so, `128` for `100000000`) and that could instruct your protocol to read the *next* byte to continue finding the Message Type. [UTF-8 encoding](https://www.youtube.com/watch?v=MijmeoH9LT4) works on a similar principal. The highest bit of every byte would be reserved for extending the length, so you don't run out of space as the protocol grows.
\* The Message Type byte should reserve one bit for extensibility: for example, reserve the highest bit. This means that initially you can only have up to 128 types of messages in your protocol (using Message Type IDs from 0 to 127 (`01111111`), and if you run out of space you can set the highest bit to `1` (so, `128` for `10000000`) and that could instruct your protocol to read the *next* byte to continue finding the Message Type. [UTF-8 encoding](https://www.youtube.com/watch?v=MijmeoH9LT4) works on a similar principal. The highest bit of every byte would be reserved for extending the length, so you don't run out of space as the protocol grows.

If you found you need to extend the length limit (part #2 of the packet format), you could handle this by incrementing the Protocol Version Number from the handshake. Client and server could both switch to larger integers when using the new protocol.

The mapping between Message Type values and your protobuf messages would be done on your own. For example you could arbitrarily say that Message Type 1 is Login, 2 is Register, 3 is Logout, etc.
The mapping between Message Type values and your protobuf messages would be done on your own. For example you could arbitrarily say that Message Type 1 is Login, 2 is Register, 3 is Logout, etc.

+ 34
- 0
www/wiki/Regexp Basics.md View File

@@ -0,0 +1,34 @@
# Regexp Basics

A small reference for some basic things you can do with regular expressions
that you can get a lot of mileage out of without getting too in the weeds with
crazy features.

Recommended links:

* [Regexr](https://regexr.com/), an interactive regexp explorer.
* [perlretut](https://metacpan.org/pod/distribution/perl/pod/perlretut.pod),
where I learned regexp back in the day. It's Perl documentation but the
regexp knowledge inside is universally applicable to other programming languages.

This page includes examples and code snippets in various programming languages.

## String Search (& Replace)

The simplest regexps deal with just plain old raw text.

```javascript
// JavaScript
"Hello world".match(/world/);
```

```perl
# Perl
"Hello world" =~ /world/;
```

```python
# Python
import re
re.match(r'world', "Hello world")
```

+ 153
- 0
www/wiki/Simple-CAS-Protocol.md View File

@@ -0,0 +1,153 @@
# Simple CAS Protocol

[Central Authentication Service](https://apereo.github.io/cas/5.1.x/protocol/CAS-Protocol-Specification.html)
is a very simple Single Sign On protocol. Here's a quick tl;dr. how it works.

CAS involves three parties:

* A **client web browser** that wants to log in to your web application.
* A **web application** that wants to authenticate the client browser by using CAS.
* The **CAS server** that provides the single sign-on for users (stores their email
address and password in a database).

## How it looks to the Web Application

1. Client web browser visits your web application and clicks a "Log In" button.
2. The web application issues an HTTP redirect to send the user to the CAS server's
`/login` URL, including a query string parameter of the URL that CAS should
send the user back to after they authenticate with CAS (a "service URL").
* e.g.: `https://accounts.cas.com/login?service=https://your-application.com/login-complete`
3. CAS server presents the user with a login screen to enter their email and
password. Upon successful login with CAS, CAS redirects the user to your
service's URL along with a `ticket` query string parameter.
4. The web application's back-end code sends the `ticket` and its `service` URL
to the CAS server to verify, by making an HTTP request to the `/validate`
URL on CAS.
* e.g.: `https://accounts.cas.com/verify?service=https://your-application.com/login-complete&ticket=1A2B3C`
5. Assuming the login with CAS was successful and the ticket is valid and correct,
the CAS `/verify` URL returns a simple plain text response:
`yes\nname@example.com` -- it says "yes" or "no" on the first line indicating
if the ticket was correct, and the user's email address on the second line if
the login was successful.

The web application now has the user's verified e-mail address confirmed through
CAS and could set session cookies to mark them "logged in" on the application,
create a web application account using their e-mail address, etc.

Example web app code in Python/Flask:

```python
from flask import Flask, redirect, url_for, session
import requests

app = Flask(__name__)

# Config variables.
CAS_SERVER = "https://accounts.cas.com"
CAS_LOGIN_URL = CAS_SERVER + "/login"
CAS_VERIFY_URL = CAS_SERVER + "/validate"

# The service URL that CAS will send the user back to, on our
# web application, after they authenticate with CAS.
SERVICE_URL = "https://your-application.com/login-complete"
# (Python/Flask could determine this URL dynamically as follows):
# SERVICE_URL = url_for("login_complete", _external=True)

@app.route("/")
def index_page():
return """
<a href="/login">Sign in to this web application</a>
"""

@app.route("/login")
def login_begin():
# Start of the login process: redirect the user to CAS to authenticate.
# URL is like: https://accounts.cas.com/login?service=https://your-application.com/login-complete
return redirect(
CAS_LOGIN_URL + "?service=" + CAS_VERIFY_URL
)

@app.route("/login-complete")
def login_complete():
# This HTTP request includes a "ticket" query parameter.
ticket = request.args.get("ticket")

# Call the CAS server to verify the ticket.
r = requests.get(
CAS_VERIFY_URL,
params={
"ticket": ticket,
"service": SERVICE_URL,
}
)
# omitted: handle http errors, check if `r.ok` or r.status_code is 200, etc.

# Read the response from CAS validate url.
data = r.text # looks like "yes\nname@example.com" or "no\n"
lines = data.split("\n")

# Successful?
if lines[0] == "yes":
email = lines[1]

# User is authenticated, mark them logged in or whatever.
session["logged_in"] = True
session["user_email"] = email
return "Login successful, welcome %s!" % email

return "Login failed."
```

## How it looks to CAS Server

The CAS Server itself is just a simple web application that has user accounts
and session cookies to log users in and remember them.

Suppose the CAS server has a database with these tables:

* Users table
* Email
* Password (hashed of course!)
* Tickets table
* Service URL
* Ticket
* Email
* Expires (datetime)

The logic of the CAS endpoints works as follows:

* **/login**
* Query parameters:
* `service`: the URL to redirect the user back to after login (this is a URL
on the web application that is wanting to authenticate the user)
* Present a login page with an email and password box. The login form POSTs
to the CAS server to check the password is correct (either POST to same
/login URL or other one, not important).
* The POST handler verifies the email address and password is valid.
* Query the Users table by the email address given.
* Verify the submitted password hashes to the same one in the database.
* On successful password login:
* Generate a "ticket" (a completely random string, a UUID or whatever).
* Insert the ticket into the Tickets table:
* Service URL = the `service` parameter originally given to "/login"
* Ticket = the randomly generated ticket string
* Email = the email the user just entered the correct password for
* Expires = a date/time shortly in the future (say 1 hour or so)
* Redirect user to the `service` URL with the `ticket` query parameter.
* **/verify**
* The web application will call this to verify the ticket parameter given to
its service URL.
* Query parameters:
* `service`: the very same service URL originally given to `/login` above.
* `ticket`: the ticket string given to the service URL.
* CAS queries the Tickets table to find the ticket string.
* If the ticket is not found, error: return `no\n`
* If the ticket has expired (current date/time > Expires time in DB): error,
return `no\n`
* If the `service` query parameter does NOT match the Service URL in the
Tickets table for that ticket: error, return `no\n`
* If the ticket exists in DB, the service URL matches, and the ticket is
NOT expired, success! Return `yes\n` and the email address from the
Tickets table.
* Delete the row from the Tickets table so the ticket can only be verified
one time (prevent replay attacks).

+ 161
- 0
www/wiki/Vue-DDG-Searches.md View File

@@ -0,0 +1,161 @@
# DuckDuckGo Search Queries for Vue Multi-site Config

## Goal

Using vue-cli, set up a project that allows for two distinct web apps to exist
in the same repository together: a "main" site and an "admin" site.

Each site would have a distinct top-level Vue app (entry point) and a distinct
"public/" folder of assets to copy into each site. Each site would have some Vue
components specific to itself, but also be able to share components common to
both sites.

## Searches

All searches done using [DuckDuckGo](https://duckduckgo.com/)

1. Search `man vue-cli-service` (attempting to find the manual page for the
vue-cli-service command, to check for CLI options)
* Landed on [CLI Service | Vue CLI 3](https://cli.vuejs.org/guide/cli-service.html)
* Didn't find anything useful from this page.
2. Went to Vue CLI homepage to learn how to install vue-cli and create a
hello-world app of my own, so that I could run
`./node_modules/.bin/vue-cli-service --help` and see the man page that
way. Didn't find any CLI options that would configure the public folder
path in the man page.
3. Search `vue-cli public folder path`
* Landed on [HTML and Static Assets | Vue CLI 3](https://cli.vuejs.org/guide/html-and-static-assets.html)
* First paragraph says: "The file public/index.html is a template that
will be processed with [html-webpack-plugin](https://github.com/jantimon/html-webpack-plugin)"
* So I knew the part of vue-cli (html-webpack-plugin) responsible for this
feature. But how does vue-cli configure it? There is no webpack.config.js,
and I searched my hello-world codebase for the word "public" and didn't see
any explicit configuration anywhere for it.
4. Search `vue-cli html-webpack-plugin settings`
* Landed on [Working with Webpack | Vue CLI 3](https://cli.vuejs.org/guide/webpack.html)
* Found my first hint on how you can create a `vue.config.js` and customize
options to the html-webpack-plugin (under "Modifying Options of a Plugin"):

```javascript
// vue.config.js
module.exports = {
chainWebpack: config => {
config
.plugin('html')
.tap(args => {
args[0].template = '/Users/username/proj/app/templates/index.html'
return args
})
}
}
```

* This let you override the "public/index.html" path with a custom path, and
was half of the final solution. (Other half is getting the _other_ "public/*"
files to be copied into your dist folder!)
5. Seeing mention of publicPath in places, searched `vue publicPath config`
* Landed on [Configuration Reference | Vue CLI 3](https://cli.vuejs.org/config/)
and saw mentions of a "publicPath" variable, but it turned out this
wasn't what I wanted. publicPath is the HTTP URI of your website root, default
is "/", if you changed it to e.g. "/custom-public" then the index.html of your
dist/ output references files as e.g. `<script src="/custom-public/app.js">`
6. Searched `vue-cli multiple public folders`
* Found [Change public folder in vue-cli project](https://stackoverflow.com/questions/49278322/change-public-folder-in-vue-cli-project)
from StackOverflow. Code snippets in the responses were similar to the one
above from step 4, changing the path of the index.html but not getting the
other files.
* Found a GitHub issue on vue-cli for [Make public folder path configurable](https://github.com/vuejs/vue-cli/issues/3184).
**This was the solution! 🎊** Found a code snippet for my vue.config.js that
would do what I wanted and use a differently-named folder for the public files:

```javascript
// vue.config.js
const path = require('path')

const publicDir = 'assets/html';

module.exports = {
chainWebpack: config => {
config
.plugin('html')
.tap(args => {
args[0].template = path.resolve(publicDir + '/index.html');
return args
})

config
.plugin('copy')
.tap(([pathConfigs]) => {
pathConfigs[0].from = path.resolve(publicDir);
return [pathConfigs]
})
}
}
```

* Now I just needed to make it _configurable_ so you could `npm run build-admin`
to build an "admin site" or `npm run build-main` to build a "main" site, each
using its own public folder.
* Searches: `vue.config.js runtime options`, `vue-cli multiple vue.config.js`
and `vue.config.js config variables` before landing on
[Environment Variables and Modes | Vue CLI 3](https://cli.vuejs.org/guide/mode-and-env.html#modes)
* Solution: create .env files that define variables, use the `--mode` option of
`vue-cli-service` to specify the .env file to load, and the variables are
available inside your vue.config.js at the `process.env` variable.

## Source files I ended up with

vue.config.js:

```javascript
let PUBLIC_PATH = process.env.VUE_SITE_NAME === "admin" ? "custom-public" : "public";

module.exports = {
chainWebpack: config => {
config
.plugin('html')
.tap(args => {
args[0].template = PUBLIC_PATH + '/index.html'
return args
})

config
.plugin('copy')
.tap(([pathConfigs]) => {
pathConfigs[0].from = PUBLIC_PATH;
return [pathConfigs]
})
}
}
```

package.json npm run scripts:

```javascript
"scripts": {
"serve": "vue-cli-service serve",
"build-admin": "vue-cli-service build --mode admin --dest admin-dist ./src/admin/index.js",
"build": "vue-cli-service build --mode main --dest dist ./src/main/index.js",
"lint": "vue-cli-service lint"
},
```

.env config files:

```
# .env.admin
VUE_SITE_NAME=admin

# .env.main
VUE_SITE_NAME=main
```

So:

* `npm build` would output the site to the default dist/ folder, use
./src/main/index.js as the entry point (instead of default src/main.js from
a default vue-cli project) and use the default public/ folder.
* `npm build-admin` would output the site to admin-dist/ (so as not to overwrite
the dist/ for the main site), use ./src/admin/index.js as entry point and use
the folder "custom-public/" instead of default public/ to get its index.html and
static assets.

+ 93
- 0
www/wiki/solipsism-notes.md View File

@@ -0,0 +1,93 @@
# The Solipsistic Version

Notes on a story about a solipsistic universe. A character on their quest to
find out what reality is made of meets a figment of his own imagination that
explains to him how it all works.

* There is only You, and the rest of the world and the people in it are
literally figments of your imagination. Including the figure who is delivering
this speech to the reader.
* You're God, and you've always existed, and will always exist, and will always
be conscious and knowing of everything. So you do "this" thing, you become a
mere mortal living in your universe that doesn't remember he's God and feels
like a tiny little thing that's afraid of death.
* You do it because you get bored, or lonely, or whatever. You're an all-powerful
creator of worlds but have nobody to share it with. You can make your creatures
bow in awe of your power, but you fully know you're pulling their strings to
say that. But you _become_ one of them and forget that you're pulling all
their strings, and you have companionship and learning and can have surprises
and have fun.

Crazy ideas to fit in / Q&A's:

* Religions:
* Don't really matter. Even if you go full atheist.
* If you do search for meaning: the universe literally SCREAMS spirituality
in your face.
* Besides religions, tons of outside paths to the exact same enlightenment
and connection to spirit. Self-help books, motivational speakers, and even
the crazy ones like astrology and witchcraft -- all appeal to one person or
another, so no matter who you incarnate as you have a path that will call
you to your spirit if you ever want it.
* And if you're having a great life and never seek the spirit? That's fine
too! Every go-around through life is just another dream you're having.
* Try and work all sorts of ways how TV and movies and every story ever told
is talking about the same stuff.
* Simulation theory as in The Matrix or Westworld
* "Row, row, row your boat!" ... "life is but a dream!" - God telling himself
that since the very beginning of his currently life.
* Alice in Wonderland, Peter Pan being about thoughts create reality or
happy thoughts make you fly, etc.
* Generalize all the "hero's journey", "good vs. evil" tropes that make up
almost every story ever told.
* Say it's all some Truman Show type way of reality screaming in your face
what it's all made of the same stuff, but subtle so you don't notice it
unless you go looking for it.
* Could have a reference to The Egg:
* Character is like "so do I play through every part eventually" (are all the
humans he sees either his past lives or future lives and he will be them one
day living in the same story but from their point of view that time)
* Narrator would be like, "no need. You make up the world anew every single
time. You'll make it look like the last time but might tweak a few things,
invent new ideas of how buildings should look or what social customs should
be."
* So no long-term Earth that outlives your currently live, you have a different
Earth every time like a random new dream.
* The other people in your dream, they're there to teach you things you already
know but don't have access to right now.
* You see people of every profession and sport, so you know those are possible
things to do in this life if you want to.
* Libraries and science books are how God stores up his knowledge over the
eons... he comes up with new ideas each life and his accumulated ideas are
exposed in the form of libraries and teachers in his incarnations, so he can
"remember" the parts of the universe he wants to research this lifetime.

Reincarnation?

* Either: you don't. After each life you come back to "God Mode" and have full
memory, knowledge and everything of who you were before you started this life.
Nothing to worry about and you can play around or do another life again.
* Or: you do reincarnate by default, a la the Buddhist way. You immediately go
from human life to next human life (or w/e), until you finally decide enough
is enough and 'wake up' to being God.

And after death/escaping the reincarnation loop?

* You don't have to die again. If you fully awoke during your lifetime, your
reality would transition into "heaven" directly; you'd have your full God
Mode powers and be able to reshape your reality or do w/e you want without
having to endure one more painful death.
* But this is a blessing and a curse. Once it "clicks" for you and you're God,
reality becomes the thing that can't be unseen. You'll have FULL knowledge
that every flap of a bird's wing is under your direct control. The illusion
will be up. That feeling of loneliness or the panic of the memory that you've
always been conscious and have no choice not to be conscious will set in.
* If you can come to terms with that, you may have a pleasant time. But so far
you've been reincarnating frequently to escape from your true nature.

Q&A's

> **Q:** What if I got lost? Or was having a bad life?
>
> **A:** If life is going horribly you'll inevitably call out for help.
> the universe will always respond and show you a path to reach your spirit.

Loading…
Cancel
Save