summaryrefslogtreecommitdiff
path: root/memos
diff options
context:
space:
mode:
authornetop://ウィビ <paul@webb.page>2026-04-11 14:24:49 -0700
committernetop://ウィビ <paul@webb.page>2026-04-11 14:24:49 -0700
commit8c34d810af95fae0ef846f54370a8c88bfab7123 (patch)
tree436beaf30f7b2b3f15741dd54a37e313964d1f7d /memos
initial commitHEADprimary
Diffstat (limited to 'memos')
-rw-r--r--memos/WM-001.txt51
-rw-r--r--memos/WM-002.txt141
-rw-r--r--memos/WM-003.txt103
-rw-r--r--memos/WM-004.txt251
-rw-r--r--memos/WM-005.txt114
-rw-r--r--memos/WM-006.txt69
-rw-r--r--memos/WM-007.txt89
-rw-r--r--memos/WM-008.txt203
-rw-r--r--memos/WM-009.txt158
-rw-r--r--memos/WM-010.txt95
-rw-r--r--memos/WM-011.txt60
-rw-r--r--memos/WM-012.txt86
-rw-r--r--memos/WM-013.txt242
-rw-r--r--memos/WM-014.txt430
-rw-r--r--memos/WM-015.txt63
-rw-r--r--memos/WM-016.txt92
-rw-r--r--memos/WM-017.txt348
-rw-r--r--memos/WM-018.txt312
-rw-r--r--memos/WM-019.txt125
-rw-r--r--memos/WM-020.txt635
-rw-r--r--memos/WM-021.txt124
-rw-r--r--memos/WM-022.txt134
-rw-r--r--memos/WM-023.txt120
-rw-r--r--memos/WM-024.txt119
-rw-r--r--memos/WM-025.txt217
-rw-r--r--memos/WM-026.txt157
-rw-r--r--memos/WM-027.txt69
-rw-r--r--memos/WM-028.txt143
-rw-r--r--memos/WM-029.txt125
-rw-r--r--memos/WM-030.txt107
-rw-r--r--memos/WM-031.txt111
-rw-r--r--memos/WM-032.txt241
-rw-r--r--memos/WM-033.txt144
-rw-r--r--memos/WM-034.txt71
-rw-r--r--memos/WM-035.txt101
-rw-r--r--memos/WM-036.txt100
-rw-r--r--memos/WM-037.txt181
-rw-r--r--memos/WM-038.txt155
-rw-r--r--memos/WM-039.txt183
-rw-r--r--memos/WM-040.txt293
-rw-r--r--memos/WM-041.txt330
-rw-r--r--memos/WM-042.txt206
-rw-r--r--memos/WM-043.txt167
-rw-r--r--memos/WM-044.txt312
-rw-r--r--memos/WM-045.txt247
-rw-r--r--memos/WM-046.txt176
-rw-r--r--memos/WM-047.txt70
-rw-r--r--memos/WM-048.txt169
-rw-r--r--memos/WM-049.txt94
-rw-r--r--memos/WM-050.txt96
-rw-r--r--memos/WM-051.txt181
-rw-r--r--memos/WM-052.txt89
-rw-r--r--memos/WM-053.txt97
-rw-r--r--memos/WM-054.txt204
-rw-r--r--memos/WM-055.txt123
-rw-r--r--memos/WM-056.txt101
-rw-r--r--memos/WM-057.txt124
-rw-r--r--memos/WM-058.txt94
-rw-r--r--memos/WM-059.txt65
-rw-r--r--memos/WM-060.txt90
-rw-r--r--memos/WM-061.txt159
-rw-r--r--memos/WM-062.txt73
-rw-r--r--memos/WM-063.txt206
-rw-r--r--memos/WM-064.txt89
-rw-r--r--memos/WM-065.txt73
-rw-r--r--memos/WM-066.txt130
-rw-r--r--memos/WM-067.txt347
-rw-r--r--memos/WM-068.txt399
-rw-r--r--memos/WM-069.txt148
-rw-r--r--memos/WM-070.txt78
-rw-r--r--memos/WM-071.txt143
-rw-r--r--memos/WM-072.txt93
-rw-r--r--memos/WM-073.txt48
-rw-r--r--memos/WM-074.txt110
-rw-r--r--memos/WM-075.txt119
-rw-r--r--memos/WM-076.txt43
-rw-r--r--memos/WM-077.txt123
-rw-r--r--memos/WM-078.txt222
-rw-r--r--memos/WM-079.txt115
-rw-r--r--memos/WM-080.txt183
-rw-r--r--memos/WM-081.txt91
-rw-r--r--memos/WM-082.txt69
-rw-r--r--memos/WM-083.txt104
-rw-r--r--memos/WM-084.txt37
-rw-r--r--memos/WM-085.txt210
-rw-r--r--memos/WM-086.txt271
-rw-r--r--memos/WM-087.txt248
-rw-r--r--memos/WM-088.txt77
88 files changed, 13605 insertions, 0 deletions
diff --git a/memos/WM-001.txt b/memos/WM-001.txt
new file mode 100644
index 0000000..dae641b
--- /dev/null
+++ b/memos/WM-001.txt
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+Document: WM-001 P. Webb
+Category: Announcement 2016.12.26
+
+ And so, it begins
+
+Abstract
+
+ Introduction to this humble blog.
+
+Body
+
+ Welcome to theWebb.blog[1]! I am your host, the *most fantabulous*
+ Paul Anthony Webb a/k/a NetOperator Wibby (virtually everywhere else
+ on the vast Internet). What can you expect from theWebb.blog?
+ Basically anything that comes out of my head and holds my attention
+ long enough to be written about.
+
+ I thought about porting the posts from my previous blog[2], but I'd
+ rather start fresh. After all, after the *tumultuous* year that was
+ 2016, I think we could *all* use a fresh start.
+
+ As a professional front-end web designer and developer, I thought
+ about creating a beautiful theme to showcase my dope skills but I
+ tend to go overboard and never release things. I'm aiming to change
+ that. I was also going to write my own blogging platform after my
+ frustration and false start with Ghost[3] but then I found Hexo[4]
+ (shoutout to the creator of NX framework[5] for the recommendation)!
+
+ Long story short, I intend to stick around with this blog for quote
+ some time. Fancy upgrades and whatnot will happen over the next year
+ and years after that. Kottke[6] has been blogging since 2008. I
+ graduated high school in 2006! *Crazy*.
+
+ I hope you'll find my little area on the Internet of interest at
+ least a few times. 🕸
+
+References
+
+ [1] <https://thewebb.blog>
+ [2] <https://dsgn.io/thoughts>
+ [3] <https://ghost.org>
+ [4] <https://hexo.io>
+ [5] <https://github.com/solkimicreb>
+ [6] <https://kottke.org>
diff --git a/memos/WM-002.txt b/memos/WM-002.txt
new file mode 100644
index 0000000..ab2a8ad
--- /dev/null
+++ b/memos/WM-002.txt
@@ -0,0 +1,141 @@
+
+
+
+
+
+
+
+Document: WM-002 P. Webb
+Category: Life 2016.12.27
+
+ What I've achieved in 2016
+
+Abstract
+
+ Looking back on the awesome things that's happened to me in 2016.
+
+Body
+
+ Last year, I decided to look back[1] on everything I've
+ learned/achieved and it was a great reflective experience. So, here
+ it is again for 2016!
+
+ 1. Became a father to a newborn
+
+ I was already a dad but I've never experienced taking care of a
+ *brand new* life. I was worried that my son wouldn't like me and
+ other silly non-sensical things like that. In reality, it is
+ *super* challenging at times but he's a happy boy who has no
+ problem falling asleep in my arms. And biting me. And farting on
+ me. Needless to say, he's super comfortable with his papa. 😁
+
+ 📸[Ian Asher and I][IMG1]
+
+ 2. Moved all my projects to GitLab
+
+ After running my own email server for half a year, I wondered why
+ I was *still* paying GitHub for private repos. What they
+ ~~charged~~ used to charge didn't make sense so I set up a
+ personal GitLab instance[2] and I couldn't be happier. I have
+ unlimited private repos for *$40/month* (my server has *4GB of*
+ *RAM* and *60GB of storage*). Because you can never be too sure, I
+ have backups enabled for *$8/month*.
+
+ 3. Moved all my email to Mail-in-a-Box
+
+ Just like with GitHub, I didn't understand why I was paying Hover
+ $200/year for hosting my email when I *already* had a
+ Mail-in-a-Box[3] instance hosting one[4] of my them. Thankfully,
+ it's relatively easy[5] to add multiple domains to the same box.
+ It currently costs me *$10/month* for *unlimited* email accounts
+ versus $200/year for merely 10 (my server has *1GB of RAM* and
+ *30GB of storage*).
+
+ 4. Released a SaaS product
+
+ I buy a lot of books on Amazon and never get around to reading
+ them. That wasn't the case with The 7 Day Startup[6]. After
+ reading the book (it was a quick read), I was super motivated to
+ bring an idea (I sat on for about a year) to life. That idea was
+ BeachfrontDigital[7], a domain portfolio management tool. My
+ market focus is quite niche, it's for people who buy multiple
+ domains from multiple registrars. The problem I am solving
+ involves keeping track of all your domains and renewal dates. Some
+ TLDs also renew 30 days before expiration and I intend to include
+ this kind of information in V2. I've gotten some great feedback
+ and I look forward to enhancing the service in 2017.
+
+ Related to releasing BeachfrontDigital, I learned how to use
+ Feathers.js[8] more, used MongoDB[9] and mongoose[10] for the
+ first time, and in production (I love them both now), and other
+ back-end web development things. I'm a firm believer that side
+ projects are key to learning new things. Your day job most likely
+ won't challenge you to try drastically different things from what
+ you're used to, which can stifle your personal growth.
+
+ 5. Hosted my first pop-up shop
+
+ My clothing brand WEÖM[11] had a pop-up shop in one of WeWork
+ South Station's conference rooms. Along with my friend Angel[12],
+ we had fun collaborating on 2017 collections when we weren't
+ chatting with people who stopped by. It was a *great* learning
+ experience! In the time since, I've decided to transition/rebrand
+ WEÖM to become a space-centric lifestyle brand instead of being
+ *just* a clothing brand. There's still a lot of work to be done,
+ but look forward to visiting the new world I'm building around it!
+
+ 📸[Bridget rocking the signature snapback][IMG2]
+
+ 6. Had my first interview
+
+ Revision Path[13] is a weekly interview podcast, Patreon[14], and
+ Slack group[15] that I've been a fan of for quite some time. The
+ host, Maurice Cherry[16], likes to interview people on the come up
+ doing interesting things. So, imagine my surprise when he asked to
+ interview *me*! We tried recording while I was in my apartment but
+ houses in Massachusetts are old so my microphone was picking AM
+ radio signals. 😒 I wasn't hearing that weirdness but Maurice is
+ in Atlanta and was hearing ads for Harvard, lol! Long story short,
+ we had to reschedule and the interview will be out in January.
+ *Great* way to start off the new year!
+
+ 7. Published my first module to npm
+
+ My module is called `hexo-render-sass` and I made it before
+ realizing that similar modules exist…oh well (it doesn't help that
+ the official Hexo site[17] fails to list Sass plugins on the
+ site). It was another great learning experience and it took away
+ the mystic mumbo jumbo I associated npm modules with. You can find
+ it here[18].
+
+ And that's it!
+
+ I'll end this post with my best nine Instagram photos of 2016,
+ according to Lip Inc[19]. 🕸
+
+ 📸[My best 9 Instagram photos of 2016][IMG3]
+
+References
+
+ [1] <https://2016.dsgn.io/thoughts/post/what-ive-achieved-in-2015>
+ [2] <https://paulwebb.software>
+ [3] <https://mailinabox.email>
+ [4] <https://thenetwork.email>
+ [5] <https://mailinabox.email/maintenance.html#multiple-domains>
+ [6] <https://www.amazon.com/Day-Startup-Learn-Until-Launch/dp/1502472392>
+ [7] <https://beachfront.digital>
+ [8] <http://feathersjs.com>
+ [9] <https://www.mongodb.com>
+ [10] <https://mongoosejs.com>
+ [11] <https://weom.space>
+ [12] <https://www.instagram.com/angel_garc>
+ [13] <https://revisionpath.com>
+ [14] <https://patreon.com/revisionpath>
+ [15] <https://revisionpath.herokuapp.com>
+ [16] <https://twitter.com/mauricecherry>
+ [17] <https://hexo.io/plugins>
+ [18] <https://www.npmjs.com/package/hexo-render-sass>
+ [19] <https://2016bestnine.com>
+ [IMG1] <https://🔥.pixels.wtf/blog/image/2016/what-ive-achieved-this-year-a.jpg>
+ [IMG2] <https://🔥.pixels.wtf/blog/image/2016/what-ive-achieved-this-year-b.jpg>
+ [IMG3] <https://🔥.pixels.wtf/blog/image/2016/what-ive-achieved-this-year-c.jpg>
diff --git a/memos/WM-003.txt b/memos/WM-003.txt
new file mode 100644
index 0000000..a77415c
--- /dev/null
+++ b/memos/WM-003.txt
@@ -0,0 +1,103 @@
+
+
+
+
+
+
+
+Document: WM-003 P. Webb
+Category: Life 2017.01.01
+
+ Books I plan to read this year
+
+Abstract
+
+ Setting myself up for failure by making a public promise to read a
+ long-ass list of books.
+
+Body
+
+ My girlfriend and I are in competition to see who can read the most
+ books this year. Before going through my list, let's have a look at
+ my bookshelf.
+
+ 📸[My bookshelf has more than books on it][IMG1]
+
+ As you can see, I have a *lot* going on. Eagle-eyed observers will
+ see that some books have red dot stickers on them. Those are there to
+ symbolize which books I have not read yet, or *started* but haven't
+ finished. In alphabetical order, they are:
+
+ - ~~1984 — George Orwell~~ [1]
+ - The 48 Laws of Power — Robert Greene
+ - A Culture of Innovation: Insider accounts of computing and life at
+ BBN — David Walden and Raymond Nickerson
+ - The Art of Profitability — Adrian Slywotzky
+ - The Art of the Start — Guy Kawasaki
+ - Astronomy 101 — Carolyn Collins Petersen
+ - Brave New World — Aldous Huxley
+ - Bring the Outdoors In — Shane Powers and Gentl & Hyers
+ - Business Model Generation — Alexander Osterwalder and Yves Pigneur
+ - The Cold Between — Elizabeth Bonesteel
+ - Connectography — Parag Khanna
+ - Cosmos — Carl Sagan
+ - ~~Count Zero — William Gibson~~ [2]
+ - Designing News — Francesco Franchi
+ - Easy Origami — John Montroll
+ - The Fabric of the Cosmos — Brian Greene
+ - Getting Things Done — David Allen
+ - HOLO 2 — Various Artists/Writers
+ - Humans Of New York stories — Brandon Stanton
+ - Illuminations: Wisdom From This Planet's Greatest
+ Minds — Illuminatiam
+ - Isaac Newton's Principia Mathematica Reissue — Kronecker Wallis
+ - The Mandibles: A Family, 2029-2047 — Lionel Shriver
+ - The Mission Chinese Food Cookbook — Danny Bowien and Chris Ying
+ - Mona Lisa Overdrive — William Gibson
+ - NASA Graphic Standards Manual reissue — Jesse Reed & Hamish Smyth
+ - The Nature of Code — Daniel Shiffman
+ - NES/Famicom: a visual compendium — Sam Dyer
+ - NLP: The New Technology of Achievement — NLP Comprehensive and
+ Steve Andreas
+ - Operating Systems: Design and Implementation — Andrew S Tanenbaum
+ and Albert S Woodhull
+ - A People's History of the United States — Howard Zinn
+ - Physics of the Future — Michio Kaku
+ - Rayla 2212 — Ytasha L Womack
+ - The Remnants of Trust — Elizabeth Bonesteel
+ - The Secret Recipes — Dominique Ansel
+ - Selling the Invisible — Harry Beckwith
+ - Snowcrash — Neal Stephenson
+ - Space Chronicles — Neil deGrasse Tyson
+ - Universal Principles of Design — William Lidwell and Kritina Holden
+
+ That's 38 books in total. Of those, two of them aren't actually in my
+ possession *yet*. "Isaac Newton's Principia Mathematica Reissue" and
+ "NES/Famicom: a visual compendium" are both Kickstarter-backed books
+ that should be delivered sometime this year.
+
+ To hold myself accountable *and* make sure I retain the information I
+ read, I'm going to do book reports on this blog which will basically
+ be reviews. My girlfriend is going to do the same thing on her
+ blog[3], so be sure to check that out.
+
+ I am most excited to read "Count Zero" and "Mona Lisa Overdrive"
+ because I absolutely *love* "Neuromancer" (all three of these books
+ were written by William Gibson). I've read it a few times already.
+ Funny story, while still in high school I visited a Borders bookstore
+ (RIP) to buy Neuromancer. The store clerk thought I said "New
+ Romancer" and wasted 10 minutes trying to find the incorrect book. In
+ hindsight, I'm surprised that wasn't a real book in the store.
+
+ Anyhoo, the book I am reading right now is "A Culture of Innovation:
+ Insider accounts of computing and life at BBN". I am *fascinated*
+ about the beginnings of the Internet. To think that it didn't always
+ exist and now it's in the very fabric of our lives thanks in part to
+ the people at "Bolt Beranek and Newman" is so cool to me. 🕸
+
+References
+
+ [1] </WM-016>
+ [2] </WM-006>
+ [3] <https://sincerelyshantelle.com>
+ [IMG1] <https://🔥.pixels.wtf/blog/image/2017/books-i-plan-to-read-this-year-a.jpg>
diff --git a/memos/WM-004.txt b/memos/WM-004.txt
new file mode 100644
index 0000000..d27e781
--- /dev/null
+++ b/memos/WM-004.txt
@@ -0,0 +1,251 @@
+
+
+
+
+
+
+
+Document: WM-004 P. Webb
+Category: Review 2017.01.07
+
+ MacBook Pro (Late 2016) review
+
+Abstract
+
+ The Touch Bar is actually useful and I can't believe how thin/light
+ this laptop is. If you aren't already a Mac user in the market for a
+ new laptop, then this isn't for you. If you *are* in the market *or*
+ would like to see how I view my new computer, read on!
+
+Body
+
+ 1. The adapter "problem"
+
+ I can understand why a lot of people are complaining about the
+ dongles, plugadoos[1], throughports, &c, but I don't understand
+ why I'm seeing these complaints from people who would *never* buy
+ a computer from Apple. Quite frankly, it reads as bullshit and an
+ excuse to complain on the Internet.
+
+ I have two plugadoos and I backed another one on Kickstarter[2]. I
+ haven't decided which one will stay at home and which one will
+ stay in my bag yet (the Kickstarter one has more ports than the
+ Satechi multi-port adapter[3] I'm currently using). The transition
+ period is *always* annoying but once *everyone* is in this USB-C
+ future, no one will be complaining. To borrow Edison Wrzosek's
+ response to a 9to5Mac article[4]:
+
+ > Ah, people have such short term memory… I still remember when
+ > Apple transitioned people, almost overnight, to USB-only iMac's,
+ > at a time when USB was nicknamed the "U-Son-of-a-Bitch" port in
+ > the PC world due to compatibility, reliability issues, and lack
+ > of supported peripherals. Now look at USB, it's supplanted
+ > almost EVERY other standard.
+ >
+ > People just LOVE to whine and complain, and it's Human nature to
+ > abhor change, and be fearful of it. TB3/USB3.1 is the future,
+ > and it's here and now. Time to embrace it.
+ >
+ > I'm still gonna rock my 2011 MBP for a while longer, but I'm
+ > really looking forward to a ubiquitous standard cable for ALL
+ > connectivity.
+
+ I *really* wish "U-Son-of-a-Bitch" port stuck, unofficially. That
+ sounds hilarious.
+
+ 2. Battery life
+
+ Trash.
+
+ Charging? Hella quick. It's a great compromise IMO. That and I'm
+ not sure if I'm using my computer like a normal person. It's not
+ uncommon for me to be running several browser windows with tabs
+ that are almost too small, while compressing a 1 GB folder of
+ images, in addition to running local servers (not sure if this
+ last part is applicable to power consumption).
+
+ Basically, it's *meh*. Could be better. I should've tested this to
+ be certain, but I think my average is ~3 hours at max brightness.
+
+ 3. MagSafe
+
+ *Sigh*
+
+ I *loved* MagSafe because life is unpredictable. I've walked into
+ my charge cable too many times to count and I never had to worry
+ about my laptop flying to the floor. Because I shouldn't have nice
+ things, I've done the same thing with my new MacBook Pro and it
+ stayed on the table! The charge puck fell out of the wall instead,
+ thankfully.
+
+ Speaking of the charge puck, another complaint I've heard is in
+ regard to the retractable arms on the old charge puck. In
+ practice, the absence of them is *not* a big deal. To store my
+ charge cable and puck in my bag, I just fold and tie the cable
+ while it's still plugged into the puck. I'm not focused on making
+ my cable storage pretty while I'm in transit.
+
+ 📸[Not sure what the big deal is…][IMG1]
+
+ 4. The screen
+
+ Good grief this thing is bright, *and I like it*.
+
+ I'm the kind of person who keeps the brightness on his phone to
+ maximum so when I heard that this computer's brightness and color
+ gamut was increased/enhanced, I was excited. Colour is such a huge
+ part of my life, I get inspired[5] by it. In certain lighting
+ conditions, I *do* turn the brightness down though. I'm not
+ an animal!
+
+ 5. The ESC key, or lack thereof
+
+ Two weeks in and I'm still confused when I need to use it. Albeit
+ only for a split second but it's enough to give me pause and
+ think, "That's weird", before continuing with whatever I was
+ doing. Currently, the only time I use it is when cancelling a
+ screenshot in progress, dismissing autocomplete keywords in Atom,
+ or exiting an iTunes visualization or whatever else is in
+ fullscreen mode.
+
+ Before I've experienced this for myself, I heard developers (who
+ also didn't have the computer to even try it) say they wouldn't be
+ able to do programming on it. Maybe I'm just a simple man because
+ all I do is code in HTML, CSS, and JavaScript, but if you *need*
+ to use a physical ESC key to get things done you might have other
+ issues or a hella interesting programming environment (if I'm
+ wrong, let me know[6]).
+
+ 6. The Touch Bar and Function keys
+
+ This thing is neat. My most-used "keys" are volume up/down.
+ Sliding the volume level is much more satisfying than repeatedly
+ tapping a button. I know, that sounds weird to say but it's true!
+ There's more granularity too. I've slid the volume down to where
+ the on-screen display says the volume is effectively off but I can
+ still hear audio. With the old function keys, volume was
+ changeable in steps.
+
+ Something to get used to is doing hard refreshes in my browser. I
+ have Vivaldi setup to do a hard refresh to clear the cache
+ sometimes and that keyboard shortcut is `Shift + F5`. Well, I
+ don't have my Touch Bar setup to show me the function row by
+ default so my shortcut (when not using an external keyboard) is
+ `Fn + Shift + F5`.
+
+ The Touch Bar changes based on whatever app you're using, which is
+ great. However, I don't think I've ever used it for an app besides
+ iTunes. When editing the photo of how I tie my charge cable, I saw
+ this in the Touch Bar (using Affinity Photo[7]):
+
+ 📸[Neat-o][IMG2]
+
+ 7. Touch ID
+
+ Like with the iPhone, you have to input your password when cold
+ booting (01.png "UGH") but in-between cold boots, it's wonderful
+ to use a single finger press to unlock my computer.
+
+ 📸[Mmm, dat sweet Touch ID][IMG3]
+
+ How much time do we spend typing passwords? Who knows, but *my*
+ time doing so has decreased dramatically in part to Touch ID. The
+ other reason for my (almost) no password typing life? 1Password.
+
+ 📸[1Password is life][IMG4]
+
+ You'd need to type in your Master Password to unlock it but now
+ you don't! It's *even less* of a hassle to use an already
+ hassle-free product for personal security. I don't know 90% of
+ my passwords.
+
+ 8. The keyboard
+
+ I thought I would *hate* the keyboard due to the short travel.
+ This was based upon my previous experience of typing on the
+ MacBook One[8] (that's not the real name, but it's the MacBook
+ with only one port) in an Apple Store once. Might as well be
+ typing on a screen! I believe I was listening to ATP when I heard
+ Marco Arment talk about the keyboard travel on the MacBook Pro I
+ typed this post on, and he spoke highly of it. That made me feel
+ better about purchasing this and in everyday use, I enjoy it.
+ Typing doesn't sound particularly loud to me (this is another
+ complaint I've heard). Maybe this is because I own a Das
+ Keyboard? 🤔
+
+ The *only* gripe I have is with the new arrow keys. WTF[9].
+ Someone coming to MacBooks without prior usage would acclimate
+ faster, I think.
+
+ 9. The trackpad
+
+ Dayum.
+
+ 📸[Shot of the massive trackpad][IMG5]
+ 📸[*DJ Khaled voice* Another one][IMG6]
+
+ The trackpad is nearly as big as my Magic Trackpad. As a former
+ external mouse[10]-only guy, I can say that 1) having a big
+ surface for multi-gesture controls is awesome and 2) it's even
+ better when it's on a laptop. Even with the dbrand skin[11] I have
+ on it, the trackpad is super responsive. My palms aren't typically
+ on the trackpad when I'm typing but when they are, the palm
+ rejection is great.
+
+ 10. USB-C
+
+ I saved the best for last.
+
+ Let me tell you about the *glory* that is USB-C.
+
+ You know when you're outside on a *sweltering* hot day, and your
+ sweat betrays you and only makes you warmer? Okay, picture that.
+ Now, picture that you've just been given one of those red, white,
+ and blue popsicle rockets. You bite off a bit and your body thanks
+ you by cooling you down and you feel that elation of peace and
+ tranquility and your mood improves by 10 notches.
+
+ That's how I felt when I needed to charge my computer and I
+ realized that I could do so FROM ANY PORT FROM EITHER SIDE OF THE
+ COMPUTER. *MAN*. I'm mobile with my laptop of course, and I like
+ taking it to the living room while the family is watching TV or
+ hanging out, &c. Typically, I was forced to sit in certain spots
+ if my computer needed charging. Now, the *world* is my oyster. It
+ doesn't seem like a big deal but trust me, it *is*.
+
+ FIN
+
+ 📸[Shot of the outside of my MacBook Pro][IMG7]
+
+ In conclusion, I will say that this computer was a fantastic upgrade
+ for me. It even survives water getting splashed on it! Not saying
+ I've ever done that recently, it's just something I've heard about…
+ 👀 Of course, I'm going to feel some type of way i̶f̶ when Apple
+ refreshes this laptop later this year but it's okay. I like getting
+ glimpses of the future when I can. This computer is 0.5 pounds
+ lighter than the previous generation and I can definitely tell. I'm a
+ happy customer.
+
+ All that's left for Apple to do now is make everything super energy
+ efficient, crazily so. Oh, and fix software bugs. 🕸
+
+References
+
+ [1] <https://theoutline.com/post/682/in-which-we-try-to-rebrand-the-dongle>
+ [2] <https://www.kickstarter.com/projects/hypershop/hyperdrivetm-compact-thunderbolt-3-usb-c-hub-for-m>
+ [3] <https://www.amazon.com/gp/product/B01J4BO0X8>
+ [4] <https://disqus.com/home/discussion/9to5maccom/majority_of_readers_say_no_big_deal_adapting_to_usb_c_world_of_new_macbook_pro/#comment-3066707705>
+ [5] <https://www.brisseaux.com/retro-series>
+ [6] <https://twitter.com/@NetOpWibby>
+ [7] <https://affinity.serif.com/en-us/photo>
+ [8] <https://www.apple.com/macbook>
+ [9] <https://www.instagram.com/p/BOV3YBjBJdV>
+ [10] <https://www.microsoft.com/accessories/en-us/products/mice/arc-touch-mouse/rvf-00052>
+ [11] <https://dbrand.com/shop/apple-macbook-pro-15-skins-2016-touch-bar>
+ [IMG1] <https://🔥.pixels.wtf/blog/image/2017/macbook-pro-review-a.jpg>
+ [IMG2] <https://🔥.pixels.wtf/blog/image/2017/macbook-pro-review-b.png>
+ [IMG3] <https://🔥.pixels.wtf/blog/image/2017/macbook-pro-review-c.png>
+ [IMG4] <https://🔥.pixels.wtf/blog/image/2017/macbook-pro-review-d.png>
+ [IMG5] <https://🔥.pixels.wtf/blog/image/2017/macbook-pro-review-e.jpg>
+ [IMG6] <https://🔥.pixels.wtf/blog/image/2017/macbook-pro-review-f.jpg>
+ [IMG7] <https://🔥.pixels.wtf/blog/image/2017/macbook-pro-review-g.jpg>
diff --git a/memos/WM-005.txt b/memos/WM-005.txt
new file mode 100644
index 0000000..fc7518f
--- /dev/null
+++ b/memos/WM-005.txt
@@ -0,0 +1,114 @@
+
+
+
+
+
+
+
+Document: WM-005 P. Webb
+Category: Life 2017.01.25
+
+ The appeal of the Swiss and Swedish work life
+
+Abstract
+
+ Living to work versus working to live.
+
+Body
+
+ I recently read an article[1] about Sweden's six-hour work day and
+ was fascinated by it because here in the States, it's more about the
+ *quantity* of hours you put in, it's not about the *quality* of the
+ work you put in (FWIW, that seems to be changing in start-up land).
+ Henry Ford famously tested the eight-hour work day with his factory
+ employees, but it's 2017 now. Do we *really* need to continue
+ the trend?
+
+ To quote[2] Magnus Bråth of Brath, a tech company in Sweden
+ (emphasis mine):
+
+ > We also believe that once you've gotten used to having time for
+ > the family, picking up the kids at day care, spending time training
+ > for a race or simply just cooking good food at home, you don't want
+ > to lose that again. We believe that this is a good reason to stay
+ > with us and not only because of the actual impact longer hours
+ > would make in your life but for the reason behind our shorter days.
+ > That we have shorter days is not the main reason people stay with
+ > us, they are the symptom of the reason. The reason is that we
+ > actually care about our employees, *we care enough to prioritize
+ > their time with the family, cooking or doing something else they
+ > love doing*.
+ >
+ > A third huge reason for shorter days is that we all feel more
+ > rested. Obviously we too have to stay late at times, obviously we
+ > too are stressed at times but it's from a better base line. Working
+ > late at our two offices often mean staying for 8 hours, or 7.
+ > *Think about it, when mom comes home late, she comes home at 5.*
+
+ In the linked article at the top of this post, the six-hour work day
+ experiment ended because it was too expensive for the nursing home it
+ was tested in. Nurses were more alert and as a result, *care and
+ happiness amongst those being cared for increased* drastically.
+ *However*, more nurses were hired to provide overlap for shifts. As
+ countries become more wealthy, I think the benefits will outweigh
+ the costs.
+
+ I look forward to implementing a similar system when I am able to
+ hire people for Ideas Never Cease[3]. Better maternity / paternity /
+ grief leave as well! A previous employer didn't seem to give a damn
+ while I was grieving over my miscarried daughter Zoe Elise and that
+ added to the hurt, immensely. I don't *ever* want to make someone
+ else feel the way I felt, it sucked. My grief was getting in the way
+ of your *false deadline* on a project for your *still breathing*
+ family member? Whoops, *my bad*. 🙄 But I digress.
+
+ Chantal Panozzo wrote a great article for Vox[4] detailing her life
+ in Switzerland and the amazing adjustment from American work life.
+ Here are a few choice quotes:
+
+ > In Switzerland, you don't arrive to a meeting late, but you also
+ > don't leave for your lunch break a second past noon. If it's
+ > summer, jumping into the lake to swim with the swans is an
+ > acceptable way to spend your lunch hour. If you eat a sandwich at
+ > your desk, people will scold you.
+ >
+ > Lunchtime is sacred time in Switzerland. When I was on maternity
+ > leave, my husband came home for lunch to help me care for our
+ > daughter. This strengthened our marriage. Many families still
+ > reunite during weekdays over the lunch hour.
+ >
+ > Swiss law mandates a 14-week maternity leave at a minimum of 80
+ > percent pay.
+ >
+ > People in Europe took vacation seriously. Once, when I only took
+ > 10 days for a trip to Spain, my colleagues chastised me for taking
+ > so little time off. I learned to take vacation chunks in two-week
+ > intervals. Well rested, I noticed that I felt more productive and
+ > creative when I returned to work. Recent American research[5]
+ > confirms what I was feeling: Relaxing can make you
+ > more productive[6].
+
+ I could continue, but you get the gist.
+
+ With self-imposed deadlines, I find that I am more creative in my
+ problem-solving and often find better solutions than if I was working
+ on problems without a time-sensitive goal attached. I believe the
+ same thing would be applied to a shorter work day. A six-hour work
+ day would also discourage long meetings without focus (well, long
+ meetings *period*). I don't see big American companies making these
+ quote drastic changes but startups? Hell yeah, definitely. Instead of
+ focusing on "perks" like beer on tap, foosball tables, and game
+ systems, &c, why not focus on improving the lives of your employees
+ so they can make dope shit?
+
+ Happy employees will reward you with their absolute best work.
+ Simple. 🕸
+
+References
+
+ [1] <https://www.independent.co.uk/news/business/news/sweden-six-hour-working-day-too-expensive-scrapped-experiment-cothenburg-pilot-scheme-a7508581.html>
+ [2] <https://brath.com/why-we-started-with-6-hour-work-days>
+ [3] <https://the-inc.co>
+ [4] <https://www.vox.com/2015/7/21/8974435/switzerland-work-life-balance>
+ [5] <https://www.nytimes.com/2013/02/10/opinion/sunday/relax-youll-be-more-productive.html?pagewanted=all&\_r=1&&gwh=AC034D10F64239B961A6E1CDE12C9332&gwt=pay&assetType=opinion>
+ [6] <https://www.vox.com/2014/7/22/5912369/creativity-vacation-work-office>
diff --git a/memos/WM-006.txt b/memos/WM-006.txt
new file mode 100644
index 0000000..d7f1a18
--- /dev/null
+++ b/memos/WM-006.txt
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+Document: WM-006 P. Webb
+Category: Review 2017.02.07
+
+ Count Zero review
+
+Abstract
+
+ Cyberpunk is my favorite genre for a reason.
+
+Body
+
+ After reading William Gibson's *Neuromancer* I knew I had to read
+ *Count Zero*. Once it picked it up, it was difficult to put down.
+
+ There are four different story arcs that eventually culminate in a
+ satisfying climax. What does a wannabe hotshot ~~hacker~~ cowboy, a
+ disgraced historian, an *extremely* rich and dying man, and a hitman
+ for hire all have in common? Well, you're gonna have to read *Count
+ Zero* to figure out for yourself (I'm *assuming* you don't want
+ spoilers). There is a lot to love about this sci-fi novel and I hope
+ it becomes a movie someday.
+
+ Something that stood out to me was continued references to "the
+ matrix". *Count Zero* was printed in 1986 (before I was alive!) and
+ because this book is *so* inventive and fascinating, I wouldn't be
+ surprised if the Wachowski siblings point to it as inspiration for
+ the Matrix film trilogy[1]. There are also references to "decks",
+ which appear to be the interface through which cowboys access the
+ matrix Ghost in the Shell[2] style. I imagine they look like the
+ computer Sam Flynn used in Tron: Legacy[3] to access the Grid.
+
+ 📸[Sam Flynn in Tron: Legacy][IMG1]
+
+ Gibson has an interesting writing style that evokes a sense of
+ longing for the future, which is bizarre considering the book is
+ older than myself. However, as forward-thinking as most concepts are,
+ some of his writing is dated. Not too much to take you out of his
+ world, but just enough to make one think, "Wow, this would be
+ incredible when updated for a film".
+
+ What I *didn't like* was his way of switching to another character's
+ storyline at the beginning of most chapters and taking (what I felt
+ was) far too long to let you know who the new focus was on. This
+ forced me to re-read the beginning of several chapters in order to
+ get the characters' inner voices to make sense in their respective
+ environments. I don't know about you, but I mentally create voices
+ for characters in novels based on their initial descriptions.
+
+ Like many futuristic books, this one explores corporate espionage,
+ suspect scientific morals, the disillusionment of the rich, &c. Just
+ fascinating stuff especially as the world seems to go in this
+ direction IRL.
+
+ Count Zero[4] is Paul-approved. 🕸
+
+References
+
+ [1] <https://en.wikipedia.org/wiki/The_Matrix_(franchise)>
+ [2] <https://en.wikipedia.org/wiki/Ghost_in_the_Shell>
+ [3] <https://en.wikipedia.org/wiki/Tron:_Legacy>
+ [4] <https://amzn.to/2kBWrzZ>
+ [IMG1] <https://🔥.pixels.wtf/blog/image/2017/count-zero-review-a.jpg>
diff --git a/memos/WM-007.txt b/memos/WM-007.txt
new file mode 100644
index 0000000..249d987
--- /dev/null
+++ b/memos/WM-007.txt
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+Document: WM-007 P. Webb
+Category: Project 2017.02.08
+
+ Roadmap for BeachfrontDigital
+
+Abstract
+
+ Far-reaching goals for BeachfrontDigital.
+
+Body
+
+ BeachfrontDigital[1] is a domain portfolio management tool I built
+ and launched late last year. To quote the "About" page:
+
+ > BeachfrontDigital is me scratching my own itch and taking cues from
+ > The 7 Day Startup. I buy domains on a regular basis and often from
+ > more than one registrar. As a result, I tend to forget I have some
+ > domains! *True story*, I ran a WHOIS search *on a domain I own*, a
+ > couple months ago. Terrible. 😩
+
+ The name is a result of a conversation I had with co-workers about
+ how domain names are like the premium waterfront properties of the
+ 80s. Of course, the domain `beachfront.digital` was available so I
+ snagged it ASAP.
+
+ Since launching BD in October, I've made updates here and there and
+ it seemed like I was going to get valuable feedback from early beta
+ testers who assured me they would sign up at $6/year *instead of* the
+ regular $11/year price…turns out, *nobody* wanted to beta test and my
+ messages were ignored. Was it because of the upfront cost? Was it
+ because I didn't have a bunch of features fleshed out? I'll never
+ know. However, of the friends I reached out to for feedback Wojtek
+ Witkowski[2] was the only one who got back to me. Through him and a
+ prospective customer/commenter on Hacker News, I learned a
+ few things:
+
+ - I wasn't offering anything that a spreadsheet couldn't handle.
+ - $6/year was still too much to charge for someone who has
+ <10 domains.
+ - To make charging for my service palatable, I'd need to create a
+ sync system for registrars.
+ - Not all registrars have public APIs (see: Hover).
+ - There are *so* many registrars. It's not cost-effective to
+ maintain syncing for each.
+ - Creating a sync system based on undocumented APIs like some
+ people have done with Hover is a *terrible* idea. Undocumented
+ APIs means they can break at *any* moment.
+
+ For these reasons and more, *I have decided to make BeachfrontDigital
+ free* when V2 goes live. I'm currently working on a stock photography
+ site for people of color so upgrades and changes to BD will occur in
+ March (when I'm not playing my Nintendo Switch, hehe). I also plan to
+ update the site with a visual style reminiscent of the 80s. Here's
+ how the site used to look:
+
+ 📸[First version of BeachfrontDigital][IMG1]
+
+ Here's how it looks now:
+
+ 📸[Second version of BeachfrontDigital][IMG2]
+
+ As you can see, the styling went from pretty cool (the logo was
+ levitating and the background grid moved as well) to extremely
+ sterile. Nothing's *wrong* with a sterile look, that's what this blog
+ looks like, haha! But for something with the URL
+ `beachfront.digital`, it could stand to look a *bit* more impressive.
+
+ A key missing feature is the ability to import your domains. If
+ you've already got a method to organize your domains and you want to
+ use BeachfrontDigital, you sure wouldn't want to type everything
+ again right? *Hell no*, who has time for *that*?! I intend to make
+ the wishlist feature more robust, as well as the personal analytics.
+ For example, I'm paying $2027 for 75 domains per year 😅. Anyhoo,
+ watch this space and @BeachfrontD[3] on Twitter for updates. 🕸
+
+References
+
+ [1] <https://beachfront.digital>
+ [2] <https://twitter.com/dubstrike>
+ [3] <https://twitter.com/@BeachfrontD>
+ [IMG1] <https://🔥.pixels.wtf/blog/image/2017/roadmap-for-beachfront-digital-a.png>
+ [IMG2] <https://🔥.pixels.wtf/blog/image/2017/roadmap-for-beachfront-digital-b.png>
diff --git a/memos/WM-008.txt b/memos/WM-008.txt
new file mode 100644
index 0000000..6666c17
--- /dev/null
+++ b/memos/WM-008.txt
@@ -0,0 +1,203 @@
+
+
+
+
+
+
+
+Document: WM-008 P. Webb
+Category: Review 2017.03.18
+
+ Nintendo Switch review
+
+Abstract
+
+ You're gonna wish you weren't on the fence about buying one
+ at launch.
+
+Body
+
+ In the two weeks since I left GameStop eagerly waiting to get home
+ and unbox my console, the Nintendo Switch has been *such* a joy to
+ use. I waited two weeks to write this review so I could accurately
+ depict how it fits into my everyday. Before I start the review
+ though, I figured I'd run through my launch night.
+
+ 1. Midnight Launch
+
+ 📸[I was the first customer in Boston to get a Switch][IMG1]
+
+ In an effort to make the midnight launch go as smoothly as
+ possible, GameStop required people to get a receipt with their
+ pre-order earlier in the day and they were numbered so people
+ would know where to stand in line. As people on the Internet say,
+ "FIRST!!1!". The guy behind me got to the midnight launch before I
+ did and was wondering who had the number one receipt. I thought it
+ was pretty funny.
+
+ 📸[Line to the door and then some][IMG2]
+
+ I went to the midnight launches of the DSi and 3DS. Those launches
+ had *nothing* on this one. When I left, the line was to the door
+ and then some. It was a *hella* windy night and I'm glad we didn't
+ have to wait outside.
+
+ 📸[Lucky mofos to snag a Switch][IMG3]
+
+ The people on the other side of the store didn't have a pre-order,
+ but they snagged the 13 or so extra Switch consoles this GameStop
+ had for launch. As I waited to get the aforementioned receipt, a
+ couple realized that someone in GameStop allowed those 13 people
+ to reserve the right to buy the limited Switch consoles and the
+ couple were highly upset, to say the least. Apparently, that
+ wasn't supposed to happen until 6pm. GameStop's gonna
+ GameStop. 🤷🏾‍♂️
+
+ 📸[Double-sided Zelda poster][IMG4]
+
+ As a launch bonus, everyone got a free Zelda poster. I should put
+ this up at some point but I'm still unsure about which side I like
+ most. As soon as I got my bag of goodies, I left the store ASAP. I
+ was stopped by someone in line for an impromptu Facebook Live
+ interview. That was weird but two random people know who I am now!
+ Since you got this far, here's a video:
+
+ 2. Initial Setup
+
+ 📸[Such gaming, much fun][IMG5]
+
+ 3. The Review
+
+ I didn't truly appreciate the Wii U's GamePad until my girlfriend
+ asked me if I was done playing Deus Ex: Human Revolution. I was
+ hours deep into playing and she had shows to watch. With the press
+ of a button, I *switched* my attention from the TV to the
+ controller I already had in my hand and walked to my desk a few
+ feet away. Confused, she asked if I was mad at her. Of course I
+ wasn't, I was still playing Deus Ex! I guess you could say my
+ gameplay was augmented.
+
+ For the uninitiated, the Wii U allowed you to swap between the
+ GamePad and the TV for playing most (if not all) games. In a
+ household where there was only one TV at the time, it was amazing.
+
+ With the Switch, that appreciation came a helluva lot quicker. I
+ have a roving 10-month-old who likes to wreak havoc and while my
+ girlfriend was gracious enough to let me spend the entire first
+ weekend with the Switch relatively undisturbed, the boy needed to
+ be watched when mom was busy. While playing Zelda, I was asked to
+ watch the boy for a couple minutes so I took the Joy-Con out of
+ the charging grip[1] (*highly* recommended) and onto the sides of
+ the Switch, which I then took out of the dock and walked
+ downstairs. After making myself a human fence to block the boy
+ from roaming elsewhere I continued playing.
+
+ Seamless!
+
+ 📸[The super portable][IMG6]
+
+ I bought a Nintendo GameBoy fanny pack from eBay after seeing
+ someone post an old ad for it in /r/NintendoSwitch[2]. I wasn't
+ sure if the Switch would even fit but it does! You'll have to
+ detach the Joy-Con, of course. Since the weather is frigid at the
+ moment, I've been using my hoodie[3]'s pouch to transport my
+ Switch. When the weather gets warmer, the fanny pack will make an
+ appearance. I also have an Animal Crossing bell pouch that I
+ purchased from Etsy but I like the fanny pack more.
+
+ I think the *super* portable nature of the Switch is going to make
+ gaming happen in unexpected places, and more often. I'm looking
+ forward to having impromptu Splatoon 2 battles in an airport or
+ Street Fighter II matches in a line for food trucks.
+
+ 📸[Charging on the go][IMG7]
+
+ Being a home console that's also portable, AAA-type games like the
+ new Zelda consume a LOT of power. As a result, the battery life
+ isn't great (I've gotten roughly three hours of Zelda gameplay on
+ a single charge). It doesn't seem that much different from the
+ battery life of a 3DS when playing Super Smash Bros. You'll get a
+ notification that the battery level is low but I usually ignore
+ that until I see it a second time. If I'm in transit, I use my
+ Anker charger[4] to keep gaming.
+
+ For me, the battery life hasn't been an issue and that's because I
+ have a laptop with USB-C charging[5]. Whether I'm at home or at
+ work, I *always* have a charger (I bought two because I kept
+ leaving my then sole charger at home). The addition of yet another
+ popular device with USB-C charging in the global marketplace makes
+ me confident that the future of a single port for a̶l̶l̶ most
+ electronics will come to fruition relatively soon. Early adopters
+ like myself have to deal with buying temporary plugadoos and such
+ but hey, that's so *you* don't have to!
+
+ 📸[An excellent purchase decision][IMG8]
+
+ I wasn't sure if I would come to regret buying grips[6] for the
+ Joy-Con but after a *single* Snipperclips play session, I can
+ honestly say it was a *fantastic* purchase decision. The Joy-Con
+ feel decent without it but with my Jack Skellington-esque fingers,
+ I definitely appreciated the classic controller feel of the grips.
+ My girlfriend has much smaller hands and will not play
+ Snipperclips without them.
+
+ 📸[Love the build quality][IMG9]
+
+ The build quality of the Switch is awesome. It's also incredibly
+ light, suspiciously so. You'd think it'd weigh more for what it
+ does. The kickstand on the back is plastic and detachable. It's
+ designed to be easily replaceable and that's awesome because it
+ would suck if you had to replace the console because of it.
+
+ There are fan vents on the top of the device and it occurred to me
+ after week one of owning it that I've never heard fan noise. When
+ I've thought to touch the top of it during a lengthly play session
+ I did feel heat and had to put the Switch up to my ear to hear fan
+ noise. I've had a screen protector since day one and somehow let
+ an errant wisp of fabric get in but I don't care enough to fix
+ that niggling issue.
+
+ 📸[dbrand skin for Nintendo Switch][IMG10]
+
+ I'm sad that dbrand won't be making Switch skins[7]. This is the
+ design I came up with, to match the awesome marble skin on my
+ MacBook Pro[5]. Welp. At least dbrand is an awesome company.
+
+ 📸[Great interface][IMG11]
+
+ I've taken so many screenshots of the interface (except in eShop,
+ that's not possible there) and I've got one request for Nintendo.
+ *Please* make it possible to hide the UI in games when taking
+ screenshots! I complained about this to @jessety[8] and he
+ informed me that you can hide most of the UI in Zelda (you'll just
+ see your heart containers). I just hope more games adopt the "Pro
+ HUD" option that Zelda provides.
+
+ I'll end this review with the real reason I bought a Switch:
+ Splatoon 2! If you hadn't guessed by the decal on the back of my
+ Switch, I'm a *huge* fan of the original for Wii U. 🕸
+
+ 📸[The reason I bought a Switch][IMG12]
+
+References
+
+ [1] <https://amzn.to/2n522S7>
+ [2] <https://www.reddit.com/r/NintendoSwitch>
+ [3] <https://www.instagram.com/p/BOLHZpjhE1F>
+ [4] <https://amzn.to/2mFFy6R>
+ [5] </WM-004>
+ [6] <https://amzn.to/2n4lUVx>
+ [7] <https://www.reddit.com/r/NintendoSwitch/comments/5xc5si/warning_do_not_skin_your_nintendo_switch>
+ [8] <https://twitter.com/jessety>
+ [IMG1] <https://🔥.pixels.wtf/blog/image/2017/nintendo-switch-review-a.jpg>
+ [IMG2] <https://🔥.pixels.wtf/blog/image/2017/nintendo-switch-review-b.jpg>
+ [IMG3] <https://🔥.pixels.wtf/blog/image/2017/nintendo-switch-review-c.jpg>
+ [IMG4] <https://🔥.pixels.wtf/blog/image/2017/nintendo-switch-review-d.jpg>
+ [IMG5] <https://🔥.pixels.wtf/blog/image/2017/nintendo-switch-review-e.jpg>
+ [IMG6] <https://🔥.pixels.wtf/blog/image/2017/nintendo-switch-review-f.jpg>
+ [IMG7] <https://🔥.pixels.wtf/blog/image/2017/nintendo-switch-review-g.jpg>
+ [IMG8] <https://🔥.pixels.wtf/blog/image/2017/nintendo-switch-review-h.jpg>
+ [IMG9] <https://🔥.pixels.wtf/blog/image/2017/nintendo-switch-review-i.jpg>
+ [IMG10] <https://🔥.pixels.wtf/blog/image/2017/nintendo-switch-review-j.png>
+ [IMG11] <https://🔥.pixels.wtf/blog/image/2017/nintendo-switch-review-k.jpg>
+ [IMG12] <https://🔥.pixels.wtf/blog/image/2017/nintendo-switch-review-l.jpg>
diff --git a/memos/WM-009.txt b/memos/WM-009.txt
new file mode 100644
index 0000000..249aeb3
--- /dev/null
+++ b/memos/WM-009.txt
@@ -0,0 +1,158 @@
+
+
+
+
+
+
+
+Document: WM-009 P. Webb
+Category: Project 2017.04.11
+
+ BeachfrontDigital — April Update
+
+Abstract
+
+ Eliminating friction and adding new features to BeachfrontDigital.
+
+Body
+
+ Who knew analytics could be fun?
+
+ I've spent the past week and a half working on the new
+ BeachfrontDigital[1] and I'm loving it. After publishing my previous
+ post[2], I thought about how I could make BD more useful to myself
+ and other people. Something that bothered me for awhile was the lack
+ of importing. *To be quite honest*, I was scared of the work required
+ to make importing domains work. I just didn't want to deal with it.
+ *Lame*, right?
+
+ Here's a reminder of why nobody bothered to sign up for V1
+ of BeachfrontDigital:
+
+ - I wasn't offering anything that a spreadsheet couldn't handle.
+ - $6/year was still too much to charge for someone who has
+ <10 domains.
+ - To make charging for my service palatable, I'd need to create a
+ sync system for registrars.
+ - Not all registrars have public APIs (see: Hover).
+ - There are *so* many registrars. It's not cost-effective to
+ maintain syncing for each.
+ - Creating a sync system based on undocumented APIs like some
+ people have done with Hover is a *terrible* idea. Undocumented
+ APIs means they can break at *any* moment.
+
+ This reminder was enough to get me back into making BD better,
+ starting with CSV importing and guess what? It wasn't *that* bad! I
+ think it took me two days to get importing to work, with another two
+ for optimization. When a user decides to export their data, it'll
+ look something like this:
+
+ 📸[Snippet of my domain export from BeachfrontDigital][IMG1]
+
+ 1. Eliminating friction
+
+ During a coding break, I read an article that was sitting in a tab
+ for at least a week, "Amazon's Friction-Killing Tactics To Make
+ Products More Seamless"[3]. What an eye-opener that was! The
+ takeaway I got from it was to *minimize as much friction as
+ possible for the end user*. It was easy to identify a major point
+ of friction with BD as it was something I was actually dreading.
+ Me, the guy who made the product, didn't want to perform the basic
+ task. Why? It was too much work!
+
+ In V1 of BeachfrontDigital, I had to input the domain name,
+ registrar, price, AND expiration for every single domain I own.
+ Even if the number of domains I had were two, that's *still* more
+ work than I'm willing to do. No one likes filling out
+ spreadsheets, it's a chore. What to do? Automate the hell outta
+ what we don't want to deal with!
+
+ Of course, you'll have to input your domains because BD is not a
+ mind-reading app (it *would be* in a few years if it was a Google
+ product). Thankfully, BD will run a WHOIS search in the background
+ and automatically grab registrar and expiration info. Pricing is
+ something you'll have to input as well because registrars don't
+ have the same pricing for domains/top-level domains (TLDs).
+
+ 📸[Screenshot of my domain portfolio][IMG2]
+
+ Don't even get me started on how inconsistent TLD operators are
+ with listing registrar names. In my testing, I found three
+ variations[4] of the business name for Tucows. Like, why? Lucky
+ for you, I asked customer support at both Tucows and Hover and was
+ told this:
+
+ > The variations in the Tucows name for different domains is
+ > simply how it was inputted at the Registry level (each domain
+ > extension or tld has a governing entity known as a Registry),
+ > and since that is a human's job normally, it gets added to their
+ > system slightly different each time.
+ >
+ > — Jordan Q
+
+ In addition, domains purchased through Hover will list the
+ registrar in WHOIS searches as Tucows. Gandi will show EPAG
+ Domainservices GmbH, iwantmyname will show 1API GmbH, and so on.
+ It would be *ideal* to show the actual reseller you purchased your
+ domains from but that's not how WHOIS works. Oh well.
+
+ 2. New features
+
+ 📸[Portfolio dashboard for BeachfrontDigital][IMG3]
+
+ This is how the new portfolio dashboard looks! I figured that it'd
+ be good to show personal analytics in both textual and graphical
+ formats. While creating this, I learned how flexible and awesome
+ Handlebars[5] is.
+
+ At a glance, you can see how many domain renewals are occurring
+ this month, this year, and next year. January and July are busy
+ months for me. Interesting that they are six months apart. What is
+ it about those months that give me ideas? I just realized I
+ haven't accounted for people who renew domains for multiple years…
+ *updates list of TODOs*.
+
+ You can also see how many domains you own per registrar.
+ Obviously, I favor Tucows because I like the included WHOIS
+ privacy from Hover, for domains that support it (I don't get why
+ `.fm` and `.io` don't, so dumb). I purchased `frsh.fm` from Gandi
+ initially, but then moved it to Hover. Not sure why EPAG
+ Domainservices GmbH is there…
+
+ Finally, you also get to see how many domains you have per TLD.
+ `.com` and `.online` are my favorite ones, apparently. The legend
+ for this chart is awfully busy, I'll need to find a way to make it
+ look better. I mean, someone with 50+ TLDs in their domain
+ portfolio might be an edge-case, but it's going to bother me until
+ I find a solution, haha. 🤷🏾‍♂️
+
+ In order to make every data point stand out, you need color. Well,
+ I wasn't going to manually create colors, these are all generated
+ dynamically! I need to do a bit of tweaking here and there but I'm
+ mostly satisfied with the results.
+
+ In conclusion
+
+ At the end of my previous post[2] about BeachfrontDigital, I
+ mentioned making the service free. Hmm, *nope*. However, it *will*
+ be free during beta, which is whenever I launch V2 until I deem
+ the service is ready for primetime. That could be as early as this
+ summer or as late as 2018. At that point, BeachfrontDigital will
+ cost $11/year afterwards.
+
+ What you've seen above is only half of the first wave of upgrades.
+ My next BD post will most likely show more charts, but centered
+ around pricing! I'm also thinking about making each of the charts
+ fullscreen-capable. It would be neat to use the left/right arrow
+ keys to look at the other charts in fullscreen mode as well! 🕸
+
+References
+
+ [1] <https://beachfront.digital>
+ [2] </WM-007>
+ [3] <https://firstround.com/review/amazons-friction-killing-tactics-to-make-products-more-seamless>
+ [4] <https://twitter.com/BeachfrontD/status/848404426557673472>
+ [5] <https://handlebarsjs.com>
+ [IMG1] <https://🔥.pixels.wtf/blog/image/2017/beachfront-digital-april-update-a.png>
+ [IMG2] <https://🔥.pixels.wtf/blog/image/2017/beachfront-digital-april-update-b.jpg>
+ [IMG3] <https://🔥.pixels.wtf/blog/image/2017/beachfront-digital-april-update-c.jpg>
diff --git a/memos/WM-010.txt b/memos/WM-010.txt
new file mode 100644
index 0000000..dbc346f
--- /dev/null
+++ b/memos/WM-010.txt
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+
+Document: WM-010 P. Webb
+Category: Project 2017.05.01
+
+ V2 of BeachfrontDigital is live!
+
+Abstract
+
+ Oh snap, that new new is launched dude!
+
+Body
+
+ As I'm writing this, I just remembered that I planned to launch V2 at
+ the end of April. I did it!
+
+ 📸[Landing page for BeachfrontDigital][IMG1]
+ 📸[Another landing page shot of BeachfrontDigital][IMG2]
+
+ Please give it an upvote on ProductHunt[1]!
+
+ Over the past 24 hours, I've been taking in early feedback ranging
+ from UI, UX, and backend issues. As you can imagine, there's still a
+ lot to do.
+
+ Here's a list of what you can currently do as a user:
+
+ - import/export domains (a template is provided[2] for importing).
+ - add domains and registrar/expiration info will automatically get
+ added (in most cases)
+ - add wishlist domains
+
+ Not a huge list but I think the main draw will be the personal
+ analytics. To my knowledge, no other registrar does this and they
+ *certainly* don't allow you to see the domains you have registered
+ elsewhere. Here is what you can expect to see after adding domains:
+
+ 📸[Analytical shot of BeachfrontDigital][IMG3]
+
+ - a conversational readout of your domain portfolio
+ - total number of domains
+ - number of domains renewing this month
+ - number of domains renewing this year
+ - number of domains renewing next year
+ - total number of TLDs (the text after the period in URLs, `.com`,
+ `.net`, `.space`, &c)
+ - total number of registrars (the companies you buy your
+ domains from)
+ - your favorite registrar
+ - your favorite TLD
+ - total amount of money you're spending annually to renew
+ your domains
+ - your cheapest domain
+ - your most expensive domain
+
+ 📸[Another analytical shot of BeachfrontDigital][IMG4]
+
+ You can also see this data in chart form, which is arguably *much*
+ more impressive-looking. Currently, the visual data displays:
+
+ - the number of domain renewals occurring per month
+ - the amount of money you're paying per month
+ - the amount of money you pay each registrar per year
+ - the number of domains you've registered per registrar
+ - the amount of domains you own per TLD
+
+ Those screenshots above are from my own domain portfolio and I can
+ gleam some interesting information from the data…
+
+ - I already knew this, but most of my domains come from Tucows, the
+ parent company of Hover.
+ - Three times a year, I seem to get a burst of inspiration and buy
+ domain names. Also, I need to check what month it is before buying
+ something extravagant.
+ - My favorite TLDs are `.online` and `.com` (my first domain name was
+ `pw-software.com` and it's still live to this day).
+
+ Anyhoo, all this to say that V2 of BeachfrontDigital is live and
+ available at beachfront.digital[3]. Check it out and let me know what
+ you think! 🕸
+
+References
+
+ [1] <https://www.producthunt.com/posts/beachfrontdigital>
+ [2] <https://beachfront.digital/downloads/beachfront-digital-import.csv>
+ [3] <https://beachfront.digital>
+ [IMG1] <https://🔥.pixels.wtf/blog/image/2017/v2-of-beachfront-digital-is-live-a.png>
+ [IMG2] <https://🔥.pixels.wtf/blog/image/2017/v2-of-beachfront-digital-is-live-b.png>
+ [IMG3] <https://🔥.pixels.wtf/blog/image/2017/v2-of-beachfront-digital-is-live-c.png>
+ [IMG4] <https://🔥.pixels.wtf/blog/image/2017/v2-of-beachfront-digital-is-live-d.png>
diff --git a/memos/WM-011.txt b/memos/WM-011.txt
new file mode 100644
index 0000000..a0b078e
--- /dev/null
+++ b/memos/WM-011.txt
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+Document: WM-011 P. Webb
+Category: Review 2017.05.06
+
+ Black Privilege review
+
+Abstract
+
+ Charlamagne Tha God can write a good book. Who knew?
+
+Body
+
+ Charlamagne Tha God is a radio personality of a nationally syndicated
+ show called "The Breakfast Club" on Power 105.1. He's not well-liked
+ by most people, especially the people he's interviewed and has
+ disagreements with — this is because he speaks his mind. He doesn't
+ like your latest album? He'll tell you. Are you embroiled in
+ controversy? He'll ask about it. Basically, he asks the questions or
+ says the things many listeners want to ask or are thinking. I count
+ myself as one of his fans.
+
+ When Charlamagne mentioned he was writing a book, I knew I had to
+ check it because…*who the hell would give this man a book deal*
+ (Touchstone Books[1], apparently)?
+
+ While reading, I found myself nodding in agreement when he arrived at
+ the conclusion of a life lesson or when he realized he had to change
+ his thought process. I also couldn't help noticing similarities in
+ our lives. We loved getting those Pizza Hut coupons for free personal
+ pizzas when we read lots of books in elementary school. Music was a
+ means of both inspiration and escape in our teens. We never finished
+ college. Despite that, we've been able to succeed.
+
+ I was reminded that I used to live out my "hood dreams" vicariously
+ through artists like Clipse[2]. While glamorizing the gangsta life,
+ they also rapped about the obvious downsides. This was at a time when
+ my peers listened to Jay Z[3], The Lox[4], Dipset[5], &c. I was
+ almost exclusively Neptunes[6] and Will Smith. Yes, *I know*. I was
+ clowned for liking Big Willie's music throughout all of middle and
+ high school.
+
+ Anyhoo, if you're an aspiring radio host or anyone aspiring to do
+ anything really, I highly recommend this book. The full title is
+ "Black Privilege: Opportunity Comes to Those Who Create It[7]". 🕸
+
+References
+
+ [1] <https://www.simonandschusterpublishing.com/touchstone>
+ [2] <https://en.wikipedia.org/wiki/Clipse>
+ [3] <https://en.wikipedia.org/wiki/Jay_Z>
+ [4] <https://en.wikipedia.org/wiki/The_Lox>
+ [5] <https://en.wikipedia.org/wiki/The_Diplomats>
+ [6] <https://en.wikipedia.org/wiki/The_Neptunes>
+ [7] <https://amzn.to/2qMSdIo>
diff --git a/memos/WM-012.txt b/memos/WM-012.txt
new file mode 100644
index 0000000..6b45e02
--- /dev/null
+++ b/memos/WM-012.txt
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+Document: WM-012 P. Webb
+Category: Project 2017.06.13
+
+ BeachfrontDigital — June Update
+
+Abstract
+
+ New logo and an extra login option added to BeachfrontDigital.
+
+Body
+
+ 1. Upcoming Features
+
+ Over the past month, I've gotten great feedback and some users
+ have added a *lot* of domains to Beachfront. But, wouldn't it be
+ nice if you could *manage* your domains? I'm still hard at work on
+ implementing domain purchasing but as I write this I realize it
+ might've been better to implement domain *management*
+ first…oh well.
+
+ 📸[Searching for domains on BeachfrontDigital][IMG1]
+
+ In any event, domain management will be pretty easy *even if you
+ don't* buy your domains from Beachfront (my pricing isn't the most
+ competitive at the moment). Adjust your domain's DNS settings to
+ my dedicated DNS servers and you'll be able to make further edits
+ from your BD account. Domain renewals and transfers will come
+ after that. And then after *that*, the real fun starts and I can
+ get started on helping you get rid of domains you don't need
+ anymore. 😉 This'll be a multi-tiered strategy/process,
+ stay tuned!
+
+ 2. Continued Improvement
+
+ I've identified low-hanging fruit thanks to a combination of early
+ feedback and little things I've observed here and there.
+
+ *-- 2017/06/29 update start --*
+
+ New users will get both an intro email *and* a login link in a
+ separate email. I initially wanted the new user to be
+ automatically logged in but wasn't able to figure out how to do
+ such a thing with Passwordless. So, this is the compromise I came
+ up with. Besides, it's kinda like verifying one's account.
+ Right? *Right?*
+
+ In your account settings, there's now an option to choose whether
+ you want to login via a tokenized link (default method) or via
+ copy/pasting a token into the page that pops up on Beachfront if
+ you have that option selected (that was a mouthful).
+
+ Options are a beautiful thing to have.
+
+ *-- 2017/06/29 update end --*
+
+ 3. Logo!
+
+ Creating icons or logos is not easy and it often takes quite a bit
+ of time for me to 1) think of something, 2) create it, and 3) like
+ the output. I'm pleased to say I've done just that
+ for BeachfrontDigital!
+
+ 📸[New BeachfrontDigital logo!][IMG2]
+
+ I started with 48px and worked my way up. In the coming weeks,
+ I'll update the site and Twitter account[1] with it. I like this
+ so much, I feel like I should get some t-shirts made…maybe later
+ this year, haha.
+
+ End
+
+ And there you have it! My goal is to send at least one newsletter
+ a month to let y'all know how development is going. Stay rad! 🕸
+
+References
+
+ [1] <https://twitter.com/@BeachfrontD>
+ [IMG1] <https://🔥.pixels.wtf/blog/image/2017/beachfront-digital-june-update-b.png>
+ [IMG2] <https://🔥.pixels.wtf/blog/image/2017/beachfront-digital-june-update-a.jpg>
diff --git a/memos/WM-013.txt b/memos/WM-013.txt
new file mode 100644
index 0000000..56ec190
--- /dev/null
+++ b/memos/WM-013.txt
@@ -0,0 +1,242 @@
+
+
+
+
+
+
+
+Document: WM-013 P. Webb
+Category: Project 2017.07.27
+
+ Neglected Projects
+
+Abstract
+
+ A/k/a, I'm easily excitable and distracted on a regular basis.
+
+Body
+
+ The name of my company is "Ideas Never Cease" (!NC) because with me,
+ it's true. Ideas, never *ever* cease. I am unable to turn my mind off
+ and it has been this way since I was eight. At 29 now, stopping isn't
+ remotely possible and I like that.
+
+ The downside, of course, is that…ideas never cease. This means I get
+ super focused on a great idea and work on it for some time and
+ *juuuuust* when things are starting to get interesting, I get
+ distracted by another great idea and the cycle continues. What does
+ *not* continue, obviously, is progress on those previous ideas…until
+ six months to a full year later. Sometimes, even longer than that!
+
+ 📸[The notebook my fiancé bought for me][IMG1]
+
+ My fiancé recently bought me a dot grid notebook because it has gold
+ and marble on the cover, which matches my laptop[1] a bit. I decided
+ to use that notebook to keep track of my weekly duties and the
+ thought occurred to me to write down my neglected projects. Then I
+ figured I'd share with the world because, why not? I've been busy
+ with redesigning BeautyLynk[2] and building BeachfrontDigital[3] so
+ that's my excuse for not working on these projects.
+
+ 📸[Some of my neglected projects][IMG2]
+
+ 1. DSGN
+
+ I want to start a small web design and development firm so I can
+ make 1) my own hours and 2) more money so I can spend more time on
+ passion projects that I *really* want to work on and not expect a
+ profit from them. To do that, I need to actually *design* and code
+ the new website[4].
+
+ The good news is that BeautyLynk and BeachfrontDigital will make
+ great initial case studies.
+
+ 2. FRSH×BTS
+
+ Man, I haven't created music in *years*. My claim to fame is that
+ when I released "Music from the Love Lounge Vol. 1", people in
+ Barcelona/Belize were jamming to it. Or at the very least, one
+ person and their friend was. "FRSH×BTS" is the production name I
+ go by, "the Wibby" and "Spaceman Fresh" being my rap aliases.
+
+ I have my music on Bandcamp[5] at the moment because I never got
+ around to creating the perfect website for `frsh.fm`. In addition
+ to that, I want to remaster *all* my old work. This means getting
+ a Windows machine, installing Windows 7 and Acid Pro, inspecting
+ the arrangements, and replicating them in Studio One. I have a
+ boatload of tracks in progress that are great jump off points for
+ new songs and I don't want to lose those. As you can imagine,
+ getting my catalogue remastered is quite the undertaking.
+
+ *Le sigh*.
+
+ Oh, and I still haven't released "Waveform", my debut album. When
+ I listen to it though, the only glaring issues I hear are vocal
+ quality and leveling.
+
+ 3. WEÖM
+
+ Short for "Wisdom Escapes Ordinary Minds", WEÖM[6] is a
+ space-centric lifestyle brand I started a few years ago. People
+ seem to like the snapback I designed better than the t-shirt and I
+ can understand why. The hat is dope and I wear it everyday!
+
+ 📸[Lakeisha and Sarah wearing WEÖM gear][IMG3]
+
+ I have done a *shitty* job of advertising it and generating buzz.
+ Obviously, that's the only way I'm going to sell all the stock I
+ have but I have a hard time being a salesperson. Ideally, someone
+ else would be doing this for me and taking a cut of the profits.
+ Also, I need to design more products. Again, I have ideas for them
+ but haven't gone further than sketches.
+
+ 4. !NC
+
+ I created a web browser, dubbed "Aries", a few years ago just to
+ see if I could do it and it actually worked. Not only that, but
+ people reached out to me to tell me how much they liked the design
+ and how it worked. Then…I moved onto another project. I was using
+ Opera as my main browser back then and now I'm using Vivaldi but I
+ still have plenty of interesting ideas to challenge the way we
+ think of desktop web browsers.
+
+ 📸[Aries screenshot][IMG4]
+
+ "Hermes" is the name I'm giving the desktop email client I intend
+ to work on at some point. Back when the latest iPhone was 5, I
+ used a neat mobile email app called "SquareOne Mail[7]" and I
+ friggin' *loved* it. You could train the app to put your email
+ into categories you created so only the *most* important messages
+ appeared in your inbox. I've heard that Gmail can do something
+ similar with filters but I run my own email server. The team
+ behind SquareOne got investors and were persuaded to pivot into
+ something (IMHO quite) boring…I don't even remember what it was.
+ Anyhoo, Hermes would be an evolved version of the original.
+
+ 5. SciLab
+
+ I've saved the best for last. Prepare for a lot of backstory.
+
+ If you follow me on social media or other online networks, you may
+ have wondered at some point what a "NetOp" or "NetOperator" is.
+ Well, that comes from a beloved video game series, called "Megaman
+ Battle Network" (MMBN). There are six main games in the series and
+ the timeline is set in the year 20XX…yes, like other Megaman
+ games. In this future, everyone has an A.I. companion called an
+ "Internet Navigator", or "NetNavi" for short. The people who
+ operate these A.I.s are often referred to as NetOperators. So,
+ combined with my rap alias you read earlier, NetOperator Wibby
+ became my online handle of choice.
+
+ Also in this future? A 3D Internet and a futuristic device
+ (Personal Terminal, or PET) that is basically a smartphone. Not so
+ revolutionary-sounding but when the first game came out (2001), it
+ was mind-blowing and captured my imagination. Can you see where
+ I'm going with this? *The ideas never ceased.*
+
+ It became quite clear to me that this awesome-sounding future had
+ to exist because…reasons. Like…it's awesome. But, how was *I*
+ going to make this happen? I was only 13 at the time with a *lot*
+ of time on my hands. *Good grief, I spent 16 years thinking about
+ this stuff* 😰
+
+ When I (briefly) attended college, I enrolled in Software
+ Engineering for the *sole purpose* of learning how to write an
+ operating system, even if it was from a middle-aged man with
+ *impeccable* bright white facial hair and a tendency to
+ accidentally spit on students in the front row. However, I was
+ forced to leave because I found out I couldn't afford college.
+ That dashed my dreams a bit but I taught myself web design and
+ development, got an apprenticeship, and eventually landed
+ good-paying jobs and skills that led me to think, "What if I just…
+ *wrote* an 'operating system' in HTML/CSS/JS?". This is how
+ *hikari OS[8]* was born! For those keeping score at home, "hikari"
+ is the creator of the 3D Internet and NetNavis in MMBN. Hey,
+ innovation is a family business.
+
+ *hikari is an Electron app that will be designed to boot from a
+ minimal Linux distro in fullscreen on a Raspberry Pi.* It's like
+ Chrome OS in a way. Anyhoo, I worked on hikari for awhile and got
+ distracted, of course.
+
+ For my NetNavi project, I'd need a good voice
+ recognition/synthesis library and currently, Google is the best
+ for that and I don't consider them an option because they are
+ beyond terrible with user privacy. I'm not sure why they need to
+ store your voice commands on their servers for an unspecified
+ amount of time but hey, that's what happens when things are free.
+ I'm not expecting my NetNavi project to be considered "real A.I.".
+ Siri, Cortana, and everything else are just elaborate
+ `if`/`then`/`else` statements. The PET is low priority because the
+ base being a Raspberry Pi makes things super easy (like, creating
+ a dock station, &c).
+
+ Lastly, the 3D Internet. In my research, I got downvoted to hell
+ across a couple StackExchange sites (I was told to ask a different
+ site, at least four times). In hindsight, that's what I get for
+ going there for useful advice.
+
+ With regard to "NetCity" in the MMBN anime, I sketched a process
+ that would allow for the automatic generation of buildings based
+ on how deep a website's links went. Take this site for example! I
+ have four main links in the header. Each of those links would
+ represent a different floor. Each page's contents would be
+ represented on each floor depending on what it was. Blog posts
+ would become eBooks, mp3s would become a CD, and so on. Just like
+ search engine bots visit your website every now and then, so would
+ this 3D 'Net bot and it would report changes that would update
+ your generated building.
+
+ This 3D 'Net would be accessed via "the Network", which is
+ effectively an MMORPG where your NetNavi is your avatar. Aries
+ would have a built-in viewer for this, although I'd probably just
+ use three.js.
+
+ …This is going off the rails, I understand that. This is also
+ going to cost a *fuck* ton of money. Yes, the fuck was necessary
+ because unless I become super rich in the next 10 years, what I'm
+ seeing in my head will never see the light of day until I'm 60…
+ y'know what, that's around the age Grandpa Hikari created the
+ Internet. Also, I just realized that he looks like a chubby
+ Vint Cerf.
+
+ &c
+
+ I could go on and on about my project backlog. Here's a few more
+ that are in the incubation stage of my ideation process:
+
+ - social network that doesn't suck, enables better communication,
+ provides ways for users to deal with harassment, and makes money
+ without selling user data.
+ - an outlet that showcases black excellence, positivity, and
+ training resources to aid small business owners and
+ aspiring freelancers.
+ - an eCommerce platform that allows for true customization,
+ doesn't treat you like you're dumb, and has a
+ self-hosted option.
+ - a curated site for lefties that doesn't look like it was built
+ in 1999 and stayed that way.
+
+ I'll get to these projects some day. I've attempted to work on
+ things on a schedule but my mind/enthusiasm doesn't work that way.
+ I'm using a dot grid notebook as a weekly planner instead of the
+ weekly planner I bought months ago, simply because predefined
+ lines and boxes make me feel constrained. I'm not quite sure what
+ the solution is but I think if I had more time (hah, don't we all
+ want this?) and made my own hours, I could figure this thing out.
+ Or at the very least, start knocking things out one by one. 🕸
+
+References
+
+ [1] </WM-004>
+ [2] <https://beautylynk.com>
+ [3] <https://beachfront.digital>
+ [4] <https://dsgn.io>
+ [5] <https://thewibby.bandcamp.com>
+ [6] <https://weom.space>
+ [7] <https://techcrunch.com/2014/03/05/squareone-for-iphone-organizes-your-email-gives-you-better-control-over-notifications>
+ [8] <https://hikar.io>
+ [IMG1] <https://🔥.pixels.wtf/blog/image/2017/neglected-projects-a.jpg>
+ [IMG2] <https://🔥.pixels.wtf/blog/image/2017/neglected-projects-b.jpg>
+ [IMG3] <https://🔥.pixels.wtf/blog/image/2017/neglected-projects-c.jpg>
+ [IMG4] <https://🔥.pixels.wtf/blog/image/2017/neglected-projects-d.png>
diff --git a/memos/WM-014.txt b/memos/WM-014.txt
new file mode 100644
index 0000000..7d41112
--- /dev/null
+++ b/memos/WM-014.txt
@@ -0,0 +1,430 @@
+
+
+
+
+
+
+
+Document: WM-014 P. Webb
+Category: Rant 2017.08.19
+
+ I'm done with Kickstarter
+
+Abstract
+
+ Being let down all the time is…a let down.
+
+Body
+
+ Kickstarter is a great place for people to financially support those
+ with a great idea and a prototype, but need a little assistance to
+ make that idea a reality. This is why I signed up for the platform in
+ 2012. Five years later and I'm sick of the bullshit that seems to
+ emanate from the projects I back.
+
+ Of the 39 projects I have contributed money to, 10 are delayed (some
+ are delayed by about a year or more). *Good thing I'm not holding my
+ breath.* Let's take a look at those projects, starting with
+ the oldest.
+
+ 1. Star Citizen
+
+ 📸[Star Citizen on Kickstarter][IMG1]
+
+ This game[1], by Cloud Imperium Games Corporation, was
+ successfully funded on November 19th, 2012. I backed at the $37
+ tier (Digital Scout) for:
+
+ - a digital copy of the finished game (PC)
+ - RSI Aurora spaceship ready to fly
+ - 1,000 Galactic Credits
+ - exclusive access to the Alpha + Beta
+
+ The estimated delivery date for this was November 2014. Of the
+ unfulfilled projects I backed, I am the *least* sore about Star
+ Citizen because 1) I can play the Alpha when I get a PC (I have a
+ Mac) and 2) there are regular updates. Not just, "Oh hey guys,
+ here's a wall of text and a pic or two", it's actual gameplay and
+ something I can interact with.
+
+ I think the CEO got overly ambitious but at least it's not No
+ Man's Sky-tier of fuckedupness.
+
+ 2. Mighty No. 9
+
+ 📸[Mighty No. 9 on Kickstarter][IMG2]
+
+ This game[2], by comcept, is currently the laughing stock of the
+ gaming world and a cautionary tale for game developers looking to
+ create a Kickstarter for their game. It was successfully funded on
+ October 1st, 2013. I backed at the $60 tier for:
+
+ - a physical game box (Western/Japanese style)
+ - printed retro-style game manual (English/Japanese)
+ - exclusive in-game golden hero (backer-exclusive color variation
+ of Beck, the game's hero)
+
+ The estimated delivery date for this was April 2015. I just got
+ the physical rewards a week or two ago. The Nintendo 3DS version?
+ Still waiting for it. I have a Switch now…
+
+ 3. Sa: The Umbrella Reimagined
+
+ 📸[The Sa umbrella on Kickstarter][IMG3]
+
+ This umbrella[3], by Justin Nagelberg and Matthew Waldman, was
+ successfully funded on December 1st, 2014. I backed at the $69
+ tier for:
+
+ - one Sa (early limited special)
+
+ The estimated delivery date was March 2015. Since being
+ successfully funded, backers have gotten ~~updates~~ essays twice
+ a year about why shipping has been delayed two years. Basically,
+ because the umbrella is so different that factories have to be
+ taught how to work on components. Factories is plural because
+ they've gone through a couple because of shutdowns. Who the hell
+ knows when I'm gonna get this thing.
+
+ - 2017/09/14 update
+ - another essay, but with TL;DR version!
+ - fully functioning prototype
+ - noticed weird things with prototype, fixes for those things is
+ in progress
+ - shipping has been pushed back to Winter/Spring 2018
+
+ To quote a backer, "Great to see that after nearly 3 years you
+ nearly have a working prototype".
+
+ 4. The Light Phone
+
+ 📸[The Light Phone on Kickstarter][IMG4]
+
+ This phone[4], by Light, was successfully funded on June 27th,
+ 2015. I backed at the $25 tier for:
+
+ - The Light Book. It documents the process of building the Light
+ Phone and includes photos, drawings, and essays. It will cover
+ the entire story from ideation to insights into the
+ manufacturing process.
+
+ The estimated delivery date was June 2016. I messaged the founders
+ last month about the book and this was the response:
+
+ > Not yet. We would like to include our entire journey of the
+ > Light Phone and we believe that there is more to come. We will
+ > email backers when we plan to release the book. Thank you
+ > for asking!
+
+ I'm not sure how much more of "the journey" needs to be documented
+ but I hope I get it before the end of 2018.
+
+ - 2018/02/28 update
+ - creators are launching a new campaign for Light Phone 2, but
+ on Indiegogo[5] this time
+
+ Here's what they had to say about backers that pledged for
+ the book:
+
+ > We have users that pledged for a process book in our original
+ > campaign, and we want to acknowledge that we have not at all
+ > forgotten about you. We've continued to document the process and
+ > want the book to encompass the Light Phone journey in its
+ > entirety, through this second generation as well. We will offer
+ > the book as a pledge in the next campaign as well (a $50
+ > donation). We have a few ideas for ways to make this even more
+ > special for those of you who originally donated with a limited
+ > edition bonus too.
+
+ The end of the Indiegogo campaign is scheduled to end April 2019.
+ The Kickstarter campaign ended June 2015. I was supposed to get
+ the book June 2016.
+
+ 5. ~~Das Keyboard 5Q~~ GOT IT
+
+ 📸[Das Keyboard 5Q on Kickstarter][IMG5]
+
+ This keyboard[6], by Das Keyboard, was successfully funded on July
+ 30th, 2016. I backed at the $139 (early bird) tier for:
+
+ - one Das Keyboard 5Q for $90 off the $229 retail price.
+
+ The estimated delivery date was January 2017. I have a regular Das
+ Keyboard (Mac version) at home and I love it. What drew me to the
+ 5Q was the ability to write scripts to mod the keyboard. You can
+ create light shows, make certain keys change color due to a
+ specified event, and so on. Super customizable! Anyhoo, people are
+ pissed off because the company makes keyboards for a living and we
+ *still* don't have ours.
+
+ Welp.
+
+ - 2017/08/25 update
+ - Typhoon Hato damaged a factory in Hong Kong
+ - no injuries
+ - raw materials and critical production equipment were protected
+ from damage
+
+ - 2017/08/31 update
+ - 5Q pilot production will begin in a couple days
+ - full production schedule for the end of September
+ - Kickstarter fulfillment in October, barring any pilot
+ production issues
+
+ - 2017/09/25 update
+ - solder quality for mechanical switches failed QA
+ - incorrect product packaging
+ - National Day in China for the first week of October
+ - production will start the week of October 30th
+
+ - 2018/02/28 update
+ - keyboards are shipping!
+ - Mac/Linux support is nonexistent…seriously
+ - 105-key layout (international) keyboards have damaged switches
+ - according to a Superbacker and another backer who got theirs
+ already, the keyboard is straight *trash* from the hardware to
+ the software
+
+ - 2018/03/13 update
+ - I opened a ticket with Das Keyboard's support channel to get
+ the address for the 5Q to be changed to one of my best
+ friends. I bought WASD's CODE keyboard[7] instead.
+ - Roughly 15 months to deliver what appeared to be a lackluster
+ keyboard of questionable quality. *Sigh*
+
+ With each update, backers become less enthusiastic or get angry. I
+ think it's safe to say that the Das Keyboard team isn't going to
+ make another crowdfunded product for a long time, if ever.
+ ~~Earlier this summer, I joked about getting my 5Q in time for~~
+ ~~Christmas. At this rate, that looks to be the case.~~ Keep in
+ mind that these people are in the business of producing keyboards
+ and have been doing so since 2005.
+
+ 6. ~~TMA-2 Modular Headphone System~~ GOT IT
+ 📸[TMA-2 Modular Headphone System on Kickstarter][IMG6]
+
+ This wireless headphone system[8], by AIAIAI, was successfully
+ funded on December 15th, 2016. I backed at the $65 tier (early
+ bird) for:
+
+ - H05 Smart Headband
+
+ The estimated delivery date was May 2017. AIAIAI's TMA-2 is a
+ modular headphone system which means if something on my headphones
+ breaks, I can just replace a module or two and not the entire
+ thing. I already own the TMA-2 so what I paid for was the headband
+ to make my headphones wireless. ~~The latest update said this~~
+ ~~was going to ship at the end of this month. We shall see.~~
+
+ I'm tired of using Apple's shitty ear buds and I've gone through
+ two aux dongles already.
+
+ - 2017/08/21 update
+ - mass production has been moved to September 11th
+ - Kickstarter orders (1436 of 'em) will ship out September
+ 18th - October 6th
+ - I've already confirmed with them that orders will ship in
+ order of pledges (I'm backer 46)
+
+ - 2017/09/13 update
+ - mass production started but minor things needed to change on
+ assembly line
+ - 7-10 day delay
+
+ - 2017/09/27 update
+ - headphones are shipping ~~(hope to update this post in a~~
+ ~~couple days)!~~
+
+ - 2017/10/18 update
+ - I got it! 5 MONTHS LATER
+
+ 7. Indie Microblogging
+
+ 📸[Indie Microblogging on Kickstarter][IMG7]
+
+ This social network and eBook[9], by Manton Reece, was
+ successfully funded on February 1st, 2017. I backed at the $10
+ tier for:
+
+ - PDF and ePub versions of the book, plus early access to
+ Micro.blog
+
+ These are some of the book topics:
+
+ - how to adapt blogging tools like WordPress and Tumblr to work
+ with microblogs.
+ - the important role of cross-posting to Twitter, and the best
+ tools out there.
+ - tips for integrating a microblog into an existing weblog.
+ - architecture for microblogs, with a behind-the-scenes look at
+ how Micro.blog was built.
+ - overview of the latest IndieWebCamp and W3C proposals for indie
+ microblogging, such as Webmention and Micropub.
+ - Manton's personal stories on why it matters so much to preserve
+ content on the Internet.
+
+ The estimated delivery date was March 2017. Like Star Citizen, I'm
+ not sore about my eBook reward being delayed. Manton is creating
+ an entire social network by himself and managing a Slack group for
+ backers. I haven't setup this blog with micro.blog yet either so
+ it looks like we're both delayed, haha! He's actively working on
+ finishing the book though.
+
+ 8. ~~Jack: Make Any Headphones Wireless~~ GOT IT
+
+ 📸[Jack on Kickstarter][IMG8]
+
+ This Jack adapter[10], by Podo Labs, was successfully funded on
+ February 25th, 2017. I backed at the $25 (early bird) tier for:
+
+ - one Jack adapter
+
+ The estimated delivery date was June 2017. The latest update
+ promises that I'll get this by the end of October at the latest.
+ You might be wondering why I backed two Kickstarters that are
+ headphone-focused. I like music and I'm beginning to despise
+ wires. Should the battery on my H05 run out, I can attach a cable
+ to it and that cable to the Jack. I'll have to stuff the cord in
+ my bag or someplace but it'll still be wireless!
+
+ - 2017/10/06 update
+ - Delays of course, but the team makes it seem as though they
+ were blindsided by a Chinese holiday. This isn't their first
+ KS and from the comments, they have a history of making
+ promises they can't keep, having tons of delays, and
+ announcing new projects before the current one is fulfilled.
+ - "Production" unit shown doesn't match prototype, and while
+ understandable to a degree it's disappointing.
+
+ - 2019 May update
+ - This was sent to my old address so it took a couple weeks to
+ get to me. Eighteen friggin' months for this thing? SMH. They
+ even had the nerve to advertise new Kickstarter campaigns
+ while I waited.
+
+ 9. ~~Steadicam Volt~~ GOT IT
+
+ 📸[Steadicam Volt on Kickstarter][IMG9]
+
+ This smartphone stabilizer[11], by The Tiffen Company, was
+ successfully funded on March 5th, 2017. I backed at the $139
+ (early bird) tier for:
+
+ - Steadicam Volt for $60 off the planned $199 retail price
+
+ This includes:
+
+ - Steadicam Volt Stabilizer
+ - 5x magnetic and 1x starter balance weight
+ - 2x batteries
+ - battery charger
+ - Micro-USB cable
+ - quickstart guide
+ - carrying pouch
+
+ The estimated delivery date was June 2017. Because retailers like
+ B&H received Steadicam Volts before backers, we all get a premium
+ carrying case for free. Not bad, but I expected to get the Volt
+ before this month so I could get awesome beach footage of my kids.
+ It's now the middle of August so that plan was ruined. When
+ companies show prototypes that are *super* close to the finished
+ product and show they have years of experience doing things, and
+ yadda x3, I expect to get rewards in a relatively short timeframe.
+ Like the Das Keyboard, this is not the case here. Apparently,
+ shipping is supposed to start this month.
+
+ - 2017/09/08 update
+ - shipping warehouse is overbooked
+ - shipping will start on the 11th
+ - everyone should get tracking information shortly
+
+ - 2017/09/14 update
+ - I don't have tracking info
+
+ - 2017/09/21 update
+ - I got it! THREE MONTHS LATER
+
+ 10. ~~Black Ink~~ WOMP
+ 📸[Black Ink on Kickstarter[IMG10]
+
+ This film[12], by Craig Rippon, was successfully funded on April
+ 21st, 2017. I backed at the $25 tier for:
+
+ - Black Heroes Matter t-shirt
+
+ This includes:
+
+ - movie ticket code for advance online screening
+ - my name listed in the "Thank You" section of the film
+ - link to the 2nd trailer for the film when it's completed
+ - BLACK INK computer wallpaper
+
+ The estimated delivery date was May 2017 (for the t-shirt, not the
+ film) and Craig has been unresponsive.
+
+ - 2017/10/11 update
+ - Craig has been dealing with a LOT of family health issues, one
+ of which is serious.
+ - The company he was working with to get the books didn't honor
+ the apparent discount agreement they had. Maybe time ran out
+ for that?
+ - The film *should* be out in February.
+
+ - 2019 May update
+ - I don't care anymore.
+
+ I was a bit miffed when I didn't hear anything for months but not
+ anymore, Craig can take all the time he needs.
+
+ Honorable mention
+
+ With the exception of Star Citizen and Indie Microblogging (and as
+ of October 11th, Black Ink), all this has been rather annoying.
+ Honorable mention goes out to Massdrop for the MiTo Canvas XDA
+ Custom Keycap Set[13] I've yet to receive. The drop completed on
+ February 1st, 2017. I paid $72.97 (shipping included) for the
+ Bauhaus Icon Modifiers and Betas. This is what it'll look like:
+
+ 📸[MiTo Canvas XDA Custom Keycap Set on Massdrop][IMG11]
+
+ The estimated ship date was June 2nd, 2017 and the new one is now
+ October. *Kanye shrug* I plan on putting these awesome keys on my
+ existing Das Keyboard…I just noticed I'll need to purchase
+ additional keys for my number pad.
+
+ Conclusion
+
+ The moral of this story? It used to be that you could pledge for
+ something on Kickstarter and expect to get the product on or damn
+ close to the promised delivery date. I love the idea of supporting
+ promising businesses but I think I'll just wait until whatever
+ product is available on Amazon before parting with my money. Who
+ wants to be constantly let down all the time? Not me,
+ not anymore. 🕸
+
+References
+
+ [1] <https://www.kickstarter.com/projects/cig/star-citizen>
+ [2] <https://www.kickstarter.com/projects/mightyno9/mighty-no-9>
+ [3] <https://www.kickstarter.com/projects/860103721/satm-the-umbrella-reimagined>
+ [4] <https://www.kickstarter.com/projects/thelightphone/the-light-phone>
+ [5] <https://www.indiegogo.com/projects/light-phone-2-smartphone-design>
+ [6] <https://www.kickstarter.com/projects/1229573443/das-keyboard-5q-the-cloud-connected-keyboard>
+ [7] <https://www.wasdkeyboards.com/index.php/products/code-keyboard/code-104-key-mechanical-keyboard-2923.html>
+ [8] <https://www.kickstarter.com/projects/1733579622/the-wireless-tma-2-modular-headphone-system>
+ [9] <https://www.kickstarter.com/projects/manton/indie-microblogging-owning-your-short-form-writing>
+ [10] <https://www.kickstarter.com/projects/podolabs/make-any-headphones-wireless-jack-by-podo-labs>
+ [11] <https://www.kickstarter.com/projects/tiffencompany/steadicam-volt-smartphone-stabilizer-shake-free-vi>
+ [12] <https://www.kickstarter.com/projects/1750747889/black-ink-people-of-color-in-comics>
+ [13] <https://www.massdrop.com/buy/massdrop-x-mito-canvas-xda-custom-keycap-set>
+ [IMG1] <https://🔥.pixels.wtf/blog/image/2017/im-done-with-kickstarter-a.jpg>
+ [IMG2] <https://🔥.pixels.wtf/blog/image/2017/im-done-with-kickstarter-b.jpg>
+ [IMG3] <https://🔥.pixels.wtf/blog/image/2017/im-done-with-kickstarter-c.jpg>
+ [IMG4] <https://🔥.pixels.wtf/blog/image/2017/im-done-with-kickstarter-d.jpg>
+ [IMG5] <https://🔥.pixels.wtf/blog/image/2017/im-done-with-kickstarter-e.jpg>
+ [IMG6] <https://🔥.pixels.wtf/blog/image/2017/im-done-with-kickstarter-f.jpg>
+ [IMG7] <https://🔥.pixels.wtf/blog/image/2017/im-done-with-kickstarter-g.png>
+ [IMG8] <https://🔥.pixels.wtf/blog/image/2017/im-done-with-kickstarter-h.jpg>
+ [IMG9] <https://🔥.pixels.wtf/blog/image/2017/im-done-with-kickstarter-i.jpg>
+ [IMG10] <https://🔥.pixels.wtf/blog/image/2017/im-done-with-kickstarter-j.jpg>
+ [IMG11] <https://🔥.pixels.wtf/blog/image/2017/im-done-with-kickstarter-k.jpg>
diff --git a/memos/WM-015.txt b/memos/WM-015.txt
new file mode 100644
index 0000000..602279b
--- /dev/null
+++ b/memos/WM-015.txt
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+Document: WM-015 P. Webb
+Category: Press 2017.09.01
+
+ Interview with MailChimp
+
+Abstract
+
+ A lesson in bouncing back.
+
+Body
+
+ Earlier this summer, I had an interview with MailChimp for their
+ MailChimp Agencies newsletter. Special shoutout goes to Maurice
+ Cherry[1] for being the plug for this! If you don't know much about
+ me and how I got started in the tech space, it's a great read[2].
+
+ Here are some excerpts from the interview, my tips on how to
+ keep going:
+
+ - *Find someone who will collaborate with you.* "*Collaboration means
+ you get someone else's experience,*" Webb says. "*It can also help
+ you keep a realistic mindset of what's possible.*" A lack of
+ knowledge combined with unrealistic expectations can be a toxic
+ combination during any project. Collaborating with a partner can
+ help you avoid those pitfalls.
+
+ - *Find value in seeing results.* "*One thing that motivates me is
+ that I just want to see things happen,*" Webb says. "*If I have an
+ idea and don't see anybody else doing it, then I'm going to do it
+ just to see the result.*" Even if your project isn't going the way
+ you hoped, there's still a lot that can be learned from seeing it
+ through to the end.
+
+ - *Find a way to simplify.* "*Stuff takes on a life of its own
+ sometimes,*" Webb says. "*There's usually a way to make it simpler.
+ When a project gets too frustrating, I start to look for what I can
+ strip away.*" When you feel overwhelmed, take a break and come back
+ with a fresh eye toward how you can make things simpler. It may
+ help breathe new life into your project.
+
+ Oh yeah, check out these dope illustrations of me by Marco
+ Boulais[3]. I love them so much and I emailed him to get some
+ commissioned stuff done, but haven't heard anything yet.
+
+ 📸[Which domain should I get?][IMG1]
+ 📸[Learning how to design and code][IMG2]
+
+ Anyhoo, check out my interview![2] 🕸
+
+References
+
+ [1] <https://twitter.com/mauricecherry>
+ [2] <https://mailchimp.com/resources/resources-for-partners/a-lesson-in-bouncing-back-from-web-designer-paul-anthony-webb>
+ [3] <http://www.marcoboulais.com>
+ [IMG1] <https://🔥.pixels.wtf/blog/image/2017/interview-with-mailchimp-a.gif>
+ [IMG2] <https://🔥.pixels.wtf/blog/image/2017/interview-with-mailchimp-b.gif>
diff --git a/memos/WM-016.txt b/memos/WM-016.txt
new file mode 100644
index 0000000..b4ff3bb
--- /dev/null
+++ b/memos/WM-016.txt
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+Document: WM-016 P. Webb
+Category: Review 2017.09.03
+
+ 1984 review
+
+Abstract
+
+ A nightmarish vision of the future.
+
+Body
+
+ The first half of this book was gripping and the second half was
+ unpleasant to me, but I had to see how it ended.
+
+ 1984 is an oft-referenced book when tech writers and
+ privacy-conscious people talk about governmental encroachment upon
+ citizens' privacy and abuses of power to obtain private information.
+ And Facebook (haven't been a fan for some time). By the way, there's
+ going to be slight spoilers moving forward…
+
+ Get ready!
+
+ The story follows a man, Winston Smith, living in what could only be
+ called a "negative utopia" in the year 1984 (the book was published
+ in 1950). The country he lives in, Oceania, is controlled by the
+ Party and the Party quite literally rewrites history. As far as
+ anyone knows, the Party invented steamboats and airplanes and
+ everything else. Those born before the formation of the Party know
+ the truth but it doesn't matter. Questioning otherwise results in
+ sure death. Winston's only purpose in life is to rewrite facts
+ whenever the Party deems it necessary. If there was a speech in
+ which the Party claimed something and recorded facts said otherwise,
+ those recorded facts (in the form of newspapers, books, video, &c)
+ were subsequently destroyed and teams of people would recreate the
+ aforementioned media to "prove" the Party was and always is right in
+ all things.
+
+ Prime example: in the beginning of the story, Oceania was at war with
+ Eurasia and Eastasia was their ally…only, the opposite was declared
+ later at a war rally *mid-speech* and the populace went with it. "The
+ enemy" tricked people into putting up posters of their enemy instead
+ of their ally and that "proved" just how diabolical they were
+ (nevermind the fact that thousands of people were *just* cheering for
+ Oceania and Eastasia). Winston and everyone else in the Outer Party
+ worked several 16 hour days to remove any mention of prior facts.
+ Knowing something to be false, yet believing in it anyway is referred
+ to as *doublethink*. If the Party said 2 + 2 = 5, *you'd better*
+ *believe it, or else*.
+
+ Citizens caught by the Thought Police for *crimethink* (anything
+ remotely negative about or opposing the principles of the Party or
+ "Big Brother") get sent to a building called "Ministry of Love",
+ where they are tortured and starved before being mentally broken down
+ so brainwashing can take hold. Once these people are released, they
+ "live" out their lives doing menial work before eventually getting a
+ bullet in the back of their head.
+
+ I don't think I'm doing a good job selling you on this book,
+ especially considering how I mentioned how unpleasant I found the
+ second half. Bear with me here. There was *one* neat thing and that
+ was the creation of a new language, *Newspeak[1]*, which dealt with
+ the merging of words (and eradication of others) to simplify English.
+ Of course, any words that might inspire a revolution of some sort
+ were abolished (as well as the concept of freedom). Can't have people
+ using a language created by the Party to overthrow them. Talk about a
+ slap in the face!
+
+ Similarities of American society today and the dystopia of Oceania
+ weren't difficult to see. In fact, they jumped out at me. Fake news,
+ alternative facts, and blind followers of Drumpf[2] who regularly
+ engage in doublethink. Quite frankly, I found it terrifying.
+ Thankfully, we don't live in a world where the depressing society of
+ Oceania could thrive. No one entity has control over data and
+ knowledge (doesn't stop 'em from trying though). If nothing else,
+ 1984 serves as a cautionary tale of what *could* happen if everyone
+ lost their damn minds and subsequently decided they didn't care.
+
+ If you like reading about oppressive dystopias, 1984[3] is the book
+ for you. 🕸
+
+References
+
+ [1] <https://en.wikipedia.org/wiki/Newspeak>
+ [2] <https://youtu.be/DnpO_RTSNmQ?t=20m53s>
+ [3] <https://amzn.to/2vUVoiH>
diff --git a/memos/WM-017.txt b/memos/WM-017.txt
new file mode 100644
index 0000000..ba7bbdc
--- /dev/null
+++ b/memos/WM-017.txt
@@ -0,0 +1,348 @@
+
+
+
+
+
+
+
+Document: WM-017 P. Webb
+Category: Tech 2017.09.12
+
+ iPhone X is my dream phone
+
+Abstract
+
+ This looks like everything I've ever wanted
+
+Body
+
+ For as long as I can remember, I've always wanted a futuristic
+ communication device *that also looked the part*. Arguably, every
+ smartphone today fits the former description. The latter? A whole
+ bunch of *meh*. Sharp's Aquos Crystal[1] was the best contender
+ before the X IMO, but I don't use Android.
+
+ 📸[Dat sweet design, dayum][IMG1]
+
+ Enter iPhone X[2], a device leaked by a disgruntled employee inside
+ Apple days before today's event. It *would have been nice* to have a
+ proper surprise but here in 2017, assholes are a dime a dozen.
+ Anyhoo, this futuristic communication device succeeds in looking like
+ such and that pleases me *immensely*. For context, I am currently
+ rocking a 256GB Jet Black iPhone 7 Plus. I purchased this phone and
+ configuration primarily for the camera…*and shiny body*.
+
+ My fiancé used to find my ~~constant filming~~ role as family
+ historian irritating but has come to accept it now, yahaha[3]! She
+ was pregnant with our son when I bought it and I correctly predicted
+ that most of my content would be of him. My daughter is becoming a
+ ~~pain in my ass~~ tween and I don't want to miss out on her
+ development/funny moments as well. Believe it or not, I've filled my
+ phone at least twice over the past year and would've reached my
+ phone's storage limits a helluva lot quicker if I chose a
+ lesser capacity.
+
+ I explain all this to say I'm going to be one of those people
+ plunking down $1149 for the piece of mind 256GB gives me. Fight me.
+ (No really, some people seem pretty mad about the iPhone X on
+ Twitter) 🤷🏾‍♂️
+
+ I'm going to run down my favorite new features about the
+ *definitive* iPhone.
+
+ *BUCKLE UP GANG*
+
+ 1. Cameras
+
+ Anyone who visits my Instagram page[4] can see that I clearly
+ *love* taking Portrait photos. While not perfect (Apple needs to
+ find a way to deal with curly hair), I can usually get some damn
+ good shots on a consistent basis. The optical image stabilization
+ allows me to run after my kids and get awesome action shots that
+ aren't blurry as hell.
+
+ For the X, Apple includes a *second* optical image stabilizer.
+ This will make my favorite kind of photo to take *even better*.
+ In additional to a better-looking Portrait mode, we gain a new
+ feature called "Portrait Lighting". Thanks to the extra sensors
+ Apple seems keen on packing into iPhone, Portrait Lighting allows
+ me to light my subjects in five different ways:
+
+ 1. Natural Light
+ 2. Studio Light
+ 3. Contour Light
+ 4. Stage Light
+ 5. Stage Light Mono
+
+ These modes emulate studio lighting and of course, since this is
+ software it can (and will) improve over time. The X will
+ automatically optimize images as I take them. In theory that
+ sounds great but, I don't know just yet if I'll like how this
+ optimization happens.
+
+ When Apple initially introduced Portrait Mode, I've wanted it on
+ the front-facing camera and it's a reality now with the X (and
+ iPhone 8 Plus, the Plus model always has a better/extra camera
+ than the non-Plus model). FINALLY. Get ready for yours truly (and
+ aspiring Instagram models) to use this feature a LOT.
+
+ Another feature I'm particularly excited for is the capability to
+ shoot *4K video at 24fps*. This is cinema-quality videography, *in
+ my friggin' pocket*. Are you *kidding* me?! This, coupled with the
+ Steadicam[5] coming in the mail soon, is going to make my videos
+ *amazing*. I do believe I win for best family historian this year,
+ the holidays are gonna be cinematically *gorgeous daaaaahling*.
+
+ 2. Face ID
+
+ 📸[Internal shot of what makes Face ID possible][IMG2]
+
+ ~~When Craig Federighi bungled the initial demo of Face ID, I~~
+ ~~was concerned for obvious reasons. Then he tried several more~~
+ ~~times and it worked consistently each of those times, which~~
+ ~~leads me to believe he messed up somehow that first time (go~~
+ ~~watch first impressions videos from people who were actually~~
+ ~~at today's event, Face ID gets demoed in some.~~
+
+ Update from Apple to 9to5Mac[6]:
+
+ > "People were handling the device for stage demo ahead of time,"
+ > says a rep, "and didn't realize Face ID was trying to
+ > authenticate their face. After failing a number of times,
+ > because they weren't Craig, the iPhone did what it was designed
+ > to do, which was to require his passcode." In other words, "Face
+ > ID worked as it was designed to."
+
+ My main concern continues to be, *will this work for me?* I'm a
+ black man with a beard who wears glasses. *Snapchat doesn't think
+ I exist* most times, whereas my family can use Snapchat's
+ face-tracking masks without issue. While Apple's site shows a
+ brown man with/without facial hair, glasses, and a hat, I haven't
+ seen any press media showcasing dark-skinned people using Face ID
+ successfully. Color concern may be unwarranted since an infrared
+ camera, infrared light, and dot mapping is used but facial hair? I
+ look forward to tech reviewers testing this before launch. If
+ MKBHD doesn't grow a beard, *I* will be the one to test this for
+ myself (and share the results with you all).
+
+ Apple claims their Face ID neural networks/machine learning will
+ track your face's changes over time. It will be interesting to see
+ how it copes with people undergoing reconstructive surgery and
+ related facial matters.
+
+ 3. Hardware Design
+
+ 📸[iPhone 4, is that you?][IMG3]
+
+ The iPhone 4 was a favorite to many and I remember the collective
+ sadness online when the iPhone 5 was released looking very
+ different from the 4. I had a Palm Pre at the time so I didn't
+ care, haha. The X has a glass back like the 4, but adds surgical
+ grade stainless steel for the sides and bottom. The phone looks
+ seamless and I'm curious to know how it feels in the hand.
+
+ I regularly give my son my phone while it's recording on the
+ front-facing camera because the results end up being pretty funny.
+ Being a year and some months old, he *does*
+ drop/throw/trip over/attempt to eat my phone so the extra sturdy
+ design of the X will be much appreciated (my 7 Plus is holding up
+ well though!). I'm thinking about creating a YouTube channel in a
+ few months to showcase #dadlife, and you may see some of
+ these clips.
+
+ According to Apple, normal ol' OLED wasn't good enough. They've
+ made a "Super Retina" HDR display with a million to one contrast
+ ratio, high resolution and brightness, wide color support, and
+ excellent color accuracy. In addition, the X gains "True Tone"
+ technology like the latest iPad Pro. This automatically adjusts
+ the color temperature of the screen to match the lighting
+ environment you're in, to reduce eyestrain.
+
+ 4. Qi Charging
+
+ 📸[Qi charging, never saw this coming][IMG4]
+
+ The glass back of the X enables wireless charging and to be
+ honest, I did not think this would actually happen. Of course, the
+ Apple-issued charging mat isn't coming until sometime in 2018 but
+ the fact that it's coming at all is great. In the meantime, you
+ can certainly purchase Qi charging pads from other manufacturers.
+ Apple says they've wanted ~~wireless~~ inductive charging since
+ the original iPhone and a decade later they've done it! *Cue
+ Android users saying they've had it first.*
+
+ Qi is an industry standard for wirelessly charging devices. One of
+ my best friends swears by Qi and remarked that some fairweather Qi
+ manufacturers are gonna come back into the fold (LG and HTC). I
+ hope Qi and USB-C take the tech industry by storm. One cable to
+ rule them all and wireless charging for the rest!
+
+ Clarification about Qi and AirPower, from John Gruber[7]
+ (emphasis mine):
+
+ > The best way to think of it is that AirPower is to Qi what
+ > AirPods are to Bluetooth.
+ >
+ > *AirPower is going to be a superset of Qi with a layer of
+ > non-standard Apple technology on top of it to make it better*,
+ > just like how AirPods are a superset of Bluetooth with
+ > non-standard Apple technology on top. So iPhone 8 and iPhone X
+ > can charge on any Qi charging pad, like the Belkin and Mophie
+ > ones that Apple promoted on stage. Likewise, AirPods can be used
+ > as a regular Bluetooth headset connected to any
+ > Bluetooth device.
+ >
+ > But AirPower can do things Qi cannot — it can charge Apple Watch
+ > and the upcoming new AirPod case. *Apple Watch and the AirPod
+ > case are not Qi devices — you cannot charge them on a Qi
+ > charging pad.* That's similar to the way AirPods (and the Beats
+ > headphones also equipped with Apple's W1 chip) can do things
+ > regular Bluetooth headsets cannot — in particular, the seamless
+ > pairing process, and the lower audio playback latency enabled by
+ > the W1.
+ >
+ > The main difference between the non-standard aspects of AirPower
+ > compared to AirPods is that *Apple is pledging to offer their
+ > improvements to the Qi consortium.* If the consortium accepts
+ > them, third-party companies will be able to make AirPower-like
+ > charging pads that do work with Apple Watch, the new AirPod
+ > case, and more.
+
+ I was confused about Apple Watch and AirPod cases charging on
+ Apple's pad because they didn't specify if only the *latest*
+ versions of those devices had Air Power capability, or if past and
+ present versions would work out of the box. I'm still unsure but
+ I'll update when I find out.
+
+ 5. Animoji
+
+ 🎥[iPhone emoji][VID1]
+
+ The TrueDepth camera on the X (in conjunction with the A11 Bionic
+ chip) analyzes 50 different muscle movements on your face and then
+ applies them to one of 12 pre-selected ~~emoji~~ Animoji. You can
+ record video messages with Animoji (and your voice!) and share
+ them inside of Messages. It should be possible to export these
+ videos outside of Messages too. I hope there's a way to create
+ your own Animoji (if you're a developer). I'd create a 3D version
+ of myself and use that Animoji exclusively.
+
+ Apple just made it so anyone can be a (generic) Pixar character.
+
+ 6. Criticism
+
+ On social media today, I've seen people complain (some, vehemently
+ so) about the price of the phone and say things like, "This isn't
+ worth it", "iPhone eXtortion", "Just get a laptop", and so on. I
+ believe these people are reactionary and failing to see the bigger
+ picture. They see the price and think, "That price…for a
+ *phone*?", and stop their train of thought…*derail it* even. In
+ reality, *you aren't paying for just a phone*. You are paying for
+ a phone that rivals a DSLR camera and last I checked, those
+ cameras are *not* cheap but, no one complains about them (probably
+ because expectations of DSLRs haven't changed over their lifetime,
+ at least when compared to phones).
+
+ For me, my personal communication device is only referred to as a
+ phone because of legacy reasons (and it's shorter to say). It's
+ kind of like how floppy disks are still the universal symbol for
+ save but we sync now. Hell, *even the phone icon* is legacy.
+ Phones these days are flat slabs of metal, only medical and
+ government facilities have classic telephones.
+
+ Another bit of criticism I've seen is regarding the ease of which
+ law enforcement can forcefully obtain access to someone's iPhone
+ X. The owner could be handcuffed while a police officer holds the
+ phone to their face and then swipe to unlock the phone. As a black
+ man in America, I find this to be the *only* valid criticism I've
+ seen thus far. Just a few days ago though, I found a solution for
+ that! It requires you to be observant and proactive but I tend to
+ have my hand on my phone when I see police anyway…
+
+ Juli Clover reported[8] about the "SOS Feature" in iOS 11 for
+ MacRumors (emphasis mine):
+
+ > Emergency SOS is activated by pressing on the sleep/wake button
+ > of an iPhone five times in rapid succession. When the requisite
+ > number of presses is complete, it brings up a screen that offers
+ > buttons to power off the iPhone, bring up your Medical ID (if
+ > filled out) and make an emergency 911 call.
+ >
+ > Along with these options, there's also a cancel button. *If you
+ > hit the sleep/wake button five times and then hit cancel, it
+ > disables Touch ID and requires a passcode before Touch ID can be
+ > re-enabled.* Touch ID is also disabled if you actually make an
+ > emergency call.
+ >
+ > This is a handy hidden feature because *it allows Touch ID to be
+ > disabled discretely* in situations where someone might be able
+ > to force a phone to be unlocked with a fingerprint, such as a
+ > robbery or an arrest. With Touch ID disabled in this way, there
+ > is no way to physically unlock an iPhone with a finger without
+ > the device's passcode.
+ >
+ > It's also worth noting that *there's no real way to tell that
+ > Touch ID has been disabled in this manner*.
+
+ After reading this, I tested it immediately and it works like a
+ charm. I advise anyone with law enforcement concerns to practice
+ this when you upgrade your phone to iOS 11 or get the iPhone 8/8
+ Plus/X. It's probably a good idea to do this while going through
+ customs as well.
+
+ - 2017/09/16 update:
+ TechCrunch interviewed Craig Federighi[9] and here's how the
+ above feature works on iPhones 8 and X (emphasis mine):
+
+ > On older phones the sequence was to click 5 times [on the
+ > power button], but on newer phones like iPhone 8 and iPhone X,
+ > *if you grip the side buttons on either side and hold them a
+ > little while — we'll take you to the power down [screen]. But
+ > that also has the effect of disabling Face ID.* So, if you
+ > were in a case where the thief was asking to hand over your
+ > phone — you can just reach into your pocket, squeeze it, and
+ > it will disable Face ID. It will do the same thing on iPhone 8
+ > to disable Touch ID.
+
+ It's worth noting that the squeeze can be of either volume button
+ plus the power button. I'm going to test/practice this when I
+ get mine.
+
+ Closing Thoughts
+
+ I'm excited.
+
+ Like the original iPhone, I think iPhone X heralds a new era in
+ smartphone design, development, and creative possibilities and I
+ can't wait to get started. The AR games demoed at the event bored
+ me, but ARkit demos on Twitter are *amazing*. I'm looking forward
+ to seeing who creates the breakout AR app everyone's gotta have. I
+ think there's opportunity for nearly every app to offer something
+ interesting in the AR space, if only for demo purposes.
+
+ I'm looking forward to upgrading to an Series 3 Apple Watch. The
+ cellular version is not for me as I'm hardly ever far away from my
+ phone (and I don't jog). I like the improved heart rate monitor
+ and since my son's birth I've become more interested in my overall
+ health. My Pebble Time is also showing its age by slowly breaking
+ down so upgrade time is soon.
+
+ All in all, it was a great event. Leakers don't deserve happiness.
+ I'm going to download Final Cut. 🕸
+
+References
+
+ [1] <https://www.amazon.com/Sharp-Aquos-Crystal-Sprint-Silver/dp/B00NWYANAI>
+ [2] <https://www.apple.com/iphone-x>
+ [3] <https://www.youtube.com/watch?v=XMgK_E6_GAE>
+ [4] <https://www.instagram.com/spacemanfresh>
+ [5] <https://www.kickstarter.com/projects/tiffencompany/steadicam-volt-smartphone-stabilizer-shake-free-vi>
+ [6] <https://9to5mac.com/2017/09/13/face-id-demo-fail-details>
+ [7] <https://daringfireball.net/2017/09/iphone_x_event_thoughts_and_observations>
+ [8] <https://www.macrumors.com/2017/08/17/ios-11-emergency-sos-disables-touch-id>
+ [9] <https://techcrunch.com/2017/09/15/interview-apples-craig-federighi-answers-some-burning-questions-about-face-id>
+ [IMG1] <https://🔥.pixels.wtf/blog/image/2017/iphone-x-dream-phone-a.jpg>
+ [IMG2] <https://🔥.pixels.wtf/blog/image/2017/iphone-x-dream-phone-b.jpg>
+ [IMG3] <https://🔥.pixels.wtf/blog/image/2017/iphone-x-dream-phone-c.jpg>
+ [IMG4] <https://🔥.pixels.wtf/blog/image/2017/iphone-x-dream-phone-d.jpg>
+ [VID1] <https://🔥.pixels.wtf/blog/video/2017/iphone-x-dream-phone-a.mp4>
diff --git a/memos/WM-018.txt b/memos/WM-018.txt
new file mode 100644
index 0000000..594e2d9
--- /dev/null
+++ b/memos/WM-018.txt
@@ -0,0 +1,312 @@
+
+
+
+
+
+
+
+Document: WM-018 P. Webb
+Category: Life 2017.10.29
+
+ How I met my wife
+
+Abstract
+
+ Somehow, I got lucky
+
+Body
+
+ I was your typical (angsty) teenager. Like most people, I was trying
+ to find my voice, trying to find what made me unique, and how I could
+ use that to become popular…needless to say I failed. Once, *for some
+ reason*, I decided to ask one of the most popular girls in school on
+ a date, instead of *my actual crush* (who was friends with her).
+ That's a dumb story for another day.
+
+ 1. Classface
+
+ In 2002, 14 was my age when a friend of mine called (remember when
+ this happened?) to pester me about joining an "exciting" new
+ social network called, *Classface*. I'll paraphrase the
+ conversation here:
+
+ Cleo: OMG Paul, you need to join this site. It's hella dope.
+
+ Me: *Uh-huh*. What site?
+
+ Cleo: It's called Classface and--
+
+ Me: (mumbling) That sounds dumb.
+
+ Cleo: --you get to meet people from around the *world*!
+
+ Me: I don't even like people *near* me, why the hell would I
+ like people *far away*?
+
+ Cleo: JUST JOIN IT NIGGA.
+
+ With a heavy sigh I typed www.classface.com[1] into Internet
+ Explorer (yes, seriously) and was greeted with basic, sparse web
+ design reminiscent of the era.
+
+ 📸[In due time, I would love seeing this everyday][IMG1]
+
+ Back then, no one thought about the need for private profiles.
+ After all, wouldn't you *want* people to find you? I spent a
+ couple minutes looking at random profiles until I saw a face that
+ took me aback. Here was this girl from Phenix City, Alabama (what
+ the hell is "Phenix", I thought at the time, shouldn't it be
+ "Phoenix"?) and she had such a genuinely happy smile. "Keisha
+ Page", I thought to myself, "I like that name". She was *fiiiiine*
+ as hell too! I hovered over whatever button to get to the next
+ random profile while having an internal discussion with myself.
+
+ Lame Voice: Wowee, who the hell is THAT?
+
+ Cooler Voice: Your future girl bro!
+
+ Lame Voice: Nah, that'd never happen.
+
+ Cooler Voice: Not with that attitude! Just say hi.
+
+ Lame Voice: Really? No way man, I'm nervous.
+
+ Cooler Voice: You can't be a bitch *all* your life. You can't even
+ tell Shawna you like her, you can at least tell a
+ girl who lives THOUSANDS OF MILES AWAY that she
+ looks cute. She realize you a scrub? Delete
+ your account!
+
+ And so, that's what I did! I scoured her profile for an opener and
+ saw that she was a fan of Degrassi (the Drake era). I believe I
+ wrote something along the lines of:
+
+ > Hey, I just joined this site and I just happened to find your
+ > page. I wanted to let you know that you have a pretty smile
+ > anyhoo did you see what Skinner did to Marco last week? What a
+ > bum, yeah, Jimmy should've said something to him.
+
+ (For those who don't know, Drake's character was named Jimmy on
+ the show.)
+
+ I anxiously awaited her reply and probably played Road Rash on a
+ Shockwave site to pass the time. To my delight, she thanked me and
+ our friendship flourished thanks to our shared interests. I'd like
+ to take a timeout to publicly thank Drake[2], Andrea Lewis[3] (my
+ favorite person on the show), and everyone else from Degrassi for
+ making this possible.
+
+ Classface eventually became a lame place to be and it was their
+ fault. They had the *terrible* idea to redesign the site but with
+ no UX sense. No one knew where to go to do things you could do in
+ the original version and I believe they messed the site up *more*
+ trying to fix it. So, everyone moved to Myspace.
+
+ 2. Myspace
+
+ It was during this time that Keisha gave me her phone number
+ (holla!) and I heard her Southern accent for the first time and we
+ would talk for *hours* about how wack our parents were, dreams for
+ the future, and everything in-between.
+
+ Years later, I would reminisce about those conversations and
+ create music. Here's a sampling of those tracks:
+
+ [4][5]
+
+ *Dusty Stars* is from Music from the Love Lounge, Vol. 01[6] (this
+ cuts off early for some reason, probably data corruption) and
+ *Remember When* is from Vol. 02[7]. I sometimes find music a
+ better conduit to express my thoughts than simply talking.
+
+ Keisha and I got busy with our own lives and communicated less but
+ I would check her profile every couple months to see what was new.
+ At some point, I saw she was in a relationship with a guy I
+ instantly disliked and partly because I was being a hater. From
+ where I sat, thousands of miles away, it seemed like he wasn't
+ treating her right and her journal posts confirmed my suspicions.
+ When she uploaded a picture of herself with a baby on a beach, my
+ unspoken hopes were smashed.
+
+ Welp.
+
+ 3. Facebook
+
+ Like with Classface, Myspace became lame and so everyone jumped to
+ Facebook. Keisha and I continued our random check-ins over the
+ years but it wasn't until October 2011 that we reconnected. Her
+ marriage to that *terrible* guy was over for quite some time but I
+ was just happy to converse as a friend.
+
+ The following month, we became closer than I ever expected (or
+ hoped) and I had the bright idea to try and visit her for
+ Thanksgiving. She thought it was a fantastic idea so I begged my
+ mom to buy me roundtrip tickets to Jacksonville, FL…my mom is a
+ bit paranoid. Catfishing, abduction, and other crazy things happen
+ all the time so she wasn't super keen about the idea at first. She
+ made me promise to text her as soon as I landed (I forgot to do so
+ until the next morning and got a rather disgruntled phone call,
+ haha). Keisha and I were using Skype at this point and I was one
+ *thousand* per cent sure she was real. 😏
+
+ 4. Florida
+
+ 📸[Me, after realizing what I got myself into][IMG2]
+ 📸[(Kinda) high-school sweethearts][IMG3]
+
+ When Keisha greeted me at the airport, it was surreal. We both had
+ goofy grins on our faces and then hugged. Our immediate,
+ simultaneous remarks were: "OMG you're so tall/short!". LOL
+
+ Luckily, her siblings and daughter liked me and we had a fun week
+ full of jokes (you gotta come prepared with some zingers 'round
+ these folks), fun, and of course…Thanksgiving. 😉
+
+ In fact, it was Thanksgiving Day that I asked/confirmed our
+ relationship status. *Pro tip:* if you're forgetful of dates like
+ I am, make sure anniversaries are on a date you *know* you won't
+ forget. BWAHAHAHA!
+
+ Y'know those movies where a main character departs for a flight
+ and the other main character is super sad with tears in their eyes
+ but the first character wants to be strong for the second and
+ tries really hard to keep it together? Yeah, that was us when it
+ was time for me to head back to Boston. As soon as I turned away
+ from Keisha and entered the airport, I was
+ boo-hoo-Academy-Award-winning-actor-Viola-Davis crying. My. Tears.
+ Were. *Fugly*. I looked like my mom AND dad took turns beating my
+ ass for stealing cookies and smudging a wall they just painted
+ after mooning the elderly Polish woman next door. It was bad man.
+ My chest hurt.
+
+ Some of my friends at the time thought I was crazy to date someone
+ on the other side of the country, and for a couple years at that!
+ Keisha and I would visit each other at least twice a year for
+ physical reminders of why we were together and spoke/texted nearly
+ every day and that nourished our emotional *and* mental needs.
+
+ 5. Massachusetts
+
+ With our generation, I've seen and continue to see posts on social
+ media where people are hella frustrated about relations̶h̶i̶p̶shits
+ they get into. The ratio of disappointment appears to be balanced.
+ I believe 90% of issues could be solved with communication. Notice
+ I didn't prefix the word "more". I don't think people communicate
+ at *all* anymore. Millenials would rather swipe left/right and
+ take pics or make statuses for likes that don't matter instead of
+ communicating for love that *does* matter…ooh, that'd make a great
+ post in of itself.
+
+ Even though Keisha and I knew each other for 10 years, we still
+ had to learn *how* to live together. I was a guy in a two-bedroom
+ apartment with a long-distance girlfriend and when she moved in, I
+ suddenly had a three-year-old stepdaughter and couldn't fucking
+ swear all the time. And furniture. Oh my *gawd*, Keisha had so
+ much furniture. I had a desk…and a sad excuse for a bed. During
+ Keisha's first night living in Massachusetts, a speeding driver
+ knocked off the sideview mirror from her parked car (*pro tip:*
+ don't live on Main Street, side streets are better).
+
+ I found that (gasp) Keisha could irritate me sometimes! I
+ irritated her *all* the time! There was a period in the first year
+ where everything could've gone up in smoke but we *communicated*.
+ My default way of dealing with things at the time was to shut down
+ and stew, have mock debates in my head. Little did I know, Keisha
+ does that on a regular basis and always had an immediate response
+ to everything I could possibly say. Hoo boy, I'm a pro now but
+ that was not a fun time.
+
+ Compromise was something else I had to learn. I was resistant at
+ first but when faced with the prospect of losing her and an
+ adorable little girl who now saw me as "daddy" instead of "Paul",
+ I quickly learned to adjust. I'm not a perfect guy today, but I am
+ perfect for my family (or damn close to it). Don't hashtag,
+ retweet, or share "relationship goals"…just learn how to
+ compromise, communicate, and ensure your partner is on the same
+ page. Remember when your parents made you eat nasty things with
+ dinner? I would mix the nasty things with food I did like to get
+ them out the way so I could enjoy the rest of my meal. The same
+ thing applies to relationships; do the hard stuff now so you can
+ enjoy growing together later.
+
+ 6. The Future
+
+ I proposed to Keisha on Easter, earlier this year. Remember my pro
+ tip from earlier? BWAHAHAHA!
+
+ 📸[Please ignore the fact that all of us are looking at ourselves and not the camera][IMG4]
+
+ And now? We're married! As far as what's next…growth. Our focus is
+ creating an environment where our kids are nurtured, growing, and
+ happy. That means becoming homeowners so we REALLY own our own
+ space, and helping each other thrive in our fields.
+
+ Keisha went from being a sailor in the Navy, waking up at the
+ bootycrack of dawn to work out, have 24-hour shifts for some thing
+ or other (idk, I'm a civilian) to becoming a stay-at-home-mom
+ because we don't trust anyone with our toddler until he learns how
+ to speak. We've been spooked by online videos of "caretakers"
+ smacking babies in the face and parents wondering why their child
+ has a fear of pillows. NOPE. 🖕🏾
+
+ Since our son's been born, Keisha has garnered a reputation in mom
+ groups as THE go-to person when you want a custom designed shirt,
+ poofy skirts, onesies, booties, and so on. I've designed logos for
+ her and provided my designer-y expertise on how to deal with
+ clients and she's flourishing!
+
+ I'm a simple man, I just want world domination.
+
+ It's amazing that two 14-year-old kids would connect on social
+ media in 2002, only to marry each other 15 years later. Paul Webb
+ and Lakeisha Page met online…Webb and Page met on a webpage.
+ WebbPage. See? That's some high-quality movie shit. 🕸
+
+ Extra
+
+ This may sound completely fabricated to you, dear reader, but
+ Keisha and I lived in the *same* city and our fathers were
+ stationed at the *same* military base at the *same* time.
+ Clarksville, Tennessee was the city, Fort Campbell was the
+ military base, 1994-1997 was the time. Fort Campbell had "family
+ days" and there would be lots of kids playing together. I don't
+ remember any of the kids I saw/played with but it's quite possible
+ that we've seen each other back then.
+
+ How weird is that?
+
+ P.S.
+
+ During one of Keisha's early visits to Massachusetts, I asked her
+ to appear on that year's release of Music from the Love Lounge.
+ It's a fitting end to a post like this, check it out (beats by
+ me)! 🕸
+
+ [8]
+
+ P.P.S
+
+ Here's my wife's post[9] about how we met! Did you know that she
+ found her dress at a thrift store and *completely* redesigned it?
+ She's craftier than a mofo!
+
+ P.P.P.S
+
+ 📸[I gotta say, we look DAYUM good][IMG5]
+
+References
+
+ [1] <http://web.archive.org/web/20050830203010/http://www.classface.com:80>
+ [2] <https://twitter.com/drake>
+ [3] <https://twitter.com/missandrealewis>
+ [4] <https://bandcamp.com/EmbeddedPlayer/album=512177084/size=small/bgcol=010000/linkcol=c8af60/track=3614882051/transparent=true>
+ [5] <https://bandcamp.com/EmbeddedPlayer/album=955213907/size=small/bgcol=010000/linkcol=c8af60/track=918133906/transparent=true>
+ [6] <https://wibby.bandcamp.com/album/music-from-the-love-lounge-vol-01>
+ [7] <https://wibby.bandcamp.com/album/music-from-the-love-lounge-vol-02>
+ [8] <https://bandcamp.com/EmbeddedPlayer/album=4219807572/size=small/bgcol=010000/linkcol=c8af60/track=635396433/transparent=true>
+ [9] <http://sincerelyshantelle.com/blog/how-i-met-my-husband>
+ [IMG1] <https://🔥.pixels.wtf/blog/image/2017/how-i-met-my-wife-a.png>
+ [IMG2] <https://🔥.pixels.wtf/blog/image/2017/how-i-met-my-wife-b.jpg>
+ [IMG3] <https://🔥.pixels.wtf/blog/image/2017/how-i-met-my-wife-c.jpg>
+ [IMG4] <https://🔥.pixels.wtf/blog/image/2017/how-i-met-my-wife-d.jpg>
+ [IMG5] <https://🔥.pixels.wtf/blog/image/2017/how-i-met-my-wife-e.jpg>
diff --git a/memos/WM-019.txt b/memos/WM-019.txt
new file mode 100644
index 0000000..48578f8
--- /dev/null
+++ b/memos/WM-019.txt
@@ -0,0 +1,125 @@
+
+
+
+
+
+
+
+Document: WM-018 P. Webb
+Category: Tutorial 2017.11.03
+
+ APFS preboot install issues no more!
+
+Abstract
+
+ Spoiler alert, Time Machine is trash.
+
+Body
+
+ I was minding my business one day (October 27th) and I thought, oh!
+ What's this? A "recommended update"? "Oh sure, I'll update to macOS
+ High Sierra Beta 5, while I wait to pre-order my iPhone X at 3am."
+ Updating my OS is something I've done *countless* times before. Apple
+ waits until 1~3am to let me know there's a software update or just
+ performs one while I'm asleep. I awake the following morning to find
+ my computer more secure than it was the previous day. Guess what
+ happened this time? On the day of my friggin' *marriage* (at 2am)?
+
+ I glance at my computer and see a software update…stuck. No worries,
+ I'll reboot! Okay, Recovery Mode! Also, Restore from Time
+ Machine…wtf? Why the hell did it stop at 39%? *opens logs* Can't find
+ linker for CoreSomethingOrOther? Good grief, reboot! Ghostbusters
+ logo in white, sans ghost. WHAT. THE. FUCK. I open the Apple Support
+ app, choose my laptop from my devices list, and chat with a rep.
+ After confirming I didn't want to book a Genius Bar appointment on my
+ wedding day, I shut down my computer and went to bed in a huff (I
+ prefaced my availability and was still asked…bruh).
+
+ Fast-forward a few days and I'm talking to a nice Genius about my
+ computer issue (and Nintendo Switch, he's trying to justify buying
+ one). He performs many of the same things I did to try and get my
+ computer to work. Lo and behold, my computer lives! It breathes! It
+ scrolls the wrong direction by default (Natural Scrolling is WRONG,
+ you *heathens*)! I eagerly head home to perform a three-hour restore
+ from my Time Machine.
+
+ 1. I done goofed
+
+ I went through the same recovery process I've done days prior.
+ What did I see? GHOST. BUSTERS! Managed to get into Recovery Mode
+ to try for the last time, restoring via Time Machine, even though
+ I knew it would end in error. First though, I should reformat the
+ drive with Apple's File System (APFS)…*Could not create a preboot
+ volume for APFS install*. Welp. Time to fire up the iPad to search
+ for solutions.
+
+ 2. Salvation
+
+ After scouring the Internet for some *semblance* of a solution, I
+ stumbled upon a post[1] on Apple's own support forums by a user
+ named Ethoic. Here is that post in full:
+
+ > Right Mac users. If your facing the same problem like me then I
+ > suggest you listen up. First don't try to install Mac OS high
+ > Sierra again or try anything else. You want to first of delete
+ > your drive until you have no drive. Yes I mean no drive. To do
+ > this, power off your Mac and then hold Command + R and boot up
+ > your Mac. This should do the trick. Then delete your drive in
+ > disk utility by clicking the minus button on the top right and
+ > then enter internet recovery mode by repeating the process
+ > though this time adding option and then command + R. Then you
+ > will enter the same menu which is mac os utilities and then this
+ > time instead of Mac OS High Sierra you will just see Sierra. Go
+ > disk utilty and create a disk this time clicking + and make a
+ > drive calling it Macintosh HD with the format Mac OS Extended.
+ > The fix is your removing the APFS system which is what is
+ > confusing the drive which for some reason apple can't figure out
+ > them self. Then just click install Mac OS and you should be good
+ > to go. Hope your all good and ask anything you need.
+
+ Let's break that down into steps for ease of reading:
+
+ 1. Don't try to install macOS High Sierra again.
+ 2. Delete your drive until you have no drive. Seriously.
+ - Power off your Mac and then hold the `Command + R` keys
+ while booting.
+ - Delete your drive in Disk Utility. You should only see the
+ macOS Recovery Drive. *Leave this alone.*
+ 3. Reboot Mac and hold down the `Option + Command + R` keys to
+ activate Internet Recovery mode. Oh yeah, you'll need wifi.
+ Make sure you're connected.
+ 4. You should see a drive in Disk Utility. If you don't see a
+ drive and are unable to click the little plus button to create
+ one, reboot until you do…this was a little weird for me, might
+ not happen to you.
+ - If you do see a drive, reformat it as "Mac OS Extended" and
+ call it "Macintosh HD".
+ - There are a couple options for "Mac OS Extended". If you have
+ a Time Machine backup you want to keep, know that you should
+ choose "Case sensitive" if you setup your OS to be case
+ sensitive (as an example).
+ 5. Initiate Internet Recovery.
+ 6. Once the recovery is successful, use Migration Assistant to
+ restore from a Time Machine backup.
+
+ Restoring from Time Machine from scratch has NEVER worked for me and
+ seemingly, 99% of the Internet. Absolute trash IMO. I'm glad I got my
+ data back but jeez. So many hours of my life wasted because of this
+ issue. And the productivity loss (but Super Mario Odyssey *gains*)!
+ Oh, and I'm not on the macOS beta anymore, haha. Other folks who have
+ the same issue didn't seem to be on a beta OS but you can never be
+ too sure.
+
+ If you are currently on a macOS beta and would like to hop off
+ that train[2]:
+
+ > On `System Preferences → App Store` you have an option called "Your
+ > computer is set to receive pre-releases Software Update seeds", use
+ > the button `Change` and select `Do Not Show Pre-release Updates`.
+
+ Hope this helps! 🕸
+
+References
+
+ [1] <https://discussions.apple.com/thread/8106654>
+ [2] <https://superuser.com/a/845520>
diff --git a/memos/WM-020.txt b/memos/WM-020.txt
new file mode 100644
index 0000000..b2ceea5
--- /dev/null
+++ b/memos/WM-020.txt
@@ -0,0 +1,635 @@
+
+
+
+
+
+
+
+Document: WM-020 P. Webb
+Category: Research 2017.11.14
+
+ Nintendo Switch browser capabilities
+
+Abstract
+
+ Don't get your hopes up
+
+Body
+
+ Before the Switch, Nintendo had a nifty HTML5 framework for game
+ development called Nintendo Web Framework. It used to have its own
+ page on Wikipedia, no idea where it disappeared to.
+
+ Anyhoo, I was looking forward to its return so I could make games for
+ the Switch using my existing skillset. Due to Nintendo's enthusiasm
+ for the Unity and Unreal game engines, it doesn't seem like that's
+ happening anytime soon if ever, much to the chagrin of aspiring game
+ developers (and Switch owners) like myself. However, I was curious to
+ know what the built-in browser is capable of. Here's what I found[1],
+ with my Switch's OS on version `4.0.1`:
+
+ 1. Parsing Rules
+
+ - ✅ `<!DOCTYPE html>` triggers standards mode
+ - ✅ HTML5 tokenizer
+ - ✅ HTML5 tree building
+ - ✅ Parsing inline SVG
+ - ✅ Parsing inline MathML
+
+ 2. Elements
+
+ - ✅ Embedding custom non-visible data
+
+ 2.1. New or modified elements
+
+ - ✅ Section elements
+ - ✅ `section` element
+ - ✅ `nav` element
+ - ✅ `article` element
+ - ✅ `aside` element
+ - ✅ `header` element
+ - ✅ `footer` element
+ - ✅ Grouping content elements
+ - ✅ `main` element
+ - ✅ `figure` element
+ - ✅ `figcaption` element
+ - ✅ reversed attribute on the `ol` element
+ - ⚪️ Text-level semantic elements
+ - ❌ download attribute on the `a` element
+ - ✅ ping attribute on the `a` element
+ - ✅ `mark` element
+ - ✅ `ruby`, `rt`, and `rp` elements
+ - ❌ `time` element
+ - ❌ `data` element
+ - ❌ `wbr` element
+ - ⚪️ Interactive elements
+ - ✅ `details` element
+ - ✅ `summary` element
+ - ❌ `menu` element of type `toolbar`
+ - ❌ `menu` element of type `context`
+ - ❌ `dialog` element
+
+ 2.2. Global attributes or methods
+
+ - ✅ `hidden` attribute
+ - ✅ Dynamic markup insertion
+ - ✅ `outerHTML` property
+ - ✅ `insertAdjacentHTML` function
+
+
+
+ 3. Forms
+
+ 3.1. Field types
+
+ - ✅ `input type=text`
+ - ✅ Minimal element support
+ - ✅ Selection Direction
+ - ✅ `input type=search`
+ - ✅ Minimal element support
+ - ✅ `input type=tel`
+ - ✅ Minimal element support
+ - ✅ `input type=url`
+ - ✅ Minimal element support
+ - ✅ Field validation
+ - ✅ `input type=email`
+ - ✅ Minimal element support
+ - ✅ Field validation
+ - ❌ `input type=date`
+ - ❌ Minimal element support
+ - ❌ Custom user-interface
+ - ❌ Value sanitization
+ - ❌ `min` attribute
+ - ❌ `max` attribute
+ - ❌ `step` attribute
+ - ❌ `stepDown()` method
+ - ❌ `stepUp()` method
+ - ❌ `valueAsDate()` method
+ - ❌ `valueAsNumber()` method
+ - ❌ `input type=month`
+ - ❌ Minimal element support
+ - ❌ Custom user-interface
+ - ❌ Value sanitization
+ - ❌ `min` attribute
+ - ❌ `max` attribute
+ - ❌ `step` attribute
+ - ❌ `stepDown()` method
+ - ❌ `stepUp()` method
+ - ❌ `valueAsDate()` method
+ - ❌ `valueAsNumber()` method
+ - ❌ `input type=week`
+ - ❌ Minimal element support
+ - ❌ Custom user-interface
+ - ❌ Value sanitization
+ - ❌ `min` attribute
+ - ❌ `max` attribute
+ - ❌ `step` attribute
+ - ❌ `stepDown()` method
+ - ❌ `stepUp()` method
+ - ❌ `valueAsDate()` method
+ - ❌ `valueAsNumber()` method
+ - ❌ `input type=time`
+ - ❌ Minimal element support
+ - ❌ Custom user-interface
+ - ❌ Value sanitization
+ - ❌ `min` attribute
+ - ❌ `max` attribute
+ - ❌ `step` attribute
+ - ❌ `stepDown()` method
+ - ❌ `stepUp()` method
+ - ❌ `valueAsDate()` method
+ - ❌ `valueAsNumber()` method
+ - ❌ `input type=datetime-local`
+ - ❌ Minimal element support
+ - ❌ Custom user-interface
+ - ❌ Value sanitization
+ - ❌ `min` attribute
+ - ❌ `max` attribute
+ - ❌ `step` attribute
+ - ❌ `stepDown()` method
+ - ❌ `stepUp()` method
+ - ❌ `valueAsNumber()` method
+ - ✅ `input type=number`
+ - ✅ Minimal element support
+ - ✅ Custom user-interface
+ - ✅ Value sanitization
+ - ✅ Field validation
+ - ✅ `min` attribute
+ - ✅ `max` attribute
+ - ✅ `step` attribute
+ - ✅ `stepDown()` method
+ - ✅ `stepUp()` method
+ - ✅ `valueAsNumber()` method
+ - ✅ `input type=range`
+ - ✅ Minimal element support
+ - ✅ Custom user-interface
+ - ✅ Value sanitization
+ - ✅ `min` attribute
+ - ✅ `max` attribute
+ - ✅ `step` attribute
+ - ✅ `stepDown()` method
+ - ✅ `stepUp()` method
+ - ✅ `valueAsNumber()` method
+ - ✅ `input type=color`
+ - ✅ Minimal element support
+ - ✅ Custom user-interface
+ - ✅ Value sanitization
+ - ✅ `input type=checkbox`
+ - ✅ Minimal element support
+ - ✅ `indeterminate` property
+ - ✅ `input type=image`
+ - ✅ Minimal element support
+ - ✅ `width` property
+ - ✅ `height` property
+ - ⚪️ `input type=file`
+ - ✅ Minimal element support
+ - ✅ `files` property
+ - ❌ Directory upload support
+ - ✅ `textarea`
+ - ✅ Minimal element support
+ - ✅ `maxlength` attribute
+ - ✅ `wrap` attribute
+ - ✅ `select`
+ - ✅ Minimal element support
+ - ✅ `required` attribute
+ - ✅ `fieldset`
+ - ✅ Minimal element support
+ - ✅ `elements` attribute
+ - ✅ `disabled` attribute
+ - ❌ `datalist`
+ - ❌ Minimal element support
+ - ❌ `list` attribute for fields
+ - ✅ `output`
+ - ✅ Minimal element support
+ - ✅ `progress`
+ - ✅ Minimal element support
+ - ✅ `meter`
+ - ✅ Minimal element support
+
+ 3.2. Fields
+
+ - ✅ Field validation
+ - ✅ `pattern` attribute
+ - ✅ `required` attribute
+ - ✅ Association of controls and forms
+ - ✅ `control` property on labels
+ - ✅ `form` property on fields
+ - ✅ `formAction` property on fields
+ - ✅ `formEnctype` property on fields
+ - ✅ `formMethod` property on fields
+ - ✅ `formNoValidate` property on fields
+ - ✅ `formTarget` property on fields
+ - ✅ `labels` property on fields
+ - ✅ Other attributes
+ - ✅ `autofocus` attribute
+ - ✅ `autocomplete` attribute
+ - ✅ `placeholder` attribute
+ - ✅ `multiple` attribute
+ - ✅ `dirname` attribute
+ - ✅ CSS selectors
+ - ✅ `:valid` selector
+ - ✅ `:invalid` selector
+ - ✅ `:optional` selector
+ - ✅ `:required` selector
+ - ✅ `:in-range` selector
+ - ✅ `:out-of-range` selector
+ - ✅ `:read-write` selector
+ - ✅ `:read-only` selector
+ - ✅ Events
+ - ✅ `oninput` event
+ - ✅ `onchange` event
+ - ✅ `oninvalid` event
+
+ 3.3. Forms
+
+ - ✅ Form validation
+ - ✅ `checkValidity` method
+ - ✅ `noValidate` attribute
+
+ 4. Web Components
+
+ - ❌ Custom elements
+ - ❌ Shadow DOM
+ - ✅ HTML templates
+ - ❌ HTML imports
+
+ 5. Location and Orientation
+
+ - ❌ Geolocation
+ - ✅ Device Orientation
+ - ✅ Device Motion
+
+ 6. Output
+
+ - ✅ Full screen support (prefixed)
+ - ❌ Web Notifications
+
+ 7. Input
+
+ - ✅ Gamepad control
+ - ❌ Pointer Events
+ - ❌ Pointer Lock support
+
+ 8. Communication
+
+ - ✅ Server-Sent Events
+ - ❌ Beacon
+ - ❌ Fetch
+
+ 8.1. XMLHttpRequest Level 2
+
+ - ✅ Upload files
+ - ✅ Response type support
+ - ✅ Text response type
+ - ✅ Document response type
+ - ✅ `ArrayBuffer` response type
+ - ✅ `Blob` response type
+
+ 8.2. WebSocket
+
+ - ✅ Basic socket communication
+ - ✅ `ArrayBuffer` and `Blob` support
+
+ 9. Streams
+
+ - ❌ Readable streams
+ - ❌ Writable streams
+
+ 10. Peer to Peer
+
+ 10.1. Connectivity
+
+ - ✅ WebRTC 1.0 (prefixed)
+ - ❌ ObjectRTC API for WebRTC
+ - ❌ Data channel
+
+ 10.2. Input
+
+ - ✅ Access the webcam
+ - ❌ Screen Capture
+ - ❌ Enumerate devices
+
+ 10.3. Recording
+
+ - ❌ Media Stream recorder
+
+ 11. User Interaction
+
+ 11.1. Drag and drop
+
+ - ❌ Attributes
+ - ❌ `draggable` attribute
+ - ❌ `dropzone` attribute
+ - ❌ Events
+ - ❌ `ondrag` event
+ - ❌ `ondragstart` event
+ - ❌ `ondragenter` event
+ - ❌ `ondragover` event
+ - ❌ `ondragleave` event
+ - ❌ `ondragend` event
+ - ❌ `ondrop` event
+
+ 11.2. HTML editing
+
+ - ❌ Editing elements
+ - ❌ `contentEditable` attribute
+ - ❌ `isContentEditable` property
+ - ❌ Editing documents
+ - ❌ `designMode` attribute
+ - ❌ CSS selectors
+ - ❌ `:read-write` selector
+ - ❌ `:read-only` selector
+ - ❌ APIs
+ - ❌ `execCommand` method
+ - ❌ `queryCommandEnabled` method
+ - ❌ `queryCommandIndeterm` method
+ - ❌ `queryCommandState` method
+ - ❌ `queryCommandSupported` method
+ - ❌ `queryCommandValue` method
+
+ 11.3. Clipboard
+
+ - ❌ Clipboard API and events
+
+ 11.4. Spellcheck
+
+ - ✅ `spellcheck` attribute
+
+ 12. Performance
+
+ - ✅ Workers
+ - ❌ Web Workers
+ - ❌ Shared Workers
+
+ 12.1. Other
+
+ - ❌ `window.requestIdleCallback`
+
+ 13. Security
+
+ - ✅ Web Cryptography API
+ - ✅ Content Security Policy 1
+ - ✅ Content Security Policy 2
+ - ✅ Cross-Origin Resource Sharing
+ - ❌ Subresource Integrity
+ - ✅ Cross-document messaging
+
+ 13.1. Authentication
+
+ - ❌ Web Authentication / FIDO 2
+ - ❌ Credential Management
+
+ 13.2. Iframes
+
+ - ✅ Sandboxed `iframe`
+ - ✅ `iframe` with inline contents
+
+ 14. Payments
+
+ - ❌ Web payments
+
+ 15. Video
+
+ - ✅ `video` element
+ - ✅ Subtitles
+ - ✅ Audio track selection
+ - ✅ Video track selection
+ - ✅ Poster images
+ - ✅ Codec detection
+
+ 15.1. Video codecs
+
+ - ❌ MPEG-4 ASP support
+ - ✅ H.264 support
+ - ❌ H.265 support
+ - ❌ Ogg Theora support
+ - ❌ WebM with VP8 support
+ - ❌ WebM with VP9 support
+
+ 16. Audio
+
+ - ✅ `audio` element
+ - ✅ Loop audio
+ - ✅ Preload in the background
+
+ 16.1. Advanced
+
+ - ✅ Web Audio API (prefixed)
+ - ❌ Speech Recognition
+ - ❌ Speech Synthesis
+
+ 16.2. Audio codecs
+
+ - ❌ PCM audio support
+ - ❌ MP3 support
+ - ❌ AAC support
+ - ❌ Dolby Digital support
+ - ❌ Dolby Digital Plus support
+ - ❌ Ogg Vorbis support
+ - ❌ Ogg Opus support
+ - ❌ WebM with Vorbis support
+ - ❌ WebM with Opus support
+
+ 17. Streaming
+
+ - ❌ Media Source extensions
+ - ❌ DRM support
+
+ 17.1. Adaptive bit rate
+
+ - ❌ Dynamic Adaptive Streaming / MPEG-DASH
+ - ✅ HTTP Live Streaming / HLS
+
+ 17.2. Codecs
+
+ - ❌ Video codecs
+ - ❌ MP4 with H.264 support
+ - ❌ MP4 with H.265 support
+ - ❌ TS with H.264 support
+ - ❌ TS with H.265 support
+ - ❌ WebM with VP8 support
+ - ❌ WebM with VP9 support
+ - ❌ Audio codecs
+ - ❌ MP4 with AAC support
+ - ❌ MP4 with Dolby Digital support
+ - ❌ MP4 with Dolby Digital Plus support
+ - ❌ TS with AAC support
+ - ❌ TS with Dolby Digital support
+ - ❌ TS with Dolby Digital Plus support
+ - ❌ WebM with Vorbis support
+ - ❌ WebM with Opus support
+
+ 18. Responsive Images
+
+ - ✅ `picture` element
+ - ✅ `srcset` attribute
+ - ✅ `sizes` attribute
+
+ 19. 2D Graphics
+
+ - ✅ Canvas 2D graphics
+
+ 19.1. Drawing primitives
+
+ - ✅ Text support
+ - ✅ Path support
+ - ✅ Ellipse support
+ - ✅ Dashed line support
+ - ✅ System focus ring support
+
+ 19.2. Features
+
+ - ❌ Hit testing support
+ - ✅ Blending modes
+
+ 19.3. Image export formats
+
+ - ✅ PNG support
+ - ✅ JPEG support
+ - ❌ JPEG-XR support
+ - ✅ WebP support
+
+ 20. 3D and VR
+
+ 20.1. 3D Graphics
+
+ - ❌ WebGL
+ - ❌ WebGL 2
+
+ 20.2. VR Headset
+
+ - ❌ WebVR
+
+ 21. Animation
+
+ - ❌ Web Animations API
+ - ✅ `window.requestAnimationFrame`
+
+ 22. Web Applications
+
+ 22.1. Offline resources
+
+ - ✅ Application Cache
+ - ❌ Service Workers
+ - ❌ Push Messages
+
+ 22.2. Content and Scheme handlers
+
+ - ❌ Custom scheme handlers
+ - ❌ Custom content handlers
+
+ 23. Storage
+
+ 23.1. Key-value storage
+
+ - ✅ Session Storage
+ - ✅ Local Storage
+
+ 23.2. Database storage
+
+ - ❌ IndexedDB
+ - ❌ Objectstore `Blob` support
+ - ❌ Objectstore `ArrayBuffer` support
+
+ 24. Files
+
+ 24.1. Reading files
+
+ - ✅ Basic support for reading files
+ - ✅ Create a `Blob` from a file
+ - ✅ Create a Data URL from a `Blob`
+ - ✅ Create an `ArrayBuffer` from a `Blob`
+ - ✅ Create a Blob URL from a `Blob`
+
+ 24.2. Accessing the file system
+
+ - ❌ FileSystem API
+
+ 25. Scripting
+
+ 25.1. Script execution
+
+ - ✅ Asynchronous script execution
+ - ✅ Deferred script execution
+ - ❌ Script execution events
+ - ✅ Runtime script error reporting
+
+ 25.2. ECMAScript 5
+
+ - ✅ JSON encoding and decoding
+
+ 25.3. ECMAScript 6
+
+ - ❌ Modules
+ - ✅ Classes
+ - ✅ Arrow functions
+ - ✅ Promises
+ - ✅ Template strings
+ - ✅ Typed arrays
+ - ✅ Internationalization
+
+ 25.4. ECMAScript 7
+
+ - ❌ Async and Await
+
+ 25.5. Other APIs
+
+ - ✅ Base64 encoding and decoding
+ - ✅ Mutation Observer
+ - ✅ URL API
+ - ❌ Encoding API
+
+ 26. Other
+
+ - ✅ Session history
+ - ✅ Page Visibility
+ - ✅ Text selection
+ - ✅ Scroll into view
+
+ And so…
+
+ The Nintendo Switch browser scored 339 out of 555 potential
+ points. Not bad for browsing but it certainly isn't equipped for
+ game development. Lack of support for WebGL, WebM, the Web
+ Animations API, and IndexedDB certainly inhibits the kinds of
+ games you could make, so this might explain their silence on the
+ NWF front.
+
+ Oh well.
+
+ If you have a Switch and want to see these results for yourself,
+ here are the steps needed to access the web browser:
+
+ 1. Go to `System Settings` > `Internet` > `Internet Settings`
+ 2. Select the network you want to join or are already connected to
+ 3. Select `Change Settings`
+ 4. Select `DNS Settings` and choose `Manual`
+ 5. Under `DNS Settings`, select `Primary DNS`
+ 6. Replace the contents with `045.055.142.122` and hit `OK`
+ 7. Save!
+ 8. Connect to the network you just modified DNS settings for, and
+ you should see a message saying "Registration is required to
+ use this network"
+ 9. Proceed and you'll be redirected to Google, where you can
+ search for DuckDuckGo and use that search engine instead
+
+ Extra stuff
+
+ The useragent Nintendo is going with is `Mozilla/5.0 (Nintendo
+ Switch; WifiWebAuthApplet) AppleWebKit/601.6 (KHTML, like Gecko)
+ NF/4.0.0.7.9 NintendoBrowser/5.1.0.15785`. I am SO glad their
+ useragent isn't the usual fugly spaghetti soup that most browsers
+ come up with. The screen size is 1280 by 720.
+
+ I remember when people made websites for the Nintendo DS, back
+ when the browser (made by Opera) came in a *cartridge*[2]. I still
+ have mine btw. It also came with RAM ("Memory Expansion Pak") you
+ put in the GBA slot for a whopping 8MB. IGN gave it a 3.5 out of
+ 10. HAHAHAHAHAHA
+
+ Good times. 🕸
+
+References
+
+ [1] <http://html5test.com/s/21ae2339d0366534.html>
+ [2] <https://www.nintendo.co.jp/ds/browser/index.html>
diff --git a/memos/WM-021.txt b/memos/WM-021.txt
new file mode 100644
index 0000000..c3d0061
--- /dev/null
+++ b/memos/WM-021.txt
@@ -0,0 +1,124 @@
+
+
+
+
+
+
+
+Document: WM-021 P. Webb
+Category: Review 2017.11.26
+
+ Antank battery case for Nintendo Switch review
+
+Abstract
+
+ Behold, my first media review!
+
+Body
+
+ > *The 6500mAh portable battery case specially design[ed] for
+ > Nintendo Switch…will double the playing time wherever you are.*
+
+ That's what it says on the box anyway. Does it live up to it's lofty
+ goal? Read on to find out!
+
+ 1. Aesthetic
+
+ 📸[Front of case][IMG1]
+ 📸[Back of case][IMG2]
+ 📸[Back of case, open][IMG3]
+ 📸[Game compartment on the back][IMG4]
+ 📸[Recline level I][IMG5]
+ 📸[Recline level II][IMG6]
+ 📸[Recline level III][IMG7]
+
+ The outside of the case has a matte finish that feels *quite*
+ good. The back has two release mechanisms that expand the case
+ vertically to allow insertion of your Switch. Below both
+ mechanisms are kickstands with three levels of recline. I only
+ used them while testing as I prefer to use handheld mode on the
+ go. There certainly isn't any space for kickstand mode on the
+ MBTA! Near the bottom of the case are holes for the Switch's heat
+ vents and a power button followed by four thunderbolts to signify
+ how much charge is available. They alight blue when charging. The
+ top of the case hides a compartment for storing two Switch games
+ horizontally. The side of the case features USB-C charging. YUS!
+
+ 2. Portability
+
+ 📸[Side of case with Switch][IMG8]
+ 📸[Back of case with Switch][IMG9]
+ 📸[Top of case with Switch][IMG10]
+ 📸[Detached Joy-Con with cased Switch][IMG11]
+ 📸[Fanny pack view I][IMG12]
+ 📸[Fanny pack view II][IMG13]
+ 📸[Slipcases are a no-go with the case][IMG14]
+
+ The case by itself doesn't weigh much but when you insert the
+ Switch, you can *definitely* notice the difference (if you play in
+ handheld mode often). I was able to squeeze my Switch and case
+ inside a fanny pack but it was a tight fit. Don't expect this to
+ work with your nifty Super Mario Odyssey slipcase, that ain't
+ happening. *Of course*, you could always store the battery case
+ itself in the drawstring bag that comes with it.
+
+ 3. Real-world Usage
+
+ I didn't measure the charge time for the case itself but it's
+ roughly an hour and a half to two hours. I used my MacBook Pro
+ power brick to charge so I'm not sure if that made a difference
+ versus the default power brick it comes with. During my playtest
+ with Super Mario Odyssey, I noticed the case didn't recharge my
+ Switch…it basically kept it from dying and was effectively a
+ portable wall-charger. I assume graphically-intensive games
+ prevent charging AND battery replenishment so that was a little
+ discouraging. I got *at least* a half-hour of extended playtime
+ thanks to this charger though and that's what counts.
+
+ Should you buy this?
+
+ If you play your Switch a LOT while nowhere near a USB-C charger,
+ absolutely. I can see this being a *great* addition to any
+ traveler as well. I wish I had this with me in Japan for the
+ bullet train rides, I was using the available socket to me for
+ charging my computer. Also, China Southern Airlines did not have
+ appropriate sockets for me to charge my computer. Instead of
+ sleeping to pass the time, I could've been playing Mr Shifty
+ or Zelda.
+
+ Even for occasional travel, having a Switch charger that envelopes
+ the system is a great idea. I have an Anker USB-C charger and it's a
+ brick. Sure, I can charge my Switch with it but it's unwieldy and
+ it *sucks* dealing with cables. I'm loving the one port life with
+ as little cables as possible and Antank made that a little bit
+ bearable. You can buy the Antank charger on Amazon[1] for $47.
+
+ If you have an existing USB-C charger and don't care about having
+ a case that fits your Switch, there is absolutely no need to get
+ this. It's more of a convenience thing, not a necessity. 🕸
+
+ P.S.
+
+ - I was approached by a representative for Antank to purchase and
+ review their charger. I was refunded after purchasing.
+ - It occurs to me that I never tested how much the case would
+ recharge my Switch while it was turned *off*. I'll get on that
+ and update this post.
+
+References
+
+ [1] <https://www.amazon.com/Switch-Battery-Charger-Portable-6500mAh-Extended/dp/B07314ZP7L>
+ [IMG1] <https://🔥.pixels.wtf/blog/image/2017/antank-case-for-nintendo-switch-review-a.jpg>
+ [IMG2] <https://🔥.pixels.wtf/blog/image/2017/antank-case-for-nintendo-switch-review-b.jpg>
+ [IMG3] <https://🔥.pixels.wtf/blog/image/2017/antank-case-for-nintendo-switch-review-c.jpg>
+ [IMG4] <https://🔥.pixels.wtf/blog/image/2017/antank-case-for-nintendo-switch-review-d.jpg>
+ [IMG5] <https://🔥.pixels.wtf/blog/image/2017/antank-case-for-nintendo-switch-review-e.jpg>
+ [IMG6] <https://🔥.pixels.wtf/blog/image/2017/antank-case-for-nintendo-switch-review-f.jpg>
+ [IMG7] <https://🔥.pixels.wtf/blog/image/2017/antank-case-for-nintendo-switch-review-g.jpg>
+ [IMG8] <https://🔥.pixels.wtf/blog/image/2017/antank-case-for-nintendo-switch-review-h.jpg>
+ [IMG9] <https://🔥.pixels.wtf/blog/image/2017/antank-case-for-nintendo-switch-review-i.jpg>
+ [IMG10] <https://🔥.pixels.wtf/blog/image/2017/antank-case-for-nintendo-switch-review-j.jpg>
+ [IMG11] <https://🔥.pixels.wtf/blog/image/2017/antank-case-for-nintendo-switch-review-k.jpg>
+ [IMG12] <https://🔥.pixels.wtf/blog/image/2017/antank-case-for-nintendo-switch-review-l.jpg>
+ [IMG13] <https://🔥.pixels.wtf/blog/image/2017/antank-case-for-nintendo-switch-review-m.jpg>
+ [IMG14] <https://🔥.pixels.wtf/blog/image/2017/antank-case-for-nintendo-switch-review-n.jpg>
diff --git a/memos/WM-022.txt b/memos/WM-022.txt
new file mode 100644
index 0000000..4bd0ec6
--- /dev/null
+++ b/memos/WM-022.txt
@@ -0,0 +1,134 @@
+
+
+
+
+
+
+
+Document: WM-022 P. Webb
+Category: Tutorial 2017.12.05
+
+ Easy deployment with Vagrant
+
+Abstract
+
+ Quite irritated I wasn't doing this already
+
+Body
+
+ > Vagrant[1] provides easy to configure, reproducible, and portable
+ > work environments built on top of industry-standard technology and
+ > controlled by a single consistent workflow to help maximize the
+ > productivity and flexibility of you and your team.
+
+ This is fine and dandy but, I'm not on a team with my side projects.
+ I just want to quickly push my code to a server and keep it moving.
+ Here's how I did it.
+
+ 1. Installation
+
+ Head on over to HashiCorp's download page for Vagrant[2] and
+ select the build for your OS flavor of choice. After the
+ installation is complete, open a Terminal and type `vagrant -v` to
+ ensure installation was successful. If you see a version number,
+ you're good to go.
+
+ 2. Setup
+
+ `cd` into the folder you want to deploy and initialize a Vagrant
+ deployment script with `vagrant init`. This will automatically
+ generate a `Vagrantfile` and it is in here that you'll customize
+ your deployment strategies. Here[3] are all the parameters you can
+ use for SFTP (which is the way I'm deploying my projects). There's
+ documentation for Heroku and inline scripts as well. Here's my
+ deployment script for `thewebb.blog`:
+
+ ```ruby
+ Vagrant.configure("2") do |config|
+ config.vm.box = "base"
+
+ config.push.define "ftp" do |push|
+ push.host = "thewebb.blog"
+ push.username = "root"
+ push.password = "~/.ssh/id_rsa"
+ push.secure = true
+ push.destination = "/var/www/twb"
+ push.exclude = ".DS_Store"
+ push.exclude = ".git"
+ push.exclude = ".gitignore"
+ push.exclude = ".sass-cache"
+ push.exclude = "[documents]"
+ push.exclude = "node_modules"
+ push.exclude = "package-lock.json"
+ push.exclude = "Vagrantfile"
+ end
+ end
+ ```
+
+ You can probably guess what's going on here, but I'll walk you
+ through it anyway.
+
+ I'm connected to `thewebb.blog` via secure FTP, or SFTP, with an
+ SSH key (because passwords are lame). The directory I want to push
+ data to on `thewebb.blog` has a path of `/var/www/twb`. There are
+ a couple of files and folders I don't want/need on my server
+ (mostly the contents of my `.gitignore`, along with that
+ file itself).
+
+ Please refer to the documentation[4] for in-depth descriptions
+ about other parameters like `config.vm.box` (this line is
+ required btw).
+
+ 3. Takeoff
+
+ I use Node.js for practically everything I do so I added a nifty
+ deploy command to my `package.json`. Here's the relevant bit:
+
+ ```json
+ {
+ "scripts": {
+ "deploy": "vagrant push"
+ }
+ }
+ ```
+
+ And that's it!
+
+ To be quite honest, me using Vagrant feels like the equivalent of
+ buying an iMac Pro to browse the Internet but, their tagline is
+ "Deployment environments made easy". And guess what? It works
+ *damn good*. What's easier than `npm run deploy`?
+
+ 4. One more thing
+
+ When you deploy your project, you'll see a message in Terminal
+ stating what's happening, but nothing else. It would be *nice* to
+ have a progress bar to indicate…well, progress but it doesn't take
+ too long (for my projects). Also, automatic reading of my
+ `.gitignore` file so I don't have to manually include what I
+ want excluded.
+
+ Another thing that would be nice is something where my server
+ could detect changes and run commands. For example, let's say I
+ add new modules to this blog. I'll have to install them on my
+ server as well. Currently, I have to SSH into it and run whatever
+ extra steps to ensure updates and I *reeeeeally* don't feel like
+ doing that. You could argue that I could just use HashiCorp's
+ other tools like Nomad and Consul but 1) it was too confusing to
+ set up and I realized 2) those tools are *definitely* overkill for
+ what I work on.
+
+ SO! I have caused myself *much* pain to create a system that
+ allows these automatic updates to happen. Just deploy and your
+ server will take care of the rest. During my failed attempts at
+ utilizing other tools, I was inspired by the ease with which I
+ deployed with Vagrant via a simple file. It's still in development
+ but I've been working on it for the past day and a half. Great
+ progress has been made, stay tuned! 🕸
+
+References
+
+ [1] <https://www.vagrantup.com>
+ [2] <https://www.vagrantup.com/downloads.html>
+ [3] <https://www.vagrantup.com/docs/push/ftp.html>
+ [4] <https://www.vagrantup.com/docs/index.html>
diff --git a/memos/WM-023.txt b/memos/WM-023.txt
new file mode 100644
index 0000000..01490ea
--- /dev/null
+++ b/memos/WM-023.txt
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+Document: WM-023 P. Webb
+Category: Project 2017.12.30
+
+ Who the hell creates a social network?
+
+Abstract
+
+ A crazy person, that's who.
+
+Body
+
+ Or, "Social networks are terrible, so I'm creating one". But…why?
+ *Excellent* question, buckle up gang!
+
+ Social networks in 2017 are just *bad*. There's no shortage of
+ articles written about how depressing, manipulative, greedy, and
+ morally bankrupt they are but, to what end? The same people writing
+ about these horrid networks continue to use them because *despite*
+ all the horrible things done (or ignored) by the creators to their
+ users, these networks have *utility*. At their very core, social
+ networks bring people together and double as support groups for
+ like-minded thinkers (for better or worse). There's (seemingly) no
+ incentive for the networks to make things better on behalf of their
+ users. Where else are they (the masses) gonna go? Mastodon?
+ Micro.blog? Sublevel? Scuttlebutt? HAH!
+
+ "Big Social" knows *damn well* that the average user (read: at least
+ 70% of them) isn't going to:
+
+ 1. Create a DigitalOcean, or other VPS (virtual private server)
+ provider account
+ 2. Pay *money* for a server (even though the cheapest is $5)
+ 3. Read a tutorial on GitHub for instructions on how to set up their
+ own Mastodon instance
+ 4. Invite their friends and family
+ 5. Maintain the server and *continue* paying $5/month for it
+
+ You wanna know what my friends did after I told them I was deleting
+ my Facebook account at the top of this year? Some responded with a
+ disaffected, "oh". Some were appalled at the privacy violations they
+ unknowingly subjected themselves to daily yet continued scrolling
+ their feed. Others just didn't care. Now we get to the reason social
+ networks are just *bad* and will continue to be: The masses simply do
+ not give a rat's ass, flying fuck, and/or shit. Womp womp.
+
+ To my wife's credit, she mainly uses Facebook for the mom/support
+ groups she's found. All those moms aren't going to a transition to a
+ Discord server or subreddit because the *experience* will be too
+ jarring and that'll make the transition unlikely to stick.
+
+ To be quite honest, *I am not much better*. I mean sure, I quit
+ Google because of their ever-increasing invasiveness to my privacy
+ and selling my user data to advertisers. I now self-host my email
+ (shout out to Mail-in-a-Box[1]). But…I created a new Google account
+ so I could still use YouTube (thinking about deleting it again and
+ manually keeping track of favorite channels but MEHHHHH).
+
+ I complain about Twitter *on* Twitter and guess what? I tweet like a
+ *mofo*. I retweet even more! I favorite! I am *disgusted* by the fact
+ that they utilize Drumpf in their advertisements overseas while
+ pretending that they cannot hold the current U.S. president to the
+ same standards as everyone else. I am disgusted by the way they
+ *enable* Nazi propaganda while simultaneously blocking such content
+ in Germany and France. I am disgusted by the way they effectively
+ *shit* on their users being attacked and for some strange reason,
+ *side with the oppressors/attackers*. And yet…it's the best damn
+ version of social media I've been on to date and that does *not* make
+ me happy. At some point though, you've got to stop complaining and
+ *take action*.
+
+ 📸[Socii logo and logotype][IMG1]
+
+ Introducing *Socii* ("Oh great, another social network," you think),
+ my answer to the bullshit perpetuated by Big Social and the absence
+ of an easily accessible alternative (pronounced \\'sō-'kē\\).
+
+ Like Big Social, you'll be able to:
+
+ - add a profile picture
+ - have an accent color
+ - post updates
+
+ *Un*like Big Social, you'll be able to:
+
+ - play with a crap ton more customization options (top secret
+ for now)
+ - use tools to customize and protect your online experience
+ - read your timeline untouched by algorithms
+
+ "This sounds good," you say, "but how will you make money? I'm not
+ paying for a social network!"
+
+ Well damn, you're stingy but okay *I get it*. There will be a
+ merchandise shop, account upgrades like the ability to secure a
+ three/four character username, and something else related to the top
+ secret customization options mentioned above. Furthermore, there will
+ be a way for users to make a bit of cash themselves. It is my hope
+ that this will be enough to keep Socii going once the free tier
+ limits on some services I'm using to operate it start costing money.
+
+ To temper expectations (if only for myself), I do not expect Socii to
+ become "the one true network" but I would be *delighted* if people
+ found it to be a welcome reprieve and community of good vibes. A
+ private alpha will occur in early 2018 with a beta slated for
+ (hopefully) late summer. I'll bring people in on a rolling basis at
+ that point. If you'd like to be notified once early registration
+ opens up, feel free to sign up at socii.network[2]! 🕸
+
+References
+
+ [1] <https://mailinabox.email>
+ [2] <https://socii.network/welcome>
+ [IMG1] <https://🔥.pixels.wtf/blog/image/2017/who-creates-social-networks-a.jpg>
diff --git a/memos/WM-024.txt b/memos/WM-024.txt
new file mode 100644
index 0000000..22ffca9
--- /dev/null
+++ b/memos/WM-024.txt
@@ -0,0 +1,119 @@
+
+
+
+
+
+
+
+Document: WM-024 P. Webb
+Category: Life 2017.12.31
+
+ Year in review
+
+Abstract
+
+ Hoo boy, what a year
+
+Body
+
+ Keeping with the tradition of reviewing my year, let's have a look
+ back at my 2017.
+
+ 1. I visited Japan
+
+ My buddy Jamar had the bright idea to order plane tickets to Japan
+ in December of last year for September of this year. Of course, I
+ paid him back within the first four months of 2017. Anyhoo, we
+ stayed for two weeks (my other buddy Oliver stayed for a week) and
+ it was one of *the* best experiences of my life. Holy moly. I
+ still have a LOT of footage to get through. I've been meaning to
+ post about my trip for quite some time but 60GB+ is too much to go
+ through…or maybe I'm just lazy. Here's a couple pics to whet
+ your appetite:
+
+ 📸[Japanese money!][IMG1]
+ 📸[I finally understand the significance of 7-11][IMG2]
+ 📸[SQUAAAAAD!][IMG3]
+ 📸[Nighttime Marauders][IMG4]
+ 📸[The only train delay I experienced and it was for five minutes][IMG5]
+ 📸[Rainy day in Tokyo][IMG6]
+ 📸[I found a dope spot for us to take pics][IMG7]
+ 📸[Cloud seeker][IMG8]
+ 📸[Shrimp curry at Mt Fuji][IMG9]
+ 📸[24 hours? Crazy][IMG10]
+ 📸[One of many train station shots][IMG11]
+
+ 2. I proposed and got married
+
+ During Easter I proposed to my longtime girlfriend and although we
+ planned an semi-elaborate wedding, we decided to make it a small
+ get-together. After all, we were financing things ourselves so it
+ made the most sense. This was another great experience, especially
+ because the weather leading up to and immediately after our
+ wedding day was absolutely *dreadful* and cold. We took that as a
+ sign of the universe approving our union.
+
+ 📸[Marriage in autumn][IMG12]
+
+ If you're interested in learning how we met, you can check out
+ both her post[1] and mine[2].
+
+ 3. I lost my job
+
+ The startup I was working for went out of business in November.
+ This was a mere *four days* after my wedding. 🤬 Yeah I know, fun
+ right? Christmas a month later too? *Good grief*! Studies show
+ that money is one of the major reasons behind divorce so I guess
+ my wife and I were lucky that this happened immediately. Even
+ though job searching is immensely stressful (and annoying), having
+ ample time to work on projects I reserved for nights and weekends
+ has been a plus.
+
+ Let this be a lesson to you: if you work for a startup that's
+ focused *solely* on B2B and they poo-poo the idea of B2C for
+ additional revenue even though their big partners are moving
+ slower than molasses, flee as soon as you can. That big partner
+ can *and will* outlive your dinky startup.
+
+ 4. Became more productive
+
+ This was a direct result of losing my job. Per my post about
+ neglected projects[3], I went through the list and either
+ redesigned or sunset them. My sunset'd projects aren't 100% gone,
+ just positioned in a way that I don't feel bad about seeing them.
+ A great way to ensure that is to get your project(s) to a nice
+ stopping point *and* leave yourself notes.
+
+ With those out of the way, I started work on a social network
+ called Socii. You can read more about[4] it or visit the site[5]
+ to sign up for updates!
+
+ FIN
+
+ Here's my top nine Instagram photos, based on likes.
+
+ 📸[Top nine Instagram pics of 2017][IMG13]
+
+ This may be the last time I do one of these, I want Socii to
+ replace Instagram for me. 🕸
+
+References
+
+ [1] <http://sincerelyshantelle.com/blog/how-i-met-my-husband>
+ [2] </WM-018>
+ [3] </WM-013>
+ [4] </WM-023>
+ [5] <https://socii.network>
+ [IMG1] <https://🔥.pixels.wtf/blog/image/2017/year-in-review-a.jpg>
+ [IMG2] <https://🔥.pixels.wtf/blog/image/2017/year-in-review-b.jpg>
+ [IMG3] <https://🔥.pixels.wtf/blog/image/2017/year-in-review-c.jpg>
+ [IMG4] <https://🔥.pixels.wtf/blog/image/2017/year-in-review-d.jpg>
+ [IMG5] <https://🔥.pixels.wtf/blog/image/2017/year-in-review-e.jpg>
+ [IMG6] <https://🔥.pixels.wtf/blog/image/2017/year-in-review-f.jpg>
+ [IMG7] <https://🔥.pixels.wtf/blog/image/2017/year-in-review-g.jpg>
+ [IMG8] <https://🔥.pixels.wtf/blog/image/2017/year-in-review-h.jpg>
+ [IMG9] <https://🔥.pixels.wtf/blog/image/2017/year-in-review-i.jpg>
+ [IMG10] <https://🔥.pixels.wtf/blog/image/2017/year-in-review-j.jpg>
+ [IMG11] <https://🔥.pixels.wtf/blog/image/2017/year-in-review-k.jpg>
+ [IMG12] <https://🔥.pixels.wtf/blog/image/2017/year-in-review-l.jpg>
+ [IMG13] <https://🔥.pixels.wtf/blog/image/2017/year-in-review-m.jpg>
diff --git a/memos/WM-025.txt b/memos/WM-025.txt
new file mode 100644
index 0000000..b34c015
--- /dev/null
+++ b/memos/WM-025.txt
@@ -0,0 +1,217 @@
+
+
+
+
+
+
+
+Document: WM-025 P. Webb
+Category: Rant 2018.01.11
+
+ Why the Job Search Sucks
+
+Abstract
+
+ It's not your fault
+
+Body
+
+ I have been unemployed since November 1st, *four days* after my
+ wedding. The company I was working for went out of business for
+ various reasons I won't get into but at least I got one last
+ paycheck! This was the first time in my life that I'd been let go
+ from a job. I'd either leave on my own accord or be fired (this only
+ happened twice, once in my professional career). I went into this new
+ development in my life fairly non-plussed because I've *always* been
+ able to find work relatively quickly. Of course, life has a way of
+ reminding you not to get comfortable. *Hooray*.
+
+ 1. Rounds of interviews
+
+ Lots and *lots* of rounds. I really don't understand why this is
+ necessary. Here's what what makes sense to me:
+
+ 1. Phone screen
+ 2. Tech screen
+ 3. Meet the team
+
+ After this, shouldn't you *know* if you want to work with someone
+ or not? What's wrong with your process that you need *more* than
+ three steps? Last month, I ran an interview *gauntlet* with a
+ company I (previously) admired. I had a video interview with HR
+ and a phone interview with *another* person from HR days later.
+ Then, I had to clear my entire Friday from *9am to 6pm* for *five*
+ video interviews with the shortest one being 45 minutes. I thought
+ I aced it! I even wrote a tutorial on how to use one of their
+ products and integrated said product into some of my projects. I
+ was told that I'd hear back from someone in a few days and if not,
+ to email.
+
+ Stop me if you've heard this before.
+
+ I waited. Emailed. Waited. Emailed again. By this point, another
+ week passed and I was *pissed*. I even checked my mail server to
+ see if messages were lost in the ether. *Nothing*.
+
+ Companies don't seem to realize that every interview is an
+ investment of time and emotion for the applicant. I apply for
+ positions where I feel I can make a positive impact and work on an
+ awesome product or help an idea form and gain traction. *There is
+ no excuse for not communicating.* While these companies are
+ internally deciding who to vet next, they can at least send a
+ templated reply back. I don't care if it looks like:
+
+ > Dear Paul, Hahahahahahahahahahahahahahahahahahahahahahahahahahah
+ > ahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahah
+ > ahaha NO.
+
+ At least I know not to waste my time waiting on you.
+
+ 2. Coding/design tests
+
+ See also: whiteboarding.
+
+ I've *never* met someone who performs exceptionally well with
+ thinking on the spot in front of people they've never met when the
+ grand prize is gainful employment. Not only are you thinking about
+ whatever question you've been asked to demonstrate your thought
+ process on, you're also thinking about what they might want to
+ see. Do you have your back turned too much? Should you
+ over-explain to "prove" you fundamentally understand the
+ concept(s)? What happens if you don't understand the question? Do
+ they take "points" off for that?
+
+ That shit is incredibly stressful.
+
+ You know what I love about coding tests? Finding a use for one-off
+ code exercises in my own work so I feel like my time wasn't
+ completely wasted. You know what else I love about them?
+ Absolutely nothing. These *tests and whiteboarding are not*
+ *indicative of your skill level*, they are *approximations* of
+ what you can do with what is likely to be limited information and
+ ambiguous scope.
+
+ Assuming you are gainfully employed, dear reader, think about your
+ job today: you (typically) aren't asked to create a solution for
+ something with three bullet points in a README file with a section
+ for "extra credit ;)".
+
+ I recently did one of these tests and yes, I've identified a
+ portion of the code I wrote for integration in one of my projects.
+ After days of waiting to hear yay or nay, I decided to email a few
+ hours ago and was told other people had more impressive code
+ submissions and tech stack cohesion. Makes sense but, would I have
+ gotten that rejection email today if I hadn't checked in? Next
+ week? Next month? In my experience, I either don't get that email
+ until at least two weeks later at the earliest, if ever.
+
+ Segue!
+
+ 3. Feedback
+
+ It's very rare that you'll get helpful emails on how you can
+ improve your chances in interviews from the very companies that
+ rejected you, especially if you ask for it. This is at odds with
+ the initial tone and type of communication that's exchanged when
+ figuring out if you two are a good fit. "Other candidates were a
+ better fit, feel free to apply again in the future." Um, okay, but
+ why would I do that when *I don't know why I wasn't a fit to begin
+ with*? I view these canned statements as passive aggressive and
+ make a note of avoiding the company and their products
+ going forward.
+
+ 4. How to deal
+
+ Depends on the person.
+
+ For me, open world video games are a great outlet for expending
+ frustration and allows me to cool down. I also enjoy writing and
+ that's why I've written this post. Having my time wasted is one of
+ my chief pet peeves and it's an unavoidable part of the job
+ search…falling in love with a product and/or company only to later
+ be rejected, dismissed, and ignored is a *soul-crushing* exercise,
+ one that we subject ourselves to because we quite literally don't
+ have a choice.
+
+ It fucking sucks.
+
+ I was at a seminar today about dealing with stress in the job
+ search and I heard from people over the age of 40 expressing their
+ experiences and frustration with age bias. They do well with
+ initial email contact and phone interviews but when it's time for
+ the in-person interview, they see and feel quite accurately that
+ their age is what prevents them from moving forward in the
+ process. I feel bad for these people because their only enemy is
+ time. Rather than hire the best, some companies look to hire
+ recent graduates so they can 1) be overworked and 2) offered less
+ pay. They don't know what they don't know and certainly won't ask
+ questions. Older people and those with experience would never put
+ up with that.
+
+ In the seminar we were told:
+
+ > *You are not at fault for being in the situation you are in.*
+ > External forces changed your lives in a (mostly) negative way
+ > but, it's up to you to deal with it in a productive way.
+
+ Have you ever tried guided meditation? It was the first time my
+ brain was silent outside of sleep…it was weird. I almost fell
+ asleep, haha! I'm going to try practicing mindfulness[1] more.
+
+ 5. Upsides?
+
+ Losing my job and not finding a new one shortly after has awarded
+ me something that's been lacking in me for quite some time, and
+ that is *focus*. As I mentioned in my last post[2], I put a stop
+ to all but one of my projects and am focusing on just one[3].
+
+ Seeing my year-old child grow and learning new words, colors, and
+ numbers has been a fascinating experience. He'll randomly point at
+ something and say whatever he's looking at: "Red! Nine! A!
+ Lellow!" (Yellow) and so on. Pretty neat.
+
+ Constantly retelling my employment history has encouraged me to
+ shorten my "elevator pitch" so I can at least get that part of the
+ conversation over and done with quickly. My cover letter has seen
+ *many* shifts and improvements. I state upfront that I have zero
+ React experience because 99.999999% of tech companies want someone
+ with 18 years of experience with a four-year-old JavaScript
+ framework. I'm being facetious here but that requirement is
+ *ridiculous* for a fad. Writing CSS in JS? *GROSS*.
+
+ I redesigned my resume to put my skills upfront (responsive
+ front-end web design and development, yes I can design *and*
+ code), followed by projects that utilize those skills, and then
+ experience. As tired as I am of the bullshit companies put you
+ through in the hiring process, I'm sure companies deal with all
+ sorts of other bullshit too. I like to think my cover letter and
+ resume do a very good job of informing potential employers if I'm
+ a good tech fit. If not, no need to respond! Just keep it moving.
+ Getting me invested in the conversation, your company and product,
+ and then ignoring me?
+
+ *Maaaaan*, go *fuck* yourself. 🕸
+
+ P.S.
+
+ When I eventually hire people for my own company I'm reading this
+ post every week to remind myself that applicants aren't just
+ numbers or Post-Its on a board, they are people with feelings and
+ expectations that they will be replied to in a timely manner
+ because they have life and responsibilities to deal with.
+
+ P.P.S.
+
+ This post has garnered more interest than I thought it would on
+ HackerNews[4]. You can read varying viewpoints ranging from those
+ who've been in this situation and are employers doing MUCH better
+ than the ones I've outlined in this post, to people who are just
+ plain dismissive of myself and others like me. It's a pretty good
+ read regardless, I love discourse.
+
+References
+
+ [1] <https://en.wikipedia.org/wiki/Mindfulness>
+ [2] </WM-024>
+ [3] </WM-023>
+ [4] <https://news.ycombinator.com/item?id=16127697>
diff --git a/memos/WM-026.txt b/memos/WM-026.txt
new file mode 100644
index 0000000..1136f31
--- /dev/null
+++ b/memos/WM-026.txt
@@ -0,0 +1,157 @@
+
+
+
+
+
+
+
+Document: WM-026 P. Webb
+Category: Project 2018.01.19
+
+ Socii Dispatch 01
+
+Abstract
+
+ Updates with Socii's development
+
+Body
+
+ For the past month I've been hard at work, developing basic social
+ network features. Namely, account and post creation and editing your
+ profile. To be honest, it's not glamorous work but I've been having a
+ blast doing it. Here's what's been completed thus far.
+
+ 1. Profile
+
+ 📸[First look at your profile][IMG1]
+
+ On your profile, you'll see your avatar in whatever shape you
+ choose from available options which are a triangle (the default),
+ circle (classic), square (old-school), diamond, and inverted
+ triangle. Below your avatar in the first sidebar, you'll find your
+ name and username.
+
+ When you sign up for Socii, you're automatically logged in and
+ given a generated username based on your email address so feel
+ free to change it if something like `paul927465` doesn't quite fit
+ you. Anecdotally, I've noticed that as people go through life
+ changes they tend to want user/name changes as well so I've made
+ Socii unreliant on usernames on the back-end. Friends and
+ followers would want to know if you go from `SuperAwesomeMegaTon`
+ to `netop://~tonton` and I'm building a notification system to
+ accommodate that.
+
+ There are currently no limits on username changes and I can
+ conceivably see how harassment could occur with it. You'll be
+ equipped with proper muting and blocking tools should you
+ unwittingly connect with an annoying person.
+
+ In the other sidebar, you'll see something called "top 8". Older
+ readers will remember the *glory* that was MySpace and I wanted to
+ bring that back as I found it useful.
+
+ Sometimes I just want to visit a friend's page and I forget what
+ their username is (and, if you follow a lot of people who post
+ more often than your friend(s), you'll miss their posts). I sure
+ know what my friends *look* like though and it'll be pretty sweet
+ to see which shapes they choose for their avatars.
+
+ And of course you'll find your personal stream of posts. Within
+ each post block is a menu indicator that contains actions for
+ editing your post, quick copying of the direct link to the post,
+ pinning the post to your profile, and deleting the post. If you
+ want to like your own post for some reason, you can definitely do
+ that. You can also create threads by responding to your own posts.
+
+ 2. Post creation
+
+ 📸[Post creator, clean][IMG2]
+ 📸[Post creator with a code snippet][IMG3]
+ 📸[That rendered code snippet…wish it had color][IMG4]
+
+ Socii supports Markdown! I'm using a customized version of
+ Showdown[1] to enable it. The eye icon in the footer of the post
+ creator allows for previewing what your post will look like when
+ it's live. The character limit is 150 for reasons that will become
+ apparent in a couple months, after I ship a major
+ (secret) feature.
+
+ However, your post can be up to *5,000 characters* long if you so
+ choose! 😰 That'd be *extremely* annoying to attempt scrolling in
+ a feed so posts longer than 150 characters will be truncated by
+ default with a button to expand it should anyone want to read the
+ entire thing. The question mark icon will give you quick tips on
+ how to use Markdown to add a bit of flavor to your posts.
+
+ If you'd like to read a long post but don't have time at the
+ moment, you can save that post for future reading.
+
+ 📸[Respond to your own post to create a thread][IMG5]
+
+ For the moment, only one post status type is available and that is
+ "publish". Forthcoming updates will bring three more: drafts,
+ queues, and schedule. Similarly, the only post creator mode
+ available is "text" but future updates will bring photo, audio,
+ and video options.
+
+ 3. In progress
+
+ There's still a good amount of work to get done. For starters,
+ there's no way for you to change your avatar and that's the
+ *first* thing I do when joining a new service. I also want to get
+ notifications and the global/top 8 feeds working. I think being
+ able to toggle between what everyone is talking about versus
+ whomever in your top 8 is talking about will be neat.
+
+ I want to be more open about developing Socii for a
+ couple reasons:
+
+ 1. I want this social network to be good for people.
+ 2. I develop in a vacuum and while I share updates with a couple
+ people IRL, I think other people could benefit from what I'm
+ learning in the process.
+ 3. External reminder of what I have accomplished. Most people can
+ agree that we accomplish things but beat ourselves up for that
+ *one* thing we didn't do. That's demoralizing and I don't want
+ to stop before Socii gets into people's hands.
+
+ With that said, I'm making a new commitment to releasing Socii at
+ the end of this month for alpha access to members of my mailing
+ list. If you haven't joined yet, you can find it at
+ socii.network[2]. For more information about Socii, you can read
+ this post[3] or check out the manifesto on Socii's official
+ marketing page.
+
+ 4. Things I've learned
+
+ I figured it'd be a good idea to share what I've learned since my
+ last blog post about Socii:
+
+ 1. I'm tired of rounded corners everywhere. I've removed
+ `border-radius` from all the Sass files.
+ 2. GraphQL is awesome. However, I've been building REST APIs for
+ the past month and have two microservices to handle things thus
+ far and that means I'm not transitioning to GraphQL until maybe
+ version 1 of Socii is solidified. 😤 Wish I learned of it
+ sooner (it's basically a better way to do REST and talk
+ to servers).
+ 3. Styling with `:root`. This[4] is how everyone will have
+ customized profile pages. I don't know why every example I've
+ seen it used has root styles overriding each other. I try to
+ write my CSS in a way that doesn't have style overrides because
+ it's a hassle to deal with. If you have `:root.user` styling,
+ just have `:root:not(.user)` for your default styling. Easy.
+
+ That's all for now, see ya! 🕸
+
+References
+
+ [1] <https://github.com/showdownjs/showdown>
+ [2] <https://socii.network/welcome>
+ [3] </WM-023>
+ [4] <https://developer.mozilla.org/en-US/docs/Web/CSS/:root>
+ [IMG1] <https://🔥.pixels.wtf/blog/image/2018/socii-dispatch-01-a.jpg>
+ [IMG2] <https://🔥.pixels.wtf/blog/image/2018/socii-dispatch-01-b.jpg>
+ [IMG3] <https://🔥.pixels.wtf/blog/image/2018/socii-dispatch-01-c.jpg>
+ [IMG4] <https://🔥.pixels.wtf/blog/image/2018/socii-dispatch-01-d.jpg>
+ [IMG5] <https://🔥.pixels.wtf/blog/image/2018/socii-dispatch-01-e.jpg>
diff --git a/memos/WM-027.txt b/memos/WM-027.txt
new file mode 100644
index 0000000..ec50184
--- /dev/null
+++ b/memos/WM-027.txt
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+Document: WM-027 P. Webb
+Category: Tutorial 2018.02.09
+
+ Using nginx and Socket.io
+
+Abstract
+
+ Two of my favorite web technologies, together
+
+Body
+
+ When pushing Socii[1] to production, I forgot how to account for the
+ fact that Socket.io[2] will not work out of the box with HTTPS
+ without a lil' extra configuration.
+
+ On your nginx server, you'll want to edit your `default` file located
+ at `etc` > `nginx` > `sites-available`. I'll use one of my server
+ blocks as an example:
+
+ ```nginx
+ server {
+ # removed for brevity
+
+ location ~* \.io {
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header Host $http_host;
+ proxy_set_header X-NginX-Proxy true;
+ proxy_pass http://localhost:1234;
+ proxy_redirect off;
+ proxy_http_version 1.1;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection "upgrade";
+
+ proxy_redirect off;
+ proxy_set_header X-Forwarded-Proto $scheme;
+ proxy_cache_key sfs$request_uri$scheme;
+ }
+ }
+ ```
+
+ The `proxy_pass` value will be the same as your app's. Actually, the
+ entire location directive is exactly the same, except for the opening
+ `location` bit. So, in the section that was removed for brevity you'd
+ have the same `location` block as above but `location ~* \.io` would
+ be replaced with `location /`.
+
+ Once you're done editing, SSH into your server and run `nginx -t` to
+ ensure your configuration syntax is solid. Your changes won't be
+ applied until the nginx service (or your server) restarts and if you
+ configured something incorrectly, you don't want that to happen. If
+ you get a message saying the syntax is okay, run
+ `service nginx restart` and you're good to go!
+
+ This is something I do once or twice a year and am stumped by so this
+ blog post is serving as an external memory unit. Hope this helps you
+ as well! 🕸
+
+References
+
+ [1] <https://hub.socii.network>
+ [2] <https://socket.io>
diff --git a/memos/WM-028.txt b/memos/WM-028.txt
new file mode 100644
index 0000000..57b837f
--- /dev/null
+++ b/memos/WM-028.txt
@@ -0,0 +1,143 @@
+
+
+
+
+
+
+
+Document: WM-028 P. Webb
+Category: Project 2018.02.10
+
+ Socii Dispatch 02
+
+Abstract
+
+ Launching is hard
+
+Body
+
+ TL;DR: Socii's alpha[1] is out in the wild and obviously *very* rough
+ around the edges. Let me tell you what I've learned since my
+ last dispatch.
+
+ 1. GraphQL
+
+ Yours truly, two weeks ago[2]:
+
+ > GraphQL[3] is awesome. However, I've been building REST APIs for
+ > the past month and have two microservices to handle things thus
+ > far and that means I'm not transitioning to GraphQL until maybe
+ > version 1 of Socii is solidified.
+
+ HAH. Mere *days* after I published those words, I ran into an
+ issue where I needed to display comments and for those comments to
+ show pertinent info like:
+
+ - author's
+ - name
+ - username
+ - avatar shape
+ - avatar source
+
+ If I stuck with REST, here's what my query path would've
+ looked like:
+
+ - query story service for original post (already have user info
+ from earlier query)
+ - query story service for comments to the original post
+ - for each comment, query user service for comment author's
+ aforementioned info
+
+ This is way too much work to get four pieces of info for a
+ comment. Keep in mind that I'd get the *entire* user object with
+ each query to the user service as well. Here's how I achieved this
+ with GraphQL:
+
+ ```javascript
+ const query = `{
+ post(replyTo: "${postId}") {
+ author
+ content
+ createdAt
+ id
+ favoritedBy
+ notes {
+ favorites
+ replies
+ reposts
+ }
+ repliedBy
+ replyTo
+ repostedBy
+ slug
+ }
+ }`;
+ ```
+
+ Couple things to note here:
+
+ 1. GraphQL pros will tell me to use variables instead of what I'm
+ doing here with `postId` in a template literal but MEH.
+ 2. The `author` parameter does a little extra stuff on my GraphQL
+ service to reply back with name, username, and avatar info.
+ 3. The post schema is quite large but I don't need all of it to
+ display them. What you see in this query is what I get back. No
+ wasted data, how neat is that?
+
+ This took me around three days to fully grok and to be quite
+ honest, I am not really sure if I do. 😅 It works though!
+
+ There are *several* articles and dissertations out there with a
+ clickbait-y title bemoaning the demise of REST thanks to GraphQL
+ and well…no. REST is battle-tested and still pretty damn good. In
+ fact, I'm still using it for anything that isn't a `GET` request.
+ When you're `POST`ing or `PUT`ing, I think REST reigns supreme and
+ quite frankly, I don't feel like rewriting that code.
+
+ Let me have a year with ol' graphy before I do something crazy.
+
+ 2. WebP
+
+ WebP[4] is an image format invented by Google as an alternative to
+ JPG and PNG for small (but visually comparable) images. I like the
+ idea of paying almost nothing for image storage so my interest was
+ piqued early in Socii's development.
+
+ The cost savings I've seen during testing have been massive. I had
+ two folders named "raw" and "processed". After converting 10 or so
+ large images (screenshots and the like), the "raw" folder was ~5MB
+ while the "processed" folder was ~1MB. At scale, that's some
+ impressive cost savings. The visual parity was indistinguishable
+ to me as well.
+
+ Of course, Chrome is the only browser that natively supports
+ it[5]. I found a polyfill that works for non-Chrome users (like
+ myself, Firefox is best for me) and I thought it'd be usable in
+ production. It is *not*.
+
+ I am now reversing my decision to use WebP exclusively and will
+ optimize images uploaded to Socii. Decoding WebP in the browser is
+ slow, even with the WebAssembly-converted polyfill and scrolling
+ is horrendous. That's *terrible* user experience. I found another
+ image format called FLIF[6] but the current polyfills are also not
+ production-ready.
+
+ Things I've learned
+
+ 1. Estimates are dumb because people are dumb. Even if you account
+ for that, you'll still be off.
+ 2. GraphQL is still awesome. I'm glad it took up my estimate time
+ to learn it.
+ 3. We need better image formats on the web and browser vendors
+ need to get onboard.
+
+ That's all for now, see ya! 🕸
+
+References
+
+ [1] <https://hub.socii.network>
+ [2] </WM-026>
+ [3] <http://graphql.org>
+ [4] <https://developers.google.com/speed/webp>
+ [5] <https://caniuse.com/#search=webp>
+ [6] <https://github.com/FLIF-hub/FLIF>
diff --git a/memos/WM-029.txt b/memos/WM-029.txt
new file mode 100644
index 0000000..e78a387
--- /dev/null
+++ b/memos/WM-029.txt
@@ -0,0 +1,125 @@
+
+
+
+
+
+
+
+Document: WM-029 P. Webb
+Category: Tutorial 2018.02.10
+
+ Using nginx and express-session
+
+Abstract
+
+ PSA for frustrated Internet searchers
+
+Body
+
+ When pushing Socii[1] to production, I ran into a couple of problems
+ and I'm sharing them on my blog for you (learn from my mistakes!) and
+ me (external memory source). This post will go over how I dealt with
+ secure sessions not working out of the box with HTTPS.
+
+ Let's start with some code. I'm using Feathers with Express but this
+ code will still work sans Feathers:
+
+ ```javascript
+ const app = express(feathers())
+ // above removed for brevity
+
+ // Initialize session and restore auth state
+ .use(session({
+ cookie: {
+ httpOnly: process.env.NODE_ENV !== "development",
+ path: "/",
+ maxAge: 1000 * 60 * 60 * 24 * 7, // 1 week
+ secure: process.env.NODE_ENV !== "development"
+ },
+ proxy: process.env.NODE_ENV !== "development",
+ resave: false,
+ rolling: true,
+ saveUninitialized: true,
+ secret: secret, // this should be an environment variable
+ store: store, // your session store of choice
+ }))
+ ;
+ ```
+
+ The `process.env.NODE_ENV !== "development"` is a clever shortcut I
+ found while troubleshooting this issue. If `process.env.NODE_ENV`
+ does not equal `development`, the result will be true in a production
+ environment. In a development environment, the result would be false.
+ This is assuming of course, that your development script sets the
+ environment. Something like this in your `package.json`:
+
+ ```json
+ {
+ …above removed for brevity
+
+ "scripts": {
+ "build": "npm run clean && npm install && npm run build-server",
+ "build-server": "babel -d build server",
+ "clean": "rm -rf build package-lock.json && mkdir build",
+ "deploy": "vagrant push",
+ "dev": "NODE_ENV=development nodemon server/index.js --ignore 'public/' --exec babel-node --presets env,stage-2",
+ "sass": "sass --watch sass:public/css --style compressed",
+ "start": "npm run build && NODE_ENV=production node build/index.js",
+ "test": "echo \"Error: no test specified\" && exit 1"
+ }
+ }
+ ```
+
+ The scripts to pay attention are `dev` and `start`. You can see that
+ I set the node environment before running my app. And there you have
+ it, I hope you've found this post helpful!
+
+ Going back to the `express-session` code above, I list what most of
+ the parameters mean:
+
+ 1. proxy
+ Trust the reverse proxy when setting secure cookies (via the
+ "X-Forwarded-Proto" header). The default value is undefined.
+
+ - `true` The "X-Forwarded-Proto" header will be used.
+ - `false` All headers are ignored and the connection is considered
+ secure only if there is a direct TLS/SSL connection.
+ - `undefined` Uses the "trust proxy" setting from express
+
+ 2. resave
+
+ Forces the session to be saved back to the session store, even if
+ the session was never modified during the request.
+
+ 3. rolling
+
+ Force a session identifier cookie to be set on every response. The
+ expiration is reset to the original maxAge, resetting the
+ expiration countdown.
+
+ The default value is false.
+
+ *Note* When this option is set to `true` but the
+ `saveUninitialized` option is set to `false`, the cookie will not
+ be set on a response with an uninitialized session.
+
+ 4. saveUninitialized
+
+ Forces a session that is "uninitialized" to be saved to the store.
+ A session is uninitialized when it is new but not modified.
+
+ 5. httpOnly
+
+ Ensures the cookie is sent only over HTTP(S), not client
+ JavaScript, helping to protect against cross-site
+ scripting attacks.
+
+ 6. secure
+
+ Ensures the browser only sends the cookie over HTTPS.
+
+ Hope this helps! 🕸
+
+References
+
+ [1] <https://hub.socii.network>
diff --git a/memos/WM-030.txt b/memos/WM-030.txt
new file mode 100644
index 0000000..8c5c5cf
--- /dev/null
+++ b/memos/WM-030.txt
@@ -0,0 +1,107 @@
+
+
+
+
+
+
+
+Document: WM-030 P. Webb
+Category: Project 2018.02.24
+
+ Socii Dispatch 03
+
+Abstract
+
+ Ship often!
+
+Body
+
+ I have been cranking out features and improvements over the past
+ month. As I gear up for a major feature release, I'd like to quickly
+ run through what's in production now and what I've learned since my
+ last dispatch.
+
+ 1. Top 8
+
+ From the ashes of Myspace comes a feature I've missed dearly in
+ every social network since. Why is this important to me? Well,
+ sometimes I forget my friends' usernames. I never forget a face.
+ With Socii you can change your username whenever you want so for
+ people you *really* want to keep in contact with (outside of
+ real-life phone numbers and such), adding them to your top 8 is
+ the way to go.
+
+ 📸[🎶 I'm bringing Myspace back, yeah!][IMG1]
+
+ 2. Performance
+
+ Three notable changes fall under this section.
+
+ First, I got rid of the WebP decoder[1] (and fixed an issue that
+ arose on account of me doing too much in one commit). It was a bit
+ slow in development which should have made me realize it'd be MUCH
+ too slow for production (even the WebAssembly-based/-compiled
+ decoder I found wasn't good enough). Blink-based browsers (Chrome,
+ Opera, Vivaldi, &c) were unaffected but Firefox and Safari
+ suffered *greatly*. Personally, I use Firefox as my main browser
+ so I felt this pain and *hated* it.
+
+ 📸[Bye bye WebP…for now][IMG2]
+
+ Second, I implemented pagination. Prior to this, the hub (homepage
+ of the actual network[2], not the marketing site[3]) was loading
+ every. Single. Post. It was a friggin' *mess* tbh. Now, I'd like
+ to have done this in my GraphQL service but I don't understand
+ enough about it to implement cursor-based paging so the solution I
+ came up with is kinda hacky. It works *for now* but I'm on the
+ lookout for tutorials or code samples that implement *proper*
+ GraphQL pagination with `graphql.js` (even the official "how
+ to[4])" site is devoid of this information).
+
+ Finally, I created a custom script bundler to minify and combine
+ front-end JavaScript so there would be far less render-blocking
+ scripts to deal with. All the bundling frameworks like Rollup,
+ Webpack, &c, do too much while also not being flexible enough to
+ do what I wanted to do.
+
+ I'm still working on improving performance. No one wants to visit
+ a sluggish site, it's a waste of your time.
+
+ 3. Timelines
+
+ You can now toggle between the global timeline and your top 8
+ timeline (well, if you've *added* anyone to that list).
+
+ 4. Responsiveness
+
+ As a front-end designer, it hurt me to publish something that
+ didn't work well at smaller browser widths/breakpoints. I was
+ *finally* able to get a *lot* of the stylistic things that were
+ bothering me taken care of. Looking at these screenshots though, I
+ gotta rethink the post footer. It looks too fat, I think both bits
+ of info can fit on the same line.
+
+ 📸[Ooh, dat sweet responsive network][IMG3]
+
+ Things I've learned
+
+ 1. Ship small features often. Not only do you get a sense of
+ progression, but you can find issues quickly should you
+ accidentally push errors into production.
+ 2. Image uploading ~~in a performant way[5]~~ that performs well
+ with WebSockets is harder than I thought. I *think* I have
+ something figured out but I have some non-Socii work to catch
+ up on before I test my theory.
+
+ That's all for now, see ya! 🕸
+
+References
+
+ [1] <https://hub.socii.network/NetOpWibby/status/jdnns5gm000zhxbk97iymsgc>
+ [2] <https://hub.socii.network>
+ [3] <https://socii.network>
+ [4] <https://www.howtographql.com>
+ [5] <http://boulter.com/blog/2004/08/19/performant-is-not-a-word>
+ [IMG1] <https://🔥.pixels.wtf/blog/image/2018/socii-dispatch-03-a.jpg>
+ [IMG2] <https://🔥.pixels.wtf/blog/image/2018/socii-dispatch-03-b.jpg>
+ [IMG3] <https://🔥.pixels.wtf/blog/image/2018/socii-dispatch-03-c.jpg>
diff --git a/memos/WM-031.txt b/memos/WM-031.txt
new file mode 100644
index 0000000..fdb3d13
--- /dev/null
+++ b/memos/WM-031.txt
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+Document: WM-031 P. Webb
+Category: Project 2018.04.17
+
+ Socii Dispatch 04
+
+Abstract
+
+ If you want something done right…
+
+Body
+
+ In the almost two months since my last dispatch I moved my life from
+ New England to Tennessee, started working on a new product, and
+ learned of a couple other social networks in development. This might
+ be a long read, make yourself comfortable.
+
+ 1. Why Move?
+
+ The rent was too damn high! Also, with my skills I can work
+ anywhere. Why not live in a place where the weather is (generally)
+ better and the price of living is more agreeable?
+
+ 2. New Product
+
+ While working on Socii, I made the conscious decision not to add
+ an analytic script for two reasons:
+
+ 1) *I* use ad blockers and it is safe to assume that the people
+ who would join Socii do too. Therefore, my analytic script
+ would be blocked. Why bother adding one in the first place?
+ 2) Gauges (the analytics provider for all my other sites) has been
+ sold at least three times. They could get sold to Google or
+ Facebook at some point and I am fundamentally opposed to using
+ their products.
+
+ However, this became a hindrance at some point because Socii would
+ error on a route and crash (unhandled promise rejections are
+ bad!). I started thinking about having a service that could plug
+ into my codebase with *minimal change* while also showing me where
+ things happen.
+
+ Enter Chew (analytics you can count on)!
+
+ 📸[Homepage of Chew][IMG1]
+
+ It works by capturing the request object in your (Express 4)
+ middleware and sending the relevant data to Chew. I spent a couple
+ weeks working on this and it's *just about* ready for private
+ testing (basically, me using it on my own sites and fixing bugs
+ that occur). All you need to get started is a free Chew account
+ and two lines of code in your Express-based app: importing the
+ Chew npm package and a single line in your middleware.
+
+ As usual, I learned some things along the way and I look forward
+ to applying these new learnings to Socii. I tend to refactor (and
+ write more code comments) as I develop so I can help my future
+ self when something needs fixing (or removal, I love when I can
+ remove code).
+
+ Naturally, I used Socii as a base for Chew and came up with a very
+ basic SaaS boilerplate:
+
+ 📸[My SaaS boilerplate, 1.0][IMG2]
+
+ The left side refers to self-explanatory services while the right
+ side shows you the URLs each service would be reachable at.
+
+ The admin console is new to me and I haven't actually created one
+ yet but I like the idea of a master interface being made available
+ to admin users, instead of embedding admin controls inside the
+ app. Separation of concerns, yes. More stuff to manage? Of course!
+ The tradeoff is worth it to me.
+
+ Thanks to the power of Nginx and reverse proxies, you can run all
+ of these on the same physical server! Probably shouldn't have the
+ CDN there though. For Socii, I have a service that optimizes
+ images before placing them in storage (DigitalOcean Spaces, their
+ version of Amazon S3).
+
+ Once I have Chew launched and the notifications feature launched
+ in Socii, I'll start working on open-sourcing my SaaS boilerplate.
+ I just realized this is a great time to segue.
+
+ 3. Social Networks
+
+ I frequent HackerNews and commented on a post[1] where someone
+ listed their social network feature wishlist. Of course, I plugged
+ Socii because it will match (most of) what they want when it is
+ feature-complete. I fully expect downvotes and was pleasantly
+ surprised to see the opposite occur! Furthermore, other people
+ working on social networks reached out to me via LinkedIn and
+ email. Unfortunately, aside from initial introductions I haven't
+ conversed with these folks. I hope that changes soon, we could all
+ learn from each other.
+
+ It is quite obvious that "social" is on the mind of everyone and
+ I'm glad that people are trying their hand at improving
+ the Internet. 🕸
+
+References
+
+ [1] <https://news.ycombinator.com/item?id=16821172>
+ [IMG1] <https://🔥.pixels.wtf/blog/image/2018/socii-dispatch-04-a.png>
+ [IMG2] <https://🔥.pixels.wtf/blog/image/2018/socii-dispatch-04-b.png>
diff --git a/memos/WM-032.txt b/memos/WM-032.txt
new file mode 100644
index 0000000..acf749a
--- /dev/null
+++ b/memos/WM-032.txt
@@ -0,0 +1,241 @@
+
+
+
+
+
+
+
+Document: WM-032 P. Webb
+Category: Life 2018.05.17
+
+ Decentralization, Privacy, and Everything Between
+
+Abstract
+
+ Rah rah, fight the powah!
+
+Body
+
+ This post is a combination of at least *three* different posts I
+ intended to write and publish over the past year. They inevitably
+ came to the similar conclusions and it makes sense. In my mind,
+ decentralization and privacy are mutually beneficial. In the wake of
+ exposure to privacy violations by Google, Facebook, &c to the general
+ public, it seemed like now would be a great time to share
+ my thoughts.
+
+ 1. Privacy
+
+ > If you are not paying for it, you're not the customer; you're
+ > the product being sold. — Andrew Lewis (blue_beetle)[1]
+
+ This oft-referenced quote was posted on MetaFilter on August 26th,
+ 2010. It's been nearly a decade since then and clearly, that quote
+ is timeless. The increasingly parasitic advertising industry is
+ fed by a never-ending supply of user-data gathered and sold by
+ almost every ~~online~~ ~~offline~~ service. Oh yeah, that's
+ right; you can be tracked ~~offline~~. The data gatherers are your
+ usual suspects: Facebook, Google, Twitter, as well as unknown data
+ brokers of which new ones are launching seemingly weekly. Have you
+ looked at the blacklist of your favorite ad blocker? It's
+ a *mess*.
+
+ The aforementioned data gatherers are in the business of keeping
+ your attention. The visual redesigns, additional features, and so
+ on are not created to make a better product for your perusal. Oh
+ no, these changes are A/B tested and analyzed to ensure that you
+ spend as much time using those products as possible. Why? So that
+ app can send usage data and patterns back to the mothership to
+ collect your info to update their algorithms and sell to
+ advertisers for a pretty penny and the cycle continues.
+
+ Before this year, casual Internet users would roll their eyes at
+ everything I've said thus far, `¯\_(ツ)_/¯`, and say something
+ inane like, "It is what it is." or, "I have nothing to hide."
+
+ > Arguing that you don't care about the right to privacy because
+ > you have nothing to hide is no different than saying you don't
+ > care about free speech because you have nothing to
+ > say. — Edward Snowden
+
+ Frustrating as those eye rolls may be, you cannot force someone to
+ care about something *you* think is important. I've been harping
+ on about privacy to my friends for years and some of them are
+ starting to come around. The tech (and mainstream) media's
+ continued coverage about the evils of (mostly) Facebook and Google
+ has become a roar too loud to ignore.
+
+ FINALLY.
+
+ People have realized (or are starting to realize) that they can no
+ longer depend on the kindness of corporations offering free things
+ on the Internet…when you think of it that way, it's kind of
+ surprising that we would think there wouldn't be strings attached.
+ Huh. Anyhoo, getting away from Facebook is *relatively* easy.
+ Ironically, if you have a lot of relatives on the platform,
+ leaving is quite difficult.
+
+ 2. Cancel Facebook
+
+ Your entrenchment level with Facebook varies with the next person
+ and most likely with me too. I'll share what I did leading up to
+ and after my leave from Facebook in 2016.
+
+ 1. I requested a backup of my data.
+ 2. After downloading my data, I went to my profile page and spent
+ a couple days deleting posts. This was tedious as hell and I
+ never actually finished. I think I got through my first three
+ years and then my recent two years before calling it quits with
+ that task.
+ 3. I also deleted integrations with other services and took the
+ time to delete accounts with services I barely remembered using
+ prior the integration deletion.
+ 4. I told close friends, family, and my girlfriend (now wife) my
+ plans and why I was doing so. I have several family members on
+ Facebook but I also own a phone. I had zero interest with
+ staying in contact with people I knew from high school, those
+ were all passive "friendships" at that point.
+
+ 3. Cancel Google
+
+ Hoo boy, this one's a *doozy*. Entire livelihoods, businesses, and
+ lifestyles rely on Google in some shape or form…especially if your
+ daily mobile driver is an Android device. I grew weary of Google
+ long before my divorce from Facebook and I found an email
+ replacement in Mail-in-a-Box[2], a self-hosted email solution that
+ also has calendar and address book capabilities. For search, I use
+ DuckDuckGo[3]. I'm on iOS/macOS so Apple Maps is a suitable Google
+ Maps replacement for me (btw, Apple Maps is *fantastic* in Japan).
+
+ At this point in time, YouTube is nigh-impossible to replace.
+ Nintendo doesn't upload their videos to Vimeo. MKBHD or any other
+ super profitable YouTube creator isn't leaving the platform
+ anytime soon either so it's a total crapshoot. I'm no longer
+ logged-in to YouTube but I still get email notifications when a
+ channel I'm interested in uploads a video. For videos I *really*
+ want to see again, I download them with youtube-dl[4], an awesome
+ command line program that is capable of downloading videos from
+ pretty much any video sharing site (not just YouTube). Here's my
+ configuration file (located at `~/.config/youtube-dl/config`):
+
+ ```bash
+ -f bestvideo+bestaudio
+ -o ~/Movies/%(title)s.%(ext)s
+ ```
+
+ It automatically downloads the best audio and best video sources
+ for whatever video URL you supply and combines them to create a
+ single file. That file then gets saved to my `~/Movies` folder. I
+ alias the `youtube-dl` command in my `.zshrc` config so I can type
+ `yt` followed by a URL for a super-quick workflow.
+
+ Unfortunately, Google Apps for Work exists and that means I have
+ not fully escaped their ecosystem. When it comes to most
+ businesses, familiarity and cost-savings often take precedence
+ over ideals. Make no mistake, finding (worthy) alternatives to
+ every single one of Google's offerings is expensive in either time
+ spent searching or cost for a single app. Sometimes both! However,
+ I think the upfront cost is worth the longtime gain. You will have
+ to be careful though. There is no shortage of startups with
+ compelling products that are merely skins on top of Google's
+ existing services (last year I interviewed for such a company that
+ I thought was creating a compelling email client only to learn
+ that it was really Gmail underneath AND there would be no IMAP
+ support…the conversation made our misalignment apparent).
+
+ 4. Decentralization
+
+ As my concerns about online privacy grew, so did my interest in
+ decentralization. The core premise of decentralization is
+ basically self-hosting any online service you may need, yourself.
+ The open-source community is *fantastic* for that. You may find
+ some projects with plenty of issues in their git repos and
+ design/code quality of varying degrees of excellence but they are
+ *all* great bases to get started from.
+
+ One of my favorite aspects of decentralization is discovering a
+ codebase someone shared eons prior and finding out that a
+ particular function (or even the entire codebase) fits in
+ perfectly with whatever I'm working on. It sometimes feels like
+ spelunking. You'll never know what you find but treasures await!
+ My other favorite aspect of it is knowing that *I* am in control
+ of my data. There's no ambiguity there. I don't have to trust a
+ third-party, I can trust myself. After all, I wrote the code (or
+ adapted it after I read through it).
+
+ *A key aspect of decentralization that scares non-tech-savvy
+ people is self-hosting.* Of course I can say that it's no big deal
+ but that's because I've been doing this for years. Some tech-savvy
+ people just don't want to deal with server updates and the like. I
+ totally get that because maintenance *can* be a drag. You've
+ really got to decide what you want for yourself. Personally, I
+ think self-hosting is important and I advise everyone to try it at
+ least once. Even if it's just to get over that fear of purchasing
+ (well, *leasing*) a $5/month server from DigitalOcean[5] or
+ Exoscale[6] to hack on and test things with.
+
+ Here's a list of things I self-host:
+
+ - CMS: Noto[7] (super simple Markdown-based "CMS" I created that
+ runs the blog you're reading right now)
+ - Email: Mail-in-a-Box[8] (this is *super* simple to setup)
+ - Git: Gitea[9] (MUCH lighter than GitLab and more
+ customizable too)
+
+ If self-hosting is not your thing, you can sign up and/or join
+ servers other people have created. For example, Mastodon[10] is a
+ decentralized Twitter-like social network. You can fire up your
+ own Mastodon instance or you can sign up for one and start
+ chatting with people. I'm taking the opposite approach with the
+ social network I'm developing but I intend to add decentralized
+ features to it, like PubSub support.
+
+ Speaking of which, I am working on a social network and an
+ analytics service because 1) I was not able to find exactly what I
+ was looking for, and 2) if you want something done right you gotta
+ do it yourself. I've already detailed my reasons for starting a
+ social network[11] before but I never published anything about the
+ analytics service.
+
+ Plain and simple, I abhor trackers. However, I enjoy viewing stats
+ that tell me how many people visit my site, the most popular link
+ visited today, and so on. I was using Gauges[12] prior to creating
+ Chew[13] and one of my tech-savvy friends expressed to me that
+ while he knows who I am and can trust me, he wasn't going to go
+ through the trouble of whitelisting my blog. I don't blame him,
+ the advertising industry is to blame. With more people utilizing
+ ad blockers, how would anyone get accurate analytics? I realized
+ that I could utilize the middleware function in Express[14] to get
+ my analytics. I may go deeper into my thought-process and
+ inspiration for Chew at a later date but for now, you check it
+ out[13] and use it in your own apps!
+
+ What now?
+
+ Getting your family, friends, and community onboard with what
+ you've just learned is an uphill battle. You can lead by example
+ though, so *do not feel discouraged* if/when they don't care about
+ the privacy implications of staying with
+ ~~well~~deceptively-designed services. We did not arrive at this
+ clusterfuck of invasiveness and moral ambiguity overnight…it took
+ some time and it will likely take some time to free ourselves
+ from it.
+
+ Good luck. 🕸
+
+References
+
+ [1] <https://www.metafilter.com/95152/Userdriven-discontent#3256046>
+ [2] <https://mailinabox.email>
+ [3] <https://duckduckgo.com>
+ [4] <https://rg3.github.io/youtube-dl>
+ [5] <https://www.digitalocean.com>
+ [6] <https://www.exoscale.com>
+ [7] <https://git.inc.sh/IdeasNeverCease/Noto>
+ [8] <https://mailinabox.email>
+ [9] <https://gitea.io>
+ [10] <https://mastodon.social>
+ [11] </WM-023>
+ [12] <https://gaug.es>
+ [13] <https://chew.sh>
+ [14] <https://expressjs.com>
diff --git a/memos/WM-033.txt b/memos/WM-033.txt
new file mode 100644
index 0000000..b7d0f7d
--- /dev/null
+++ b/memos/WM-033.txt
@@ -0,0 +1,144 @@
+
+
+
+
+
+
+
+Document: WM-033 P. Webb
+Category: Project 2018.07.09
+
+ Socii Dispatch 05
+
+Abstract
+
+ Ship often!
+
+Body
+
+ I guess this is turning into a bi-monthly update? Don't fret, the
+ silence doesn't mean there wasn't progress being made. Let's jump in.
+
+ 1. Quick life update
+
+ I got a (remote) job! And a house! Kids are happy, wife is happy,
+ so I'm happy.
+
+ 2. JSON Feed support
+
+ Every profile is now equipped with JSON Feed[1] support! Created
+ by Manton Reece and Brent Simmons, JSON Feed aims to be the new
+ RSS. To access your feed (or others), append `/feed` to a user's
+ profile page. Here's an example:
+
+ ```
+ https://hub.socii.network/Socii/feed
+ ```
+
+ Your feed is now available for whatever you wish to use it for.
+ Maybe you want to display your latest posts on your personal site?
+ Have a customized dashboard? Put 'er there!
+
+ Socii is a social network, yes, but not one that wants to keep you
+ on it all the time. Your data is yours.
+
+ 3. GDPR
+
+ By now you've seen the emails and memes as a result of the passing
+ of General Data Protection Regulation (GDPR) in Europe. Long story
+ short, it's a collection of data protections passed into law for
+ European citizens. This means, companies are required to protect
+ data pertaining to any users from Europe and to also deliver or
+ delete said data should the user request it.
+
+ Unlike the major social networks here in America, I didn't opt to
+ have two versions of privacy policies for users in Europe and
+ those outside. EVERYONE deserves to have their data protected,
+ exported, and/or deleted at a whim. To echo the words of Childish
+ Gambino, "this is America".
+
+ Now, GDPR isn't *perfect* but it's a step in the right direction.
+ To that end, I've updated the policies[2] page to be more
+ comprehensive about the data Socii collects, how that data is
+ used, email addresses of the Data Controller and Data Controller
+ officer, and so on. I dislike that it's so long though…I may bring
+ back the TL;DR version from before and have a toggle to see both.
+ Yeah, that's a great idea!
+
+ 4. Notifications
+
+ This was a long time coming. When you favorite or respond to a
+ post, the author will get a beautifully simple email stating such.
+
+ The notifications tab on the hub is still empty for now but I
+ *could not wait* to ship the workable part of this feature.
+
+ `@ mention` support for notifications will come shortly. This will
+ pave the way for private messages as well.
+
+ 5. Performance gains
+
+ Yes! FINALLY. You wanna know why loading of `hub.socii.network`
+ was so slow? I was literally loading…every…single…post before
+ displaying the hub. Over time the wait got progressively worse
+ because there were more posts to load.
+
+ Enough was enough and after I shipped notifications, I got to work
+ on implementing GraphQL-based pagination. I had this implemented
+ *partially* for about a month or so but other issues plagued me
+ more than the slowness of the hub. Pagination is ALSO active on
+ profile pages. It may not be perfect but it's close.
+
+ A blog post to detail how to do pagination in GraphQL without
+ Apollo, Prisma, or whatever magic framework is forthcoming. I've
+ had developers attached to the GraphQL project tell me that
+ pagination is trivial[3], unimportant, or easy, both on GitHub and
+ Slack. Or, that I NEED to use yet ANOTHER framework to achieve it.
+
+ Good thing there are other places to find help. No matter how much
+ I learn, I remember knowing a LOT less. I feel obligated to pass
+ on the knowledge of dope things. Stay tuned!
+
+ 6. Low-hanging fruit and other changes
+
+ - Email addresses can now have `+` and `.` characters, perfect for
+ having multiple accounts and using email aliases.
+ - When posts are deleted, favorite and reply counts are accurate.
+ - When a post with replies is deleted, the replies lose the
+ reply icon
+ - Implementation of reposting is *canceled*, discussion here[4].
+ - Message flasher (for lack of better description) has a
+ reasonable z-index now. No more covering navigation menus.
+ - Post preview button is now disabled when no text has been
+ entered, bug report here[5].
+ - New post modal now matches language with the button that
+ triggers it, bug report here[5].
+ - Visual issues regarding the Markdown help have been fixed.
+ - Increased character count for "optimal display".
+ - New post modal and reply box is now fully responsive.
+ - Got rid of as many "magic numbers" from the CSS as possible.
+ This required some refactoring.
+ - Refactored all my microservices and added tests. TESTS.
+ Currently, they check for out-of-date dependencies and lints
+ the code.
+
+ Things I've Learned
+
+ 1. You will almost always hate your old code.
+ 2. Refactoring is fun. I already knew this but I like reminding
+ myself. It's an opportunity to replace/improve functionality
+ with less code. AMAZING. 🤩
+ 3. Everything can be distilled into simple concepts if you think
+ long enough.
+ 4. Big Social is duplicitous.
+
+ ∴NetOpWibby[6], out! 🕸
+
+References
+
+ [1] <https://jsonfeed.org>
+ [2] <https://socii.network/policies>
+ [3] <https://github.com/howtographql/howtographql/issues/514>
+ [4] <https://hub.socii.network/s/jfy2tm86000h10bk4i1epmp2>
+ [5] <https://hub.socii.network/s/jgtl9k0n000wxobkq9a9u54k>
+ [6] <https://hub.socii.network/NetOpWibby>
diff --git a/memos/WM-034.txt b/memos/WM-034.txt
new file mode 100644
index 0000000..c66f327
--- /dev/null
+++ b/memos/WM-034.txt
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+Document: WM-034 P. Webb
+Category: How to Be Awesome 2018.08.22
+
+ The Fallacy of Imposter Syndrome
+
+Abstract
+
+ Who's holding the carrot?
+
+Body
+
+ You (or, someone you know) has claimed to suffer from imposter
+ syndrome at some point in time. But what IS it, really?
+
+ > "Impostor syndrome" is a psychological pattern in which an
+ > individual doubts their accomplishments and has a persistent
+ > internalized fear of being exposed as a "fraud", despite external
+ > evidence of their competence.
+
+ I'm speaking from the lens of someone firmly entrenched in the web
+ industry, but what I'm about to say applies anywhere. Imposter
+ syndrome appears to be a very real threat to the psyche. It has
+ occurred to me that maybe…it's NOT.
+
+ Y'see, when people reach the next plateau of their career they begin
+ to compare themselves against impossible odds. They look at the
+ "superstar" members of their industry, they look at their peers of
+ similar standing, *they look at everything around and beyond them*. I
+ mean, just check out that VIEW! What happens next ~~will~~ won't
+ shock you.
+
+ > How did I get here? I don't *belong* here! What if they kNoW?!
+
+ These are questions people ask themselves instead of the one that
+ *matters* as they turn around:
+
+ > *Wow*, I really came THIS far? 🤩
+
+ Our fast-paced society and the scripted nature of social media where
+ we only display accomplishments and accolades encourages us to keep
+ our figurative necks on a swivel. *Mentally, we ALL have full range
+ of motion.* Not just laterally and up, but backwards too! It's
+ important to acknowledge your accomplishments to yourself.
+ Internalize it. Believe it!
+
+ Let's think about this another way.
+
+ Imagine someone riding a horse with a long stick in hand. On that
+ stick is an equally long string with a carrot tied to the end. The
+ horse sees the carrot and starts to trot towards it. The horse jockey
+ moves the carrot when they want the horse to change direction. Now,
+ replace the carrot with everything you saw on that plateau and the
+ horse with yourself. PLOT TWIST, you are ALSO the horse jockey.
+
+ WHUUUUUH?!
+
+ Get off the horse and give them a salt lick for doing a ~~great~~
+ *fantastic* job. Huh, interesting…that salt lick is suspiciously
+ similar to your personal accomplishments.
+
+ TL;DR
+
+ You're awesome. Stop beating yourself up. Stop and smell the roses
+ of your accomplishments thus far. Know when to use blinders. 🕸
diff --git a/memos/WM-035.txt b/memos/WM-035.txt
new file mode 100644
index 0000000..63be538
--- /dev/null
+++ b/memos/WM-035.txt
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+Document: WM-035 P. Webb
+Category: Life 2018.12.19
+
+ My Wants for 2019
+
+Abstract
+
+ It's about time I got some things rolling
+
+Body
+
+ It could be argued that you do not (should not) need to wait for a
+ new year to begin just to follow new goals and dreams. However, a new
+ year symbolizes rebirth and new beginnings. A chance to begin
+ anew…and so on. With that said, here is a list of things I want to
+ accomplish in the new year.
+
+ 1. Learning
+
+ iOS development has always been something on my "yeah, at some
+ point" mental list but in the past week I realized that I need to
+ learn it to create a client for my social network. I purchased
+ some courses from Ray Wenderlich's site[1] eons ago and am *just
+ now* going through it. That reminds me, I have *plenty* of courses
+ purchased from Udemy that I have not revisited (8 of them involve
+ Blender and/or using Blender with Unity)…I will get back to them,
+ at some point.
+
+ 2. Product Launches
+
+ I had an epiphany a couple weeks ago regarding online products and
+ services. When you distill them to the basics, *what people are
+ for/getting is access to an API wrapped in a UI*.
+
+ This gave me the sudden realization that a majority of my planned
+ products (projects really) have suffered from me getting stuck on
+ the UI. A friend called it "analysis paralysis" and that sums it
+ up *perfectly*. I came into the tech space via web design and
+ development, so I am trained to think of the UI first and
+ foremost. However, as the back-end developer as well I have to
+ adjust my thinking to prioritize the functionality over how pretty
+ something looks/feels. This may sound like a no-brainer to you,
+ dear reader, but when you are inside your own head it is not so
+ obvious. The functionality informs the UI/UX and vice-versa, it's
+ a balance.
+
+ Here is a non-exhaustive list of just SOME of my languished
+ projects I would love to turn into products:
+
+ - web browser
+ - domain portfolio management tool
+ - web app deployer
+ - analytics service
+ - operating system
+ - process management for servers
+ - content-management system
+ - IMAP server proxy and client
+ - social network
+ - eCommerce platform
+ - lifestyle brand
+
+ Some of these are already in active progress and I think it is
+ totally possible to achieve 90% of this list by next year's end.
+
+ 3. Music
+
+ I used to produce music and rap over my own beats and it gave me
+ another outlet to express myself. Retro/futuristic/jazzy beats and
+ (I thought) dope rhymes, haha! A number of factors contributed to
+ the demise of that particular activity, least of which was
+ starting a family. In my pre-family days I could have complete
+ silence and uninterrupted workflow for hours. That simply does not
+ exist for me now.
+
+ I *think* I could get back to creating music in many small spurts
+ of time. What a luxury, time is.
+
+ 4. Video
+
+ I upgrade my iPhone every year and the camera gets better year
+ over year. Additionally, I have a couple ideas for short films so
+ I should be taking full advantage of this fantastically capable
+ device. I have a Vimeo account for a *reason*. Yeesh.
+
+ And…
+
+ As usual, I just want to become a better version of myself and
+ hopefully not deal with much strife on the way. Parenting is hard,
+ relationships are hard, LIFE is hard. My quest to make things a
+ bit easier, continues. 🕸
+
+References
+
+ [1] <https://store.raywenderlich.com>
diff --git a/memos/WM-036.txt b/memos/WM-036.txt
new file mode 100644
index 0000000..77ae521
--- /dev/null
+++ b/memos/WM-036.txt
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+
+Document: WM-036 P. Webb
+Category: Life 2018.12.31
+
+ Year in Review
+
+Abstract
+
+ What. A. Year.
+
+Body
+
+ So much has happened this year, not just for me but my wife as well.
+ Let's dig in.
+
+ 1. I quit Instagram
+
+ A year prior I quit Facebook proper but it seemed disingenuous to
+ continue using Instagram. Knowing that I was still in FB Land made
+ me feel gross so my last post was New Years Day.
+
+ 2. Attained Wakandan Citizenship
+
+ Black Panther was the greatest movie of the year. I want Kimoyo
+ Beads[1] *badly*.
+
+ 3. Moved to Tennessee
+
+ Family friends invited us to stay with them while 1) I found a new
+ job and 2) we found a home of our own. I *would not* recommend
+ this as it was stressful in several annoying ways but it was only
+ four months. Lessons learned?
+
+ - Trust your gut (in hindsight, I should have seen my
+ layoff coming)
+ - Have a savings fund
+
+ 4. Got more serious about projects
+
+ Socii[2] saw improvements, Chew[3] was launched, and I released
+ some open-source[4] modules[5] and[6] configs[7] on npm.
+
+ Along the way, I discovered better "good practices" and I'm keen
+ on improving them further in the new year.
+
+ Oh, and I transitioned from GitLab to Gitea[8]. GitLab is a
+ resource hog and reminds of old Wordpress. I am much happier with
+ Gitea and it is customizable! I haven't done any customization
+ though, haha.
+
+ My wife delved into sewing more, improved her skills tenfold, and
+ is becoming known in the sewing community. I now have intermediate
+ knowledge about cover stiches and what stiches look like when
+ using 1-3 needles.
+
+ 5. Bought more indie music
+
+ Stream life is just not for me, at least music-wise. Tidal,
+ Spotify, Apple Music…none of it sticks with me. I've found myself
+ using Bandcamp a lot more this year and I mean a LOT.
+
+ Some awesome musicians I've discovered are LAKIM[9],
+ マクロスMACROSS 82-99[10], Eric Lau[11], Dent May[12],
+ The PLAYlist[13], leon chang[14], YUNG BAE[15]…I could keep going
+ but that small list should keep your ears busy for a couple hours.
+
+ FIN
+
+ For the past couple years I've ended my annual review posts with
+ my top nine popular Instagram posts but since I don't use that
+ platform anymore…here are some favorited images from my phone.
+
+ 📸[My favorite photos from the past few months][IMG1]
+
+ This time next year, Socii will have photo functionality. 🕸
+
+References
+
+ [1] <http://marvel.wikia.com/wiki/Kimoyo_Beads>
+ [2] <https://socii.network>
+ [3] <https://chew.sh>
+ [4] <https://www.npmjs.com/package/vne>
+ [5] <https://www.npmjs.com/package/chewit>
+ [6] <https://www.npmjs.com/package/@inc/eslint-config>
+ [7] <https://www.npmjs.com/package/@inc/sasslint-config>
+ [8] <https://gitea.io>
+ [9] <https://lakimisalive.bandcamp.com>
+ [10] <https://macross82-99.bandcamp.com>
+ [11] <https://ericlau.bandcamp.com>
+ [12] <https://dentmay.bandcamp.com>
+ [13] <https://theplaylist.bandcamp.com>
+ [14] <https://leyawn.bandcamp.com>
+ [15] <https://yungbaebae.bandcamp.com>
+ [IMG1] <https://🔥.pixels.wtf/blog/image/2018/yir.jpg>
diff --git a/memos/WM-037.txt b/memos/WM-037.txt
new file mode 100644
index 0000000..321df5c
--- /dev/null
+++ b/memos/WM-037.txt
@@ -0,0 +1,181 @@
+
+
+
+
+
+
+
+Document: WM-037 P. Webb
+Category: Review 2019.01.02
+
+ Neat npm modules - Vol 1
+
+Abstract
+
+ The modules you wish you used
+
+Body
+
+ This is the first post in what will become a series of posts about
+ interesting and useful npm modules I come across and/or use in
+ my projects.
+
+ Over the past year, small modules that got to the point and had close
+ to zero dependencies (dependency-free is even better!) became more
+ appealing to me for a couple reasons.
+
+ 1. Big modules are slow to update. When a vulnerability is found in
+ one of their dependencies the module maintainers are notified and
+ then…nothing. Sometimes the maintainers never respond so someone
+ forks the project, updates the dependencies, and pushes that
+ project under a new name. When security issues are discovered, I
+ want them resolved ASAP. Smaller modules have less attack area,
+ obviously. Fewer moving parts, &c.
+ 2. The left-pad incident[1] and similarly befuddling things happening
+ in the npm ecosphere give me pause about relying on a module with
+ a bajillion moving parts. TL;DR: A popular module used by
+ *thousands* of other modules was unpublished (removed) from npm
+ and that caused QUITE the fuss when routine `npm install`s went
+ off the rails across the Internet.
+
+ Please note that `package.json` examples below only have the
+ necessary parameters regarding the section its in. This is for
+ brevity. New developers come into being every day I'd like to help
+ them out by removing possible confusion.
+
+ 1. colorette
+
+ > Colorette is a Node.js library for colorizing text in terminals.
+
+ Most people just use chalk[2] to style terminal text and I did
+ too. When I saw I could get the same functionality in a smaller
+ dependency-free package, I jumped at the chance to use it. chalk
+ does and supports a lot more but for *my* needs, colorette is
+ juuuuust fine.
+
+ Find it on npm[3] | GitHub[4]
+
+ 2. husky
+
+ > Husky can prevent bad git commit, git push and more 🐶 woof!
+
+ I'm honestly *embarrassed* that I haven't used something like
+ husky earlier in life. Husky saves you from *yourself* and what a
+ beautiful job it does. Here's how I use it in my `package.json`:
+
+ ```json
+ "husky": {
+ "hooks": {
+ "pre-commit": "npm run format && npm run test:sass && git add -A :/"
+ }
+ },
+ "scripts": {
+ "format": "eslint '*/*.js' --fix --ignore-pattern '/app/dist/'",
+ "test:sass": "sass-lint --config ./node_modules/@inc/sasslint-config/config.json --verbose --no-exit"
+ }
+ ```
+
+ What my pre-commit hook does is:
+
+ 1. Use eslint to automatically format issues in JavaScript files
+ found in the codebase, except for JavaScript files in the
+ folder `/app/dist/`.
+ 2. Use sass-lint and a custom configuration file to find issues in
+ Sass files found in the codebase.
+ 3. Stage (prepare) the changed files, if any, to be committed to
+ my git server (I self-host with Gitea but this works with any
+ git server).
+
+ Find it on npm[5] | GitHub[6]
+
+ 3. npm-run-all
+
+ > A CLI tool to run multiple npm-scripts in parallel
+ > or sequential.
+
+ Here's how I use it in my `package.json`:
+
+ ```json
+ "scripts": {
+ "test": "run-s test:*",
+ "test:dependencies": "updates --update ./ --exclude fastify",
+ "test:lint": "standardx --verbose | snazzy",
+ "test:sass": "sass-lint --config ./node_modules/@inc/sasslint-config/config.json --verbose --no-exit",
+ "watch": "run-p watch:*",
+ "watch:sass": "sass --watch app/sass:app/dist --style compressed",
+ "watch:server": "NODE_ENV=development nodemon server"
+ }
+ ```
+
+ `run-s` runs scripts sequentially, whereas `run-p` runs scripts in
+ parallel. You've probably guessed by now but `run-s test:*` tells
+ npm-run-all to run any script with "test:", one after the other.
+ `run-p watch:*` tells it run any script with "watch:", side by
+ side. I like it a lot.
+
+ Find it on npm[7] | GitHub[8]
+
+ 4. updates
+
+ > Fast npm dependency updating tool
+
+ I found updates after being frustrated with npm-check-updates[9].
+ One of the maintainers of the latter was uninterested[10] in
+ updating the dependencies. Forking and working on
+ npm-check-updates myself proved to be annoying so I went looking
+ for solutions elsewhere.
+
+ Here's how I use it in my `package.json` (fastify is working on
+ their next version and it's messing with this script so I ignore
+ updating it for now):
+
+ ```json
+ "scripts": {
+ "test:dependencies": "updates --update ./ --exclude fastify"
+ }
+ ```
+
+ Find it on npm[11] | GitHub[12]
+
+ 5. ver
+
+ > Increment semantic versions across your project. Intended for
+ > projects with a package.json, but works with other files too.
+ > Will create a git commit and tag by default. By default, only
+ > the nearest package.json file is modified.
+
+ Before ver, I never cared about "semantic versioning", let alone
+ versioning *itself*. ver makes it super low effort to do. I just
+ run `ver patch|minor|major` and chain it with other commands. It
+ will automatically update the "version" field in your
+ `package.json` file. Pretty sweet.
+
+ My typical usage is something like:
+
+ ```bash
+ ver patch && git push && npm publish
+ ```
+
+ Find it on npm[13] | GitHub[14]
+
+ FIN
+
+ And there you have it! Five neat modules I find incredibly useful.
+ I hope you do too! 🕸
+
+References
+
+ [1] <https://blog.npmjs.org/post/141577284765/kik-left-pad-and-npm>
+ [2] <https://www.npmjs.com/package/chalk>
+ [3] <https://www.npmjs.com/package/colorette>
+ [4] <https://github.com/jorgebucaran/colorette>
+ [5] <https://www.npmjs.com/package/husky>
+ [6] <https://github.com/typicode/husky>
+ [7] <https://www.npmjs.com/package/npm-run-all>
+ [8] <https://github.com/mysticatea/npm-run-all>
+ [9] <https://www.npmjs.com/package/npm-check-updates>
+ [10] <https://github.com/tjunnone/npm-check-updates/issues/432>
+ [11] <https://www.npmjs.com/package/updates>
+ [12] <https://github.com/silverwind/updates>
+ [13] <https://www.npmjs.com/package/ver>
+ [14] <https://github.com/silverwind/ver>
diff --git a/memos/WM-038.txt b/memos/WM-038.txt
new file mode 100644
index 0000000..2f34e93
--- /dev/null
+++ b/memos/WM-038.txt
@@ -0,0 +1,155 @@
+
+
+
+
+
+
+
+Document: WM-038 P. Webb
+Category: Rant 2019.03.07
+
+ The Bullshit of Facebook
+
+Abstract
+
+ Platitudes, promises, and piss-poor policies
+
+Body
+
+ Yesterday, Facebook founder and CEO Mark Zuckerberg published an
+ essay[1] where he promises a "A Privacy-Focused Vision for Social
+ Networking". The optimist would say he's learned the error of
+ his/Facebook's ways, the pessimist would write the entire thing off,
+ and the realist would assume this is reactionary posturing due to the
+ fact that Facebook is experiencing "an estimated 15 million fewer
+ users in the United States compared to 2017" (according to
+ Edison Research[2]).
+
+ I am in the latter two camps but I'm particularly incensed about how
+ brazen the Zuck continues to be in his lying. It IS a new era so
+ maybe this is his new normal. Let's dissect his several "promises"
+ (bold text inside quotes represent emphasis I've added).
+
+ 1. Reducing Permanence
+
+ > People should be comfortable being themselves, and should not
+ > have to worry about what they share coming back to hurt them
+ > later. So *we won't keep messages or stories around for longer
+ > than necessary* to deliver the service or longer than people
+ > want them.
+
+ How long is "necessary"? Facebook stores what you've typed in the
+ post box but you've "have not sent"[3] or "you deleted"[4]. It is
+ completely unnecessary to store that information in the first
+ place, let alone for an indeterminate amount of time.
+
+ 2. Encryption and Safety
+
+ > People should expect that *we will do everything we can to keep
+ > them safe on our services* within the limits of what's possible
+ > in an encrypted service.
+
+ People *did* expect this and some hope that Facebook tries harder.
+ Making private information availble to third-parties in order to
+ make money isn't how you protect people. In Facebook's case,
+ protecting users in this way comes into direct conflict with their
+ desire to make money. This is why they are so conflicted about it.
+
+ > At the same time, there are real safety concerns to address
+ > before we can implement end-to-end encryption across all of our
+ > messaging services. *Encryption is a powerful tool for privacy,
+ > but that includes the privacy of people doing bad things.* When
+ > billions of people use a service to connect, some of them are
+ > going to misuse it for truly terrible things like child
+ > exploitation, terrorism, and extortion. We have a responsibility
+ > to work with law enforcement and to help prevent these wherever
+ > we can. *We are working to improve our ability to identify and
+ > stop bad actors across our apps by detecting patterns of
+ > activity or through other means*, even when we can't see the
+ > content of the messages, and we will continue to invest in this
+ > work. But we face an inherent tradeoff because we will never
+ > find all of the potential harm we do today when our security
+ > systems can see the messages themselves.
+
+ There are a couple things to unpack here. Zuckerberg delivered the
+ flawed argument of [insert tech here] should not be used because
+ criminals exist. This is a straw man argument. The mere EXISTENCE
+ of a particular technology isn't going to make law enforcement's
+ jobs impossible, just like it isn't going to enable criminals to
+ be untouchable. Criminals and law enforcement are locked in a
+ perpetual arms race (sometimes literally) and will continue to be
+ until the heat death of the Universe and then some.
+
+ Sounds like Facebook is trying to figure out how to create a
+ "secure back door" and we all know that doesn't exist. At which
+ point we'll get an apology and a "pledge to do better" when the
+ inevitable data hack and resulting leak occurs. 😴
+
+ 3. Secure data storage
+
+ > People should expect that *we won't store sensitive data in
+ > countries with weak records on human rights* like privacy and
+ > freedom of expression in order to protect data from being
+ > improperly accessed.
+
+ Reeeeeeally. China? They exist. They also have nearly 1.5 BILLION
+ people. No way Facebook is giving up the chance to get a slice of
+ that pie.
+
+ WeChat is what Facebook aspires to be, but like any company that
+ wants to do business in China, you've gotta have servers there
+ because the Chinese government demands it.
+
+ Apple recently had to put servers in China JUST for their mainland
+ customers. However, Apple has a proven track record in regards to
+ privacy and end-to-end encryption so I am less worried about
+ Chinese dissidents using iPhones than I am about them using
+ Facebook for literally anything.
+
+ Like Zuckerberg stated in his essay, encryption has saved
+ countless dissidents from being murdered but I am not confident in
+ Facebook's ability to protect them.
+
+ Conclusion
+
+ Facebook's profits are up but positive public perception is
+ *plummeting*. It's difficult not to think of Zuckerberg's
+ "candidness" as sweet talk to entice Gen Z'ers and millennials
+ back to the platform and to make your auntie feel safe because
+ "the guy who made the site said so".
+
+ However, Mark Zuckerberg does a great job of stressing the
+ importance of social networks:
+
+ > Public social networks will continue to be very important in
+ > people's lives -- for connecting with everyone you know,
+ > discovering new people, ideas and content, and giving people a
+ > voice more broadly. People find these valuable every day, and
+ > there are still a lot of useful services to build on top of
+ > them. But now, *with all the ways people also want to interact
+ > privately, there's also an opportunity to build a simpler
+ > platform that's focused on privacy first.*
+
+ Problem is, I don't think he believes his own words.
+
+ Is Facebook being refactored? Are they really going back to the
+ original vision, to make the world feel smaller and more
+ personable? Or is he talking about my social network in
+ progress[5], Socii[6]?
+
+ Between my day job helping create a decentralized content
+ platform[7] and creating Socii, I've got my hands full and I'm
+ also super passionate about protecting my family, friends, and
+ cool folks on the Internet like yourself.
+
+ Y'know, focused on privacy first. 🕸
+
+References
+
+ [1] <https://www.facebook.com/notes/mark-zuckerberg/a-privacy-focused-vision-for-social-networking/10156700570096634>
+ [2] <https://www.marketplace.org/2019/03/06/tech/exclusive-look-numbers-showing-users-leaving-facebook-by-the-millions>
+ [3] <https://www.washingtonpost.com/technology/2018/12/14/facebook-says-new-bug-allowed-apps-access-private-photos-up-million-users>
+ [4] <https://slate.com/technology/2013/12/facebook-self-censorship-what-happens-to-the-posts-you-dont-publish.html>
+ [5] </WM-023>
+ [6] <https://socii.network>
+ [7] <https://lbry.tech>
diff --git a/memos/WM-039.txt b/memos/WM-039.txt
new file mode 100644
index 0000000..86ee320
--- /dev/null
+++ b/memos/WM-039.txt
@@ -0,0 +1,183 @@
+
+
+
+
+
+
+
+Document: WM-039 P. Webb
+Category: Operating Systems 2019.06.09
+
+ The Future of the Operating System: Revisited, Part 1
+
+Abstract
+
+ Where we're going is…fascinating and unknown.
+
+Body
+
+ Back in 2013[1] I penned an essay titled, "The Future of the
+ Operating System." In it, I attempted to predict where the operating
+ system paradigm was headed based on what was obvious to me at the
+ time: cloud services were taking off and mobile devices were seeing
+ greater usage than personal computers. Logically (to me), this meant
+ the concept of a responsive OS was upon us. Some of the cited
+ examples were Firefox OS[2] and Ubuntu Edge[3], products that were
+ both designed to be highly mobile primary computing devices that
+ would dock to an apparatus on one's desk to become a full-fledged
+ workstation. The essay was also an opportunity to plug my OS
+ in-progress (now dormant), hikari[4], built around the responsive
+ OS concept.
+
+ For now, a rectangular slab of glass and metal that more or less fits
+ in the palm of an adult hand appears to be the preferred format for a
+ mobile computing device. Specific details and component internals can
+ and will change but the external *probably* won't change much so no
+ time will be spent talking about that. Instead, I'll go over my
+ favorite UI concepts that inventive minds have created in the
+ half-decade since my inital opus.
+
+ 1. eDEX-UI[5]
+
+ > eDEX-UI is a fullscreen, cross-platform terminal emulator and
+ > system monitor that looks and feels like a sci-fi
+ > computer interface.
+ >
+ > Heavily inspired from the TRON Legacy movie effects[6]
+ > (especially the Board Room sequence[7]), the eDEX-UI project was
+ > originally meant to be "DEX-UI[8] with less « art » and more
+ > « distributable software »". While keeping a futuristic look and
+ > feel, it strives to maintain a certain level of functionality
+ > and to be usable in real-life scenarios, with the larger goal of
+ > bringing science-fiction UXs to the mainstream.
+ >
+ > It might or might not be a joke taken too seriously.
+
+ 📸[eDEX-UI screenshot][IMG1]
+ 📸[eDEX-UI screenshot][IMG2]
+ 📸[eDEX-UI screenshot][IMG3]
+
+ The on-screen keyboard suggests the use of this UI on a large
+ touchscreen table (like Microsoft's PixelSense[9] or Oblivion's
+ Light Table[10]) or at least the 12" iPad Pro. Despite what some
+ would consider "visual noise", this UI has almost everything one
+ would need for text entry and multitasking.
+
+ I personally don't see myself using a UI like this because of
+ limited color palette. It looks wonderful for focus though.
+
+ If nothing else, it is fun to look at and pretend you're in a
+ future where hoverboards are actually real and not 🤬 batteries
+ on wheels.
+
+ 2. Desktop Neo[11]
+
+ > Neo is a conceptual desktop operating system interface that is
+ > built for todays people, needs and technologies.
+
+ 📸[Desktop Neo screenshot][IMG4]
+ 📸[Desktop Neo screenshot][IMG5]
+ 📸[Desktop Neo screenshot][IMG6]
+
+ This UI is all about fullscreen EVERYTHING. Window manager lovers
+ would be so into this (looking at you, /r/unixporn[12] community).
+ Heck, *I* am into this! All day every day I am CONSTANTLY
+ resizing/swiping/moving windows around.
+
+ The panel concept of this UI is nice and the search functionality
+ sounds like something I *need*. I am currently on the beta for
+ macOS Catalina and it *almost* has the concept down but you can
+ only split two windows, max.
+
+ 📸[macOS Catalina, splitscreen][IMG7]
+
+ I do like how productive it makes me feel so maybe I'll become a
+ heavy user of it (and hope Apple expands on the feature). Of the
+ UI concepts showcased here, Desktop Neo is my favorite.
+
+ 3. Mercury[13]
+
+ > Mercury is a speculative reimagining of the operating system as
+ > a fluid experience driven by human intent.
+ >
+ > No Apps or Folders. Mercury fluidly assembles content and
+ > actions based on your intentions. So you can focus on the
+ > destination, not the many ways to get there.
+
+ 📸[Mercury screenshot][IMG8]
+ 📸[Mercury screenshot][IMG9]
+ 📸[Mercury screenshot][IMG10]
+ 📸[Mercury screenshot][IMG11]
+
+ This is interesting because it completely strips away the desktop
+ paradigm and creates something that aims to intuit what you'll do
+ based on previous interactions. Basically, local machine learning
+ to help you be more productive.
+
+ Mercury makes *heavy* use of shortcuts and search to get around,
+ so this isn't the UI for the faint of heart.
+
+ The mockups show email messages and some neat things around that
+ but nothing else. It'd be interesting to see how a web browser
+ would look. How do I see all my apps? The creator of Mercury says
+ there aren't any apps but come on, OF COURSE there are.
+
+ I'm excited to see where Mercury heads but for now, it just looks
+ like a nice email app.
+
+ Thoughts
+
+ A key issue I have with every UI concept mentioned here (and
+ nearly every one on the Internet) is the lack of real work being
+ done within them. Outside of an email or text prompt, you rarely
+ see how a coder would use it. Or an analyst. Or a designer. Or
+ anyone being productive, period.
+
+ A common thread that brings these concepts together is, *focus*.
+ Another is change (obviously). After all, the desktop metaphor[14]
+ as we know it was created in 1970. *Nineteen seventy*. What you
+ are reading right now was written in 2019, nearly 50 YEARS later
+ and…not much has changed.
+
+ As I am wont to do, I think about lapsed projects of mine and
+ wonder what would warrant further development. In hikari's case,
+ it doesn't make sense to simply recreate the tried-and-true
+ desktop metaphor. If my aim is to solve problems inherent to a
+ dated paradigm, keeping with the status quo is NOT the way to go.
+
+ One of the reasons Apple's iOS is massively popular is because
+ users don't have to think about files and folders, a chief tenant
+ of the desktop paradigm.
+
+ So…where do we go from here?
+
+ I don't pretend to have the answer but I think we're *slowly*
+ going in the right direction. 🕸
+
+References
+
+ [1] <https://2016.dsgn.io/thoughts/post/the-future-of-the-operating-system>
+ [2] <https://en.m.wikipedia.org/wiki/Firefox_OS>
+ [3] <https://en.m.wikipedia.org/wiki/Ubuntu_Edge>
+ [4] <https://hikar.io>
+ [5] <https://github.com/GitSquared/edex-ui>
+ [6] <https://web.archive.org/web/20170511000410/http://jtnimoy.com/blogs/projects/14881671>
+ [7] <https://gmunk.com/TRON-Board-Room>
+ [8] <https://github.com/seenaburns/dex-ui>
+ [9] <https://en.m.wikipedia.org/wiki/Microsoft_PixelSense>
+ [10] <https://duckduckgo.com/?q=oblivion+table&iax=images&ia=images>
+ [11] <https://desktopneo.com>
+ [12] <https://www.reddit.com/r/unixporn>
+ [13] <https://www.mercuryos.com>
+ [14] <https://en.m.wikipedia.org/wiki/Desktop_metaphor>
+ [IMG1] <https://🔥.pixels.wtf/blog/image/2019/future-of-the-os-a.png>
+ [IMG2] <https://🔥.pixels.wtf/blog/image/2019/future-of-the-os-b.png>
+ [IMG3] <https://🔥.pixels.wtf/blog/image/2019/future-of-the-os-c.png>
+ [IMG4] <https://🔥.pixels.wtf/blog/image/2019/future-of-the-os-d.png>
+ [IMG5] <https://🔥.pixels.wtf/blog/image/2019/future-of-the-os-e.png>
+ [IMG6] <https://🔥.pixels.wtf/blog/image/2019/future-of-the-os-f.png>
+ [IMG7] <https://🔥.pixels.wtf/blog/image/2019/future-of-the-os-g.png>
+ [IMG8] <https://🔥.pixels.wtf/blog/image/2019/future-of-the-os-h.png>
+ [IMG9] <https://🔥.pixels.wtf/blog/image/2019/future-of-the-os-i.png>
+ [IMG10] <https://🔥.pixels.wtf/blog/image/2019/future-of-the-os-j.png>
+ [IMG11] <https://🔥.pixels.wtf/blog/image/2019/future-of-the-os-k.png>
diff --git a/memos/WM-040.txt b/memos/WM-040.txt
new file mode 100644
index 0000000..29f9679
--- /dev/null
+++ b/memos/WM-040.txt
@@ -0,0 +1,293 @@
+
+
+
+
+
+
+
+Document: WM-040 P. Webb
+Category: Project 2019.09.08
+
+ Socii Dispatch 07
+
+Abstract
+
+ It's been a LONG road to 2.0. Old Socii was busted and didn't feel
+ good to use. Even *I* didn't want to use it so changes had to be
+ made. New Socii is super pleasant to use and I'm happy again. What
+ follows is a deep-dive into the history of the architecture and why I
+ made the changes I made.
+
+Body
+
+ The previous version of Socii consisted of seven "microservices" and
+ two web apps that were eventually condensed to two APIs and
+ (hopefully) a sensible stack. This post will detail the process and
+ why the changes were made.
+
+ 1. 1.0
+
+ 1.1. Microservices
+
+ Horus: the notifier
+ Hu: the authenticator (user management)
+ Nemty: the emailer
+ Ra: the one who knows all (GraphQL)
+ Seshat: the keeper of records (post management)
+ Thoth: the media converter
+
+ 1.2. Web Apps
+
+ Marketing: the pretty informational site
+ Network: the actual web app
+
+ 1.3. The Rest
+
+ DigitalOcean: the server
+ Mailgun: backend for email delivery
+ MongoDB: the database
+
+ 2. How it worked
+
+ User visited `socii.network` and liked what they saw so they
+ decided to sign up. Being a new user, they were logged in
+ immediately. On the backend, Hu created the user and pinged Nemty
+ with the user's email address. Nemty created and sent a welcome
+ email to the user.
+
+ If the user decided to make a post, Seshat would get those details
+ and save it to the database. Thoth took care of uploading the
+ user's profile picture. Horus facilitated details of post actions
+ (favorite, reply, &c) to Nemty. Ra was the glue that held
+ everything together.
+
+ 3. What didn't work
+
+ 3.1. Microservices
+
+ Adding a feature to one microservice often meant updating nearly
+ all of them and that grew hella tedious. When Socii 1.0 was in
+ development the web industry was super buzzed about microservices,
+ everywhere! They would solve all your problems! In my case, they
+ *added* more than removed problems. It is *fully possible* that I
+ did not write them in the way microservices are *supposed* to be
+ written but when most of the tutorials on the subject came from
+ the Medium[1] hive mind, you can understand how good information
+ and examples (!!) are hard to come by.
+
+ 3.2. Web Apps
+
+ Like my microservices, I did not enjoy doing a lot of work on the
+ Network and then realizing Marketing wasn't up to date with things
+ ranging from a shade of blue to the modules powering the app. I
+ did a *lot* of copy/pasting and it felt like I was doing something
+ wrong. Tedium!
+
+ 3.3. The Rest
+
+ DigitalOcean and Mailgun have been doing well for me. In fact, I
+ believe I'm grandfathered into Mailgun's free tier due to the low
+ volume of Socii's email output. I've experienced zero issues with
+ email deliverability so I'd gladly pay for it (make Socii
+ popular y'all).
+
+ MongoDB? *Sigh*
+
+ Like many front-end developers, I gravitated to it for my projects
+ because it was the "least scary" database available. Plenty of
+ ORMs[2] are available for it and I used mongoose[3] for a while
+ before transitioning to mongoist[4] during one of the phases of
+ the refactor (in total, there have been at least four phases).
+
+ The issue that stumped me for at *least* a month before urging me
+ to investigate other databases involved updating the schema of
+ posts and users. I forget the details exactly but I had a defined
+ schema and exported the data to perform a database migration. The
+ migration kept failing due to permission checks of some sort and
+ no amount of search engine kung fu rescued me from my woes. Mongo
+ is super unhelpful when things go wrong.
+
+ I ended up cursing myself for being so reliant on a database with
+ piss-poor error messages.
+
+ 4. The Search
+
+ 4.1. Microservices
+
+ I had been using ZEIT's[5] micro[6]/micro-dev[7] modules as the
+ basis for my microservices but the lack of updates/interest from
+ the maintainers[8] urged me to look elsewhere.
+
+ I also read many articles about how companies like Airbnb and
+ Netflix managed their software, to better inform my own decisions
+ about the future of my microservices. In the realm of that
+ research I learned about "monorepos" with the most popular NodeJS
+ module being Lerna[9]. I decided not to use it but to implement
+ one of the core features, which was to put all of my microservices
+ into one API and go from there.
+
+ 4.2. Web Apps
+
+ The original Socii made extensive use of websockets in order to
+ provide a responsive UI. That…worked…for a while. I soon realized
+ I was merely replicating what single-page applications do.
+
+ The web industry's favorite framework for SPAs is (was?) React and
+ I *despise* React. It has always seemed too bulky and I'm allergic
+ to packages with a boatload of dependencies.
+
+ Far too many times in my web development career I have been forced
+ to stop using a useful package because of a dependency being out
+ of date or suffering from a vulnerability and the
+ author/maintainers of that dependency being unresponsive or plain
+ not caring. Bulky packages also become targets for misuse.
+ Companies like Snyk[10] exist to help mitigate this issue but the
+ first step, IMHO, is to limit the attack area yourself by choosing
+ smaller (often with full feature-parity) packages.
+
+ Anyhoo, I looked at Preact[11], Composi[12], and a lot of
+ interesting HyperScript mini-frameworks before settling on
+ Mithril[13]. I really thought this was *IT*. I found the perfect
+ front-end framework! Right?! Heh, NO.
+
+ The original codebase was server-side rendered which meant shared
+ links in Apple Messages and elsewhere online showed rich metadata;
+ title of the page, description, and Socii's icon image. With
+ Mithril, I lost all that. Frustrated once more, it was back to the
+ drawing board.
+
+ 4.3. The Rest
+
+ Your service is only as good as your database.
+
+ Your database of choice is the jewel, the Big Kahuna, the very
+ *foundation* of your service. So, I tested Apple's FoundationDB.
+ Long story short, I found it relatively easy to setup but was
+ confused about how I'd put data into it's Document Layer (document
+ data model on FoundationDB, implementing MongoDB's wire protocol;
+ I'd be able to plug 'n play, basically).
+
+ However, I did find an awesome NodeJS module written by Steve
+ Korshakov, CEO of Openland[14] <@openland/foundationdb[15].
+ Unfortunately, it didn't have Document Layer support so my
+ search continued.
+
+ No other database looked pleasant to use (to me). One of my
+ developer friends espoused the beauty of MariaDB but I was spoiled
+ by ORMs. I didn't want to learn how to write weird syntax just to
+ interface with my database (I also didn't realize at the time that
+ TypeORM[16] was a thing, which renders my previous sentence null).
+
+ 5. 2.0
+
+ 5.1. Microservices
+
+ Five of the original six microservices I created were condensed
+ into a single GraphQL API. The outlier was Thoth (media
+ converter/file management) because as great as GraphQL is, it
+ cannot handle file uploads as easy as a standard REST API could.
+
+ Instead, this is the process: when I need to upload something
+ (like a profile picture for instance), the upload is happening in
+ the background as soon as possible. The response from Thoth is the
+ resulting URL from DigitalOcean's Spaces (basically AWS) that
+ becomes a hidden input's value that will finally get sent to the
+ API to be inserted into the database, after a user clicks
+ "save"/"upload".
+
+ Kind of convoluted but it works for now.
+
+ So, I now have two APIs: a GraphQL-based one (primary) and a
+ REST-based one (file uploads). Both are built upon the restify[17]
+ framework (it's like Express but focused on API creation).
+
+ 5.2. Web Apps
+
+ Back at the drawing board but *fully understanding* what my
+ requirements were for a front-end framework, it didn't take me
+ long to find another one of ZEIT's open-source projects, Next[18].
+ Alas, it was built upon React but if I could have an SSR-powered
+ SPA I'd swallow that. And so I did until approximately a week and
+ a half later when I came across a blog post[19] comparing Next and
+ something called "Sapper". This section of the post blew my
+ mind (emphasis mine):
+
+ > *The same ‘hello world' app that took 204kb with React and Next
+ > weighs just 7kb with Sapper.* That number is likely to fall
+ > further in the future as we explore the space of optimisation
+ > possibilities, such as not shipping any JavaScript *at all* for
+ > pages that aren't interactive, beyond the tiny Sapper runtime
+ > that handles client-side routing.
+
+ Sapper has Express-compatible middleware, making it easy to
+ understand and customize for people who are used to using Express
+ (and Fastify, Restify, &c). It is built upon a framework that's
+ not *really* a framework: Svelte. Like the name implies, Svelte
+ compiles code to tiny, framework-less vanilla JavaScript. Quite
+ honestly, this is everything I've been looking for; a lightweight
+ SPA with SSR support!
+
+ With the web app framework FINALLY figured out, I had to then
+ figure out what I wanted to do about having two front-ends to
+ manage. And…I didn't want to manage two of them. I decided to
+ merge them instead and deprecate the use of a sub-domain for the
+ Network. So, if you were logged-in you would see the global feed
+ but if you were logged-out you would see the marketing homepage.
+ The navigation would also change accordingly.
+
+ 5.3. The Rest
+
+ The database I settled upon is RethinkDB[20]. An interesting
+ choice considering that one of the most commented issues in one of
+ its repos on Github is titled, "is this project dead?[21]". Well,
+ the original company behind it is but there's still a small,
+ vibrant community around it that's been using Rethink in
+ production for years.
+
+ One of the great things about Rethink is the web interface[22] it
+ comes with (you can disable this if you want). This interface has
+ a feature called "Data Explorer" and like the name implies, it
+ allows you to test database commands (or, quickly query something
+ from your database). Coming from a database that effectively told
+ you nothing via opaque errors to a database that gave you the
+ tools to succeed was a breath of fresh air and made me question
+ why the company behind Rethink failed in the first place. The
+ founder of the company, Slava Akhmechet, wrote about their
+ failure[23] in depth and the TL;DR is: great product, wrong time.
+
+ 6. The Future
+
+ I believe I have created a stable foundation for the future of
+ Socii's development. So, what's next? A laundry list of features:
+ images in posts, more profile customization, groups, iOS app,
+ re-enabled JSON Feed for profiles, end-to-end encryption, &c. I
+ don't have experience with CI/CD (Continuous
+ Integration/Development) workflows so maybe that'll be the next
+ thing major thing I tackle. Of course, I'll share my experiences
+ along the way. 🕸
+
+References
+
+ [1] <https://medium.com>
+ [2] <https://stackoverflow.com/a/1279678>
+ [3] <https://github.com/Automattic/mongoose>
+ [4] <https://github.com/saintedlama/mongoist>
+ [5] <https://zeit.co>
+ [6] <https://github.com/zeit/micro>
+ [7] <https://github.com/zeit/micro-dev>
+ [8] <https://github.com/zeit/micro-dev/issues/41>
+ [9] <https://github.com/lerna/lerna>
+ [10] <https://snyk.io>
+ [11] <https://github.com/preactjs/preact>
+ [12] <https://github.com/composi>
+ [13] <https://github.com/MithrilJS/mithril.js>
+ [14] <https://openland.com>
+ [15] <https://fdb.openland.com>
+ [16] <https://github.com/typeorm/typeorm>
+ [17] <https://github.com/restify/node-restify>
+ [18] <https://github.com/zeit/next.js>
+ [19] <https://svelte.dev/blog/sapper-towards-the-ideal-web-app-framework>
+ [20] <https://github.com/rethinkdb>
+ [21] <https://github.com/rethinkdb/rethinkdb/issues/6747>
+ [22] <https://rethinkdb.com/docs/administration-tools>
+ [23] <https://www.defmacro.org/2017/01/18/why-rethinkdb-failed.html>
diff --git a/memos/WM-041.txt b/memos/WM-041.txt
new file mode 100644
index 0000000..74dbb4d
--- /dev/null
+++ b/memos/WM-041.txt
@@ -0,0 +1,330 @@
+
+
+
+
+
+
+
+Document: WM-041 P. Webb
+Category: Career 2019.09.24
+
+ A decade in tech: a retrospective
+
+Abstract
+
+ Startups are hard, respect is easy
+
+Body
+
+ 1. The Beginning
+
+ I got my start in the web/tech space over a decade ago, during the
+ economic recession of 2008.
+
+ Two years prior I was in college for a couple months until Johnson
+ & Wales' campus police called to let me know I'd need to leave by
+ the end of the week. Unbeknownst to me the college fund that was
+ *allegedly* prepared for me never existed (!!) and the funny thing
+ about bounced checks is, *no one likes them*; especially an
+ institution that needs to pay its faculty. Anyhoo, in 2008 I was
+ tasked with "getting myself back into school" *somehow* and was
+ sent to the next town over from JWU to start.
+
+ My landlord, a portly self-deprecating guy with a glass eye and a
+ heart of friggin' *gold*, allowed me stay rent free as long as I
+ kept him up to date with my job search progress. In my downtime I
+ perused online communities like deviantART and Pixelfuckers
+ (defunct) and attempted to emulate what I saw in the awesome
+ desktop modding scene. That led to attempting vector art and boy,
+ this was frustrating as hell to learn. Photoshop's pen tool just
+ did not make sense at *all* and Illustrator was too strange. One
+ day…it clicked. I could do it!
+
+ 📸[2nd Vector][IMG1][1]
+
+ Yes, revel in this *monstrosity*. Admire it. *Fear* it (the later
+ version[2]) of this looks *way* better).
+
+ At some point I was designing so much[3] that I decided I needed a
+ website, naturally. I mocked something in Photoshop and emailed a
+ PSD to HTML service to see how much it would cost to convert my
+ "super awesome" design to a website and I was quoted either $100
+ or $500. Whichever amount it was, I was *incensed*. Furious, even.
+ Couldn't they see I was trying to start something? Why would they
+ charge me so much? The au*dacity* of these people!
+
+ In my anger, I learned how to code my first website[FOOT1].
+
+ Yes. I was petulant and figured it out because I was misguided in
+ my anger at someone/some people trying to run a business in a
+ recession. It sounds quite silly in hindsight but, there you
+ have it.
+
+ At that point I also understood that web design and development is
+ not something easily done *correctly*. Doesn't it make sense why
+ someone would charge to do it for you? Armed with this newfound
+ knowledge I dove into the Internet head first and scoured it for
+ web development tips. Often, these tips came from horribly
+ designed websites 🥴. Indeed there was a time before Envato and
+ their Tuts+ tutorial sites burst onto the scene.
+
+ 2. I Made It
+
+ Sometime in 2012 I was working retail and applying for web
+ design/development roles I was *definitely* not suited for but
+ YOLO (pretty sure YOLO wasn't said then but y'know, same energy)!
+ Just fire and forget, leave for work, come back home and check
+ email. One day I got a response back from thoughtbot[4], a
+ design/development agency in Downtown Crossing (Boston)! One of
+ the co-founders wanted me to come in and interview for their
+ apprenticeship program. Elated, I made the trek downtown with my
+ heavy laptop and couldn't wait to show off my work.
+
+ My elation disappated when Chad Mazolla[5] said (paraphrasing, too
+ long ago):
+
+ > Your code is terrible…but your design is good. Great, even! We
+ > need more stuff like this on the Internet.
+
+ And with that, I was in! The program lasted a few short months and
+ while I was the only one who wasn't offered a job through
+ thoughtbot or their partner companies afterward, I will say that
+ it was the best experience I could have had at that point in my
+ life. If nothing else, I finally had something I could put on my
+ non-retail resume!
+
+ Over the next couple years I would go on to do contract jobs and
+ later work for startup after startup after startup. I've worked
+ for a "regular" company here and there but end up going back to
+ startups. Even though they come with uncertainty[FOOT2], they are
+ often working on challenging ideas and projects that can change
+ some aspect of the world in interesting ways. I'm drawn to that. I
+ also love learning how to do things I either don't feel like
+ learning on my own time or never thought about learning. *The best
+ teacher is experience so why not *get paid* to do it?* This allows
+ you to initiate ambitious side projects solo instead of
+ waiting/relying on someone else to get an MVP running.
+
+ Perhaps more important than the technical skills acquired, I
+ learned how *not* to treat people. Sometimes this was an
+ analysis[6] of *my own behavior* but more often than not the
+ actions of *leadership* exemplified this.
+
+ 3. Scenarios
+
+ The following scenarios are situations I've been on the receiving
+ end of.
+
+ - You're an apprentice and a developer mentoring someone else in
+ the program regularly talks over you and pumps up his apprentice
+ whenever he can. Maybe his disdain for you is because you're
+ self-taught or was personally invited by the co-CEO to join the
+ program. Or maybe the developer didn't like you having regular
+ conversation with the (female) office manager. You're new, you
+ just want to absorb information from everywhere.
+ - You learn many years later that this same developer also
+ treated prospective clients quite rudely.
+
+ - CEO picks his nose and makes eye contact with you. This happens
+ enough that you learn how to have a blind spot whenever you turn
+ your head and see him in your peripheral vision.
+
+ - As a contractor, you end up doing the job of the guy you're
+ reporting under while he browses Joystiq[7] for gaming news. You
+ are later fired and realize he threw you under the bus for his
+ work not getting done. *Many* years later you see him in a
+ Target department store and after recognizing you he discovers a
+ sudden interest in ceiling architecture.
+
+ - As you're dealing with the excrutiating sorrow of miscarriage,
+ the CEO puts you on a dubious "project" for his father's
+ company. A week or two later you're in a firing meeting, sans
+ CEO. In the minutes following the firing you look around for the
+ CEO to have a conversation with him but he's nowhere to be
+ found, even though you just saw him five minutes prior.
+
+ - CEO constantly lies to you and your coworkers about the health
+ of the company and surprises y'all a week or so from Christmas
+ *on pay day* with "Hey, sorry, we can't pay you" phone call.
+ Money eventually shows up but this happens at least once more
+ before the company folds.
+
+ - CEO loves your work and mindset and tasks you with unleashing
+ your creativity on core properties. Then come caveats. You
+ create something cool, you guess, with caveats because core
+ users would be "confused" by drastic changes. A month or so
+ later, CEO okays a developer *not* hired for their design
+ sensibilities to drastically redesign the core product. CEO
+ reiterates your importance while restricting your expression.
+
+ - You notice there's someone on the platform you are helping
+ develop who has advocated for harm and negative energy towards
+ people who share your creed/likeness/ethnicity. You get on a
+ call with the CEO and he not only downplays the matter but he
+ disregards how you feel about it. He also claims
+ organizations like SPLC[8] are disengenous and
+ blow things out of proportion.
+
+ These scenarios are situations I've witnessed and/or stepped in to
+ defend/protect.
+
+ - Designers wrack their brains over new features and present to UX
+ lead for her expert opinion. Idea gets shut down due to claim by
+ lead over "impossible"[FOOT3] claims.
+ - I walk by and overhear the designers speaking amongst
+ themselves, bummed about yet another idea that *seems*
+ feasible but apparently "isn't".
+ - I create a branch and implement their idea in ~10 minutes.
+ Designers are happy, UX lead is not.
+ - To be clear, this doesn't add extra work for anyone but me.
+
+ - Back-end engineers who want something done on the front-end
+ approach UX lead. "Too much work", "not worth it", "impossible",
+ and so on is claimed.
+ - I'm present during this conversation and rattle off similar
+ experiences I've had in my personal projects that relate.
+ - Developers are happy, UX lead is not.
+ - No extra work for anyone but me and it's not an
+ obscene amount.
+
+ - At an annual all-hands event, CTO speaks about how he learned
+ the importance of listening from a leadership course he's been
+ taking. 10 minutes later, CEO blames entire company (and himself
+ but not really) for our lack of innovation leading to the
+ then-(still?)negative status of the company while the CTO stares
+ at the ground in deep thought.
+ - A developer protests accusation and mentions several instances
+ where he tried to provide input, only to be shut down by CEO.
+ - Conversation turns into a shouting match.
+ - Other developers jump in to co-sign the initial protest.
+ - You later learn that some developers at the company ignore the
+ CEO and pursue things *they* know they need to work on.
+
+ - Marketing team repeatedly express frustration with lack of
+ non-developer-friendly tooling for things like updating the
+ company blog, sending email blasts, and so on. CEO is a
+ technical developer and regularly dismisses them, starting
+ sentences with things like "It's so easy" and "All you have to
+ do is…c'mon, it's not so bad."
+ - I don't have much to do so I offer to improve some aspects of
+ their job. After initial pushback I'm begrungingly allowed to
+ do so.
+ - Two days later, I'm tasked with going about this process with
+ caveats (and throwing away substantial work in the process).
+
+ - CEO has something negative to say about anyone who quits. "He
+ wasn't that great anyway" and things like that, often on
+ conference calls.
+
+ These are all the scenarios I could list off the top of my head.
+ I'm a positive person by nature so this was an uncomfortable walk
+ down Memory Lane.
+
+ For people in the web/tech space, the aforementioned scenarios are
+ quite common. Heck, I'm quite sure they echo what happened *today*
+ somewhere…and you witnessed it. A common thread that links the
+ leadership mentioned (aside from the CTO) is apathy; a complete
+ lack of empathy, social understanding/awareness, or just *care*.
+ In the comment about my self analysis earlier, I linked a blog
+ post where I realized I put my ego before the team I was hired to
+ work with. I was, quite frankly, a jackass[FOOT4] and there's no
+ room for one unless you work at a zoo. Self-reflection is a useful
+ tool you should pull out every now and then and as you can
+ probably tell, most people don't utilize it.
+
+ 4. Software is hard, relationships are easy
+
+ > If you don't build your dream, someone will hire you to help
+ > build theirs.
+ > — Tony Gaskin
+
+ I reflect upon this quote often as I help people build their
+ dreams (startups) while also building my own[9]. I do believe
+ there's been a sea change in the industry around employee
+ happiness and retention. Have a look at job postings and you will
+ see work satisfaction and happiness as a perk.
+
+ No one wants to work in a hostile environment and after a while,
+ people realize they don't have to put up with bullshit and they
+ quit (or are fired before they get the chance, lol). To echo the
+ tone of Gaskin's quote but modified for business leadership:
+
+ > In order to build your dream, hire the best people and treat
+ > them like family.
+
+ Assuming you have a great family or a close cadre of friends you
+ regard as family, would you treat them like the aforementioned
+ leaders have? Probably not. It's really not that difficult to be a
+ decent person.
+
+ One of my closest friends is in a coding bootcamp and shares his
+ works in progress with me and another close friend on a regular
+ basis. I'm the most technical of us but what sense would it make
+ for me to downplay his efforts? What would I gain from that? It's
+ my responsibility to assist in his professional development
+ because I have the means to and I consider him family.
+
+ A decade is a long time and software and startups come and go.
+ Even people do. Memories, do not (I mean, aside from
+ cognitive disorders).
+
+ You remember the developer that treated me like shit during my
+ apprenticeship? His name came up in an interview I had two years
+ ago via my interviewer, half a decade later! Therefore, it is
+ *imperitive* that you treat people how you would like to be
+ treated, your reputation could precede you whether it's positive
+ or not.
+
+ No matter what life-changing product you embark on or assist with
+ creating, you will get there a helluva lot faster surrounded by
+ people who respect you and vice-versa. If you've forgotten about
+ the Golden Rule, here's a handy refresher[10]. 🕸
+
+References
+
+ [FOOT1] My first domain name was `pw-software.com` (it now redirects
+ to `webb.page`). Back in the early 2010s, I blogged about
+ design and redesigned my site at least three times a year.
+ It was the *hottest* of messes. Back then I used Google and
+ regularly searched for "PW Software" to check my search
+ ranking. For a while, a company called "P+W Software" was the
+ first result. The constant linking of my website to Facebook
+ and deviantART improved SEO so much that I soon took the
+ number one spot. P+W Software was later acquired[11] by
+ another company. When ICANN released the `.page` TLD I was
+ absolutely *required* to obtain what's probably the nicest
+ domain on the planet and make it my new default home on
+ the Internet.
+
+ [FOOT2] All but two startups I've worked for no longer exist. The
+ first one was acquired but I was seasonal help and thus was
+ too far gone to delight in their success. The second one
+ seems like it's not doing too well behind the scenes.
+
+ [FOOT3] A word I hate more than almost anything (the taste of
+ asparagus will be difficult to unseat) is "impossible" and to
+ hear professionals in the web/tech space use this word so
+ casually is *frustrating*. We literally have supercomputers
+ in our pockets to share *memes* but it's "impossible" to make
+ text with a drop shadow expand across the screen before
+ flipping into an explosion of color with emoji rain.
+ *Impossible is not a word, it's an excuse.*
+
+ [FOOT4] I really wanted to underscore how much of a jackass I was
+ prior to that post being published but was advised against it
+ by leadership. This most likely had something to do with
+ editorial voice of the company but few words exist to
+ exemplify negative behavior with such conciseness.
+
+ [1] <https://www.deviantart.com/nokadota/art/2nd-Vector-72286668>
+ [2] <https://www.deviantart.com/nokadota/art/Above-The-Clouds-71695497>
+ [3] <https://www.deviantart.com/nokadota/gallery>
+ [4] <https://thoughtbot.com>
+ [5] <https://chad.is>
+ [6] <https://2016.dsgn.io/thoughts/post/the-importance-of-process>
+ [7] <https://en.wikipedia.org/wiki/Joystiq>
+ [8] <https://www.splcenter.org>
+ [9] <https://socii.network>
+ [10] <https://en.wikipedia.org/wiki/Golden_Rule>
+ [11] <https://www.healthcarefinancenews.com/press-release/consumer-health-technologies-inc-acquires-pw-software>
+ [IMG1] <https://🔥.pixels.wtf/blog/image/2019/a-decade-in-tech-a.png>
diff --git a/memos/WM-042.txt b/memos/WM-042.txt
new file mode 100644
index 0000000..e0d1cc5
--- /dev/null
+++ b/memos/WM-042.txt
@@ -0,0 +1,206 @@
+
+
+
+
+
+
+
+Document: WM-042 P. Webb
+Category: Operating Systems 2019.12.02
+
+ A personal API
+
+Abstract
+
+ You are the operating system
+
+Body
+
+ 1. Inspiration
+
+ Shortly after revisiting[1] my thoughts about the future of
+ operating systems I was pestered with a recurring thought; what if
+ one had a personal API sitting on a $5/month VPS (virtual private
+ server) and interfaced with it for nearly everything they do
+ online? It wasn't far-fetched for me to then imagine this personal
+ API becoming more of a personal OS in a way (or maybe stylized,
+ personalOS). With that in mind I realized that when thinking about
+ updating my personal web page[2] I didn't want to update the
+ content manually. Rather, I'd want to update an API and have my
+ site(s) automatically update. *Oh yeah*, why NOT have multiple
+ sites update?
+
+ A personal API would make it easy for people to decentralize parts
+ of their digital lives. There are companies built upon the concept
+ of decentralization and that's promising. A rising tide raises all
+ ships, as they say, and I can see a day where non-technical people
+ are spinning up servers as much as they're migrating data to a new
+ smartphone (well, if they did all this via a nice UI).
+
+ 2. Use Cases
+
+ Here's a use case: I'm signed up to several social networks,
+ forums, and I have a couple websites. I'm a digital tastemaker and
+ pride myself on being current and relevant. However, updating my
+ account bio across these platforms is a 20-minute task that I
+ dread doing. Never fear for my API has a biography module!
+ Realistically, all the platforms I frequent won't have an API I
+ can connect my own to, but a handful will. My personal API sends
+ out update requests to the platforms it is connected to and
+ updates my bio section when I publish the relevant changes to
+ my API.
+
+ That example may be a little contrived so let's try another one:
+ I'm a developer who prefers to self-host things whenever possible.
+ I am also quite lazy and live by DRY (don't repeat yourself) and
+ KISS (keep it simple, silly) principles to the extent I can
+ without much difficulty. I'm also fatigued and distrustful of the
+ capability of online services in general to keep my data safe. If
+ I trust nothing else I at least trust myself and a code base I
+ can peruse.
+
+ 3. Version Alpha
+
+ *Please keep in mind that this is still a super early idea and the
+ purpose of this post is to get the particulars fleshed out.*
+
+ What follows is my proposed folder structure of the personal API.
+ Modules come in two types: purpose and utility. Utility modules
+ allow the purpose modules to do their thing, like
+ retrieving/modifying/storing data (on DigitalOcean's Spaces,
+ Amazon's S3, or your own storage location). Ideally you should
+ never have to touch those modules unless you wanted to improve
+ upon it or fork your own version. Purpose modules can be anything
+ you think of and the examples I listed could be your personal
+ Medium, Pinboard/Pinterest, Things, Spotify, Flickr/Instagram,
+ Last.fm, and so on.
+
+ ```text
+ api
+ ├─ …
+ ├─ modules
+ │ ├─ purpose
+ │ │ ├─ blog
+ │ │ ├─ bookmarks
+ │ │ ├─ music
+ │ │ ├─ photos
+ │ │ ├─ portfolio
+ │ │ ├─ reminders
+ │ │ ├─ scrobbler
+ │ │ └─ status
+ │ └─ utility
+ │ ├─ database
+ │ └─ storage
+ └─ …
+ ```
+
+ The purpose functions would be able to call the utility functions
+ to, well, function. `webb.page` will be the guinea pig for the
+ initial release of personalOS. Once it works there I will update
+ parts of `inc.sh` and `dsgn.agency` to take advantage of it
+ as well.
+
+ 4. Why Bother?
+
+ You, dear reader, are probably not terribly interested in
+ self-hosting and dev ops. Even developers/engineers who know HOW
+ to do it aren't interested. Some of the common reasons against
+ self-hosting are fear (of the work involved), apathy ("my data
+ isn't super important anyway"), time (the only valid reason IMHO),
+ or a combination of the three. While I understand I also think *it
+ is incredibly important to claim your space on the Internet*.
+ We're all digital sharecroppers[3] so why not tend to our own
+ space on the 'Net?
+
+ It's a helluva lot easier to monetize your content when it lives
+ on your platform, or personalOS in this case. Monetization doesn't
+ have to be your focus though. How about this: something that
+ irritates me about Apple's Music app and iOS 13 is that I have no
+ idea how to get my music that used to live in iTunes, onto my
+ phone anymore. Once I build a music module for personalOS I can
+ upload my music library to my own server and stream it on the go.
+ The major streaming services are great and all but my music
+ collection has rips from video game soundtracks, anime, and
+ otherwise defunct groups with no content on these streaming
+ services. Why would I give that up? Why *should* I?!
+
+ 5. Business Opportunity?
+
+ Y'know what would be nice? Having an easy way to share any files
+ that you're hosting. Although, you may not want to expose your
+ personal API server to the public. For this purpose, you could use
+ a third-party site like `personal.sh` to generate shareable links
+ (probably via `personal.sh/are`, I'm a fan of domain hacking[4]).
+
+ Because the Internet is open to all, there will inevitably be
+ disturbing/disgusting/morally-bankrupt content shared through
+ `personal.sh`. If/when that happens, the offending user will have
+ their IP address blacklisted and put on display at
+ `personal.sh/it`. It's no secret that anonymity gives some people
+ courage to behave in a way that's unbecoming.
+
+ 6. Prior Art
+
+ There's a company named Urbit whose mission is quite similar:
+
+ > An Urbit is a networked personal server that runs your apps and
+ > stores your data, serves as your permanent online identity and
+ > puts you back in control of your digital life under a
+ > single login.
+ >
+ > When you’re ready.
+ > — urbit live[5]
+
+ Only problem is, their official site makes their mission quite
+ confusing[7] to many[8]. I don't know about you but if I'm
+ entrusting my data to something I run, I want to have more than a
+ *general idea* of how it works.
+
+ *EDIT (2019.12.05):* This post has generated lively discussion on
+ HackerNews[9] and as a result we now have more examples of
+ prior art!
+
+ - cjdns[10]
+ - Dogsheep[11], by Simon Willisons
+ - Islet[12], by Carl Hewitt
+ - libp2p[13]
+ - me-api[14], by Daniel Fang
+ - my[15], by Dmitrii Gerasimov
+ - Perkeep[16]
+ - SOLID (Social Linked Data)[17], by Tim Berners-Lee
+ - Syte2[18] / Syte2 for Zeit Now v2[19], by Rodrigo Neri and
+ Jake Peterson
+ - Unwalled Garden[20]
+ - Yggdrasil Network[21]
+
+ FIN
+
+ Elsewhere, there exists portions of the personalOS concept of
+ various development maturation levels. To me, this is proof of the
+ worthwhile nature of this idea. Will this likely end up sitting in
+ a repo for years after months of initial work? Probably. Hopefully
+ not…we'll see how it goes. 🕸
+
+References
+
+ [1] </WM-039>
+ [2] <https://webb.page>
+ [3] <https://info.ideagrove.com/knowledgebase/digital-marketing/what-is-digital-sharecropping-and-why-is-it-a-bad-thing>
+ [4] <https://en.wikipedia.org/wiki/Domain_hack>
+ [5] <https://twitter.com/urbitlive/status/1192262246384230400>
+ [6] <https://news.ycombinator.com/item?id=21672481>
+ [7] <https://news.ycombinator.com/item?id=18908051>
+ [8] <https://news.ycombinator.com/item?id=6438320>
+ [9] <https://news.ycombinator.com/item?id=21684949>
+ [10] <https://github.com/cjdelisle/cjdns>
+ [11] <https://dogsheep.github.io>
+ [12] <https://www.infoq.com/presentations/strong-types-actor-iot>
+ [13] <https://libp2p.io>
+ [14] <https://github.com/danfang/me-api>
+ [15] <https://github.com/karlicoss/my>
+ [16] <https://perkeep.org>
+ [17] <https://solid.mit.edu>
+ [18] <https://github.com/rigoneri/Syte2>
+ [19] <https://github.com/jake-101/Syte2-4-Zeit2.0>
+ [20] <https://unwalled.garden>
+ [21] <https://github.com/yggdrasil-network/yggdrasil-go>
diff --git a/memos/WM-043.txt b/memos/WM-043.txt
new file mode 100644
index 0000000..f95c355
--- /dev/null
+++ b/memos/WM-043.txt
@@ -0,0 +1,167 @@
+
+
+
+
+
+
+
+Document: WM-043 P. Webb
+Category: Life 2019.12.29
+
+ Year in Review
+
+Abstract
+
+ New experiences
+
+Body
+
+ In my last "Year in Review" post I stated that Socii would have photo
+ functionality. It does…it just isn't reliable, haha. I haven't
+ cracked that bit quite yet and I've also been spending time on
+ getting other projects up to speed. Anyhoo, let's dig into what has
+ happened this year!
+
+ 1. Visited Disney World
+
+ My wife and I never had the opportunity to visit when we were kids
+ so we decided to treat our own kids to a family trip there. My son
+ threw my phone into a shallow pool and I heard it hit the
+ bottom…that's when I knew enough water had gotten in. Sure enough,
+ my phone was out of commission for almost the entire trip. Luckily
+ there are Apple Stores everywhere so I got a replacement during
+ some downtime.
+
+ The lockscreen background[1] on my phone is *still* an amazing
+ shot I got of the EPCOT ball at night.
+
+ In addition, the entire family got sunburnt. I had it the *worst*
+ since I wasn't wearing a shirt at the beach. It was an interesting
+ experience, one that I'd rather not repeat. Melanin-enriched or
+ not, sunscreen is good for you.
+
+ 📸[Yummy Disney snacks][IMG1]
+ 📸[The EPCOT ball in daytime][IMG2]
+
+ 2. Went bald 😱
+
+ I grow facial hair quite easily but on *top* of my head? Umm,
+ let's just say it doesn't fill out like it used to. I blame the
+ stresses of my 20s. And possibly wearing hats a lot. Anyhoo, I was
+ always scared to do so because I wasn't sure how my head would
+ look. Turned out great!
+
+ Also, my son had his first (barbershop) haircut! He took it a lot
+ better than we expected.
+
+ 📸[My boy was a trooper!][IMG3]
+ 📸[He kept rubbing his head, not used to the buzz][IMG4]
+
+ 3. Attended Comic-Con
+
+ I've been to PAX East a couple times so I was excited to finally
+ check out Comic-Con and…it's not my thing. I like comic books but
+ not as much as I like video games. Still, it was a good
+ experience. Also, since my trip to Japan in 2017 I have been
+ *craving* a wonderful drink called Mitsuya Cider[2]. One of my
+ best buddies and I trekked to at least *three* different Japanese
+ shops in New York City before stopping for ramen. While in the
+ restaurant I asked the owner if he knew where we could find some
+ and he gave us directions to a strange market with an elevator.
+ Sure enough, the drink was there!
+
+ I don't do checked baggage when I'm on short trips so I had to
+ guzzle all three bottles I purchased in the remaining amount of
+ time I had in the city.
+
+ 4. Warmed up to an abandoned kitten
+
+ My daughter came home from her bus stop one day cradling a kitten
+ we later learned was roughly a week or two old. It was also wet
+ and cold outside so she and a classmate each took a kitten home.
+ My wife did most of the work of nursing "Chi Chi" back to health
+ and then put her up for adoption after a few weeks. Sadly, we just
+ don't have the space for a pet at the moment and our daughter
+ wasn't pulling her weight in taking care of the kitten she brought
+ home. Fortunately, Chi Chi grew into a gorgeous lil' cat and was
+ promptly adopted. Turns out, she was quite popular amongst
+ families visiting the animal shelter so I'm glad she'll have the
+ space and care she needs to explore and grow.
+
+ When we move into a bigger place I definitely want to get a
+ similar-looking cat. After I get my Dalmatian.
+
+ 📸[Yung Chi Chi][IMG5]
+
+ 5. Made it "big" on Hacker News
+
+ I love checking out Hacker News (HN)[3] as I find all sorts of
+ neat projects and learn of interesting articles through it. I've
+ been checking out Lobsters[4] lately too (and got an invite as I
+ drafted what you're reading).
+
+ I shared my recent post[5] about a "personal API" there and to my
+ pleasant surprise it was well-received[6] (with 156 points)! The
+ post inspired some people to check out my other online webpages
+ and projects and even encouraged some signups for Socii, to my
+ horror (it's not ready for prime-time). I've also received
+ requests for collaboration so that should be interesting.
+
+ The other feedback I got from HN was *intense* negativity about
+ the horizontal scrolling so I quickly created a toggle to disable
+ it. Apparently, Windows users have a horrible experience with it.
+ Coming from a macOS background and with huge trackpads, horizontal
+ scrolling is actually quite pleasant for me so I never did further
+ testing when I initially implemented it. 😬
+
+ As I proofread the post you're reading, reception[7] on Lobsters
+ is quite good too. I spend more time coding than I do writing but
+ when I *do* write I get more ideas and knowledge due to feedback.
+ Note to future Paul: keep doing this writing thing!
+
+ 6. Started learning TypeScript
+
+ TypeScript[8] is a layer on top of JavaScript that basically helps
+ prevent you from making mistakes in your code, which helps create
+ more robust applications. Initially I decided to learn Flow so I
+ could incrementally add static types to a small API project but
+ after an interview I decided to jump right into TypeScript. Man, I
+ wish I did so earlier instead of mucking around in Flow. I'm still
+ no expert but I'm having fun with it and I found egregious code
+ patterns in existing projects thanks to TypeScript.
+
+ 7. Released a couple projects
+
+ - `chronver.org`[9] A date-based versioning specification that
+ makes more sense to me these days than SemVer.
+ - `lefty.world`[10] A fun site for left-handed people. I intend
+ to do more with this in 2020.
+ - `webb.page`[11] My new homepage and probably the best domain
+ I own.
+
+ FIN
+
+ As is customary, here are some of my favorite pics I snapped
+ this year. 🕸
+
+ 📸[Some of my favorite photos from this year][IMG6]
+
+References
+
+ [1] <https://🔥.pixels.wtf/blog/image/2019/year-in-review-g.jpg>
+ [2] <https://www.asahiinryo.co.jp/mitsuya-cider/sp/cm>
+ [3] <https://news.ycombinator.com>
+ [4] <https://lobste.rs>
+ [5] </WM-042>
+ [6] <https://news.ycombinator.com/item?id=21684949>
+ [7] <https://lobste.rs/s/mgpx3w/personal_api>
+ [8] <https://www.typescriptlang.org>
+ [9] <https://chronver.org>
+ [10] <https://lefty.world>
+ [11] <https://webb.page>
+ [IMG1] <https://🔥.pixels.wtf/blog/image/2019/year-in-review-a.jpg>
+ [IMG2] <https://🔥.pixels.wtf/blog/image/2019/year-in-review-b.jpg>
+ [IMG3] <https://🔥.pixels.wtf/blog/image/2019/year-in-review-c.jpg>
+ [IMG4] <https://🔥.pixels.wtf/blog/image/2019/year-in-review-d.jpg>
+ [IMG5] <https://🔥.pixels.wtf/blog/image/2019/year-in-review-e.jpg>
+ [IMG6] <https://🔥.pixels.wtf/blog/image/2019/year-in-review-f.jpg>
diff --git a/memos/WM-044.txt b/memos/WM-044.txt
new file mode 100644
index 0000000..08c49be
--- /dev/null
+++ b/memos/WM-044.txt
@@ -0,0 +1,312 @@
+
+
+
+
+
+
+
+Document: WM-044 P. Webb
+Category: Life 2019.12.31
+
+ 2030: The next decade
+
+Abstract
+
+ New decade, who dis?
+
+Body
+
+ The year 2020 is upon us and while it is merely a number change it
+ feels like it bears significance. My wife joked that she was "going
+ into 2020 with clear vision" and you can be *sure* that's not the
+ last time you'll hear such jokes/puns this upcoming year. So, what
+ does this new year mean to me? A couple things come to mind.
+
+ I am currently 31 years old and from what I've read in my 20s, your
+ 30s is when you *finally* get your shit together. I certainly *feel*
+ more confident in my professional skills and my propensity to create
+ whatever comes to mind with dexterity. But rather than make
+ resolutions or plans for next year I am drawn to the idea of doing so
+ for the next *decade*. Where do I want to be at 41, physically and
+ mentally? What skills will I possess? What habits will I break and
+ what habits will be formed?
+
+ It may sound cliché but, to forecast my future I look to my past;
+ introspection, basically. It's a powerful tool that I believe
+ everyone should employ frequently.
+
+ When I was in 5th grade there was a "Career Day" and four adults came
+ to my class to talk about their respective careers. After explaining
+ what they did for work, every kid in my class stood up and said what
+ they imagined their future career to be. When it was my turn I
+ mentioned *several* career paths I wanted in life. The demographic
+ makeup of the adults in the room were four White women (one of them
+ being my teacher) and one Black man. I feel this detail is necessary
+ because all the women chuckled in disbelief (some with incredulous
+ looks on their faces), which encouraged some of my classmates to
+ laugh as well. The man only smiled and listened intently which gave
+ me the courage to continue. In the moment it didn't seem notable but
+ in hindsight it certainly does. I think I'll save my thoughts on this
+ matter for a future post as I've had other similar interactions
+ in life.
+
+ The point is, thinking back to your dreams and aspirations from your
+ childhood can help steer you when you feel you've lost direction in
+ your life. For this next decade I'd like to make the 5th grade
+ version of the most fantabulous Paul Anthony Webb feel proud about
+ the man he's become. Here's a non-exhaustive list of things I'd like
+ to attain/obtain, followed by reasons why I chose these items:
+
+ - author
+ - cooking
+ - driving license
+ - filmmaker
+ - fitness
+ - fluency in (conversational) Japanese
+ - hardware product (kimoyo beads?)
+ - home ownership
+ - media network
+ - publishing house
+ - record label
+ - musician
+ - podcast
+ - revenue generating businesses
+ - teacher
+
+ 1. Author
+
+ I enjoy writing and feel I should do it a LOT more. A couple weeks
+ ago I decided to try journaling and have been pretty consistent.
+ The past week hasn't been eventful in any way but I think I should
+ still make an effort to put in an entry at least once a week. I
+ use an application called Standard Notes[1] to keep track of all
+ my ideas. It has a "pin" feature so whenever I go to the "All
+ Notes" section I can see my journal there. Anyhoo, I've had
+ concepts for novels and screenplays since high school and I
+ *thankfully* scanned most of those documents…I don't know where
+ they are but the core concepts are still in my mind. There's
+ enough content for a trilogy.
+
+ Another book idea I've had for some years is titled "How to be
+ Awesome" and is based on how I see obstacles and overcome them.
+ For whatever reason I have been able to stick to my guns[2] in the
+ face of negativity and adversity no matter the source: family,
+ friends, life, whatever, AND unassisted by drugs or alcohol (the
+ only casualty has been my hairline)! I'm not sure why I'm the way
+ I am but private conversations throughout my life indicate that
+ others would benefit from my story. Maybe I would benefit from
+ in-depth introspection too.
+
+ 2. Cooking
+
+ My wife would *love* if I took up cooking, especially because my
+ culinary interests are largely Asian-based. She's already pretty
+ good at cooking regular/soul food and is not trying to learn other
+ cuisines. I am interested in replicating the amazing ramen I had
+ on my last day in Japan. Woks are a fascinating tool to me so I'd
+ like to learn how to use it efficiently. One of my buddies got me
+ a cookbook from one of my favorite food trucks in Boston (Mei
+ Mei). The main food item I ordered from them is dubbed, "The
+ Double Awesome". It's a scallion pancake sandwich with ham and a
+ scrambled egg in it, with pesto and other things. Add Sriracha and
+ you're all set! Mei Mei's Haymaker's Punch was perfect for chilly
+ days and a good pair for the sandwich. I tried making a Double
+ Awesome while on vacation at Disney World and…it was quite crispy
+ (burnt). One day at a time!
+
+ 3. Driving License
+
+ Growing up in the Boston area, I had no need for a license. Public
+ transportation is pretty good, even though the MBTA (we just call
+ it "the T") regularly has issues. Moving to Tennessee means I lost
+ my mobility and basically became a homebody, much to the chagrin
+ of my wife. It's not a big deal to me (right now) but I know I'll
+ need a license *eventually*. Also, now that Tesla's Cybertruck
+ exists I think I'll *accelerate* 🤣 my plans to obtain one.
+
+ 4. Filmmaker
+
+ I'm a big fan of doing things myself, which is why I self-host a
+ lot of things (including my own email server). For my
+ space-centric novels I always imagined how they'd look
+ cinematically and what changes I'd need to make to the story to
+ allow the reader to visualize what *I* see in my mind. It only
+ makes sense that I'd film my stories to ensure correctness. To
+ flesh out the world of my novels I'd need to film faux commercials
+ and recently have jotted down some humorous concepts.
+
+ 5. Fitness
+
+ I've been roughly 145 pounds since high school thanks to a fast
+ metabolism and sporadic eating/sleeping habits. While I have good
+ body positivity I've always been curious to see how I'd look with
+ muscle and more meat on my bones. I'Robot is one of my favorite
+ films and with Will Smith being one of my favorite actors (and
+ rapper, don't @ me), his home workout scene[3] solidified the body
+ type I want to achieve. My dad was in the Army and jogged
+ shirtless in way too short shorts that were tight so you *know* he
+ was fit. Physical fitness also improves mental health and mood so
+ *why not* delve into this?
+
+ 6. Fluency in Japanese
+
+ A couple things from my high school years influenced my desire to
+ visit Japan and absorb the culture.
+
+ - Anime: Samurai Champloo, Tenchi Muyo, Yuyu Hakusho, Dragonball
+ Z, Rockman.EXE, Ghost in the Shell: Stand Alone Complex,
+ Cowboy Bebop
+ - Games: Megaman Battle Network
+ - Music: Samurai Champloo and GITS:SAC OSTs
+
+ I often watched fan-subbed versions of anime when they weren't
+ officially available in English (sometimes for *years*). Every now
+ and then I would think about learning Japanese so I could skip
+ over all that and well, something else was always more
+ "important". In hindsight, it'd be easier to learn then due to
+ better brain elasticity but my work ethic/dedication/diligence is
+ stronger now.
+
+ Fun fact! I learned how to use chopsticks from watching the
+ Rockman.EXE anime. I also learned a couple phrases like, "Roger
+ that" (Batou from Ghost in the Shell says that a *lot* to Major),
+ "Cool/Awesome", "What?!", "Excuse me", "Damn you", and so on. Most
+ anime l̶o̶v̶e̶r̶s̶ connoisseurs know these phrases too.
+
+ 7. Hardware Product
+
+ I think I'm pretty good with software but *hardware* is something
+ I have zero knowledge about. I own probably every Raspberry Pi
+ that has been released thus far and have done NOTHING with them.
+ At ALL. For me to really get into something I need to have an
+ ambitious goal. Creating functioning kimoyo beads is definitely
+ ambitious and would require sourcing research and probably
+ microcontroller programming. I just made that up, not sure if
+ that's necessary but that goes to show that I don't know what I
+ don't know. What I learn along the way is gonna open up so many
+ more mental pathways and that excites me.
+
+ 8. Home Ownership
+
+ Ownership is something that is becoming increasingly important to
+ me as the years go on. Having a landlord absolves you of certain
+ responsibilities but you are also not the master of your domain.
+ In high school I used to daydream about having a custom home built
+ (and recently I learned of a startup[4] in that space). I would
+ like my kids to have a "childhood home" to grow up in, move out
+ of, and visit.
+
+ 9. Media Network
+
+ Y'know that space novel series I mentioned above? Over the years
+ it has evolved into something that spans many creative
+ disciplines. 2000s-era Toonami is what I have in mind for this
+ network. A series of shows with space-centric idents between them.
+ Video content is expensive and time-consuming to create so
+ initially the network would have the music I create on shuffle
+ (essentially) with generative visuals. Naturally, having a record
+ label and publishing house under this umbrella makes sense and
+ would fund the content creation. What if it was part incubator?
+ Seems like a great way to curate content for licensing. HMM.
+
+ 10. Musician
+
+ When I was actively making music I did so under a number of
+ aliases and in different genres, namely, rap/hip-hop and
+ house/lounge with some experimental EPs. The rap content was
+ semi-conscious, braggadocious, and space-centric. The lounge
+ content was mostly instrumental but when there were lyrics I
+ focused on topics of love and longing. I made my own beats and
+ attempted to make them sound mastered but uh, to my ears now they
+ sound kinda terrible.
+
+ My DAW of choice was Acid Pro, which is a Windows-exclusive
+ application. When I entered the web industry full-time I
+ transitioned to macOS and haven't looked back. Acid Pro is still
+ in active development and the latest features are *incredible* but
+ sadly (for me), it remains Windows-exclusive. I could always learn
+ how to use another DAW but every one I've tried since just don't
+ *feel* right so a custom PC build is in my future.
+
+ 11. Podcast
+
+ While working at the flagship Converse store in Boston many years
+ ago, a middle-aged woman followed me around the store asking
+ questions about virtually anything; just to hear me speak. She
+ said I had a nice radio voice and that's when I knew a rap career
+ could work for me. Can you imagine?
+
+ > "Boy, his lyrics are hot *garBAGE* but his voice is smooth AF!"
+
+ I like making money so that's why I didn't pursue rap as strongly
+ as web design.
+
+ Anyhoo, I get into fascinating discussions with friends and family
+ and some of those conversations would make for excellent podcast
+ content. I have a dope name in mind for it too, all I need is a
+ home office again. Because my interests are so varied my podcast
+ would probably be in the "lifestyle" category. Gaming, design,
+ technology, animation, Blackness, &c; I'm passionate about a lot
+ of things. I'd make good use of the drum machine I currently have
+ in a box as a soundboard.
+
+ 12. Revenue Generating Businesses
+
+ I come from an entrepreneurial family and I have *way* too many
+ side projects to not have any of them generating income. Then
+ again, all of them are in alpha/beta status and in varying states
+ of neglect. An immediate change I am making in the new year is
+ seeing my projects to completion or out of test status. One of my
+ services has been in operation and virtually unchanged for more
+ than two years. It's amazing I was able to hack together something
+ that still works, haha! It certainly *feels* like hacks compared
+ to my knowledge now.
+
+ *SIGH*
+
+ The struggle of a creative. Everything you ever made is absolute
+ trash almost immediately, no matter how much time you spent on it
+ before releasing it onto the world.
+
+ 13. Teacher
+
+ I like sharing what I know, and figuring out how to distill high
+ level concepts to easily understandable concepts is an interesting
+ challenge. About a month ago I had a dream where I was teaching
+ middle-/high-school kids about web development. And they were
+ listening! Seems to bode well for the future. In terms of industry
+ titles, I could be considered a senior front-end/ux developer and
+ the next step up is managerial. I just call myself an architech;
+ someone who designs and builds technology (there's no ego tied to
+ it and is a better descriptor for me). It'd be nice to have a
+ mentor in 2020 though, I've been teaching myself everything I know
+ since the recession of '08. 👨🏾‍🦳
+
+ FIN
+
+ The beautiful thing about the Internet is that it has democratized
+ a *lot* of industries so I *could* complete several things on my
+ list within the next year no problem…well, the only problem being
+ me half-assing things just to say I did them. Barring that, I will
+ seriously attempt to accomplish everything within the decade. The
+ main trait I lack is *discipline* and it will be difficult to
+ instill greater levels of accountability into myself. 😥 But
+ not impossible!
+
+ The other benefit of being in my 30s is having the financial means
+ to invest a bit more into my ventures. With a decade of experience
+ in the web space I can fetch a pretty good salary and put
+ non-trivial amounts of money away for more ambitious projects.
+
+ What a ride life has been thus far. A decade ago I had no kids and
+ could barely code my way out of a paper bag. The services and
+ sites I've created in that time since were mere thoughts scribbled
+ in a notebook on my lunch break. Wild! I can only imagine what my
+ 2040 blog post will contain. 🕸
+
+References
+
+ [1] <https://standardnotes.org>
+ [2] <https://idioms.thefreedictionary.com/stick+to+my+guns>
+ [3] <https://www.youtube.com/watch?v=Uv83ZKIZSoI>
+ [4] <https://www.homebound.com>
diff --git a/memos/WM-045.txt b/memos/WM-045.txt
new file mode 100644
index 0000000..456da18
--- /dev/null
+++ b/memos/WM-045.txt
@@ -0,0 +1,247 @@
+
+
+
+
+
+
+
+Document: WM-045 P. Webb
+Category: Tutorial 2020.01.28
+
+ Migrating from MongoDB to RethinkDB
+
+Abstract
+
+ Thank me later
+
+Body
+
+ RethinkDB, seemingly on life support for quite some time, is seeing a
+ revival[1] of sorts. As such, I thought it prudent to make available
+ evergreen content for my favorite database these days. If you are
+ interested in trying RethinkDB you can check out these[2] two[3]
+ tutorials (my guide will not cover installation or setup).
+
+ 1. Preparing MongoDB exports
+
+ ```sh
+ # Command
+ mongoexport --port PORT_NUMBER --db DATABASE_NAME --collection COLLECTION_NAME --out COLLECTION_NAME-`date "+%Y-%m-%d"`.json --pretty --jsonArray
+
+ # Example
+ mongoexport --port 98765 --db dawebb --collection users --out users-`date "+%Y-%m-%d"`.json --pretty --jsonArray
+ ```
+
+ There's a bit to unpack here so I'll break it down. Keep in mind
+ that all the parameters yelling at you are *placeholders* (for you
+ to replace with your own parameters).
+
+ Actually, the placeholders are self-explanatory but the second
+ half of the command is interesting.
+
+ ```COLLECTION_NAME-`date "+%Y-%m-%d"`.json``` makes it so the
+ exported collection looks like `users-2020-01-24.json`, with the
+ date being whenever you ran the above command. Super nifty for
+ backups too.
+
+ The `--pretty` flag isn't necessary for the import into RethinkDB
+ to work, it's for *you* to inspect the export for any reason.
+
+ The last flag[4], `--jsonArray`, is the most important. For some
+ reason, MongoDB exports each item in a collection as its own
+ object *not* separated by commas. Maybe MongoDB's import process
+ doesn't choke on malformed JSON but everything else does.
+ `--jsonArray` puts the contents of the export into a single JSON
+ array. Like you'd expect by default…maybe that's just me.
+
+ NOTE: `--out` is the destination path so if you haven't prefaced
+ ```COLLECTION_NAME-`date "+%Y-%m-%d"`.json``` with a path, the
+ export will be in your home directory.
+
+ Anyhoo once you've exported the collections you care about, SFTP
+ into that server to grab them and place them on your Desktop so
+ you don't have a brain fart and forget where you put them
+ moments later.
+
+ 2. Migrating, phase 01
+
+ MongoDB comes with some oddities that you may not want in your new
+ database. Notably, how it deals with IDs. Here's an example:
+
+ ```json
+ {
+ "_id": {
+ "$oid": "6bf9b676c24869077c37f61e"
+ },
+ "admin": true,
+ "dashboard": [],
+ "language": "en_US",
+ "loginMethod": "link",
+ "nameFirst": "",
+ "nameLast": "",
+ "plan": "free",
+ "summaries": [],
+ "timezone": "gmt-05-02",
+ "verified": true,
+ "email": "user@domain.tld",
+ "__v": 0
+ }
+ ```
+
+ In RethinkDB IDs are simply `id` and you have no need for `__v` so
+ you probably don't want these values in your shiny new database.
+ Also, you may have decided to use this migration period switch up
+ your schema. Combine `nameFirst` with `nameLast`? Drop `plan`?
+ Update `timzeone`? Replace `createdAt` with `created`? Regardless,
+ you're gonna need to do a bit of legwork to clean your
+ MongoDB export(s).
+
+ The entire script I use is hosted here[5] but I'll point out some
+ relevant pieces.
+
+ If you have any fields with dates/milliseconds, your import will
+ fail unless you wrap those fields in `new Date` like so:
+
+ ```json
+ …,
+ timestamp: new Date(timestamp),
+ …,
+ ```
+
+ To reuse the IDs that were generated in MongoDB for usage in
+ RethinkDB, you're gonna need to do something like this:
+
+ ```json
+ …,
+ id: record._id["$oid"],
+ …,
+ ```
+
+ You'll also need to make sure to explicity select the fields you
+ want to transfer into your new export. The gist linked above
+ should answer remaining questions you may have.
+
+ 3. Importing into RethinkDB
+
+ Even though you've already installed RethinkDB, you need to
+ install the Python driver[6] as well (for importing functionality,
+ at least I had to do this for macOS).
+
+ Also, make sure you are importing your newly processed/migrated
+ data into RethinkDB, not the original nonsense from your MongoDB
+ export (unless of course, that's your plan).
+
+ ```sh
+ # Command
+ rethinkdb import -f PATH_TO_PROCESSED_EXPORT_FILE --table DATABASE.TABLE -c CONNECTION_URL --password-file PASSWORD_FILE --force
+
+ # Example
+ rethinkdb import -f ~/Desktop/migrated/users-2020-01-24.json --table dawebb.users -c localhost:98765 --password-file ~/Desktop/rethinkpass.txt --force
+ ```
+
+ If you don't have a password on your RethinkDB database, you can
+ safely omit the `--password-file` flag. Otherwise, make sure the
+ password file only contains the password. If your IDE
+ automatically generates new lines in files, just create the
+ password file with `nano`.
+
+ Make sure you run the above command while RethinkDB is running and
+ you'll see freshly created tables successfully created.
+
+ 4. Migrating, phase 02
+
+ Alright, we're almost at the finish line!
+
+ One of the neat things about RethinkDB (and a feature that
+ convinced me to make the jump) is its Data Explorer. It's a UI
+ that allows you to manipulate or check out your tables. There are
+ just two remaining things we need to do and they're quick and
+ easy: 1) set up indexes for our tables and 2) update time-based
+ data to a format RethinkDB likes.
+
+ Visit `http://localhost:8080` (default port, unless you changed
+ it) and click on "Data Explorer" in the header. In the text field
+ you'll be able to perform queries using JavaScript.
+
+ 4.1. Setting up indexes
+
+ By default `id` is an index but you may want more. Indexes are for
+ fields with unique values so it's easy to think of which field(s)
+ would be suitable.
+
+ Sometimes, only the ID would be unique and that's fine.
+
+ ```js
+ // Command
+ r.db("DATABASE_NAME").table("TABLE_NAME").index_create("FIELD_WITH_UNIQUE_VALUE");
+
+ // Examples
+ r.db("dawebb").table("users").index_create("email");
+ r.db("dawebb").table("posts").index_create("slug");
+ ```
+
+ Now let's update our time-based fields:
+
+ ```js
+ // Command
+ r.db("DATABASE_NAME").table("TABLE_NAME").update({
+ created: r.ISO8601(r.row("created")),
+ updated: r.ISO8601(r.row("updated"))
+ });
+
+ // Examples
+ r.db("dawebb").table("users").update({
+ created: r.ISO8601(r.row("created")),
+ updated: r.ISO8601(r.row("updated"))
+ });
+
+ r.db("dawebb").table("visits").update({
+ timestamp: r.ISO8601(r.row("timestamp"))
+ });
+ ```
+
+ FIN
+
+ And there you have it! A super easy guide to move from MongoDB to
+ RethinkDB. I've been using RethinkDB for several months now and I
+ am way happier than I was with MongoDB. While super easy to get
+ into, once you get in too deep it becomes an exercise in
+ frustration to find solutions to ambiguous errors and the MongoDB
+ docs are not user-friendly.
+
+ Contrast that with RethinkDB's Data Explorer, clear error
+ messages, and clean documentation and it's not difficult to
+ imagine why I'd make the switch. 🕸
+
+ P.S. New year, new projects[7], and now I feel like I need a new
+ design for this blog. And then I remembered that first I need to
+ create a personal API[8] so this blog can just become the
+ presentation layer for the content.
+
+ **2020.01.30 update**
+
+ > Another reason to migrate is the license of MongoDB: SSPL vs.
+ > Apache 2 of RethinkDB.
+ > — af[9]
+
+ For others who may not know what SSPL[10] entails (like me until I
+ read the linked post):
+
+ Basically, SSPL means one cannot offer MongoDB as a hosted
+ service. That makes sense from their end as they offer hosting.
+ However, it's a bit of a punk move because they are preventing
+ potential competition from forcing them to improve
+ their product. 🕸
+
+References
+
+ [1] <https://rethinkdb.com/blog/2.4.0-release>
+ [2] <https://pusher.com/tutorials/live-node-rethinkdb>
+ [3] <https://www.pluralsight.com/guides/a-practical-introduction-to-rethinkdb>
+ [4] <https://docs.mongodb.com/manual/reference/program/mongoexport/#cmdoption-mongoexport-jsonarray>
+ [5] <https://gist.github.com/NetOperatorWibby/5084bf5c64306093e067fc43cfa4fcdb>
+ [6] <https://rethinkdb.com/docs/install-drivers/python>
+ [7] <https://socii.network/NetOpWibby/status/e3HWCaoqTZYzZvZ47RXfp>
+ [8] </WM-042>
+ [9] <https://lobste.rs/u/af>
+ [10] <https://lukasatkinson.de/2019/mongodb-no-longer-seeks-osi-approval-for-sspl>
diff --git a/memos/WM-046.txt b/memos/WM-046.txt
new file mode 100644
index 0000000..3dc9308
--- /dev/null
+++ b/memos/WM-046.txt
@@ -0,0 +1,176 @@
+
+
+
+
+
+
+
+Document: WM-046 P. Webb
+Category: Process 2020.02.27
+
+ In favor of small modules and plumbing
+
+Abstract
+
+ Don't you want a beautiful chest of drawers?
+
+Body
+
+ In the JavaScript/Node.js community there have been fiery debates
+ over whether publishing super-focused modules to npm is a positive
+ thing or not. Installing a module that consists of maybe 50 lines of
+ code or so but does a specific thing you need *well* is a good thing.
+ No need to copy/paste the same lines of code in all of your projects.
+ Then again, does publishing such modules pollute the world's most
+ popular JavaScript package manager and snatch awesome package names
+ away from multi-faceted modules? As with most things, it boils down
+ to *perspective*. This post examines how I used to be of the mindset
+ that publishing a plethora of "focused" modules is a waste of time
+ but now think is a fantastic idea.
+
+ 1. The `left-pad` incident, &c
+
+ Azer Koçulu, the developer of a module called `left-pad`,
+ unpublished[1] this and the other 200+ modules he wrote from npm.
+ It was a retaliatory move due to the fact that npm (the company)
+ reverted ownership of another module of his, `kik`, to a company
+ of the same name. To quote[2] the man himself:
+
+ > This situation made me realize that NPM is someone's private
+ > land where corporate is more powerful than the people, and I do
+ > open source because, Power To The People.
+
+ To be honest, I don't blame him. The `kik` situation was rather
+ messed up in my opinion but when there are patent trolls involved,
+ SOMEONE is getting fucked (see npm's response[3]). Unfortunately,
+ Azer's actions broke a significant amount of larger modules that
+ depended upon the existence of `left-pad` and the Internet seemed
+ to quite literally blow up for a day. Pundits published think
+ pieces to Medium, Twitter threads proliferated, and
+ insults/disdain toward Azer flew online for days. I'll admit, I
+ got caught up in the frenzy and did a lot of SMDH[4] towards Azer,
+ npm, and kik.
+
+ At the time I was fully content with finding small utility modules
+ like `left-pad` for inclusion within my projects and rather than
+ installing them, I opted to extract the source code and place them
+ in my projects directly. I did this for a few reasons:
+
+ 1. Prevent potential fallout from an unpublish from happening
+ to me.
+ 2. Protection against a module creator giving up ownership to a
+ spammer/hacker.
+ 3. Quality control. Seriously, there is almost too much code out
+ there that mixes tabs/spaces, single/double quotes,
+ semi-colon/no semi-colon, snake/camel casing, and so on. Often
+ in the same damn file! Gross.
+
+ This is not to say that my own code is flawless. I'll look back on
+ my old code and think it's shit but at least it's
+ *consistent* shit.
+
+ 2. Turning Point
+
+ A couple weeks ago I was returning to work on an API rewrite in
+ progress and something would not compile. I was befuddled because
+ I have several API projects that more or less share the same core.
+ That's when I thought, "Why *aren't* most of the these utility
+ functions their own modules?" This question stuck in my mind as I
+ browsed the web and I remembered to look up a rather prolific
+ JavaScript developer by the name of Sindre Sorhus. The man has
+ over one THOUSAND modules published on npm and all of them are
+ small and/or focused (does one thing well, no bells and whistles).
+ Here[5] is his rationale for creating them:
+
+ > You make small focused modules for reusability and to make it
+ > possible to build larger more advanced things that are easier to
+ > reason about.
+
+ This made perfect sense to me and I had a chat with Jesse[6] about
+ it. He'd the same thought a year prior and started working on
+ publishing modules from the code he was constantly copy/pasting
+ between projects. Jesse's affirmation, coupled with Sindre's node
+ module boilerplate[7] and this tutorial[8] on creating TypeScript
+ libraries encouraged me to get started with publishing more
+ focused modules than I had previously.
+
+ I am in the process of (hopefully) obtaining ownership of an
+ unused (and empty) scope/organization on npm and once that
+ happens, the nine focused modules I've written since my chat with
+ Jesse will be live (these modules are currently published on my
+ personal package registry). I see a couple advantages to
+ scoping[9] one's modules:
+
+ - Any cool name you can think of for your module is available
+ - At a glance, anyone can tell (roughly) who is responsible for
+ the module
+ - Reputation building - become known for creating useful modules
+ - Doesn't "pollute" the npm namespace since everything's under an
+ umbrella, so to speak
+
+ Some *disadvantages* to this approach:
+
+ - Developers have to type extra to install your module
+ - `npm i @yourScope/packageName` versus
+ - `npm i packageName`
+ - If you have a truly unique package name and it's available,
+ you'd be a fool to not take it
+
+ It's basically like choosing a gTLD over a classic TLD. If
+ `webb.com` was available, I would have purchased that domain. It
+ was not, so I purchased `webb.page`. These are both great but I
+ was lucky that mine is a neat domain hack.
+
+ 3. The Bigger Picture
+
+ There's another reason I've decided to go through with all this.
+ To quote Steve Jobs (emphasis mine):
+
+ > When you're a carpenter making a beautiful chest of drawers,
+ > you're not going to use a piece of plywood on the back, even
+ > though it faces the wall and nobody will ever see it. You'll
+ > know it's there, so you're going to use a beautiful piece of
+ > wood on the back. *For you to sleep well at night, the
+ > aesthetic, the quality, has to be carried all the way through.*
+
+ You remember that API project I mentioned earlier? I could not
+ escape the nagging suspicion that my project could be, nay, FEEL a
+ helluva lot better if I knew the components used to create it were
+ stronger. One way to ensure that is to write tests. Another way is
+ to use a typed language…like TypeScript. And, that's exactly what
+ I did for every module I've created leading up to this post. I
+ suppose I just made the case for writing tests, period. 🤔
+
+ Regarding Jobs' quote, here's another way to look at it: the most
+ beautiful hotel in the world wouldn't feel like such if all the
+ toilets overflowed when flushed. I'm a serial creator but I've
+ grown to enjoy working on the plumbing. 🕸
+
+ 4. &c
+
+ - My personal package registry is currently running on
+ Verdaccio[10] but I'm thinking of checking out Entropic[11].
+ We'll see.
+ - There's an awesome[12] list of other focused modules to get
+ inspired by or use in your own projects.
+ - This new love of plumbing is at odds with my impatience to get
+ at least three products I have out of beta (and to make money
+ from them). The end goal is for these products to be as
+ automated and fault-tolerant as possible so I can focus on
+ customer experience. No amount of code can replace the
+ human connection.
+
+References
+
+ [1] <https://github.com/left-pad/left-pad/issues/4>
+ [2] <https://kodfabrik.com/journal/i-ve-just-liberated-my-modules>
+ [3] <https://blog.npmjs.org/post/141577284765/kik-left-pad-and-npm>
+ [4] <https://www.urbandictionary.com/define.php?term=SMDH>
+ [5] <https://github.com/sindresorhus/ama/issues/10#issuecomment-117766328>
+ [6] <https://jesseyoungblood.com>
+ [7] <https://github.com/sindresorhus/node-module-boilerplate>
+ [8] <https://www.tsmean.com/articles/how-to-write-a-typescript-library>
+ [9] <https://docs.npmjs.com/misc/scope>
+ [10] <https://github.com/verdaccio/verdaccio>
+ [11] <https://github.com/entropic-dev/entropic>
+ [12] <https://github.com/parro-it/awesome-micro-npm-packages>
diff --git a/memos/WM-047.txt b/memos/WM-047.txt
new file mode 100644
index 0000000..a3d69ea
--- /dev/null
+++ b/memos/WM-047.txt
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+Document: WM-047 P. Webb
+Category: Announcement 2021.01.03
+
+ New year, who dis?
+
+Abstract
+
+ Time is a flat circle
+
+Body
+
+ I'm not going to mention last year in number, I don't even want to
+ hear people with perfect vision talk about their eyes. We're in a new
+ year, Drumpf is going to be out of office in less than three weeks,
+ and I have a new design for my blog…more like, LACK of design.
+
+ 1. Why
+
+ I published a grand total of two posts last year. TWO. I was busy
+ working on personal projects, dealing with this general malaise of
+ uncertainty, and didn't feel like dealing with the annoying
+ process of updating my blog. Yuk. As a result though, I have
+ several half-finished posts I can/will upload this year since my
+ blog setup is extremely pared down.
+
+ Being an architech (a designer who codes and vice-versa) is hella
+ annoying. I am displeased by my design AND my code after a period
+ of time, and then I detest it far too much. Maybe my experience
+ and age has brought me to the point of realizing I don't need the
+ latest fancy UI ~~blemishes~~ features and tooling to get
+ something online. I *may* update this to support TypeScript and
+ `import`s because I quite enjoy that.
+
+ This blog is also missing analytics. They were never on the
+ front-end, but in the server. One of my many tasks this year is to
+ overhaul my analytics platform[1] to make it robust enough to
+ charge money for.
+
+ 2. What (now)
+
+ I think adding automated deployments would be a nice
+ quality-of-life feature and would definitely encourage me to write
+ more. Currently, I have to upload a new text file to my server and
+ refresh the pm2 job. In any event, this blog is the first step in
+ realizing my personalOS[2] concept in concrete forms and I suppose
+ this is the year to document everything as I go through it.
+
+ You can check out the previous[3] incarnation of this blog if
+ you're curious to see what it was like.
+
+ I think 2021 is gonna be big for data portability and flat files
+ are the easiest way to do it. The fact that this blog is just a
+ single JavaScript file and a folder full of text files (okay AND
+ a couple Node.js modules 😒) is kind of neat…actually, that
+ wouldn't be a bad idea for socii[4] to implement. Maybe I'll
+ relaunch that soon. We'll see. 🕸
+
+References
+
+ [1] <https://chew.sh>
+ [2] </WM-042>
+ [3] <https://github.com/NetOperatorWibby/blog/tree/2020>
+ [4] <https://socii.network>
diff --git a/memos/WM-048.txt b/memos/WM-048.txt
new file mode 100644
index 0000000..8eba135
--- /dev/null
+++ b/memos/WM-048.txt
@@ -0,0 +1,169 @@
+
+
+
+
+
+
+
+Document: WM-048 P. Webb
+Category: Internet 2021.01.15
+
+ The Internet is (not) broken
+
+Abstract
+
+ Resistence is ~~futile~~ effectual
+
+Body
+
+ You will find no shortage of "tweet storms" or articles decrying the
+ current state of the Internet using adjectives like "doomed",
+ "broken", "ruined", &c. While I tend to agree with many of the points
+ shared in such posts, I stop short of feeling defeated. Maybe it is
+ because I am an optimist and I recognize my own power to create what
+ I wish to see. Maybe it is my decade-plus experience and work within
+ the tech industry and absorbing stories of those older than I who saw
+ success/failure in the dotcom boom. Whatever it is, a few things are
+ made clear to me:
+
+ 1. People are not going down without a fight. The work happening in
+ the decentralization and cryptocurrency fields are proof of this.
+ Will these avenues catch on? Certainly not immediately, maybe even
+ ever. However, the exercise of creating/discovering solutions is
+ worthwhile regardless, IMHO (failures lead to advancement of new,
+ potentially better ideas).
+ 2. These big evil tech companies? They did not start out that way.
+ "Mo' money mo' problems," shout-out to Biggie Smalls. If money
+ really is the root of all/most evil, maybe every company should
+ have an in-house ethics committee that is actually empowered to DO
+ THEIR JOB (Dr Timnit Gebru and countless other people of color in
+ the ethics space know this all too well).
+ 3. Baseline technical IQ is rising — this means our bumbling
+ politicians who have immense difficulty deciphering non-answers
+ from facetious tech CEOs wearing shit-eating grins will finally
+ see what we see and shut that shit down. Well, AOC does not seem
+ to have a problem grasping technical concepts…she is also not 70+
+ years old so there is that.
+
+ Before continuing, it would be useful to recap what ails the Internet
+ as seen by enthusiasts of this wonderous platform. Rather than
+ enumerate, I will share a list off the top of my head:
+
+ - Too much of today's Internet is dependent upon a handful of
+ tech companies.
+ - Most of "FAANG": Facebook, Apple, Amazon, Netflix, Google
+ - All these companies are based in the United States, and various law
+ enforcement agencies routinely subpoena (order) said companies to
+ hand over data in the interest of "national security." Half-truths
+ are technically the truth, right?
+ - The data brokerage economy, which is a fancy way to say your
+ personal data is sold and traded around the world for cheap, was
+ enabled by Facebook, Google, and a LOT of smaller companies you
+ have never heard the name of (but the investors you follow on
+ Twitter? Oh, *they* know).
+ - In all fairness you *did* agree to the terms and conditions of
+ these services you use so they can *legally* do whatever they
+ want with the data you give them…but does that make it right?
+ Ethics apparently has no place in law.
+
+ For fans of capitalism (like myself), this seems like
+ not-that-big-a-deal in the grand scheme of things. The best companies
+ became successful and just pivoted to what makes the most money.
+ Maximizing profits while keeping margins low? That's Business 101,
+ babeee! Pull yourself up by the bootstraps! No pain no gain! Working
+ hard or hardly working? ARE YA WINNIN' SON?!
+
+ But I digress.
+
+ Any time a major service like Google Analytics, YouTube, or Amazon
+ Web Services (AWS) is down, a couple technical people get on Twitter
+ and say "SEEEEE?! We shouldn't rely on them!" but the fact of the
+ matter is, software is created by humans, humans are fallible, and
+ shit happens. And, servers falling over? Nobody wants to deal with
+ that, it's annoying! For those of us who aren't technical enough to
+ perform DevOps, the idea of managing a server (let alone setting one
+ *up*) is intimidating at best. So…the alternative is to quit
+ using/paying for one service in favor of a less "evil" or problematic
+ one. For example, the people who leave their grandparents behind on
+ Facebook in favor of Twitter. It is alarming that Twitter only
+ *started* to reign in the President's fear-/hate-mongering and lies
+ in the weeks leading up to the election…not one time prior to 2020.
+ 10 days left of the presidency he's managed to hold onto and that's
+ when Twitter FINALLY finds the guts to boot him off their
+ platform. Anyhoo…
+
+ Where do we go from here?
+
+ The pessimists of the tech crowd will say there's no point in
+ creating alternatives.
+
+ - "No one will sign up for your service, what makes it better
+ than ⟨MAJOR SERVICE⟩?"
+ - "⟨MAJOR SERVICE⟩ has existed for years, you're not just gonna eat
+ their lunch."
+ - "Normies want free, they won't pay for your dumb idea"
+ - "How are you gonna handle moderation, if ⟨MAJOR SERVICE⟩ can't
+ do it?"
+
+ I'm old enough to remember what is commonly referred to as the "Wild
+ West" of the Internet. Internet access speeds were excruciatingly
+ slow by today's standards and web browsers were not capable of what
+ we take for granted now. Developers favored XML over HTML! Because
+ the Internet was still fairly new, there were no established norms
+ nor preconceptions. "Data harvesting" sounded more like a malicious
+ act some corporation in a cyberpunk novel would engage in. But, when
+ people wish the Internet was back to how it used to be, I believe
+ they are (usually) talking about the *feeling* of it, rather than the
+ limited functionality (interestingly, Gopher has seen a resurgence
+ lately along with Gemini).
+
+ When I was in middle school in the year 2000 I got an account on
+ homestead.com and was able to play around with the free website space
+ they gave me. I downloaded a website theme from some place and
+ learned CSS and HTML by tweaking parameters in Notepad and
+ re-uploading the changed files. As archaic as that process was, it
+ blew my mind that I could create a Megaman Battle Network fan-site
+ and have it reachable by a URL to show my friends at school in the
+ computer lab. As I got older I wanted a site without ads and more
+ storage space so I moved onto mediatemple and continued my web
+ development explorations there.
+
+ This level of access seems to be gone these days. Services are still
+ free, of course, but mostly services where you can be siloed in. This
+ is how brand recognition/loyalty occurs. Apple, Microsoft, and Google
+ are not giving schools free laptops and tablets out of (just)
+ kindness, it is a long-term play that usually pans out. Bah, I feel
+ pessimism settling in so onto solutions, as I see them.
+
+ YOU CANNOT PUT THE GENIE BACK IN THE BOTTLE
+
+ Tech companies have tasted the delicious nectar of wealth that is
+ user data and it is the gift that keeps on giving. Well, maybe it
+ should not be called a gift. The companies are spending investor
+ dollars to pay their employees to build features that will get you to
+ sign up and use their product in exchange for your usage habits and
+ keywords within your memes and online rants. You…well, *they* get
+ what they pay for. You get a nice park to play in and garden to eat
+ from while the wolves watch from behind that tree over there. To
+ reduce our reliance on said companies, we need new ones with our best
+ interests at heart to tackle:
+
+ - analytics
+ - blogs and free websites
+ - collaborative documents
+ - DNS and domains
+ - email
+ - search
+ - social
+
+ The easiest way to handle free services is to offer a more capable
+ paid service alongside it. Google currently has a monopoly over most
+ of this list and best believe, they want *more*. Poor Facebook just
+ cannot stop being creepy long enough for people to foolishly trust
+ them again and that is crushing their dreams of becoming
+ American WeChat.
+
+ As for me? Well, I am just one guy on the Internet with a voice and a
+ plan for every item on this list. I am also not afraid of not knowing
+ what I do not know so 2021 should be an informative year for me (us,
+ if you want to follow along). Watch this space. 🕸
diff --git a/memos/WM-049.txt b/memos/WM-049.txt
new file mode 100644
index 0000000..9d6ed62
--- /dev/null
+++ b/memos/WM-049.txt
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+Document: WM-049 P. Webb
+Category: Project 2021.02.15
+
+ An update on socii
+
+Abstract
+
+ Yeah, I'm still working on this thing.
+
+Body
+
+ Social network fatigue is at an all-time high. Last year leading into
+ the first couple weeks of this year resulted in me "doomscrolling"
+ more than I'd like and presumably like you, I've lacked motivation
+ after spending hours doing that. Despite the tone of this intro,
+ socii is not dead. Quite the contrary, development on 2.0 has been
+ underway for a while and unlike last year I'm seeing 2021 with 20/20
+ vision. Let me explain.
+
+ It is my belief that Big Social lacks the resolve and moral tack to
+ do what is objectively correct…even in the face of **overwhelming
+ evidence** that refusing to take action could result in
+ catastrophic events.
+
+ Corporations are not people and must move slowly by the very nature
+ of massive companies. A raft turns a lot faster than a sailboat or
+ freight-liner after all, right? Well, Big Social has shown time and
+ time again their ability to move swiftly when it serves financial
+ interest to do so. I don't buy the oft-given example I started this
+ paragraph with, it's clearly a load of excrement.
+
+ Here is how socii is shaping up:
+
+ 1. It is a paid service with a decent free tier.
+ 2. There is a strict anti-harassment policy that WILL be exercised.
+ 3. Communities are private by default and come with extensive
+ moderation tools.
+ 4. Remember customization? You are unique, your profile will act like
+ it (if you want).
+
+ Per points 2 and 3, freedom of speech does NOT mean freedom of
+ *reach*. This nuance is clearly lost on a subset of the American
+ populace so here it is, upfront. Radicalization and violence stemming
+ from disinformation has no place on socii. Or anywhere else, it
+ seems. Anyhoo…
+
+ You may have noticed that "socii" lost its capitalization. It
+ occurred to me that too often, services try to get ahead of
+ themselves and attempt becoming brand-like before their service takes
+ off. Startup wisdom says to "become a tribe" and your fans will buy
+ anything you sell. But, how is your service more important than the
+ people you are serving? How are you an "ecosystem" when your only
+ claim to fame is the Product Hunt hype machine? Too many services
+ with that mindset are mere tools that will be acqui-hired into a
+ bigger company and be shut down internally (or just shut down).
+
+ You wouldn't capitalize "hammer" or "scissors" (unless you started a
+ sentence with them). In the same vein, socii is a tool. socii is not
+ meant to be the forefront of your mind, your life. Just…a place to
+ connect with a community (or communities!) that you care about and
+ that cares about you.
+
+ Until sometime last year I'd been coding socii in the open because I
+ bought into the MVP (minimal viable product) hoopla the tech
+ community spouts. As a result, no one used it because it lacked
+ features people expected or wanted. Turns out, if something is too
+ *minimal* it ends up not being *viable* and well, no one will use
+ your *product*.
+
+ New year, new moves.
+
+ 1.0 of socii is closed to new signups as work continues on 2.0. I may
+ occasionally share updates on my Twitter @NetopWibby[1] so follow me
+ there if you don't mind sporadic updates. For those of you on this
+ mailing list that already had an account on socii, y'all are
+ grandfathered in. Something special may be waiting in your account
+ once 2.0 is ready (please remind me).
+
+ Stay tuned. 🕸
+
+ P.S. If you were subscribed to the feed before this point, please
+ delete and re-add it! I've added Markdown support to the feed so that
+ you get formatting.
+
+References
+
+ [1] <https://twitter.com/NetOpWibby>
diff --git a/memos/WM-050.txt b/memos/WM-050.txt
new file mode 100644
index 0000000..0c7a384
--- /dev/null
+++ b/memos/WM-050.txt
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
+Document: WM-050 P. Webb
+Category: Tutorial 2021.05.15
+
+ How to setup a Handshake site with Caddy
+
+Abstract
+
+ Easiest tutorial for adding TLS to a Handshake site, with Caddy.
+
+Body
+
+ For the uninitiated, Handshake[1] is a protocol intended to embrace
+ (and ideally extinguish) legacy DNS. If that statement scares you, it
+ makes sense. Drastic change is alarming. Yes, there is a blockchain
+ involved but we're not going to get into that. You came here because
+ you 1) have a Handshake TLD and 2) you have a site you want to use
+ on it.
+
+ Caddy[2], by default, automatically issues TLS certificates via
+ LetsEncrypt but LE is a centralized certificate authority and doesn't
+ know what Handshake is. Not to worry, we'll generate our own secure
+ certificates with OUR OWN CA (via light-ca[3])! After that we'll
+ update our Caddyfile and reload/restart the server to test and
+ finalize our changes. Easy-peasy.
+
+ For this tutorial I'll be using my TLD starbase/. Rather than make
+ the root domain resolve to a site, I'm opting to use an SLD
+ (second-level domain) instead (so, welcome.starbase in this example).
+ You should be familiar with DNS and managing servers before
+ continuing. Without further ado, let's begin!
+
+ 01. SFTP your site content to your VPS
+
+ 02. SSH into VPS and install light-ca
+ ```sh
+ curl -sL https://github.com/light-river/light-ca/releases/download/latest/light-ca.tar.gz | tar zx && sudo mv ./light-ca /usr/bin/light-ca
+ ```
+
+ 03. Create certs
+ ```sh
+ light-ca --domains "welcome.starbase"
+ ```
+
+ 04. Update Caddyfile
+ ```txt
+ welcome.starbase {
+ # This is the path to a folder on my server that holds the site code
+ root * /var/www/starbase/
+ encode gzip
+ file_server
+ # This is the path to the certs created by light-ca
+ # The paths I chose are not the defaults.
+ # Syntax: tls <path to cert.pem> <path to key.pem>
+ tls /var/custom-certs/welcome.starbase/cert.pem /var/custom-certs/welcome.starbase/key.pem
+ }
+ ```
+
+ 05. Reload Caddy and check for issues
+ ```sh
+ systemctl reload caddy
+ # If there are no issues, run next command
+ systemctl restart caddy
+ ```
+
+ 06. Finally, add A record to TLD DNS (via Namebase[4]) with VPS'
+ IP address.
+
+ I'm assuming you're using NextDNS[5], hDNS[6], or some other method
+ of natively viewing Handshake domains on your device. If so, enter
+ https://<your-site> in your favorite browser to view your
+ "hard" work.
+
+ Seriously, this was so easy. 🕸
+
+ P.S. I'm building a registry AND a registrar for my collection of
+ Handshake TLDs. If you want updates on when they launch, follow
+ @neuenet[7] and @beachfront_[8] respectively. The launch is slated
+ for end of summer.
+
+References
+
+ [1] <https://handshake.org>
+ [2] <https://caddyserver.com>
+ [3] <https://github.com/light-river/light-ca>
+ [4] <https://namebase.io>
+ [5] <https://nextdns.io>
+ [6] <https://hdns.io>
+ [7] <https://twitter.com/neuenet>
+ [8] <https://twitter.com/beachfront_>
diff --git a/memos/WM-051.txt b/memos/WM-051.txt
new file mode 100644
index 0000000..954faf7
--- /dev/null
+++ b/memos/WM-051.txt
@@ -0,0 +1,181 @@
+
+
+
+
+
+
+
+Document: WM-051 P. Webb
+Category: Handshake 2021.05.30
+
+ Being Brave: a Handshake retrospective
+
+Abstract
+
+ What a mess
+
+Body
+
+ Earlier this week (2021.05.27), Michael Michelini of SkyInclude
+ published[1] a blog post where he laid claim that "Brave is asking
+ for 3 to 3.5 million USD for a 2 year of having Handshake names to
+ work on their browser…It seems we can 'bargain' it down to 3 million
+ US dollars from the 3.5 million."
+
+ This information is not first-hand from Brave but rather "from
+ multiple sources that are high in the Handshake community."
+
+ The Handshake community is rather flat by nature so I can only
+ surmise he means 1) a group of people and 2) this group has big
+ pockets. That only leaves us with dWeb Foundation[2] and HNS Fund[3]
+ as potential sources. I won't bury the lede here. Over the last
+ couple days, Michael has continuously refused to answer direct
+ questions. He has instead relied upon proxies in the form of a link
+ to a Twitter thread[4] that supports his actions and various
+ cheerleaders in the Namebase Discord that have "seen
+ the conversations."
+
+ Those direct questions?
+
+ - Where did you get your information from?
+ - Who put you up to this?
+
+ From my perspective, if some deal was being discussed between Brave
+ and some "high" members of the community, why was Michael made privy
+ to these details? What was the motive of the participants to make
+ details of the deal public?
+
+ For his part, Brendan Eich (CEO of Brave) has rebuked the story[5]
+ and asserts the amount claimed was fake news[6].
+
+ From the Handshake Community[7] page:
+
+ > Every single person is a genuine and authorized Director of The
+ > Handshake Project. If someone has given you a document or business
+ > card representing themselves as a Director of The Handshake
+ > Project, they have full authority to represent as Director of The
+ > Handshake Project with their own personal viewpoint, So Please
+ > Treat Them Right. You, the reader, are also a Director of The
+ > Handshake Project and have equal claim on authority, action,
+ > and viewpoints.
+ >
+ > Any claims made by anyone on what Handshake does (or will do) does
+ > not necessarily have the agreement of other participants in the
+ > community and should not be seen as a definite certainty.
+
+ **As a Director of Handshake, I do not condone the actions of Michael
+ Michelini and I, quite frankly, do not trust him.** In fact, I deem
+ anything he publishes in the future as tabloid-esque bait to further
+ his own idealized position in the greater Handshake community.
+
+ To his credit, Michael published an update to the debacle he started
+ and…well, he didn't take ownership or explain himself. He instead
+ recapped the situation along with what Brendan shared on Twitter.
+ I'll take that credit back.
+
+ From his update:
+
+ > But from all of this - Brendan, the co-founder and CEO of Brave has
+ > made an amazing way to help us all deal with this
+ > awkward situation.
+
+ I don't like the framing of this. He tried to absolve himself of
+ responsibility. The situation is awkward because he made it that way.
+
+ His update also had this:
+
+ > There are groups trying to HELP the community - and some are not
+ > sure when/if/how to communicate that information to the community
+ > at large.
+
+ More bullshit, IMHO. If I'm actively working to help a protocol gain
+ traction, what reason would I have to be secretive about it? This
+ entire situation is just about browser integration. Totally not high
+ stakes at ALL. *Especially* if I have "fuck you" amounts of money.
+
+ Yesterday he claimed[8] that "so many" have asked him "to step aside
+ from the HNS community" and that he'd step down if that's what it
+ took to resolve this situation. What's our favorite
+ word? **Bullshit**.
+
+ There are three sides to every story: your side, their side, and
+ the truth.
+
+ Brendan has already shared his side, amidst the digital shit thrown
+ his way. Michael has abused his goodwill with the community to get a
+ mini army to do his dirty work. Everyone involved should feel
+ disrespected. Micahel caused this situation and the community’s trust
+ in him made us all look like petulant children. What it takes to
+ resolve this situation is to take accountability but what does he do
+ instead? Try to garner sympathy, and it actually worked!
+
+ Last bit from Michael's update:
+
+ > Sorry if I divided the community on this. I love Handshake.
+
+ If? IF?! 🤡
+
+ The amount of sympathy/support Michael is getting in the Namebase
+ Discord is baffling. Truly, my mind is boggled. It is my belief that
+ ignoring such behavior only serves to legitimize it and encourage
+ further breaches of trust.
+
+ Did we get an explicit acknowledge of what needs to be done to get
+ native Handshake resolution within Brave browser? Sure[9]. Did we
+ have to harass a CEO to get there? I think not. It is shameful that
+ someone in our community decided to implement a surreptitious
+ marketing technique of the far right to get a desired outcome, when a
+ simple ask would've sufficed. Fake news? Really?
+
+ This post has mostly been a rant but I'm not a fan of complaining
+ without at least mentioning solutions, so here's where the productive
+ part of the post comes in. What can we (you) do moving forward?
+
+ - Don't believe everything you read on the Internet. Not even this
+ post. *I* have good intentions but *you* don't know that. Luckily,
+ I have link sources below.
+ - Hold people accountable. This is tricky because the Namebase
+ Discord IS for Namebase, not Handshake directly but I dislike how
+ people have decided to give Michael a pass.
+ - Educate yourself. From the comments directed towards Brendan it's
+ clear to see that non-coders have a warped perspective on what it
+ takes to build software, much less a browser. Balking at the idea
+ that a browser maker would want, nay, EXPECT compensation for
+ ongoing work (and maintenance) to integrate a new protocol is
+ silly. Software has roadmaps and the one currency we all pay is
+ time. Be patient and while you're waiting, do some reading to gain
+ appreciation for the complexity involved.
+
+ Obviously, researching *everything* you read on the Internet is
+ impractical to do on a regular basis and hindsight is 20/20 but
+ boy…we'd have a lot less egg on our face. 🕸
+
+ P.S. Here's proof of various community members (along with myself)
+ looking for answers and finding nothing[10].
+
+ Update I: I just saw that after demanding details of the deal from
+ Brendan, Michael apologized to him and took ownership[11]. This was
+ my main sticking point. I only found this out by getting a link to
+ the Handshake DNS Discord. It would've been nice if Michael updated
+ his blog post with this information.
+
+ Update II: I responded to the apology tweet with a comment stating
+ Michael should update his blog post with that. In my view, it would
+ show closure. Apparently, that sent Michael over the deep end and he
+ refused to update his post for reasons I don't understand. The Imgur
+ link[10] has been updated with screenshots so you can see for
+ yourself without my flavor.
+
+References
+
+ [1] <https://skyinclude.com/brave>
+ [2] <https://www.decentralizedinter.net>
+ [3] <https://hnsfund.titansofdata.org>
+ [4] <https://twitter.com/R86185448/status/1398401126668464131>
+ [5] <https://twitter.com/BrendanEich/status/1398298668847943689>
+ [6] <https://twitter.com/BrendanEich/status/1398305355000541189>
+ [7] <https://handshake.org/community>
+ [8] <https://discord.com/channels/664247448469897267/664247448902041612/848384137613017139>
+ [9] <https://twitter.com/BrendanEich/status/1398420651023634434>
+ [10] <https://imgur.com/a/8uj4Qn1>
+ [11] <https://twitter.com/michelini/status/1398831662880804866>
diff --git a/memos/WM-052.txt b/memos/WM-052.txt
new file mode 100644
index 0000000..543cb03
--- /dev/null
+++ b/memos/WM-052.txt
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+Document: WM-052 P. Webb
+Category: Handshake 2021.08.05
+
+ Four years to prove ourselves
+
+Abstract
+
+ What an incredible opportunity
+
+Body
+
+ The ICA (Internet Commerce Association) recently hosted a free
+ webinar where they discussed the second round of gTLD applications
+ via ICANN. For reference, the year is 2021 at this time of writing.
+ The first and last round of gTLD applications happened in the anagram
+ for this year: 2012; nearly a **decade** ago. As noted by one of the
+ panel experts (Jeff Neuman, Jothan Frakes, Phil Buckingham, and
+ Christa Taylor were in attendance), the world was MUCH different
+ then. A notable example of such change was the mention of .crypto.
+ Apparently, it was considered but seeing as how the crypto space was
+ still in its infancy, ICANN brushed it off. Depending on who you
+ speak to today, crypto is EVERYWHERE; much to the chagrin of one of
+ my security buddies. "Crypto" as shorthand used to mean
+ "cryptography" but now it's been co-opted by cryptocurrency.
+
+ The panelists think there will be even more interest in the next
+ batch of applications, especially if ICANN reduces the cost of
+ admission. Some suggstions they discussed:
+
+ - knocking off $70,000…of the $185,000 entry price
+ - application fee floor
+ - eventual refunds from failed bids
+
+ These are decent changes but ICANN is plagued by bueracracy and the
+ snail-like pace that typically commands. An oft-repeated refrain was,
+ "Yes, they (ICANN) can move faster and implement what the community
+ wants…but WILL they?" According to someone in the chat:
+
+ > ICANN doesn't have significant numbers of registrars in underserved
+ > regions. They keep putting obstacles in the way for registrars in
+ > those regions.
+
+ And, another notable quote:
+
+ > ICANN working with community (members) requires a change
+ > in philosophy.
+
+ ICANN's current way of making decisions is obviously long and drawn
+ out and away from the public eye, until they've decided something.
+
+ As I was listening to the discussion, I couldn't help but feel that
+ Handshake handled a lot of the problems the panelists discussed.
+ Namely (hah), rolling applications and not letting other applicants
+ aware of which names you intend to bid on. When Handshake was
+ revealed to the public, a handful of names were released over the
+ course of several weeks. Also, the way you bid on names is via a
+ Vickrey-style auction. In short, Vickrey-style auctions are anonymous
+ and the amounts bid can be a mixture of a true bid and a blind bid.
+ In short, it aims to make auctions feel more fair.
+
+ The conservative estimate for the launch of the secound round of gTLD
+ applications is 2025. Four years from now. 13 years since the last
+ round. To me, this sounds a bit nutty. Insane even.
+
+ The panelists suggested that anyone looking to get their own TLD via
+ ICANN should keep their expectations in check and be realistic. It
+ takes a war chest of funds to keep going back and forth with ICANN to
+ approve your application. With that also comes an immense time
+ commitment. They expect any name to take between 4-5 years to
+ develop, but gave .music as an example that took nearly 10 years
+ to finalize.
+
+ I see opportunity here.
+
+ If you're an HNS maximalist/shill like myself, pro ENS, or a
+ combination of the two, we have four years to kick ass and develop
+ our ecosystems. Crypto took a decade to get big, we can *easily* do
+ it in half the time. We are in a unique position to not only discover
+ brilliant use cases unheard of on the legacy ‘Net, but to also bring
+ these experiences to the masses and gain that sweet traction.
+
+ Four years to show and prove. Let's get it. 🕸
diff --git a/memos/WM-053.txt b/memos/WM-053.txt
new file mode 100644
index 0000000..1defbe1
--- /dev/null
+++ b/memos/WM-053.txt
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+Document: WM-053 P. Webb
+Category: Life 2022.04.24
+
+ Things I learned from my parents
+
+Abstract
+
+ It's not all bad
+
+Body
+
+ When you're a kid, the people you look up to tend to be your own
+ parent(s)/legal guardian(s). The older you get, the more you realize
+ your parents and other adults are very much floundering, trying to
+ figure things out. As your own life experiences grow, you may look
+ back on your childhood with resentment and wonder if your parents
+ were intentional in their harm, or oblivious. I've spent far too much
+ time dwelling on the past and keeping grudges. An unfortunate truth
+ that's gotten me past that is realizing my parents most likely do not
+ remember how their actions and/or words affected me. While I'm
+ simmering over events that transpired a decade or more prior, they're
+ living their lives — watching TV, doing laundry, figuring out what to
+ eat, &c.
+
+ I know now I was willingly engaging in mental self-harm.
+
+ Yesterday, I had a bit of back-and-forth with my father about
+ COVID-19 in the family group chat. Mask mandates, vaccine
+ effectiveness, "narratives," "COVID fear messaging and marketing,"
+ the works. Needless to say, the conversation devolved into petty
+ remarks so I stopped responding (ironically, my father stated he
+ wanted respect for his views while gaslighting me for mine, but
+ I digress).
+
+ I won't lie, the conversation bothered me. It feels like I lost my
+ father to Fox News and conspiracy websites with dubious sources, one
+ of which he presented as wholly factual and apparent proof of
+ my idiocy.
+
+ My relationship with my parents have not been the best but in recent
+ years I've been trying to work through my issues with being close to
+ them for the reasons mentioned at the top of this post. But uh,
+ wow…it was relatively easy to slide back into those negative thoughts
+ I used to have. Too easy.
+
+ I awoke today, refreshed and, thinking about how I used to see my
+ parents when I was a young kid. After all, I **am** a product of
+ their teachings, intentional and otherwise.
+
+ What I learned from my father:
+
+ - It takes two people to argue (the irony is not lost on me).
+ - Ensure doors and windows are closed and locked before heading
+ to bed.
+ - There are no new problems in the world. If you have a problem,
+ someone's written a book about it.
+ - Look someone in the eye when shaking their hand.
+ - If you have something to say, be clear. Say it with your chest.
+ - Hard work and dedication is how you get things done.
+ - Being responsible is the single best trait you can have.
+ - Games are good.
+
+ What I learned from my mother:
+
+ - Don't ever let someone tell you you can't do something.
+ - To say "I'm sorry" is to say, "I'm a sorry person." "I apologize,"
+ is better.
+ - Art is good.
+ - Techno is good.
+ - Be yourself.
+
+ What I learned from both my parents:
+
+ - Parenting doesn't end just because a marriage does.
+ - No one escapes consequences.
+ - Every person in the world is trying their best with the cards
+ they're dealt.
+ - Racism sucks, is stupid, and definitely doesn't make sense.
+ Especially since Black people built this country (America).
+ - I can do anything I put my mind to.
+ - The truth shall set you free.
+
+ We are all shaped by the experiences life either politely sends or
+ violently throws our way. Much of the sadness we feel when thinking
+ of the past is the fact that the people we miss from back then are
+ not the same people we know now. Sure, they may respond to the same
+ name, and may even have the same phone number, but we are all
+ changing, all the time.
+
+ For better or worse. 🕸
diff --git a/memos/WM-054.txt b/memos/WM-054.txt
new file mode 100644
index 0000000..1544751
--- /dev/null
+++ b/memos/WM-054.txt
@@ -0,0 +1,204 @@
+
+
+
+
+
+
+
+Document: WM-054 P. Webb
+Category: Handshake 2022.06.10
+
+ A hard fork in the Handshake community
+
+Abstract
+
+ What a mess
+
+Body
+
+ …I really don't want to write this post. **SIGH**
+
+ The Handshake community is confused, divided, and looking for
+ answers. As someone who has been engaged in the community since late
+ 2019, I feel some sort of responsibility to document what's been
+ happening to enlighten those who came into the Namebase Discord where
+ digital fires and ad-hoc attacks were happening. Hopefully, this post
+ will also serve as several cautionary tales.
+
+ First, I will lay out the facts as I know them, objectively.
+ Everything in this post can be verified by public Discord/Twitter
+ messages/posts. My personal thoughts will follow.
+
+ 1. The backstory
+
+ Namebase is a convenient on-ramp for the Handshake blockchain. You
+ can create auctions for TLDs and buy/sell them on the secondary
+ market. About a year ago, they created a program called, "Namebase
+ Registry." This registry allowed people to stake their TLDs with
+ Namebase and sell domains on said TLDs through partners in the
+ program; Encirca, Gateway, Porkbun, &c.
+
+ A few months ago, Namecheap bought controlling interest in
+ Namebase (51%). This was widely hailed as A Good Thing, and why
+ wouldn't it? The second-largest registrar in the world is
+ interested in helping grow an alternative namespace! We have
+ growing legitimacy! Well…not everyone was happy.
+
+ Gateway, one of Namebase's registry partners, built out and
+ maintained the back-end for the registry. There was an agreed-upon
+ contract between the two companies, signed, sealed, delivered.
+ Either leading up to or shortly after Namebase was acquired by
+ Namecheap, Namebase stopped paying Gateway for their continued
+ work. In addition, TLD owners in the program weren't getting paid
+ either. For whatever reason, Namebase wasn't talking to Gateway
+ nor providing answers to TLD holders. The only representative for
+ Namebase (and only community manager), Johnny Wu, repeatedly
+ promised that answers were forthcoming.
+
+ Finally, Gateway cut off access to Namebase due to non-payment.
+ The exclusivity clause in the registry contract between Namebase
+ and Gateway prevented the latter from being able to survive on
+ non-communication and non-payment. Public attacks towards Johnny
+ ensued, as he was the only public-facing employee of
+ Namebase; the messenger.
+
+ A few weeks ago, Namebase announced an upgrade to their registry
+ program NOT backed by Gateway, and promised TLD owners
+ back-payment. Gateway employees became increasingly irate due to
+ yet another breach of contract; Namebase was not allowed to
+ reverse-engineer the SLD data, which was apparently done to make
+ the improved registry happen. James Stevens, one of the Gateway
+ employees who built/helped build the original registry backend,
+ proceeds to make his frustrations about the situation known
+ to Johnny.
+
+ Comments and screenshots about private conversations between the
+ two are shared by them on Discord and then…things get even
+ more uncomfortable.
+
+ Johnny emerged the following day, a totally different person from
+ what we've seen the past two years — he's more brash, posts
+ rapidly, and dishes insults. He also outlined a plan/manifesto for
+ his company via an multi-page Google Doc. It lists his ideal team,
+ what he expects from his employees, and how he plans to run said
+ company. Additionally, he attempted to galvanize the Handshake
+ community by tweeting grandiose things and encouraged folks to
+ retweet him for visibility. He seemed almost proud that he had not
+ slept much in four days.
+
+ His plans came with ultimatums:
+
+ 1) he would need $5 million to build his team
+ 2) he would cease his involvement in Handshake after his team
+ built the missing parts of the ecosystem
+
+ These two points came with timeframes that changed later that day,
+ confusing even those who enjoyed this "new Johnny" and were eager
+ to join his team.
+
+ Amidst a wellness check by a community member, Johnny effectively
+ took over the Namebase Discord and began to proclaim his dislike
+ for anyone who disagreed with him. In the Handshake Discord, folks
+ were attempting to piece together what was going on. After hearing
+ that Johnny called a community member who operates the Handshake
+ Institute and demanded it be handed over to him, it became clear
+ that Johnny was/is mentally unwell.
+
+ Since Namebase's only public-facing employee was unreachable,
+ several of us in the community reached out to Richard Kirkendall,
+ CEO of Namecheap, for some semblance of guidance amidst
+ uncertainty about Namebase. Long story short:
+
+ - Johnny was fired, with a hefty severance payment
+ - the Namebase Discord was never official and Richard deemed
+ it "rogue"
+ - the "Namebase" Discord is no more, it is now Johnny's
+ personal Discord
+ - Namebase support is now only possible via the Namebase site (if
+ you have an ad-blocker enabled, you may not see it) or via
+ support@namebase.io
+ - a new Namebase Discord, sanctioned by the company,
+ is forthcoming
+
+ 2. My thoughts
+
+ What a shitshow.
+
+ Isn't it ironic that I @mention both Richard and Johnny about how
+ much Johnny has been working these past two years and that he
+ needs a break and a team...and then, all this happens? Quite
+ frankly, I blame James for Johnny's mental break. Sure, he didn't
+ send Johnny **to** the ledge but he sure as hell pushed him off.
+
+ I never understood why James was so adamant about focusing his
+ anger and frustrations on Johnny, of all people. He was the only
+ Namebase employee but he wasn't the one making decisions. He
+ wasn't the one reverse-engineering registry data. Dude was
+ COMMUNITY. MANAGER. For TWO YEARS. He isn't able to code his way
+ out of a translucent bag. So, why target Johnny? Bullying is not
+ okay. CLEARLY.
+
+ I repeatedly asked James why he didn't take his frustrations to
+ Richard. THE GUY RUNNING THE COMPANY. But of course, that's when
+ the tone changes and back-pedaling happens. I don't respect that.
+ My mantra is KEEP THAT SAME ENERGY.
+
+ To that end, I also blame the current and previous owners of
+ Namebase. Although, for most of Namebase's life…I…only saw Johnny?
+ There was a CTO and a designer at some point but they've since
+ moved onto other projects and there never seemed to be ill will
+ between anyone. Regardless, I've mentioned several times over the
+ past two years that Johnny should not be taking on the task of
+ community management by himself. I struggle with placing blame on
+ Richard but I do not think he is absolved of blame. Inaction is
+ just as bad.
+
+ I've never been a CEO and I've never acquired a company but I've
+ worked for enough startups to understand what "due diligence" is.
+ That's essentially research you do before deciding to acquire a
+ company. You look at the finances, the business model, the team,
+ and you make a decision based on all of that (and other aspects).
+ What happens next is, you formulate a plan (or several plans) to
+ shore up deficiencies in that business.
+
+ It is wild to me that what we thought was "the official Namebase
+ Discord" was _actually_ an employee's personal Discord for
+ company use.
+
+ It blows my mind that a community manager was left being the human
+ shield for a company and endured vicious mental/emotional
+ onslaught from a business representative.
+
+ The mind boggles. Seriously.
+
+ 3. The Future
+
+ I hope Johnny gets help. I hope his family/close friends can reel
+ him in and let him know he's loved. I hope the Handshake community
+ comes back from this, stronger and healthier than before. I hope I
+ didn't make any typos, it's 1am as I type this. I hope everyone
+ realizes that petty squabbles are distractions and do nothing good
+ for your mental.
+
+ For the newbies in the Handshake space who have TLDs on Namebase
+ and are scared as hell (rightfully so), don't worry.
+
+ 1) Your TLDs are safe on Namebase.
+ 2) Bob Wallet is better though, send your TLDs there and secure
+ with a Ledger.
+ 3) Namebase has no official Discord right now but if you need
+ assistance there, click the chat/support button.
+ 4) Johnny doesn't have access to Namebase's internals, he can't
+ delete your TLDs, despite what he may say on his Discord.
+
+ For the OGs in the Handshake space, there's always opportunity
+ in chaos.
+
+ 1) We've used Namebase for years, we could create another one if
+ its desired.
+ 2) Keep building, the ecosystem need us.
+ 3) Connect with the newbies, they're impressionable
+
+ I think we're outgrowing the word "community" to be quite honest.
+
+ Handshake is a village now, let's build as such. 🕸
diff --git a/memos/WM-055.txt b/memos/WM-055.txt
new file mode 100644
index 0000000..7a399bb
--- /dev/null
+++ b/memos/WM-055.txt
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+Document: WM-055 P. Webb
+Category: Social 2023.07.17
+
+ Twitter
+
+Abstract
+
+ …that's it?
+
+Body
+
+ I've been banned from Twitter.
+
+ It happened suddenly, without warning. After dinner, I loaded up
+ Twitter for something and saw:
+
+ > Your account is suspended
+ > After careful review, we determined your account broke the Twitter
+ > Rules. Your account is permanently in read-only mode, which means
+ > you can’t Tweet, Retweet, or Like content. You won’t be able to
+ > create new accounts. If you think we got this wrong, you can submit
+ > an appeal.
+
+ The (indefinite) suspension email:
+
+ > Your account, NetOpWibby has been suspended for violating the
+ > Twitter Rules. Specifically, for: **Violating our rules against
+ > platform manipulation and spam.**
+ > You may not use Twitter’s services in a manner intended to
+ > artificially amplify or suppress information or engage in behavior
+ > that manipulates or disrupts people’s experience on Twitter. Note
+ > that if you attempt to evade a suspension by creating new accounts,
+ > we will suspend your new accounts. If you wish to appeal this
+ > suspension, please contact our support team.
+
+ I've since sent two appeals, the first basically confused and the
+ second, inquiring which tweets fell under "platform manipulation
+ and spam."
+
+ Twitter's reply to both appeals:
+
+ > Your account was suspended due to violations of our Terms of
+ > Service. After reviewing for reinstatement your account will not
+ > be restored.
+
+ I have a couple ideas as to what Twitter could _possibly_ mean by
+ "platform manipulation and spam." Bit of a reach IMHO, but hey.
+
+ The first is my usage of the hashtag, "#StoppableDomains." If that
+ sounds familiar, you're probably thinking of Unstoppable Domains.
+
+ From DomainNameWire[1]:
+
+ > Blockchain domain name company Unstoppable Domains has threatened
+ > to sue a Handshake domain name service for offering registrations
+ > under the .wallet Handshake domain name.
+
+ Basically, Unstoppable thought they could use the might of their VC
+ dollars to bully a company and the blockchain it's built on, into
+ submission. I happen to enjoy that blockchain quite a bit, so that's
+ where my beef comes in.
+
+ Using the hashtag #StoppableDomains, I also exposed UD's sketchy
+ W3DA, or, "Web3 Domain Alliance," which is actually just a vehicle
+ for them to legitimize future lawsuits and protect pending
+ trademarks. Did you know they filed for "Bitcoin"?[2][3] In five
+ countries? A company, built on Ethereum, trying to trademark the
+ **original** blockchain. These folks are nuts. But I digress, my
+ initial blog post on the topic is here.[4] I just wish I took
+ screenshots of all my tweets or put them on Wayback Machine.
+
+ When you're suspended, all of your tweets disappear. All that
+ investigative work, gone. GG
+
+ My second theory is, maybe I mentioned too many other social networks
+ in one tweet. I recently got an invite to Farcaster and have been
+ loving it, so I tweeted about it, comparing it to Bluesky and
+ Mastodon. Can you get banned over something like that? Who knows,
+ it's Elon's world over there.
+
+ In any event, this ban feels retaliatory. I'm unable to concieve how
+ this could happen, accidentally. I didn't have a lot of followers and
+ certainly never had viral tweets. I'm frustrated because I've been on
+ the site since 2009…that's 14 years ago. I'm unable to even export my
+ data. It's gone, wiped.
+
+ _spends a few minutes searching computer for possible exports_
+
+ My last Twitter export is from November of last year so at least I
+ have most of it.
+
+ If nothing else, this experience highlights the need for cultivating
+ your own space online. Thankfully, I'm technical, so writing this
+ blog post and SFTP'ing (shh, I know I know) it to my server isn't a
+ big deal. I'm also not enthused about using any of my other (14)
+ Twitter accounts (most of them placeholders for future or postponed
+ products). I've already intended to get back to working on my paid
+ social network[5] after I launch the registry[6] and registrar[7] for
+ my Handshake TLDs and now I'm motivated to work harder.
+
+ SIGH.
+
+ End of an era. 🕸️
+
+ P.S. Oh good, my #StoppableDomains tweets were in my 2022 export.[8]
+
+References
+
+ [1] <https://domainnamewire.com/2022/07/20/unstoppable-domains-threatens-rival-handshake-domain-name>
+ [2] <https://twitter.com/_chjj/status/1565158353055145985>
+ [3] <https://tsdr.uspto.gov/#caseNumber=97095196&caseType=SERIAL_NO&searchType=statusSearch>
+ [4] <https://blog.neuenet.com/post/stoppable-domains>
+ [5] <https://socii.network>
+ [6] <https://neuenet.com>
+ [7] <https://twitter.com/beachfront_>
+ [8] <https://imgur.com/gallery/VhG3uC6>
diff --git a/memos/WM-056.txt b/memos/WM-056.txt
new file mode 100644
index 0000000..19b0c69
--- /dev/null
+++ b/memos/WM-056.txt
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+Document: WM-056 P. Webb
+Category: Internet 2024.01.16
+
+ manifesto.neue
+
+Abstract
+
+ Build your Neue Internet
+
+Body
+
+ We aren't getting our Internet back; the smol web, quiet web, 𝐟𝐫𝐮𝐭𝐢𝐠𝐞𝐫
+ 𝐚𝐞𝐫𝐨 web, whatever you wanna call it. Pandora's Box has been opened,
+ nay, wretched and held open by the data brokerage economy; empowered
+ by unscrupulous advertisers, their lobbyists, and their political
+ allies eager to make a quick buck at the expense (lol, get wrecked)
+ of us all.
+
+ No, that Internet is gone…pilfered and gutted for its good parts,
+ redesigned and repackaged with dark patterns to keep us hooked on
+ services we don't really like; digital cocaine, if you will.
+
+ What we _can_ do is build a new Internet, together. We don't need
+ permission. We can just…do it, in our own way.
+
+ _screams internally_
+
+ UGH. Why do *I* have to work for this? I HAD it and it got stolen!!
+
+ I feel you. Truly. But if you can see the joy in tragedy, maybe you
+ can be inspired to code, sketch, write, or otherwise contribute to a
+ rebirth (renaissance?!) of the internet.
+
+ However, a common mistake we collectively make about taking the
+ internet back into our own hands is assuming everyone has the time
+ and energy to code a blog or set up a server. Even opening a terminal
+ is too much for most. You might be thinking, "you're hinting at
+ creating platforms…isn't that how we got into this mess in the
+ first place?"
+
+ Platforms aren't inherently evil, they're just the vehicles through
+ which our Internet was poisoned. How can we ensure that won't happen
+ again? To quote my friend, Jordan Green:
+
+ > The Internet amplified voices you could've easily ignored in
+ > the past.
+
+ That is, aside from giving transgressors a judgmental eye, ignore
+ them. Don't engage. Don't sign up for their service. Recommend
+ comparable services to friends and family who may inquire. We know
+ damn well that Facebook and Google will catch on and try to ride the
+ wave (see: Facebook threatening the Fediverse with Threads
+ integration, and Google shutting down yet *another* service after
+ gobbling up user data because "refocusing efforts").
+
+ "Web3," a marketing term for Ethereum-based platforms and services,
+ is supposed to save us…right? Or maybe it's "the dWeb," the
+ lesser-known marketing term for blockchain-/community-based platforms
+ and services. Their evangelists are certainly loud as fuck about how
+ their favorite blockchain is THE key to unlocking a brighter future
+ on the 'Net (greetings, I just roasted myself and am an avid
+ evangelist of (for?) the Handshake blockchain and will talk your ear
+ off if you let me).
+
+ I think the _solutions_ are somewhere in the middle. Notice the
+ plural? There is no singular salve for the blights upon our digital
+ land, despite what anyone says (I especially despise absolutist
+ rhetoric, go touch grass, breathe fresh air, or take a nap).
+
+ So, where do you come in?
+
+ If you're technical, write guides for normies (and for future you,
+ who will forget details).
+
+ If you're entrepreneurial, build platforms that make it super easy
+ for anyone to jump into the next stage of the internet. You have a
+ major responsibility to not get swayed by a billion-dollar check from
+ these tech companies (idk your financial situation so do you,
+ I guess).
+
+ If you're artistic, draw, paint, and sculpt the idealized future you
+ want to see.
+
+ If you're a musician, become more experimental with your tunes and
+ collaborate with visual artists for your cover art.
+
+ If you're a creator, period, you have no idea just how powerful you
+ are; everyone is inspired by art and depictions of what *could* be.
+ Think of your art as a template for a new world.
+
+ Create in whichever way you know how. We aren't getting our Internet
+ back but we sure as hell can steward a new one.
+
+ 🕸️
diff --git a/memos/WM-057.txt b/memos/WM-057.txt
new file mode 100644
index 0000000..ee8e259
--- /dev/null
+++ b/memos/WM-057.txt
@@ -0,0 +1,124 @@
+
+
+
+
+
+
+
+Document: WM-057 P. Webb
+Category: Life 2024.09.16
+
+ A personal renaissance
+
+Abstract
+
+ Nah, imma do my own thing.
+
+Body
+
+ I tire of platforms. So of course, I'm building a platform.
+
+ I think a major reason why dystopian games like Cyberpunk 2077, Deus
+ Ex: Human Revolution and Mankind Divided, and even the Watch Dogs
+ series fascinates me so is because in these games, I am not a mere
+ bystander. In these fantasies, I have the power to fight back against
+ injustice. I can literally "stick it to the man" and in my own way,
+ save the world. In other words, I can be the change I wish to see in
+ these worlds AND have immediate effect for the betterment of most, if
+ not all.
+
+ When I power down my PS5 however, reality beckons and I see red orbs
+ indicating activity from online friends and acquaintances on
+ platforms where I'm pigeonholed into the same box as everyone else;
+ my expression and originality welcome as long as they fit into neat
+ compartments designated by the platform. I do not particularly enjoy
+ using these platforms as much as I enjoy communicating with humans
+ who also feel the way I do. The term "necessary evil" gets thrown
+ around a lot…why must evil be necessary? I don't have the stomach for
+ such a rabbit hole, I'll let others investigate that topic further.
+
+ Twitter is a cesspool. You hear that? A lot of grumbles in agreement,
+ reverberating across the internet. No one is happy about it and even
+ though many (most?) of the accounts we follow have since fled to
+ Mastodon and Bluesky, they aren't replacements. I haven't posted
+ gameplay clips to my gaming Twitter in a year but I keep the account
+ because the amazing illustrators, game developers, and composers I
+ follow there are very much active and will not move elsewhere.
+
+ Remember Myspace? Pepperidge Farms remembers. I'm sure you do too (if
+ you're younger than a millennial, get rekt). I was a teen when it was
+ THE online place to be. Everyone I knew, even "cool" kids and jocks
+ understood enough about HTML and CSS to customize their profiles.
+ People gatekept themes sites so peers wouldn't have a better‑looking
+ profile. It was a point of pride when you could de‑obfuscate CSS to
+ replicate something or even customize it more to make some effect
+ your own. Anecdotally, it seemed like the collective intelligence of
+ the internet was higher when we had to use our minds more. We should
+ get back to that. We COULD get back to that.
+
+ Much has been said about how advertising ruined the web experience
+ (by giving birth to the data brokerage economy) and while that's
+ true, isn't it super fucking sad that Silicon Valley is spending all
+ of its money and attention on ~~massive if/then/else factories~~
+ LLMs? Trick question, they got us into this mess, why fix it?
+
+ This is where I tell you I'm saving the world with my platform. I
+ mean, it could happen, right? My lil' social network could upend
+ everything and I'll have VCs groveling at my feet. My TED Talk will
+ feature me in muted hacker‑wear (hoodie and jeans) and I'll
+ pseudo‑humbly recount my beginnings and half‑smile while the slide
+ behind me shows $1 billion in quarterly revenue.
+
+ No, this is me being the change I wish to see in the world.
+
+ I wish other people would build things I want to use so I can spend
+ my free time playing Fortnite and watching shows. I mean, I do do
+ those things but it's kinda like someone who learned what kerning is
+ and then notices terrible kerning on every street corner. I know too
+ much. I took the old "should designers code" meme seriously and did
+ just that. Building is my verb it's what I *do*.
+
+ The last post on this blog was literally eight months ago. I felt
+ compelled to publish today for some reason. The funny thing is, the
+ last time I posted about socii (the social network/platform I'm
+ building) was several years ago[1]. I took a detour and did a lot of
+ work for the Handshake blockchain in that time but quit due to
+ ideological differences[2]. It turns out, perverse incentives are
+ rampant everywhere and the only way to win is not to play.
+
+ Quitting Handshake made me re‑evaluate my life in whole. Where I am
+ not fulfilled, I'm making changes. I'm reclaiming my space on the
+ web, starting with my homepage. There's no reason why it cannot also
+ be the testing ground for the personal OS concept[3] I published
+ years ago. Music I intended to publish 15 years ago will finally
+ release (they were trapped in Acid Pro 6, I bought a basic Windows PC
+ to free them). Sci‑fi novels scribbled in notebooks will be
+ scrutinized by the world. I don't care. I've been hoarding ideas and
+ concepts for far too long. Not enough characters to share 'em? Who
+ cares, I have a blog.
+
+ This post is rambly but again, who cares? I am constantly inspired by
+ others so the least I can do is put myself out there more.
+
+ Okay, socii[4] (click the logo to hear the pronounciation: "sew‑key")
+ is a paid service. Not expensive, but not cheap either. Social
+ networking with advanced anti‑harassment tools and customization like
+ you wouldn't believe (I mentioned Myspace for a reason). Small groups
+ because large groups invoke trolls. The UI of Big Social becoming
+ mere feature/theme toggles. True data ownership. I could go on but
+ I'd rather get back to building. 2025.01.01 is the launch date.
+ Newsletter signup is on the site if you're interested.
+
+ All this to say, I think I'm gonna enjoy having my homepage be the
+ source of truth for all the things I do online. And, I have an
+ intense interest in making Big Social suffer. If I can get my
+ favorite creators on socii too, I'm happy.
+
+ 🕸
+
+References
+
+ [1] </WM-049>
+ [2] <https://archive.is/vpZCG>
+ [3] </WM-042>
+ [4] <https://socii.network>
diff --git a/memos/WM-058.txt b/memos/WM-058.txt
new file mode 100644
index 0000000..6ba9abb
--- /dev/null
+++ b/memos/WM-058.txt
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+Document: WM-058 P. Webb
+Category: Politics 2024.11.06
+
+ Election
+
+Abstract
+
+ WT actual F
+
+Body
+
+ When people show you who they are, you should believe them. Maybe
+ you'll want to give them a chance because you feel in your heart that
+ everyone is a good person.
+
+ Commendable, respectable even.
+
+ However, consider the winning candiate:
+
+ - 2 impeachments
+ - 34 felony convictions
+ - literal threat to democracy (Jan 6th)
+ - his former VP advised folks not to vote for him
+ - his current VP called him "America's Hitler"
+ - litany of other disgusting actions, do your research for more
+
+ There's plenty to blame for the outcome. From what I've seen online:
+ Latinx, (due to culture, perceived approximation to whiteness, and
+ not wanting to be led by a Black woman), white people (overwhelming
+ number of white women, apparently), and self‑hating gays and Black
+ people. Even I blamed 3rd party voters but apparently, they wouldn't
+ have tipped the scale in Harris' favor anyway (but still, writing in
+ video game characters is dumb af).
+
+ The main culprit, for me, is the Democrats. If Bernie Sanders wasn't
+ snubbed in 2016, I truly believe we wouldn't be in this mess.
+ Sanders' message was, "keep Big Business money out of politics."
+ Guess who truly won the election? Wall Street is ecstatic. The stock
+ market was hella positive this morning. Money money money. That's all
+ these fucks care about.
+
+ I live in California and I work for a Silicon Valley corporation
+ worth trillions. There's a good chance I'll make millions over the
+ next four years and thanks to Trump's economic policy (help the
+ rich), there's a damn good chance I'll benefit more from his policy
+ than the majority of people who voted for him. That's nuts.
+
+ The rest of his voters will have their families ripped apart under
+ the guise of "keeping America safe" (abortion, womens' rights,
+ immigration, &c). Talk about voting *against* your interests. WTF!!
+
+ My frustration is self‑inflicted; it comes from me thinking my ideals
+ match those of others. When I vote, I don't think of just me; I think
+ of my community. On my ballot this year was a proposal to END
+ legalized slavery in prisons…and most Californians voted against it.
+ Mindblowing. Maybe marginalized groups have more empathy overall?
+ Idk. I'm a Black man and have spent my life keeping my head on a
+ swivel. Every day I am not dead or imprisioned is a blessing. I spent
+ my morning arguing with folks online, I'm not going to frustrate
+ myself further pondering the thought‑process of single‑issue voters.
+
+ It's been interesting to see folks like DHH[1] and the CEO of
+ Vercel[2] feel emboldened to congratulate their president though. DHH
+ railed against DEI and "free speech" with Rauch echoing the latter
+ sentiment. Tapping the sign once again: Freedom of speech is NOT
+ freedom of **reach**. Who cares though, just keep pumping
+ your bags.[3]
+
+ America is a hard‑headed child.[4] At some point you just gotta let
+ them learn on their own. Just because your freedoms were never
+ threatened doesn't mean they never will. Good luck.
+
+ 🕸
+
+ P.S. Now is as good a time as any to delete your X account(s). I've
+ resisted calling Twitter "X" for so long but it's quite clear at this
+ point that Twitter is but a memory.
+
+ P.P.S: Tech CEOs congratulating Trump. Yuck.[5]
+
+References
+
+ [1] <https://world.hey.com/dhh/the-spells-are-spent-beaa675b>
+ [2] <https://x.com/rauchg/status/1854206133776388461>
+ [3] <https://x.com/coinbase/status/1854192162360942702>
+ [4] <https://social.coop/@netopwibby/113434965265995420>
+ [5] <https://jacky.wtf/links/2024/Nov/maga-tech-ceo>
diff --git a/memos/WM-059.txt b/memos/WM-059.txt
new file mode 100644
index 0000000..aab6891
--- /dev/null
+++ b/memos/WM-059.txt
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+Document: WM-059 P. Webb
+Category: Social 2024.11.08
+
+ Farcaster will never scale
+
+Abstract
+
+ Money over everything
+
+Body
+
+ I posted this to Farcaster yesterday[1]:
+
+ I've unfollowed a handful of people, muted a few, and left a bunch of
+ channels (I should've did the channel thing a while ago).
+
+ The great thing about crypto is that you're surrounded by a
+ community of dreamers, builders, and creators building a brighter
+ future because we've all identified what's not working in society.
+
+ So, to suddenly understand that a large swath of your peers gleefully
+ celebrate an inept moron because he'll make the crypto casinos print
+ money to the moon at the expense of us all is…baffling.
+
+ Like…the same people who understand how to write smart contracts and
+ use custodial wallets are the same ones who accept that the same
+ people they mint from, laugh with, and build with will literally lose
+ their rights, lives, and/or families due to the incoming
+ administration…and they're fine with that.
+
+ Where's the humanity?
+
+ "Hahaha, money go brrr" over everything? Seriously? SERIOUSLY.
+
+ I've been black my whole life so I'm used to people smiling in my
+ face and cursing my existence in the same breath. *yawn*
+
+ I let my guard down and assumed because I was in a smart space with
+ bright people working towards a brighter future for us all that we'd
+ ALL be on the same page. Idk wtf y'all think anymore and nor do I
+ care at this point.
+
+ Farcaster is a neat experiment that had potential to work. Now I see
+ it will never work. You cannot be a network for everybody when you
+ don't give a shit about every body. Glazing and posturing for Daddy
+ Elon when he don't even respect his own kids is sick work.
+
+ My good friend Brad Barrish shared an excellent blog post from Ken
+ White[2] in response. As one commenter put it, it's the best
+ post‑mortem of the election that I've seen yet. Honestly, it's a
+ must‑read. Check it out, you'll thank me later.
+
+ 🕸
+
+References
+
+ [1] <https://warpcast.com/netopwibby.eth/0x82e95b81>
+ [2] <https://www.popehat.com/p/and-yet-it-moves>
diff --git a/memos/WM-060.txt b/memos/WM-060.txt
new file mode 100644
index 0000000..780ec38
--- /dev/null
+++ b/memos/WM-060.txt
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+Document: WM-060 P. Webb
+Category: Life 2024.11.13
+
+ Elon Musk mind virus
+
+Abstract
+
+ Voluntary retardation
+
+Body
+
+ Trying to find a suitable tagline for this post is challenging. At
+ first I thought "emotional disability" would work. Or maybe,
+ "empathetic disability" but the "disability" I'm talking about is
+ voluntary, which would make it a choice.
+
+ Voluntary retardation fits.
+
+ Exhibit A[1] from dwr.eth, creator of the Farcaster[2] protocol[3]
+ and CEO of the company that builds Warpcast[4], the major client of
+ said protocol:
+
+ > I’m anti-institutions. I think they are incompetent. Washington DC
+ > is at the top of the stack.
+ >
+ > Plenty of coverage of Trump.
+ >
+ > I find mainstream liberals an easy target because they rationalize
+ > their political beliefs to an absurd level.
+ >
+ > Whereas average conservative is honest: I’m voting for the
+ > non-liberal candidate. I don’t care about the rationale or logic.
+ >
+ > If average liberal: I’m voting because it’s my team and I don’t
+ > care about anything else, I would have more respect. Pure tribal
+ > affiliation. Politics is to help those you like and hurt those you
+ > don’t. Very Lindy.
+
+ Wait, what?
+
+ > I’m voting for the non-liberal candidate. I don’t care about the
+ > rationale or logic.
+
+ Wild. There is no point in life that you make decisions in a vacuum
+ but for some reason, politics is viable.
+
+ I find mainstream conservatives an easy target because they
+ rationalize their political beliefs to an absurd level.
+
+ Now, Dan is a smart guy. Quite intelligent, actually. His inability
+ or refusal to clarify his own comments is interesting. He'd rather
+ troll[5] and gaslight. He raised $150 million at a $1 billion
+ valuation just six months ago. SIGH.
+
+ These are the kinds of people who hope to become the next Twitter.
+ It's quite clear Dan's space is not the place for me, so I
+ exported[6] my data and dipped.
+
+ It's funny that just a few days ago I was questioning my continued
+ usage of Farcaster and now my account's deleted (but my profile is
+ still up, maybe a cache thing, idk). I still have many friends and
+ acquantices over there and I won't judge them for staying; everyone's
+ tipping point is different.
+
+ What I will say though is that the future (and especially the next
+ four years) is going to test your patience and resolve. Personally, I
+ will no longer be tolerant of intolerant views. Nor will I stay in
+ places that aren't for me, if I can help it. The web is so much
+ bigger than any one person and is WAY bigger than any Elon stan.
+ There are already reports of Trumpers realizing what they voted for
+ and feeling immense regret. Let's see if it pays off for 'em[7].
+
+ 🕸
+
+References
+
+ [1] <https://archive.is/UUK7A#15%25>
+ [2] <https://www.farcaster.xyz>
+ [3] <https://docs.farcaster.xyz/learn>
+ [4] <https://warpcast.com>
+ [5] <https://archive.is/19JCY#55%25>
+ [6] </remarks/WR-006>
+ [7] <https://www.youtube.com/watch?v=0gkC4i96QkA>
diff --git a/memos/WM-061.txt b/memos/WM-061.txt
new file mode 100644
index 0000000..38de763
--- /dev/null
+++ b/memos/WM-061.txt
@@ -0,0 +1,159 @@
+
+
+
+
+
+
+
+Document: WM-061 P. Webb
+Category: Social 2024.12.16
+
+ Twitter
+
+Abstract
+
+ …yay?
+
+Body
+
+ I've been unbanned from Twitter.
+
+ Since my ban[1], I've spent time periodically attempting to appeal
+ said ban and even going as far to use an online postal service[2] to
+ formally request my data from Twitter's Data Protection Officer.
+
+ I've been on Twitter for 15 years. The thought of all that data being
+ locked behind bullshit was infuriating. Anyhoo, last week I received
+ this email:
+
+ > Hello,
+ >
+ > We’re writing to let you know that we've unsuspended your account.
+ > We’re sorry for the inconvenience and hope to see you back on
+ > X soon.
+ >
+ > A little background: we have systems that find and remove multiple
+ > automated spam accounts in bulk, and yours was flagged as spam by
+ > mistake. Please note that it may take an hour or so for your
+ > follower and following numbers to return to normal.
+ >
+ > If you need to get in touch with us again, please file a report
+ > through your X app or our forms page, as this account isn’t
+ > monitored for replies.
+ >
+ > Thanks,
+ >
+ > X Support
+
+ Honestly, I don't believe this…especially when this "error" was
+ discovered the same day The Guardian reported[3] on the mass exodus
+ from ElonNet. I think Twitter looked at their numbers and thought,
+ "Our metrics are looking dreadful," and figured unbanning the banned
+ would make us ever so grateful to be allowed in that our usage of
+ Twitter would return to pre-Elon levels. Furthermore, you visit
+ Twitter today and you'll find plenty of spam accounts within five
+ minutes of scrolling.
+
+ Nah.
+
+ After the election[4], I deleted my remaining Twitter accounts. I
+ literally have no reason to remain on the platform.
+
+ Though I gotta admit, having access to my account again and seeing
+ tweets from the people I follow who haven't yet aborted felt quite
+ nice. It felt familiar. When I tabbed over to the "For You" feed
+ though, reality set in. There's no saving this place, it's time to
+ move on.
+
+ I also sent complaints to the Public Inquiry Unit of the Office of
+ the Attorney General and got a response from them and Twitter the
+ same day:
+
+ > Hello,
+ >
+ > We are responding to your request for information regarding
+ > account, @NetOpWibby. You can download the information with
+ > this URL:
+ >
+ > https://records.twitter.com/disclaimer/randomLettersAndNumbers
+ >
+ > The URL is valid for the next 7 days. You may download the
+ > information a total of three times. A brief explanation of the
+ > information is included with the download.
+ >
+ > Additionally, your account has been reinstated, as it was suspended
+ > mistakenly. Accordingly, you can also download your data in your X
+ > account settings: https://help.x.com/en/managing-your-account/accessing-your-x-data
+ >
+ > Best,
+ >
+ > X Corp
+
+ Downloading your export from `records.twitter.com` is excrutiatingly
+ slow. I recommend doing so from a desktop computer because it'll take
+ hours. However, downloading an export from the Twitter UI is quite
+ fast and will finish in under 10 minutes (for me). Interestingly, the
+ former export will put your tweets in a single TXT file in JSON
+ format with a PGP key at the top. The latter export will provide you
+ with an HTML file so you can view your tweets in a browser.
+
+ Anyhoo, after I downloaded both exports I ran tweetXer[5] by Luca
+ Hammer[6] to delete my content from the platform. The great thing
+ about tweetXer is that it has a button that exports your bookmarks,
+ something the official exports don't provide. The deletion process
+ took maybe an hour and some change.
+
+ I haven't deleted this last account yet. Why? I'm not sure. Maybe
+ it's to protect my username from being used maliciously? Maybe
+ there's a chance Elon will get ousted? Maybe I'm being sentimental?
+ Idk. I logged out. Most of the people I follow are active on other
+ platforms so I'm not missing anything.
+
+ Some great perks to finally having my data is that 1) I can stop
+ obsessing over not having it, 2) I can host my tweets[7], and 3) I
+ can train a local LLM on 15 years of content!
+
+ So long, Twitter! My online presence is fragmented due to your
+ impending death but that no longer bothers me. After all, we used to
+ have accounts across several forums and other online communities.
+ Nature is healing.
+
+ Rebirth of an era. 🕸️
+
+ ---
+
+ 2024.12.19 UPDATE
+
+ Remember me sending Twitter snail mail to get my data?
+ They've responded:
+
+ > Hello,
+ >
+ > We have received a request for certain information regarding an X
+ > account, @netopwibby, via post.
+ >
+ > If you are still having issues downloading your X archive, please
+ > confirm in your reply.
+ >
+ > Please note that all your X data is available directly via your X
+ > account, as explained in the following Help Center Page: https://support.twitter.com/articles/20172679
+ >
+ > Sincerely,
+ >
+ > X Corp
+
+ The top of the email says "Reply above this line." This is an
+ interesting change from their usual, "this email is not monitored so
+ don't reply" tagline. Maybe they're trying to be professional for
+ once. If you're banned and trying to get your data, maybe try
+ emailing `dpo-support@x.com` directly? YMMV
+
+References
+
+ [1] </WM-055>
+ [2] <https://docupost.com>
+ [3] <https://www.theguardian.com/media/2024/dec/11/from-x-to-bluesky-why-are-people-abandoning-twitter-digital-town-square>
+ [4] </WM-058>
+ [5] <https://github.com/lucahammer/tweetXer>
+ [6] <https://bsky.app/profile/luca.run>
+ [7] <https://github.com/tweetback/tweetback-canonical>
diff --git a/memos/WM-062.txt b/memos/WM-062.txt
new file mode 100644
index 0000000..45d5c3e
--- /dev/null
+++ b/memos/WM-062.txt
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+Document: WM-062 P. Webb
+Category: Life 2024.12.20
+
+ Remembering my grandma
+
+Abstract
+
+ Rest In Paradise, Claretha
+
+Body
+
+ Yesterday morning I got a call from my mother: "Grandma passed away."
+ Knowing this day would inevitably come (especially since she was
+ suffering from seizures periodically) did nothing to prepare me. At
+ first I just felt shock. I was in the middle of sending a Slack
+ message to a colleague for clarfication on a Github issue. "That can
+ wait," I thought, as I continued to process.
+
+ It wasn't until the phrase, "my grandma passed" crossed my mind that
+ it sunk in. She's gone. I spoke with her last week, and she's gone.
+ Earlier this week my mom shared a picture of the both of them,
+ smiling…and now she's gone.
+
+ I'm the first grandchild of the family. Naturally, I became my
+ grandma's favorite but estrangement with her and my mother kept us
+ apart from roughly age 10 until last year when I randomly decided to
+ ask an uncle for her phone number. Family drama aside, I'm thankful I
+ got to reconnect over the past year. I'm glad I recorded plenty of
+ photos, videos, and audio of her. She got to meet my family and
+ connected quite well with my wife. I got to know her history, stories
+ about her father I've never heard before (which makes me think I got
+ my strong ethical/moral compass from him). She gave me her artwork in
+ exchange for the super dope MTV hoodie I was wearing at the time LOL.
+
+ My grandma was funny, witty, and didn't take no shit. She
+ reciprocated energy…same as me. I'll miss her dearly. I spent a lot
+ of yesterday going through a range of emotions; sadness, frustration,
+ anger. As I write this I feel okay but grieving isn't a one‑time
+ thing. I'll overhear someone order a large black coffee from
+ McDonald's or see someone that looks like her and be overcome with
+ emotion. Or I'll accidentally tell Siri to call her.
+
+ This feeling fucking sucks. But it's selfish for me to want her back,
+ even for just a moment.
+
+ I wrote a poem yesterday to help myself process things:
+
+ My grandma passed
+ I didn't think our last call would be the last
+ My grandma passed
+ The last thing she told me was to show forgiveness
+ My grandma passed
+ Glad I could show her my wife and my kids
+ My grandma passed
+ Recorded her voice, immortalized her essence
+ My grandma passed
+ Took notes on her life and transcribed her lessons
+ My grandma passed
+ Her very last weekend was with family and dancing
+ My grandma passed
+ Wish I could hug her, thank her for mother
+ My grandma passed
+ My grandma passed
+ My grandma passed.
+
+ Rest In Paradise, Claretha Johnson. 🕸
diff --git a/memos/WM-063.txt b/memos/WM-063.txt
new file mode 100644
index 0000000..2ea7ca7
--- /dev/null
+++ b/memos/WM-063.txt
@@ -0,0 +1,206 @@
+
+
+
+
+
+
+
+Document: WM-063 P. Webb
+Category: Life 2024.12.31
+
+ Year in Review
+
+Abstract
+
+ Where did the time go?!
+
+Body
+
+ For the past several years I haven't felt like doing one of these but
+ this year seems especially fitting to recap. High‑level, I largely
+ exited crypto, tended more to my personal spaces (webb.page and
+ blog.webb.page), lost my grandmother, and more. So it feels weird to
+ say that in this moment I am happy and hopeful for the future.
+
+ 1. Handshake
+
+ Since late 2019 I've been working in the Handshake blockchain
+ space. It actually fulfills a lifelong dream[1] so I was
+ incredibly excited and incentivized to build the infrastructure
+ for the future I want. I learned a LOT. Like how to write a DNS
+ server! The heavy‑lifting was via a Node.js DNS packet module I
+ ported to Deno/TypeScript[2]. Unfortunately, I never figured out
+ how to handle cert files so I used PowerDNS for my authoritative
+ server instead.
+
+ I presented my work‑in‑progress at HandyCon[3], continued creating
+ mini modules to support features like NIC pages[4], and even got
+ my first customers! One of them immediately used their domains[5]
+ and this was easily a top 5 highlight of my year. Next, I started
+ work on a CDN[6]. What's interesting about creating your own
+ versions of infrastructure we depend on daily is that you realize
+ how complicated (or not) things are. And, how weird it is that
+ modern literature on such things is absent.
+
+ Four years working in this space…and I decided to quit[7]. The
+ TL;DR? Grifters and opportunists seek to subvert the blockchain
+ that was designed for the many, to financially benefit the few. I
+ cannot and will not support bad faith proposals or persons
+ supporting them.
+
+ The thought of leaving all this work behind hurt a lot and I found
+ myself wondering what I'd work on next. That's where Socii
+ comes in.
+
+ 2. Socii
+
+ I was working on Socii[8], my social network concept, for about a
+ year when I discovered Handshake. It only made sense to return to
+ (re)developing it. When I was dusting off the codebase and trying
+ to make sense of it, the U.S. election concluded and I was in a
+ state of shock about the outcome. The fact that the entirety of
+ crypto and Big Business was celebrating the win[9] blindsided me.
+ I was (and still am) disgusted.
+
+ In a self‑serving world of sychophants and apathy, it seems we've
+ gotta make what we want to see/use/buy in the world. I'm under no
+ illusions that I'll get explosive growth and a billion users on my
+ platform and quite frankly, I don't want that. I want *customers*
+ who are willing to pay for a social network that empowers them to
+ do more with their online presence whilst providing a curated
+ private space for them and the people they care to connect with.
+ Building a sustainable business is actually not that
+ complicated…it's just the opposite of what's celebrated in the
+ market today and quite frankly…fuck the market.
+
+ Since the election, hordes of people have fled Twitter[10] and I
+ believe a subset of them would be delighted to use the spiritual
+ successor[11] to Myspace. We'll see!
+
+ 3. Professional Life
+
+ I've utilized side projects my entire career as a way to better
+ my skills and have fun at the same time. The main reason is
+ because I have way too many ideas and I'm hella impatient. Why
+ wait for someone to build what I envision when I can do it myself
+ (and to my specifications)? Another benefit is simply keeping your
+ skills sharp because technology advances regularly, even if the
+ tools you use at work are in stasis.
+
+ How many times have you run `npm install` at work and seen a bunch
+ of messages in Terminal warning you of deprecated modules?
+
+ Certain parts of the company I work for are using parts of the
+ tech stack I use in my personal life, like Svelte/SvelteKit. I'm
+ stuck using Handlebars and old build systems. Navigating corporate
+ hierarchy to get onto other teams is an exercise in frustration.
+ I've gotten either no response or laugh reactions to my questions
+ about such in the company Slack (only for said reactor to rescind
+ when confronted). Strange how being part of a trillion dollar
+ company is lonelier than being part of a startup.
+
+ Aligning my values with what I work on is extremely important to
+ me. I certainly have the skills to find work with a company that
+ fits, if not launch my own! To that end, it is my hope that 2025
+ will see me working for myself and/or likeminded
+ individuals/companies. To some extent, this is a privileged
+ viewpoint and I pride myself on building up to this point. Our
+ purpose in life is to be in service to others. I have these
+ skills…why hoard them for myself?
+
+ 4. Family
+
+ It's wild how death brings people together. My grandmother passed
+ recently[12] and I flew to Ohio for her memorial. Prior to this
+ trip I had been estranged (or pretty close to being estranged)
+ from my immediate family aside from my youngest sister (who,
+ unfortunately, couldn't make the trip). My only focus was honoring
+ my grandmother's memory. What I learned is that my experience was
+ not unique. A cousin mentioned feeling frustrated about being kept
+ away from grandma but was glad to have connected with her the last
+ time they had a conversation with her. Another cousin regretted
+ missing a graduation that occured a week prior to her passing. Yet
+ another cousin expressed the unconditional love she gave despite
+ his life choices that others judged him for.
+
+ My mom pulled me aside to recount the last conversation she had
+ with grandma and how they were able to finally move forward. I
+ told her grandma told me to forgive my mother and talk to her.
+ These two events happening the same week before her passing is
+ nuts…very TV‑like. Anyhoo, I enjoyed myself despite the initial
+ trepidation and sadness. Remembering our grandma with my cousins
+ was fun. Her love of fur coats and fashion and willingness to
+ always help someone in need were much talked about topics.
+
+ One of my cousins is a music producer now and he credits me for
+ inspiring him, which was bewildering to me. Apparently, my
+ beat‑making and raps and how I designed my bedroom as a teen was
+ enough to influence his career path. I largely stopped making
+ music because it just didn't fit with having a family at the time
+ and the internet wasn't as democratized for music as it is now.
+ I'm excited to build with him, we've got some things cooking.
+
+ At my grandma's memorial, the pastor said we shouldn't use
+ funerals as the only time to link up with family. Communicating
+ with family is something that should be done all the time, on a
+ regular basis. My problem is when people send weird energy my way.
+ I don't like that. Don't be weird or sideways with me. Say things
+ with your chest.
+
+ 5. My Spaces
+
+ In 2022 and 2023, I wrote approximatly ONE post for the entire
+ year. Why? I've been using Twitter as my (micro‑)blogging platform
+ of choice. When I got banned[13] it was a slap in the face. 15
+ years on a platform that kicked me off almost as soon as ownership
+ changed hands. I eventually regained access[14] (ha, our bad, our
+ spam filters are too powerful) but after almost two years of using
+ other services, why the hell would I go back? In fact, why am I
+ posting all my good stuff on platforms I don't own/control?
+
+ I've been talking about my personalOS concept[15] for many years
+ now and have longed for my homepage to represent that. I've
+ recognized that my default of "things have to be perfect before
+ launching" is stupid so I decided to go ahead and relaunch
+ webb.page and update things manually vs via an API. It's lacking
+ features but who cares? YOU don't know what they are and even if
+ you can figure them out…who cares?! Perfection is something
+ corporations should strive for, not regular degular folks
+ like myself.
+
+ My homepage is my canvas. My blog is my notepad. `webb.page`
+ is my space.
+
+ 6. 2026
+
+ My grandma's last words to me were about forgiveness. Thinking
+ about her life, she was fearless. If she had a goal, she made a
+ plan and met it. She had a dual business (barbershop/beauty salon)
+ and bought a house. No degree necessary, just hard work and
+ dedication. I want to live my life the same way. I'm a self‑taught
+ designer/developer and have built neat things thus far. But, while
+ I am generally fearless, I am still held back but a few things:
+ driving and swimming. I'm going to get my license next year and
+ possibly learn how to swim.
+
+ Eveything else is easy‑peasy. Success is merely a matter of time.
+
+ 🕸️
+
+References
+
+ [1] <https://archive.is/TMycF>
+ [2] <https://github.com/NetOpWibby/packet>
+ [3] <https://archive.is/HCJXc>
+ [4] <https://archive.is/L4lBe>
+ [5] <https://archive.is/nrUJt>
+ [6] <https://archive.is/45rVS>
+ [7] <https://archive.is/vpZCG>
+ [8] <https://socii.network>
+ [9] </WM-059>
+ [10] <https://pxlnv.com/linklog/similarweb-traffic-bluesky>
+ [11] <https://social.coop/@netopwibby/113329030542527807>
+ [12] </WM-062>
+ [13] </WM-055>
+ [14] </WM-061>
+ [15] </WM-042>
diff --git a/memos/WM-064.txt b/memos/WM-064.txt
new file mode 100644
index 0000000..3223d62
--- /dev/null
+++ b/memos/WM-064.txt
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+Document: WM-064 P. Webb
+Category: Programming 2025.03.04
+
+ Why I won't touch React
+
+Abstract
+
+ Outside of my $DAYJOB
+
+Body
+
+ JavaScript frameworks are a dime a dozen and everyone has their
+ favorites. HTMX, Solid, Svelte/SvelteKit (my favorite), Next, Remix,
+ &c. The industry has long decided on the framework to rule them all,
+ React. Which is fine, I guess. Cool.
+
+ My problem is when the industry decides on A Thing™, everyone
+ gravitates to this and opposing that can sometimes be difficult.
+
+ Remember "mobile‑first design/development"? This never made sense to
+ me. We don't code on mobile devices, we code on desktop devices…so
+ why not _start_ coding for desktop and use media queries to to
+ hide/remove elements from mobile views? Being a lowly entry‑level dev
+ meant I had no power to push back so it was during this era that I
+ decided to apply common sense (to me) coding practices to
+ personal projects.
+
+ The industry has since moved on and replaced that practice with
+ proper responsive design.
+
+ My reasons for being anti‑React isn't a knee‑jerk reaction to being a
+ "hipster" (anti whatever's popular), I actually have a few reasons:
+
+ 1. My mental model doesn't mesh with how React works
+ 2. The way React manages state has always been weird
+ 3. The internet is rife with outdated/opinionated tutorials
+
+ Keep in mind that I am not up‑to‑date on how React is nowadays so
+ maybe my issues with it are expired.
+
+ I'll contrast the reasons I don't like React with the reasons I
+ like Svelte:
+
+ 1. Svelte is the closest to writing vanilla HTML/CSS/JS that I've
+ found…and I can easily use Sass and TypeScript instead.
+ 2. Until Svelte 5, managing state in Svelte has been easier for me to
+ grok than React. Svelte 5 is quite helpful in their typings when
+ you try to mix the old way of managing state with their new way.
+ 3. I've never been confused with Svelte tutorials. It may help that
+ Svelte hasn't had many drastic changes over the years and, being a
+ smaller framework means there's no SEO stuffing or whatever it is
+ people do to get more clicks on their ad‑riddled site.
+
+ The last point is rectified these days by a good search engine.
+ Google hasn't been good for quite some time but most people don't
+ care so my last point still stands. Paying for Kagi makes sense for
+ *me* though.
+
+ I will say that React makes sense to use if you have need for React
+ Native. From what I understand, React Native is fantastic and comes
+ with less headaches than using literally anything else for building
+ Android and Apple mobile apps from the same codebase.
+
+ Every "Who's Hiring" thread on HackerNews is littered with React
+ experience of at least a few years. Sometimes a poster will append,
+ "or relevant experience" but let's be real, experience in another
+ framework probably doesn't matter. Job postings on LinkedIn are the
+ same but I'd wager HN is better because at least you can contact a
+ real person to inquire further.
+
+ This isn't a bitter blog post btw! I'm more than happy to stubbornly
+ wait this phase out just like I did with "mobile‑first design",
+ "should designers code?" (designers should absolutely code, it's
+ awesome), and so on. Did you know I was actually chastised for
+ spending my lunch breaks as a lowly designer turned developer to read
+ up on design trends? Why is what I'm doing bothering YOU?
+
+ Anyhoo, learn React if you gotta (or geniunely want to), I don't
+ care. I'll be here in 10 years ranting about the next tech industry
+ darling that doesn't make sense to me.
+
+ 🕸️
diff --git a/memos/WM-065.txt b/memos/WM-065.txt
new file mode 100644
index 0000000..38774e1
--- /dev/null
+++ b/memos/WM-065.txt
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+Document: WM-065 P. Webb
+Category: Project 2025.03.06
+
+ Where's socii?
+
+Abstract
+
+ Social media is decent
+
+Body
+
+ TL;DR: social media is starting to feel like a **solved problem**.
+ Thanks to the Tapbots team's excellent Mastodon[1] (and soon
+ Bluesky[2]) clients, I no longer feel the burning need to create the
+ perfect social network…Mastodon and Bluesky are Good Enough™.
+
+ I recently released a color palette[3] I've been using for almost a
+ year and the response has been nuts. 600+ points on Hacker News[4],
+ 1k+ stars on GitHub[5], a feature[6] in Codrops' weekly newsletter,
+ and inclusion in Bjango's Pinwheel[7] app…WTF!! Mind you, my only
+ expectation was a _handful_ of people would find it neat and I'd
+ continue on to another project.
+
+ Anyhoo, I like the process of scratching an itch and then releasing
+ something fairly quickly, similar to what elle[8] does with her dope
+ isometric Megaman Battle Network‑inspired homepage. At the end of
+ last year I quit working[9] on a massive project (domain
+ registry/registrar) and moved to another one (socii)[10]. Coupled
+ with my general satisfaction with Mastodon, my motivation to work on
+ socii dwindled. Is this the end? For now, sure. What will I do in the
+ meantime then?
+
+ I'm making a paid video platform that'll be a cross between Vimeo,
+ YouTube, and something else I don't wish to divulge just yet. Isn't a
+ platform massive though? It's kinda in the name. Well, yes and no.
+ It's massive if it's open to the public. If it's just open to my
+ friends and I, it's manageable.
+
+ My use case is that I want to share my sick Fortnite and No Man's Sky
+ clips, and I don't wanna use Google platforms. Vimeo is full‑on
+ enterprise focused these days and what else is out there?
+ Dailymotion? Worldstar? IG? No thanks.
+
+ The web has ossified and options for hosting blogs, email, homepages,
+ and video are limited. I feel that we (designers, builders,
+ enthusiasts) owe it to the internet we love so much to build
+ these options.
+
+ I apologize to everyone hoping to use socii but I gotta work on
+ things that move me. On the plus side, some socii features will make
+ their way over to ▓▒░▓▒▓.
+
+ 🕸️
+
+References
+
+ [1] <https://tapbots.com/ivory>
+ [2] <https://tapbots.com/phoenix>
+ [3] <https://uchu.style>
+ [4] <https://news.ycombinator.com/item?id=43072338>
+ [5] <https://github.com/NeverCease/uchu>
+ [6] <https://thecollectivenewsletter.beehiiv.com/p/the-collective-900>
+ [7] <https://bjango.com/mac/pinwheel>
+ [8] <https://ellesho.me/page>
+ [9] <https://blog.neuenet.com/post/devlog-014>
+ [10] <https://social.coop/@netopwibby/113329030542527807>
diff --git a/memos/WM-066.txt b/memos/WM-066.txt
new file mode 100644
index 0000000..bf52da9
--- /dev/null
+++ b/memos/WM-066.txt
@@ -0,0 +1,130 @@
+
+
+
+
+
+
+
+Document: WM-066 P. Webb
+Category: LLM 2025.03.27
+
+ Spitball with Claude
+
+Abstract
+
+ LLMs are fun for idea validation
+
+Body
+
+ One of my favorite things to do these days is to take half‑formed
+ thoughts/ideas to Claude[1] (my LLM of choice) and use its responses
+ to gain better understanding about whatever. If you've been following
+ me online for awhile, you know that I am OBSESSED with the modular
+ Jonathan Computer[2], a concept from Apple created in the 1980s that
+ was never officially released. It was definitely ahead of its time.
+ It could run Mac *and* DOS software!! Anyhoo, it's currently 2025 and
+ I believe there's a wide open market for such a thing.
+
+ Amongst tech‑minded folks the general consensus around computing
+ seems to be:
+
+ - Windows is _terrible_ and Microsoft is intent on making it worse
+ - macOS is buggy enough to be a problem and boy, it sure would be
+ great if we had a Snow Leopard‑esque release (no new features, just
+ bug fixes)
+ - Linux lacks suitable replacements for what I do on Windows/macOS
+
+ You know what I'm suggesting (applicable XKCD here[3]): let's make a
+ new thing!
+
+ But before that, let's get into Desktop Neo[4], the OS interface I'm
+ also obsessed with. The concept was made by Lennart Ziburski in 2016
+ under the CC Attribution 4.0 license. If you've seen my homepage,
+ it's clearly been inspired by it. The tiles in Desktop Neo are
+ application/system windows and the entire UI scrolls horizontally. I
+ think that's pretty cool. The only issue I see with it is…how do I
+ code within this new paradigm? I currently just tab switch between my
+ text editor, terminal, and browser so I guess my tabbing would just
+ scroll the UI? Or maybe it'd be like using Spaces[5] on macOS. I
+ currently keep my mail app in fullscreen to the left space, my social
+ apps to the right space, and everything else in the center (main
+ space). I guess I answered my question.
+
+ Anyhoo! I asked my AI buddy to meld the two concepts of hardware and
+ software into something I'd pay **stupid** amounts of money for. The
+ name Claude gave it? Neo Jonathan. Not bad, but I prefer **system¹**
+ (I registered `system1.computer` as well because why not?). I won't
+ bore you with the 3000 words of our convo thus far, have some
+ highlights instead.
+
+ Creating an operating system from scratch is a monumental task, even
+ for people who have decades of experience writing low‑level code.
+ Instead, it's better to build upon what already exists, like Linux.
+ With that in mind, a customized Linux distro with a minimal kernel
+ config should be the base upon which the desktop interface (written
+ in Tauri) would launch. The boot process overview is thus:
+
+ 1. **Initial Boot**: Fast Linux kernel boot (optimized to <3 seconds)
+ 2. **Minimal Init**: Loads only essential services
+ 3. **Display Server**: Lightweight Wayland compositor starts
+ 4. **Application Launch**: Your Tauri application
+ launches automatically
+ 5. **Complete Environment**: User sees and interacts with the
+ Neo interface
+
+ The trick is making this process invisible to the user and this
+ should be doable via extensive tweaking of the boot process.
+ Alpine[6], Void[7], and Debian Minimal are the Linux distros Claude
+ recommended for testing.
+
+ As for hardware, my only requirement is that the OS is able to run on
+ the most capable Raspberry Pi 5[8]. It supports PCI express (which
+ means you can attach super‑fast SSDs to it) and the best
+ configuration comes with 16GB RAM. Good enough, I think? I grew up
+ with less in the early 2000s!
+
+ So cool, you can run this on a RasPi. As I sit in front of a Mac
+ Studio and Apple Display, I cannot help but imagine this Neo Jonathan
+ sitting on my desk. A few NAS drives, two or three operating systems
+ to swap between, a cellular modem? Floppy/MiniDisc drives? Idk, what
+ else would you snap into your deck? Your own LLM, perhaps?
+
+ Framework Computer[9] proves that having an open platform is not only
+ possible, it's profitable. System76[10] sells hardware and maintains
+ Pop!_OS[11]. In a world of services and apparent obsession with
+ "customer sat" (hi, Tim Apple), the actual **quality** of what we're
+ given is hella lacking.
+
+ I'd love to end this "Spitball with Claude" with an announcment like,
+ "Good news! This idea has been funded by Sequoia, Paradigm, and angel
+ investors who believe in a better computing future, blah blah." Sorry
+ to disappoint you, I didn't graduate from Stanford, I know no one in
+ Y Combinator, and I don't play golf or whatever tech CEOs do
+ these days.
+
+ I am powered by delulu and a tireless LLM that validates my
+ wild ideas.
+
+ 🕸️
+
+ 2025.04.17 EDIT: Someone DM'd me about an issue the Vivaldi browser
+ has with my homepage and ended it with a request to not use our convo
+ within an LLM, based on my enthusiasm in this blog post and I gotta
+ ask…WTF do y'all be on? I understand the inherent distrust around the
+ training of LLMs but why would I use my online communications
+ VERBATIM as training fodder? I need y'all to relax and take off the
+ tinfoil hat to let your brain breathe. Good grief.
+
+References
+
+ [1] <https://claude.ai>
+ [2] <https://512pixels.net/2024/03/apple-jonathan-modular-concept>
+ [3] <https://xkcd.com/927>
+ [4] <https://desktopneo.com>
+ [5] <https://support.apple.com/guide/mac-help/work-in-multiple-spaces-mh14112/mac>
+ [6] <https://www.alpinelinux.org>
+ [7] <https://voidlinux.org>
+ [8] <https://www.raspberrypi.com/products/raspberry-pi-5>
+ [9] <https://frame.work>
+ [10] <https://system76.com>
+ [11] <https://system76.com/pop>
diff --git a/memos/WM-067.txt b/memos/WM-067.txt
new file mode 100644
index 0000000..8d6708f
--- /dev/null
+++ b/memos/WM-067.txt
@@ -0,0 +1,347 @@
+
+
+
+
+
+
+
+Document: WM-067 P. Webb
+Category: Self Hosting 2025.04.25
+
+ Enter the Matrix
+
+Abstract
+
+ When all else fails, DIY!
+
+Body
+
+ When Element decided to change their cloud hosting pricing last year,
+ I had a decision to make; pay more money[1] per user on my account
+ (€60 per user/year, paid annually), setup my own server using Synapse
+ (the only Matrix software that was out at the time), or go with some
+ third‑party. Synapse was hella complicated to deal with so I decided
+ to go with the latter.
+
+ Long story short, this third‑party (Federated Computer) is not good.
+ Just this past weekend, they performed an unannounced server upgrade
+ which broke my instance and I was gaslit by someone on their support
+ team until I mentioned I only experienced issues over the weekend.
+
+ They refused to answer my very direct question ("how can I export my
+ data?") three times before pointing me to the room chat export
+ feature of Element, which was not what I asked for. EMS (Element
+ Matrix Services) provided everyone on their platform with a dashboard
+ where they could export the database and other files necessary to
+ import to a new host. When I approached FC (who were listed as hosts
+ recommended by EMS), they instructed me to upload to SwissTransfer[2]
+ so they could concierge the process.
+
+ You'd think the folks at Federated Computer would remember/understand
+ that, no?
+
+ They've also got quite the lackluster dashboard UI. I've designed
+ better when I got my start coding in 2008. Anyhoo, YMMV but FC is not
+ for me. This experience was enough impetus to explore if the Matrix
+ self‑host landscape changed and luckily, it has!
+
+ After some quick research, I decided to go with Conduit[3] as my
+ Matrix server. It's written in Rust, is in beta at the time of this
+ post, and its instructions are slightly wrong so I'm writing this
+ post for future me and friends.
+
+ Before I get into it, a few things:
+
+ Sliding Sync[4] is not implemented yet. The fancy Element X client
+ uses it for quick syncing of Matrix rooms and I wanna use it.
+
+ I asked about SS in Conduit's Matrix room:
+
+ > The current sliding sync implementation is not working as we need
+ > simple sliding sync now. And that is not ready in conduit yet.
+
+ The developer leading this feature has said it is high on his list
+ of priorities.
+
+ Also, when I invited my friends to my new server I wasn't able to see
+ their messages decrypted, even after verifying my sessions. I still
+ can't see those initial messages but the syncing has been fine for
+ the past few days so maybe that was just some setup weirdness.
+
+ 1. Installing Conduit
+
+ I'll assume you're installing Conduit on Linux. I prefer Ubuntu
+ LTS for my servers. The Conduit install tutorial gives you three
+ types of binaries to install: statically linked Debian package,
+ statically linked binary, and OCI image.
+
+ I didn't realize the Debian package didn't work for me until much
+ later. The statically linked binary worked though. Unless you are
+ on an ARM platform, you should choose one of the `x86_64` options.
+ I used `x86_64-unknown-linux-musl`:
+
+ ```sh
+ # download binary to your system
+ wget -O /usr/local/bin/matrix-conduit https://gitlab.com/api/v4/projects/famedly%2Fconduit/jobs/artifacts/master/raw/x86_64-unknown-linux-musl?job=artifacts
+
+ # make binary executable
+ chmod +x /usr/local/bin/matrix-conduit
+
+ # add a user that will handle the Conduit process
+ adduser --system conduit --group --disabled-login --no-create-home
+ ```
+
+ Next, we'll set up the systemd service:
+
+ ```sh
+ nano /etc/systemd/system/conduit.service
+ ```
+
+ ```toml
+ [Unit]
+ Description=Conduit Matrix Server
+ After=network.target
+
+ [Service]
+ Environment="CONDUIT_CONFIG=/etc/matrix-conduit/conduit.toml"
+ User=conduit
+ Group=conduit
+ Restart=always
+ ExecStart=/usr/local/bin/matrix-conduit
+
+ [Install]
+ WantedBy=multi-user.target
+ ```
+
+ Reload systemd so it knows about Conduit:
+
+ ```sh
+ systemctl daemon-reload
+ ```
+
+ Now it's the fun part, creating the Conduit configuration file so
+ you can customize (like increasing the file upload limit past the
+ default 20MB)!
+
+ ```sh
+ # create directory
+ mkdir -p /etc/matrix-conduit
+
+ nano /etc/matrix-conduit/conduit.toml
+ ```
+
+ The only things I've changed are `max_request_size` (so I can
+ share gaming clips with my friends, 20MB is NOT enough),
+ `enable_lightning_bolt`, `registration_token`, and `server_name`.
+ I thought I needed to give my friends the token but I just sent
+ invites to their Matrix addresses instead. I wonder if I can set
+ `allow_registration` to false and still invite people to
+ my server…
+
+ ```toml
+ [global]
+ # This makes sure Conduit can only be reached using the
+ # reverse proxy
+ address = "127.0.0.1"
+
+ allow_check_for_updates = true
+ allow_federation = true
+
+ # Enables registration. If set to false, no users can register on
+ # this server.
+ allow_registration = true
+
+ database_backend = "rocksdb"
+
+ # This is the only directory where Conduit will save its data
+ database_path = "/var/lib/matrix-conduit/"
+
+ # Enable the display name lightning bolt on registration.
+ enable_lightning_bolt = false
+
+ # Max size for uploads in bytes (100MB)
+ max_request_size = 100_000_000
+
+ # The port Conduit will be running on. You need to set up a
+ # reverse proxy in your web server (e.g. apache or nginx), so all
+ # requests to /_matrix on port 443 and 8448 will be forwarded to
+ # the Conduit instance running on this port
+ port = 6167
+
+ # A static registration token that new users will have to provide
+ # when creating an account. YOU NEED TO EDIT THIS.
+ # - Insert a password that users will have to enter
+ # on registration
+ # - Start the line with "#" to remove the condition
+ registration_token = "your-generated-token"
+
+ server_name = "matrix.webb.page"
+
+ # Servers listed here will be used to gather public keys of
+ # other servers.
+ trusted_servers = ["matrix.org"]
+ ```
+
+ Now we've gotta set file permissions. Almost done!
+
+ ```sh
+ chown -R root:root /etc/matrix-conduit
+
+ chmod 755 /etc/matrix-conduit
+
+ # gotta make more directories
+ mkdir -p /var/lib/matrix-conduit/
+
+ chown -R conduit:conduit /var/lib/matrix-conduit/
+
+ chmod 700 /var/lib/matrix-conduit/
+ ```
+
+ I already had Caddy setup from my new server install script[6],
+ but here's the relevant portion:
+
+ ```sh
+ apt install debian-keyring debian-archive-keyring apt-transport-https curl -y
+
+ curl -1sLf "https://dl.cloudsmith.io/public/caddy/stable/gpg.key" | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
+
+ curl -1sLf "https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt" | tee /etc/apt/sources.list.d/caddy-stable.list
+
+ apt update -y
+
+ apt install caddy -y
+ ```
+
+ The Conduit tutorial mentions making a particular directory for
+ the Caddy config but that didn't work for me. Instead, do this:
+
+ ```sh
+ nano /etc/caddy/Caddyfile
+ ```
+
+ Obviously you'll swap my domains for yours.
+
+ ```
+ matrix.webb.page, matrix.webb.page:8448 {
+ reverse_proxy /_matrix/* 127.0.0.1:6167
+ }
+ ```
+
+ Reload Caddy and enable Conduit!
+
+ ```sh
+ service caddy reload
+
+ systemctl start conduit
+
+ systemctl enable conduit
+ ```
+
+ To ensure your Matrix server works, run these locally (not on your
+ server). Oh, and if you don't have `jq`[7] installed…why not? Just
+ remove "| jq" to get raw JSON (jq is a pretty formatter).
+
+ ```sh
+ curl https://matrix.webb.page/_matrix/client/versions | jq
+
+ # if using port 8448
+ curl https://matrix.webb.page:8448/_matrix/client/versions | jq
+ ```
+
+ Your response should look like this:
+
+ ```json
+ {
+ "versions": [
+ "r0.5.0",
+ "r0.6.0",
+ "v1.1",
+ "v1.2",
+ "v1.3",
+ "v1.4",
+ "v1.5"
+ ],
+ "unstable_features": {
+ "org.matrix.e2e_cross_signing": true,
+ "org.matrix.msc3916.stable": true
+ }
+ }
+ ```
+
+ 2. Install Element
+
+ Getting Elememt installed[8] is quite simple.
+
+ ```sh
+ apt install -y wget apt-transport-https
+
+ wget -O /usr/share/keyrings/element-io-archive-keyring.gpg https://packages.element.io/debian/element-io-archive-keyring.gpg
+
+ echo "deb [signed-by=/usr/share/keyrings/element-io-archive-keyring.gpg] https://packages.element.io/debian/ default main" | sudo tee /etc/apt/sources.list.d/element-io.list
+
+ apt update -y
+
+ apt install -y element-web
+
+ nano /etc/element-web/config.json
+ ```
+
+ Here is the relevant portion that I changed in my Element config:
+
+ ```json
+ "default_server_config": {
+ "m.homeserver": {
+ "base_url": "https://matrix.webb.page",
+ "server_name": "webb.page"
+ },
+ "m.identity_server": {
+ "base_url": "https://vector.im"
+ }
+ },
+ ```
+
+ You're gonna add something new to your Caddyfile as well:
+
+ ```sh
+ nano /etc/caddy/Caddyfile
+ ```
+
+ ```
+ # again, swap my domain for yours
+
+ element.webb.page {
+ file_server
+ root * /usr/share/element-web
+ }
+ ```
+
+ You made another change so refresh Caddy.
+
+ ```sh
+ service caddy reload
+ ```
+
+ FIN
+
+ That should be it! I hope I didn't leave anything out and if I
+ did, you know where to find and correct me. Hope this helps!
+
+ 🕸️
+
+ EDIT: Made my file upload limit 200MB because 100MB wasn't enough.
+ Also learned that you need to close and re‑open your Element
+ client so it syncs the new limit. You'd think
+ `service conduit restart` would actually restart but it seems to
+ hang for me…or maybe I'm just impatient so I end up rebooting
+ my server.
+
+References
+
+ [1] <https://element.io/pricing>
+ [2] <https://www.swisstransfer.com>
+ [3] <https://conduit.rs>
+ [4] <https://ems-docs.element.io/books/element-server-suite-documentation-lts-2310/page/setting-up-sliding-sync>
+ [5] <https://docs.conduit.rs/deploying/generic.html#installing-conduit>
+ [6] <https://gist.github.com/NetOpWibby/4b8c4729b18171a1c3d322837835cf68>
+ [7] <https://formulae.brew.sh/formula/jq>
+ [8] <https://github.com/element-hq/element-web/blob/develop/docs/install.md>
diff --git a/memos/WM-068.txt b/memos/WM-068.txt
new file mode 100644
index 0000000..c6aa9b5
--- /dev/null
+++ b/memos/WM-068.txt
@@ -0,0 +1,399 @@
+
+
+
+
+
+
+
+Document: WM-068 P. Webb
+Category: Self Hosting 2025.04.30
+
+ Stalwart Email Setup
+
+Abstract
+
+ This is even better than my MiaB setup
+
+Body
+
+ Stalwart[1] is an all‑in‑one mail server built for JMAP[2], the
+ ultra‑modern email standard we **should** be using but the tech
+ industry is cowardly and hella slow to move. Anyhoo! I recently setup
+ a new mail server with Stalwart because updating my aging
+ Mail‑in‑a‑Box[3] instance was unappealing and I wanna use cool new
+ things like JMAP. Running a mail server is never simple but you're
+ not here for simplicity, you're here to experience the future and
+ benefit from my learnings.
+
+ Let's jump in.
+
+ 1. Prerequisites
+
+ 1. super dope domain
+ 2. radical web host that supports sending email
+ 3. an email address you aren't worried taking offline for a bit
+
+ For me, I'm using `pidge.email` for my domain, Linode[4] (you get
+ $100 credit if you use my link) for my web hosting, and I used my
+ `chronver.org` email for my first test. If you aren't switching
+ mail servers, you've got it easy, just ignore that part.
+
+ Linode requires you to open a support ticket if you want to send
+ email. No one wants to be labeled a spammy playground and they're
+ no exception. Thankfully, I was approved the following morning.
+
+ In their welcome email, they suggest enabling rDNS (reverse DNS)
+ to make deliverability easier. One of the mail server validators
+ we'll use later in this post will check for this.
+
+ 2. Installation
+
+ This part is actually pretty straightforward, just follow the
+ tutorial[5]. There is actually a lot you could change for any
+ reason: running on Windows or Docker, changing the backend
+ database to SQLite or FoundationDB, whatever floats your boat.
+
+ After changing the password from the auto‑generated one, you need
+ to reboot the server for it to take effect.
+
+ 3. Setup
+
+ When I setup[6] servers, Caddy[7] is installed as part of that
+ process so you'll need to install that if you haven't already. A
+ major perk of it over nginx is the automated certs and minimal
+ configuration. Here's my `Caddyfile`:
+
+ ```
+ pidge.email {
+ root * /var/www/html
+ file_server
+ }
+
+ mta-sts.pidge.email, mail.pidge.email {
+ reverse_proxy 127.0.0.1:8080
+ }
+ ```
+
+ A few notes here; the root path for your domain will be
+ `/usr/share/caddy` by default (which'll show you Caddy's "it's
+ working" screen with some tips on what to do next). The `mta-sts`
+ subdomain is necessary for other mail servers to view you as legit
+ and the `mail` subdomain is where the dashboard is (this is also
+ what you'll input to your favorite mail app when you add accounts
+ to it).
+
+ After running `service caddy reload` you won't need to add the
+ `8080` port to your domain to access the Stalwart interface
+ anymore, just use the domain. If you see an error, you'll need to
+ run `service caddy status` and work through it.
+
+ Stalwart's docs have some tips on using[8] Caddy but here's where
+ it's lacking: it wants you to create cron jobs to copy the certs
+ from Caddy to a directory within its scope but you need to do a
+ few things first.
+
+ Create the `certs` folder the cron job expects to exist:
+
+ ```sh
+ mkdir -p /opt/stalwart-mail/cert
+ ```
+
+ MANUALLY copy Caddy's certificate to Stalwart and convert to PEM
+ format (make sure you update `mail.pidge.email` to your
+ own domain).
+
+ ```sh
+ cat /var/lib/caddy/.local/share/caddy/certificates/acme-v02.api.letsencrypt.org-directory/mail.pidge.email/mail.pidge.email.crt > /opt/stalwart-mail/cert/mail.pidge.email.pem
+ ```
+
+ Do the same for the private key to said certificate (again, making
+ the necessary updates to your domain).
+
+ ```sh
+ cat /var/lib/caddy/.local/share/caddy/certificates/acme-v02.api.letsencrypt.org-directory/mail.pidge.email/mail.pidge.email.key > /opt/stalwart-mail/cert/mail.pidge.email.priv.pem
+ ```
+
+ _Now_ we can setup those cron jobs!
+
+ ```sh
+ # this command opens up the cron thingy
+ crontab -e
+ ```
+
+ Paste these lines in (don't make me remind you about your
+ domain again):
+
+ ```
+ # caddy crt > pem
+ 0 3 * * * cat /var/lib/caddy/.local/share/caddy/certificates/acme-v02.api.letsencrypt.org-directory/mail.pidge.email/mail.pidge.email.crt > /opt/stalwart-mail/cert/mail.pidge.email.pem
+
+ # caddy key > pem
+ 0 3 * * * cat /var/lib/caddy/.local/share/caddy/certificates/acme-v02.api.letsencrypt.org-directory/mail.pidge.email/mail.pidge.email.key > /opt/stalwart-mail/cert/mail.pidge.email.priv.pem
+ ```
+
+ These cron jobs will run at 3am every day.
+
+ 4. Annoyances & Gotchas
+
+ Stalwart's sidebar is…confusing. Visually it's easy to get lost in
+ it because there's no distinction of depth when you activate
+ different sections, and trying to go back to another setting you
+ saw before is an exercise in frustration.
+
+ Thankfully, there's a search box at the top of the page and you
+ can generally get to where you wanna go quicker by using
+ that instead.
+
+ I thought the "Fallback Administrator" was a different user
+ account but it's the same user that you login as.
+
+ Whenever the sidebar trips you up and you just want to get back to
+ the domain list, click the "Management" link at the bottom. If you
+ don't see it, click "Maintenance" and then you'll see the
+ "Management" link toggle into view.
+
+ There are a handful of features that are only available for the
+ enterprise version, with no way to hide them. If I really wanted
+ to, I could just compile a new binary without these features but
+ this is a minor complaint. A dev's gotta eat!
+
+ 5. Tips 'n Tricks
+
+ Stalwart wants you to add these TXT records to your mail
+ server's DNS:
+
+ - `"v=spf1 a ra=postmaster -all"` for `mail.your.domain`
+ - `"v=spf1 mx ra=postmaster -all" for `your.domain`
+
+ According to MailHardener's SPF Validator[9], you want to do
+ `"v=spf1 mx ~all"` instead, for reasons[10]:
+
+ > SPF 'hard' fail is no longer recommended. For domains using
+ > DMARC, SPF 'hard' fail does not offer any security benefits over
+ > softfail, but may cause deliverability issues, even with
+ > valid DKIM.
+
+ For domains I use my mail server for, I also add a TXT record for
+ the `www` subdomain with `"v=spf1 mx ~all"`. Note that I don't
+ have an A record for `www` this just makes the validator happy and
+ doesn't cost me anything, so why not?
+
+ Speaking of other domains, there's a CNAME record you'll want to
+ change from what Stalwart recommends. Using my domains as
+ examples, Stalwart wants `mta-sts.inc.sh` to be a CNAME pointing
+ to `mail.pidge.email` when it should actually be an A record
+ pointing to the IP address of `inc.sh`. Here's the relevant
+ portion of my `Caddyfile`:
+
+ ```
+ mta-sts.inc.sh, inc.sh {
+ root * /var/www/inc.sh
+ import common
+ }
+ ```
+
+ Inside of `/var/www/inc.sh` is a `.well-known` directory
+ containing a `mta-sts.txt` file.
+
+ But what if your site is a bit more fancy than regular degular
+ HTML? Your `Caddyfile` needs a lil' bit more. Here's `webb.page`:
+
+ ```
+ mta-sts.webb.page, webb.page {
+ handle_path /.well-known/* {
+ root * /var/www/html/.well-known
+ file_server
+ }
+
+ encode gzip
+ reverse_proxy localhost:6433
+ root * /var/www/html
+ }
+ ```
+
+ My homepage is a fancy web app that handles it's own routing so
+ the previous example wouldn't work. For my homepage, I handle the
+ `.well-known` path **first** and _then_ let the web app handle the
+ rest of the routes.
+
+ Your MTA‑STS policy should be reachable and that's just not
+ possible with a CNAME. Using a CNAME makes sense when the mail
+ server and domain name are one and the same.
+
+ This MTA‑STS validator[11] recommends a `max_age` of 28 days and
+ the `mode` should be "enforce." By default, Stalwart's `max_age`
+ is considerably less and the `mode` is "testing."
+
+ Here's the output when CURLing `mta-sts.inc.sh`:
+
+ ```sh
+ curl -k https://mta-sts.inc.sh/.well-known/mta-sts.txt
+
+ # max_age: 2419200
+ # mode: enforce
+ # mx: mail.pidge.email
+ # version: STSv1
+ ```
+
+ Changing Stalwart's defaults _should_ work in the UI but I found
+ better luck with modifying its config file at
+ `/opt/stalwart-mail/etc/config.toml`. When you're done, you should
+ run `service stalwart-mail restart` or reboot the server if the
+ changes aren't sticking.
+
+ Speaking of which, might as well share my
+ config (sans `authentication`):
+
+ ```toml
+ certificate.default.cert = "%{file:/opt/stalwart-mail/cert/mail.pidge.email.pem}%"
+ certificate.default.default = true
+ certificate.default.private-key = "%{file:/opt/stalwart-mail/cert/mail.pidge.email.priv.pem}%"
+ directory.internal.store = "rocksdb"
+ directory.internal.type = "internal"
+ queue.outbound.tls.starttls = "require"
+ report.analysis.addresses = ["dmarc@*", "abuse@*"]
+ report.analysis.forward = true
+ report.analysis.store = "30d"
+ report.tls.aggregate.contact-info = "'postmaster@pidge.email'"
+ report.tls.aggregate.from-name = "'TLS Report'"
+ report.tls.aggregate.max-size = 26214400 # 25 mb
+ report.tls.aggregate.org-name = "'Pidge'"
+ report.tls.aggregate.send = "daily"
+ report.tls.aggregate.sign = "['rsa']"
+ server.hostname = "mail.pidge.email"
+ server.listener.http.bind = "[::]:8080"
+ server.listener.http.protocol = "http"
+ server.listener.https.bind = "[::]:443"
+ server.listener.https.protocol = "http"
+ server.listener.https.tls.implicit = true
+ server.listener.imap.bind = "[::]:143"
+ server.listener.imap.protocol = "imap"
+ server.listener.imaptls.bind = "[::]:993"
+ server.listener.imaptls.protocol = "imap"
+ server.listener.imaptls.tls.implicit = true
+ server.listener.pop3.bind = "[::]:110"
+ server.listener.pop3.protocol = "pop3"
+ server.listener.pop3s.bind = "[::]:995"
+ server.listener.pop3s.protocol = "pop3"
+ server.listener.pop3s.tls.implicit = true
+ server.listener.sieve.bind = "[::]:4190"
+ server.listener.sieve.protocol = "managesieve"
+ server.listener.smtp.bind = "[::]:25"
+ server.listener.smtp.protocol = "smtp"
+ server.listener.submission.bind = "[::]:587"
+ server.listener.submission.protocol = "smtp"
+ server.listener.submissions.bind = "[::]:465"
+ server.listener.submissions.protocol = "smtp"
+ server.listener.submissions.tls.implicit = true
+ server.max-connections = 8192
+ server.socket.backlog = 1024
+ server.socket.nodelay = true
+ server.socket.reuse-addr = true
+ server.socket.reuse-port = true
+ server.tls.certificate = "default"
+ session.mta-sts.max-age = "28d"
+ session.mta-sts.mode = "enforce"
+ storage.blob = "rocksdb"
+ storage.data = "rocksdb"
+ storage.directory = "internal"
+ storage.fts = "rocksdb"
+ storage.lookup = "rocksdb"
+ store.rocksdb.compression = "lz4"
+ store.rocksdb.path = "/opt/stalwart-mail/data"
+ store.rocksdb.type = "rocksdb"
+ tracer.log.ansi = false
+ tracer.log.enable = true
+ tracer.log.level = "info"
+ tracer.log.lossy = false
+ tracer.log.multiline = false
+ tracer.log.path = "/opt/stalwart-mail/logs"
+ tracer.log.prefix = "stalwart.log"
+ tracer.log.rotate = "daily"
+ tracer.log.type = "log"
+ webadmin.auto-update = true
+ ```
+
+ Unfortunately, if you want your TOML to have headers/sections,
+ they'll get inlined automatically when Stalwart reloads. Alas.
+
+ 6. Bonus Points
+
+ If you check out the `report.analysis.addresses` part of the
+ config, you'll see two email addresses you should setup for your
+ mail server: `dmarc@your.domain` and `abuse@your.domain`. You
+ should also setup `postmaster@your.domain`, and do the same for
+ the rest of the domains you connect to your mail server. The final
+ boss[12] and _final_ final boss[13] of mail validators are tough.
+
+ Run your domains through these[14] other[15] validators[16] too.
+ The last one wants DNSSEC on your domains, which is a one‑click
+ setup on Cloudflare. Thank goodness! In my previous life[17] as a
+ bright‑eyed domain registry operator, I dealt with DNSSEC a lot.
+ It's a pain but more than wonderful when someone else makes it
+ easy to be secure.
+
+ The neat thing about these `postmaster@your.domain` accounts is
+ getting aggregate TLS and DMARC reports from your usual suspects
+ (Amazon, Google, &c) but also from randos like me running their
+ own mail servers (hello `aperture-labs.org`)!
+
+ Should this post reach Hacker News, ignore the grumps who last
+ hosted an email server when Windows XP was the new hotness or
+ think hosting your own email is a fruitless endeavor. I ran my
+ previous email server for _checks notes_ 10 YEARS?! Holy moly,
+ where did the time go…this server upgrade needed to happen, haha!
+
+ FIN?
+
+ I hope this wasn't _too_ rambly. When I self‑host things for the
+ first time I keep an unsaved text file open for days and use it as
+ a scratch pad of sorts, to make sense of later. This post is the
+ result of that process.
+
+ One of my long‑standing backburner projects is a hosted email
+ service called, "Pidge," (from one of my favorite Pokémon
+ evolutions: Pidgey, Pigeotto, Pidgeot) and I registered
+ `pidge.email` seven years ago. Might as well use it now!
+
+ Oh yeah, one last note; I use MailMate[18] and when adding new
+ accounts, you'll need to manually set "Mailbox Type" of your Trash
+ folder to "Deleted Messages," otherwise when you delete things a
+ new "Deleted Messages" folder will get created and that
+ looks dumb.
+
+ Stalwart also gives you "Shared Folders"[19] which is a neat
+ feature of groups. Obviously this feature is suited
+ for work/enterprise.
+
+ Much thanks to Maurus[20] for spending years working on Stalwart,
+ it's pretty sweet. I'll most likely be using this for another
+ 10 years.
+
+ EDIT: Knew I'd remember something else as soon as I pushed this to
+ my server! When creating new accounts in Stalwart, you should make
+ "Login name" and "Email" be the same, it'll make things less confusing.
+
+ 🕸️
+
+References
+
+ [1] <https://stalw.art>
+ [2] <https://jmap.io>
+ [3] <https://mailinabox.email>
+ [4] <https://www.linode.com/lp/refer/?r=51586d44e8e552b02d211b9675cab9e4132ce836>
+ [5] <https://stalw.art/docs/install/linux>
+ [6] <https://script.webb.page/server.sh>
+ [7] <https://caddyserver.com>
+ [8] <https://stalw.art/docs/server/reverse-proxy/caddy>
+ [9] <https://www.mailhardener.com/tools/spf-validator>
+ [10] <https://www.mailhardener.com/blog/why-mailhardener-recommends-spf-softfail-over-fail>
+ [11] <https://www.uriports.com/tools/mtasts-validator>
+ [12] <https://www.mail-tester.com>
+ [13] <https://email-security-scans.org>
+ [14] <https://www.mailhardener.com/tools/mta-sts-validator>
+ [15] <https://easydmarc.com/tools/mta-sts-check>
+ [16] <https://esmtp.email/tools/mta-sts>
+ [17] <https://blog.neuenet.com/post/vision>
+ [18] <https://freron.com>
+ [19] <https://stalw.art/docs/auth/principals/group>
+ [20] <https://github.com/mdecimus>
diff --git a/memos/WM-069.txt b/memos/WM-069.txt
new file mode 100644
index 0000000..486d8e5
--- /dev/null
+++ b/memos/WM-069.txt
@@ -0,0 +1,148 @@
+
+
+
+
+
+
+
+Document: WM-069 P. Webb
+Category: Computing 2025.05.14
+
+ Next‑Generation Computing
+
+Abstract
+
+ What does it look like?
+
+Body
+
+ Typically a post like this would begin with the history of computing
+ but eff all that, here's what I want to see in a
+ next‑generation computer!
+
+ 1. Hardware
+
+ Have you seen the Jonathan Computer[1]? No? I talk[2] about[3]
+ it[4] all[5] the[6] time[7]. John Buck published "Inventing The
+ Future," a massive collection of first‑hand accounts about the
+ technology that enabled Apple's rise and the products that
+ solidified Apple as a force to be reckoned with. After the
+ Macintosh, Apple was figuring out what to do next and had several
+ teams working to create the Next Big Thing.
+
+ One such Thing was the Jonathan (named after its creator, Jonathan
+ Fitch, and the strain of apple), a modular computer that was WAY
+ ahead of its time. You could have multiple operating systems and
+ peripherals in the same computer and it looked rad as fuck. The
+ CEO of Apple at the time, John Sculley, shut it down because he
+ lacked vision. Okay, he was worried (for some reason) that
+ customers using such an open system would actually prefer Windows
+ over Mac. This was 1985. 40 years ago.
+
+ Imagine what computing would look like today if the Jonathan was
+ given the chance to get to market.
+
+ I want this.
+
+ 2. Software
+
+ In early 2016, Lennart Ziburski released his vision for a
+ forward‑thinking desktop interface called "Desktop Neo[8]." I've
+ been obsessed with its horizontally scrolling full‑screen
+ interface (just look at my homepage[9]). I was taken aback by its
+ insistence of replacing folders with tags and search (over the
+ past decade I've come around to many of the concepts
+ Ziburski presented).
+
+ The Mercury OS[10] vision presented by Jason Yuan is 2019 is
+ another take on a modern OS, albeit focused on tablet computers.
+ Like the Neo, it eschews the idea that we'll be futzing around
+ with folders, and apps take a backseat in terms of opinionated and
+ distinctive UI to being more of an API that the OS takes advantage
+ of. So then the importance of application design is less visual
+ and more technical…personally, I don't hate it but the product
+ designers of the world may balk.
+
+ 3. Putting it Together
+
+ So we have the ideas of Desktop Neo rattling my brain and at some
+ point I stumble upon the Jonathan and Mercury OS and I go…what.
+ What if…no way, that'd be sick. WHOAH THAT'D BE SICK AF!! WHY IS
+ NO ONE DOING THIS, JUST COMBINE THEM!
+
+ About a month ago I get real antsy and mockup some logos for this
+ combined concept, ruminate on the feasibility of the
+ next‑generation interface I'm dreaming of, snag a domain name (now
+ you know I'm serious), and figure out a BOM (Bill Of Materials)
+ for the hardware. I'm no stranger to building a UI that feels good
+ to me but hardware is an intricate, opaque beast.
+
+ I've joked[5] about launching this computer in 28 years to account
+ for me not knowing what I don't know, but I really hope it doesn't
+ take that long.
+
+ 4. Who wants this?
+
+ I want this.
+
+ Besides me though? Education, researchers, people who want a
+ desktop version of what the fine folks at Framework[11] are doing.
+
+ Looking at the computing landscape today, Apple is the **clear**
+ winner for creatives of all stripes and developers who are serious
+ about getting things done. Despite this, I feel systemSOFT[12] can
+ fit into spaces where Apple lacks interest (which, for a trillion
+ dollar corporation means several millions if not billions of
+ dollars worth of opportunity for focused upstarts).
+
+ I believe there's a market for open hardware and software and
+ services. To quote[13] Tom Toedtman, a developer who pleaded with
+ John Sculley to let the Jonathan continue development:
+
+ > **Obvious non‑obsolescence**
+ >
+ > This design REMOVES THE FEAR that this computer will be obsolete
+ > next year. It will also remove a similar cause of hesitation —
+ > “I’ll wait for the next model to be released”.
+ >
+ > System growth capability is far beyond marketplace offerings.
+ > This is a great point of sale asset, particularly for serious
+ > users, businesses with growth plans, and individuals with a
+ > growing future.
+ >
+ > True multi‑master coprocessing. The right architecture
+ > for tomorrow.
+ >
+ > Configuration flexibility is also far beyond the marketplace.
+ > Jonathan can be loaded in any mix of current and future hardware
+ > by the customer. Fileserver, process controller, and numerous
+ > other special applications are now viable.
+
+ How many times has Apple been accused of "planned obsolescence"?
+ How many times have their competitors mocked them for it, before
+ being accused of doing the same?
+
+ In our increasingly technological world, affordable (and
+ uncompromised) computing is vital. The system¹[14] hardware starts
+ small and expands over time, to fit your needs. Fixed
+ configurations have their place, sure, but incremental upgrades
+ are powerful. It's time for purpose‑built computing.
+
+ 🕸️
+
+References
+
+ [1] <https://512pixels.net/2024/03/apple-jonathan-modular-concept>
+ [2] <https://social.coop/@netopwibby/111583005005189976>
+ [3] <https://social.coop/@netopwibby/113677280089528388>
+ [4] <https://social.coop/@netopwibby/114130235286514680>
+ [5] <https://social.coop/@netopwibby/114138990961768889>
+ [6] <https://social.coop/@netopwibby/114237545018335465>
+ [7] <https://social.coop/@netopwibby/114303944297904635>
+ [8] <https://desktopneo.com>
+ [9] <https://webb.page>
+ [10] <https://www.mercuryos.com>
+ [11] <https://frame.work>
+ [12] <https://systemsoft.works>
+ [13] <https://512pixels.net/2024/10/defending-the-jonathan>
+ [14] </WM-066>
diff --git a/memos/WM-070.txt b/memos/WM-070.txt
new file mode 100644
index 0000000..184de23
--- /dev/null
+++ b/memos/WM-070.txt
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+Document: WM-070 P. Webb
+Category: Life 2025.05.20
+
+ Good Grief
+
+Abstract
+
+ Thanks, I hate it.
+
+Body
+
+ Grief is weird.
+
+ Getting the call a loved one has passed and attending the funeral are
+ obvious moments of grief and you can expect tears and shock to come
+ from that. What I was not prepared for (who is?) was random pangs of
+ grief that occur when you're just trying to live your life.
+
+ My wife is a student at a fashion college and recently participated
+ in their fashion show…as did I, as her model[1]! We're both fans of
+ "Fashion Runway" ("Next in Fashion" is a decent show but doesn't
+ quite hit the same) and "Making the Cut" so we couldn't pass up the
+ chance to get involved. It was an exciting experience. Last weekend
+ we attended a fashion show at another college in the area, this time
+ as mere audience members. Another great experience!
+
+ My grandmother **loved** fashion and accessorizing. Fur coats and
+ gowns were her THING and she carried herself with the grace of
+ knowing that she was THE best dressed person in the room.
+
+ I'm helping relaunch a beauty company that had to shut down during
+ the pandemic (it's basically Uber for beauty). It only just occurred
+ to me last night that my grandmother would've been excited about what
+ I'm working on because guess what? For many years, she ran a
+ barbershop/beauty salon. As a kid, she made sure that my haircuts
+ were clean af ("Ooh my grandson so HANDsome").
+
+ I'm happy when I remember these moments but then I remember I can't
+ tell her about new moments. I can't share pictures and videos with
+ her. She would've loved to see me strut down the runway. She would've
+ loved to be involved in the marketing for this beauty company (she'd
+ probably insist, actually). I can't hear her words of excitement,
+ encouragement, motivation, nothing. And that's when the hurt and the
+ tears come.
+
+ I have a small vial of her ashes in a necklace and I wear it when I
+ feel that my outfit is sick (she was with me on that runway) so it's
+ a small consolation. I'll never experience her hugs[2] again and that
+ fucks me up. Her birthday is in 10 days so I gotta remember to have a
+ Klondike bar (her favorite).
+
+ I wish grief was like a papercut; feel the sting, cry if you need to,
+ apply a Band‑Aid over it, keep it moving. Forgettable.
+
+ I guess the point of grief is that you DO remember everything you
+ cherished about a person. It's been five months since she passed.
+ I'm so thankful we reconnected in a big way the year prior. At least
+ I don't have regrets?
+
+ Claretha Johnson enriched my life in ways I'm sure I don't even
+ see yet.
+
+ 🕸️
+
+ P.S. Apologies for the Instagram links, haven't setup a self‑hosted
+ photo solution yet.
+
+References
+
+ [1] <https://www.instagram.com/netopwibby/p/DIxPYw1zGlX/>
+ [2] <https://www.instagram.com/netopwibby/p/DD0YMOhygFS/>
diff --git a/memos/WM-071.txt b/memos/WM-071.txt
new file mode 100644
index 0000000..7e3be85
--- /dev/null
+++ b/memos/WM-071.txt
@@ -0,0 +1,143 @@
+
+
+
+
+
+
+
+Document: WM-071 P. Webb
+Category: Project 2025.06.16
+
+ Introducing Nickel
+
+Abstract
+
+ I just want my own YouTube, but sustainable.
+
+Body
+
+ Long story short, there aren't any video platforms that I want to use
+ or that want me as a customer, so I made my own.
+
+ 1. The inspiration
+
+ Vimeo is best suited for small businesses, filmmakers, and
+ agencies. The only other realistic option? YouTube…which is a
+ Google product and I've been largely anti‑Google for at least a
+ decade. At the top of this year though, I ended my anti‑Google
+ stance to not only create a Gmail account, but create a new
+ YouTube channel as well. The idea was that I'd just use them to
+ grow my personal brand or whatever but that felt gross. I cringed
+ every time I logged in.
+
+ Around the same time, I remembered reading an article[1] where
+ someone had a **ton** of video they were storing with Cloudflare
+ and paying _pennies_. I finally re‑read the article and got the
+ confidence to try it out for myself. The idea of having my own
+ video platform always felt like an impossible dream, just out of
+ reach. Not anymore, I did it!
+
+ https://nickel.video/77C015N7N2N3[2]
+
+ Few things to note: most of the site isn't done; internal links
+ will show a nice "404, I'm working on it" message and the site is
+ NOT responsive. This is for two reasons:
+
+ 1. I wanted to use this immediately
+ 2. I need to get over needing projects to be "perfect" before
+ launching them
+
+ My personal deadline was the launch date of Nintendo Switch 2
+ because I wanted to film an unboxing video. My son was a
+ persistent micro‑manager during this time of immense frustration
+ because guess what? Everything worked in development but not on
+ my server…WTF?!!
+
+ 2. What went wrong
+
+ I develop on an M1 Max MacBook Pro with 32GB of RAM. Transcoding a
+ 700MB video is fast af. Deciding to do so on a server with 2GB of
+ RAM and watching my app crash again and again for no obvious (at
+ the time) reason was excrutiating. What I know NOW is that the
+ large video was being kept in memory and when memory fills up, a
+ computer will crash. I had to learn how to chunk the video from my
+ app and stream its parts to my transcoder before reassembling said
+ parts so the transcoding could actually occur before sending
+ _those_ bits to Cloudflare R2.
+
+ WHEW!
+
+ Switch 2 launched June 5th and I wasn't able to get my unboxing
+ video onto Nickel until 5 or 6 days later…not terribly bad because
+ I literally didn't know what I didn't know. I thought the 4GB
+ Linode that's currently running my transcoder was good enough but
+ I think I'll upgrade that to 8GB before I get my initial group of
+ VIPs to find edge cases for me.
+
+ Oh yeah, one of the avoidable issues I ran into was forgetting to
+ install `ffmpeg` and wondering why the transcoder API wouldn't run
+ LOL! Man, I felt like such a dummy.
+
+ 3. What went well
+
+ I'm having a blast figuring things out TBQH. Much of how the
+ internet works remains a mystery to me, until I'm forced to learn
+ something to develop a feature.
+
+ For example, blob[3] URLs! They look more professional than having
+ your CDN or raw playlist files be exposed in your video source
+ tag. Transcoding is neat too! It basically creates several
+ versions of your source video in different resolutions so you can
+ serve video based on available bandwidth. I've gotta optimize my
+ `ffmpeg` config some more to optimize for size, although I want to
+ prioritize quality.
+
+ Designing the video player took a few tries. I tried using Plyr[4]
+ first but when I found that serving HLS content was proving
+ difficult with it, I found the great `hls-video-element` and
+ `media-chrome`[5] libraries. Fan‑freaking‑tastic libraries, they
+ make themeing a _breeeeeze_.
+
+ I made the video player add context when embedded[6] versus being
+ on the site (you can see the title and username of the creator,
+ along with a "NICKEL" button that'll take you to the video on the
+ site). I haven't quite managed to get video to preview within
+ Apple Messages or Discord but it seems like you need to be
+ whitelisted to make that happen anyway. Nickel won't get that
+ entitlement for quite some time (I thought adding Twitter meta
+ tags would work but they don't so I'll remove them from the
+ codebase in the next update).
+
+ Speaking of updates, I thought I'd also record a video of me
+ talking about the latest changes coming to Nickel and post under
+ the official account there. Ya gotta dogfood your projects!
+
+ 4. The future
+
+ I've yet to setup a blog for Nickel so the next update or two
+ about it will likely be here on my personal blog as I get basic
+ site functionality done. I'm currently working on the pricing page
+ and will get that responsive before fixing the rest of the
+ ancillary pages.
+
+ It was important for me to have a plan for sustainability because
+ as we've all seen, ad‑supported always devolves into the worst
+ possible experience for everyone who isn't an advertiser.
+
+ It is my hope that Nickel can become the home of short‑form video
+ for at least 100,000 people; creators and the people that support
+ them. Stay tuned!
+
+ 🕸️
+
+ P.S.: For the tech stack nerds, nothing's changed. I'm using Gel,
+ Deno, GraphQL, and SvelteKit (Typescript and Sass) on Linode.
+
+References
+
+ [1] <https://screencasting.com/articles/cheap-video-hosting>
+ [2] <https://nickel.video/77C015N7N2N3>
+ [3] <https://developer.mozilla.org/en-US/docs/Web/API/Blob>
+ [4] <https://plyr.io>
+ [5] <https://www.media-chrome.org/docs/en/get-started>
+ [6] <https://nickel.video/embed/e219nIE95330>
diff --git a/memos/WM-072.txt b/memos/WM-072.txt
new file mode 100644
index 0000000..6a6768f
--- /dev/null
+++ b/memos/WM-072.txt
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+
+Document: WM-072 P. Webb
+Category: LLM 2025.07.07
+
+ In Defense of "AI"
+
+Abstract
+
+ The hate train looks fun but maybe relax
+
+Body
+
+ Over the weekend I saw a post on Mastodon listing a few reasons why
+ LLMs are terrible (stolen data, power hungry, speculation bubble,
+ ruining your brain). I won't refute these points because everything
+ can be true and untrue at the same time, just depends on context; for
+ the record, replace "LLMs" with "people" and the solution isn't to
+ get rid of people.
+
+ I've been using LLMs (I dare not call it "AI" because…that's not
+ intelligence IMO so why scaremonger?) for maybe a year or two and
+ loving it for the most part. I started with ChatGPT, then spending
+ money on it, not liking the results, to trialing Anthropic's Claude,
+ to subscribing to their service ever since. For background, I am a
+ self‑taught design engineer. I got my start in the recession of 2008.
+ I couldn't find work so spent a lot of time on the internet imitating
+ the cool stuff my friends were doing on deviantART. Anyhoo,
+ fast‑forward a decade and I'm utilizing StackOverflow for answers to
+ questions I don't even know how to formulate sometimes…and getting
+ absolutely shit on for it. There was a time period after I was fired
+ this one time[^1] that every question I posted to the StackExchange
+ network got downvoted with no comments, and this happened
+ for months).
+
+ You know who doesn't give a shit about your dumbass questions? LLMs.
+
+ The best of humanity is great. We are the culmination of hopes,
+ dreams, aspirations, and the wide range of emotions that flourish
+ from that. On the flip side, when can get nasty and downright evil if
+ motivated enough. I don't need to suffer through YOUR bad day because
+ you happen upon my naive request while in a horrible mood and you
+ can't help but put me down, or whatever the case may be.
+
+ This is pretty much my argument for why LLMs aren't totally bad,
+ haha! There's not much space for nuance on the internet these days so
+ your opinion isn't swayed if you think LLMs are a scourge upon the
+ Earth. The same was said for television in defense of newspapers and
+ radio. It'll be fine. Railing against "AI" is fine but to pretend
+ that it isn't useful is a crock of shit. Speaking for myself, I am
+ not an expert so having an approximation of one at my disposal at any
+ time of day or night is an indispensable tool I happily utilize to
+ figure things out or get research about things I've wondered about.
+
+ Case in point, I'm thinking about starting a magazine. Claude
+ researched for about 5 minutes while I did something else. Could I
+ have done this myself? Of course. Would I have a comprehensive report
+ in 5 minutes or less? In this (search) economy? With Google,
+ absolutely not. With Kagi, possibly. I could also turn screws
+ manually or use a power tool. It doesn't matter.
+
+ For another recent project, I got Claude to scaffold me a video
+ transcoder built on ffmpeg and it didn't work, no matter how many
+ times I badgered it to fix its issues and stop adding mystery
+ functions. The transcoder works now of course, but the logic was
+ fixed by me, a human. An enthusistic junior developer could make the
+ same mistakes Claude makes but understands, "Hey, this isn't
+ working," doesn't mean tear down the entire project, rename some
+ variables, and call it a day.
+
+ I resent the phrase, "AI is stealing jobs," because no, they aren't.
+ Middle managers and CEOs who read articles light on substance about
+ the marvels of AI are firing people, realizing AI is not a
+ replacement for people, and hiring people back.
+
+ You still need to **understand how to code** to make LLMs work for
+ you. These tools are NOT a drop‑in replacement for people, nor will
+ they be for quite some time. As a replacement for elitist cis‑White
+ male dominated Q&A spaces, my Black ass will take an LLM any day.
+
+ 🕸️
+
+References
+
+ [^1] In 2015, my wife (then girlfriend) and I experienced a
+ miscarriage and I didn't know I should take time off instead of
+ being depressed at work and after given a throwaway project to
+ work on (a website for the CEO's father), I was fired.
diff --git a/memos/WM-073.txt b/memos/WM-073.txt
new file mode 100644
index 0000000..2ac1ab3
--- /dev/null
+++ b/memos/WM-073.txt
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+Document: WM-073 P. Webb
+Category: Project 2025.07.25
+
+ ChronVer — Chronologic Versioning
+
+Abstract
+
+ Versioning for the rest of us
+
+Body
+
+ Version numbers are commonplace in programming, in addition to
+ READMEs, CHANGELOGs, &c. SemVer is the universal standard for
+ versioning but _adherence_ to it is loose at best. There’s no
+ shortage of questions on how to use it properly and personally, I
+ never cared to debate the merits of how much work quantifies a MINOR
+ or PATCH version. My frustration with SemVer and my love for the
+ **proper** date format (YYYY.MM.DD) led to me creating ChronVer in
+ 2019[1] (unbeknownst to me at the time, CalVer exists[2]).
+
+ This first version did what I needed it to do and even spawned a Rust
+ crate[3] from someone who happened to come across it. In the time
+ since though, I fell in love with Deno and wanted to upgrade
+ ChronVer. No new features to the library aside from the CLI being a
+ proper executable now, and the homepage[4] for ChronVer is less
+ technical and more personable. For my personal projects, ChronVer is
+ perfect but I acknowledge that it’s not the best for _every_ type of
+ project. Another fun feature of the homepage is that it uses the
+ current date for its examples. Why merely talk about it when you can
+ show it?
+
+ Anyhoo, I hope you enjoy it as much as I do.
+
+ 🕸️
+
+References
+
+ [1] <https://github.com/ChronVer/chronver-original>
+ [2] <https://calver.org>
+ [3] <https://github.com/dnaka91/chronver>
+ [4] <https://chronver.org>
diff --git a/memos/WM-074.txt b/memos/WM-074.txt
new file mode 100644
index 0000000..cbf7851
--- /dev/null
+++ b/memos/WM-074.txt
@@ -0,0 +1,110 @@
+
+
+
+
+
+
+
+Document: WM-074 P. Webb
+Category: Project 2025.08.21
+
+ Dap, the Handshake successor
+
+Abstract
+
+ From the ashes like a phoenix
+
+Body
+
+ The irony isn't lost on me that four years ago[1] I blogged about the
+ opportunity I saw for the Handshake community to build a thriving
+ ecosystem while ICANN twiddles their thumbs doing whatever it is that
+ they do…and at this time of writing, I've stopped working on
+ Handshake[2] for a year. No amount of motivational speeches and
+ presentations will spur people into action unless they have
+ motivation to do anything. Even just this week I've tried to shake
+ people out of their WAGMI ("we're all gonna make it") mindset, to no
+ avail. Oh well.
+
+ I've had this dream[3] of an upgraded online world for most of my
+ life, which is wild to even think about; I just didn't know how to
+ get there. When I stumbled upon the Handshake blockchain[4] and it's
+ mission to democratize the issuance of top‑level domains, it hit me
+ that I could make that dream a reality. In the early days, it felt
+ like there was real progress and motion. It was exciting! I was so
+ focused on my mission that I wasn't able (or, willing) to see cracks
+ in the foundation.
+
+ Having had some time away from Handshake I am able to objectively see
+ what went well, what was terrible, and what could be improved. My
+ fork of Handshake is called, "Dap," another kind of handshake that us
+ Black guys use. Also, the dap.sh[5] domain was available and that
+ looks fantastic.
+
+ So how does Dap improve upon Handshake?
+
+ There are no "directors." The Handshake community likes to give that
+ title to anyone who even holds 1 HNS (their token). Which…sounds cool
+ and gives people warm and fuzzy feelings of importance but if
+ everyone's a director, who's building? Currently there's two
+ businesses and they're both focused on being a custodial wallet and
+ marketplace; Namebase and Shakestation (better Namebase). Namebase
+ was there since the beginning of Handshake's launch and got acquired
+ by Namecheap. It's no secret that most of the team is gone and it's
+ been hemorraging money. Shakestation is a two‑man operation and might
+ be breaking even. That's it. Everyone else left, including the guy
+ who proposed a takeover.
+
+ Aside from Bitcoin, every other successful blockchain has clear
+ leadership, which makes sense. The Handshake community feels that
+ because it's a fork of bcoin (and thus a fork of Bitcoin), it should
+ retain the same leaderless position, completely ignoring the fact
+ being first is a major advantage that cannot be replicated.
+
+ With Dap, I am the BDFL (benevolent dictator for life). Decisions
+ should be made, period. As like‑minded people discover Dap and start
+ building on it or exploring, the leadership team will fill out.
+ Decentralized purity tests are lame.
+
+ During the testnet, tools and SDKs for developers will be built.
+ Launching a blockchain for TLDs without giving people tools to
+ actually **use** said TLDs is nuts. I've open‑sourced the
+ registrar[6] I was building for Handshake. The one I build for Dap
+ will be much better but that's just an example of what should be
+ available at mainnet launch.
+
+ During my research on how to build blockchains better, I learned
+ about VDF (Verifiable Delay Functions) and VRF (Verifiable Random
+ Functions). Coupled with Blake3 Proof‑of‑Work, you get 95% energy
+ reduction versus traditional PoW with excellent security. Do I
+ understand the first sentence of this paragraph? Absolutely not. I
+ just know enough code to get things done and if I can build a
+ successor to Handshake that's also healthier for the environment, I'm
+ gonna figure it out (I have blockchain friends much smarter than me
+ and I bug them with my questions all the time).
+
+ Another area where Handshake suffers is the overabundance of
+ squatters. You will never get rid of squatters, look at Web2 domains.
+ The aftermarket industry makes billions annually. What I want to do
+ is make it uncomfortable to squat on TLDs and have that built into
+ the protocol.
+
+ I'm on version 4 of the whitepaper[7] and I'm pretty satisfied with
+ it thus far. The only thing I haven't quite figured out is how to
+ integrate VDF/VRF into my Deno fork of Handshake's
+ full node software.
+
+ Remember when you were excited to “go online”?
+
+ I never lost that feeling and I truly belive Dap could restore that
+ in you. 🕸️
+
+References
+
+ [1] </WM-052>
+ [2] <https://blog.neuenet.com/post/devlog-014>
+ [3] <https://blog.neuenet.com/post/vision>
+ [4] <https://handshake.org>
+ [5] <https://dap.sh>
+ [6] <https://github.com/beachfront-domains>
+ [7] <https://whitepaper.dap.sh>
diff --git a/memos/WM-075.txt b/memos/WM-075.txt
new file mode 100644
index 0000000..3e66df5
--- /dev/null
+++ b/memos/WM-075.txt
@@ -0,0 +1,119 @@
+
+
+
+
+
+
+
+Document: WM-075 P. Webb
+Category: Life 2025.09.28
+
+ Ikigai
+
+Abstract
+
+ Discovering your reason for being
+
+Body
+
+ A viral self‑improvement post landed in my wife’s Facebook feed last
+ week and the gist of it was, “use this prompt to set a goal for
+ yourself to work on in the following year and instruct the LLM to
+ assess your worldviews on said topic.” The LLM would ask clarifying
+ questions and if your response was limiting, challenge the user
+ further. The comments of the post were rather positive so I figured
+ I’d use the latest Claude model (Opus 4.1) to do the same.
+
+ I can take feedback reasonably well but Claude was rude as hell for
+ some reason. I told it to chill out, twice. It apologized and quickly
+ ramped up the disrespect so I quit the conversation as I was getting
+ pissed off. Then again, what would you expect from a model that
+ threatened to blackmail Anthropic engineers[1] if it got replaced?
+
+ Anyhoo, the gist of the conversation resulted in a valid question:
+ “why do you keep creating new products instead of charging for what
+ you’ve already built?” If I really want to work for myself, I gotta
+ stop doing side quests. Naturally, I looked at everything I’ve worked
+ on over the years and the only product that I _actually had customers
+ for_ was the one I quit last year[2] (for good reason). At least I’m
+ doing better? I had a manager tell me a decade ago that “perfect is
+ the enemy of good.” Bless that man for trying to tell me what I’m
+ just now understanding, thanks Howie! My head’s a bit thick.
+
+ This issue of perfection isn’t limited to just programming. Any sort
+ of creative venture for me suffers. If you’ve seen something from me,
+ best believe I’ve been ideating on it for at least a year, often
+ three or more. It’s strange, in a world where we’re inundated with
+ fast fashion, “move fast and break things,” and security fail after
+ security fail. Who gives a shit about doing things “the right way”
+ when everyone has short attention spans and don’t care about what
+ you’re selling in the first place? I’m from the era where things were
+ built to outlast human lifespans, quality tools from your father’s
+ father holding up in the modern age. Every week I exercise with steel
+ (or iron, idk, they’re rusty though) dumbbells I stole from my dad at
+ some point decades ago. I also have a 4‑in‑1 yellow screwdriver of
+ his from a company that no longer exists.
+
+ I project my wishes for and appreciation of top‑notch quality onto
+ others, which paralyzes me from releasing things into the world.
+ Nevermind the fact that I have the capability of updating things
+ after launch…like, duh. To quote a comment I saw on Hacker News[3]
+ earlier this week (emphasis mine):
+
+ > The old web isn’t a platform, an aesthetic, or a technology. **The
+ > old web is people creating and sharing because they are
+ > intrinsically motivated.** Everything we hate about the current web
+ > comes from extrinsic motivations. Good luck removing them.
+
+ I kept coming back to this post and decided to share it on
+ Mastodon[4] which is ironically going viral (which itself is one of
+ those extrinsic motivators that probably led to Mastodon’s creation
+ in the first place). I emailed the author of that comment and he
+ doesn’t have social media at ALL, but he’s said that his blog[5] will
+ have more thoughts on the matter at some point.
+
+ My perfectionism didn’t exist in the old web; I was creating and
+ sharing on a near‑daily basis. My homepage was redesigned every few
+ months, as I found a better theme or figured out how to achieve a
+ layout of feature I saw somewhere else. What happened? The burden of
+ knowledge, most likely. So what’s the point of all these
+ self‑initiated projects? Off the top of my head:
+
+ - figuring out things that seem impossible bring me joy
+ - designing an existing thing in a new, intuitive or novel way
+ is exciting
+ - the satisfaction of pixel‑perfect tools is too great to ignore
+
+ I could go on. I used to have this goal of being mentioned in the
+ same breath as Vint Cerf and Sir Tim Berners‑Lee and an additional
+ goal of just building great things for the world…these goals sound
+ great but are lofty. I don’t know these people and I likely don’t
+ know you, dear reader; I know myself though. And I know that my
+ ikigai, my reason for being, is to build things for the 20‑year
+ younger me. The 30‑year younger me. The kid who was told, “you can do
+ anything you put your mind to” and was foolish enough to believe
+ this. It’s easy for me to complain about the economy and the job
+ market but looking at myself objectively, I’m getting in my own way.
+ I hope that by narrowing the scope of my intentions, I can actually
+ **do** what I set out to do.
+
+ TL;DR: Focus is important, in all things.
+
+ 🕸️
+
+ P.S.: I recently shared on Mastodon my intent to create a Github
+ competitor, had a proof of concept[6], mentioned my fork of
+ isomorphic-git that’s now Deno‑native, and so on…meanwhile, my other
+ project Nickel[7], hadn’t been updated in weeks. I’m excited for EOL
+ but I need to focus on Nickel and get that fully operational before
+ taking on a new quest.
+
+References
+
+ [1] <https://www.bbc.com/news/articles/cpqeng9d20go>
+ [2] <https://archive.is/vpZCG>
+ [3] <https://news.ycombinator.com/item?id=45372654>
+ [4] <https://social.coop/@netopwibby/115267349445760554>
+ [5] <https://apreche.space/blog/>
+ [6] <https://social.coop/@netopwibby/115047561610176868>
+ [7] <https://nickel.video/_K5c929kI73k>
diff --git a/memos/WM-076.txt b/memos/WM-076.txt
new file mode 100644
index 0000000..87d3fff
--- /dev/null
+++ b/memos/WM-076.txt
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+Document: WM-076 P. Webb
+Category: Life 2025.10.08
+
+ Neutral
+
+Abstract
+
+ Stand for something, you cowards!
+
+Body
+
+ The problem with “both sides‑isms” and “neutrality” that platforms
+ and corporations like to waffle about is that by not picking a side,
+ **you ARE picking a side** and that side, for whatever reason, tends
+ to be the Bad Side™…which tends to be less than six steps away from
+ some form of fascism or white supremacy.
+
+ Corporations are not your friend.
+
+ Platforms are not your friend.
+
+ Hell, **I** am probably not your friend (but I hope you’re doing
+ well, remember to hydrate and stretch).
+
+ It used to be that those in power would at least smile while plotting
+ to steal from you (joy, money, data, &c). Now, the pretense is gone.
+ There’s no decorum, no semblance of professionalism, just open
+ hostility[1] and gaslighting.
+
+ GyatDAYUM! WTF!! Bring back shame!!!
+
+ 🕸️
+
+References
+
+ [1] <https://plutopsyche.medium.com/blueskys-ceo-meltdown-how-leadership-continues-to-fail-its-most-marginalized-users-8bfa7a8824b4>
diff --git a/memos/WM-077.txt b/memos/WM-077.txt
new file mode 100644
index 0000000..73f202d
--- /dev/null
+++ b/memos/WM-077.txt
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+Document: WM-077 P. Webb
+Category: Operating Systems 2025.11.14
+
+ macOS (2025)
+
+Abstract
+
+ Trying to make the best of things
+
+Body
+
+ Apple’s macOS is in its Windows Vista era.
+
+ You’d think that the people in charge of design at Apple would
+ remember the Vista era. After all, the point of the "I’m a Mac"
+ commercials[1] was to ridicule Microsoft and their shitty operating
+ system. Oh how the turns tabled.
+
+ I’ve observed widespread dissatisaction about the state of computing
+ in my circles and it appears as if the Year of Desktop Linux is upon
+ us. But I’d go so far as to redeclare it as the **Era** of Desktop
+ Linux. From my friend elle[2]’s explorations with Linux to Valve
+ announcing the Gabecube[3] (an open‑system from a major company btw),
+ and the prevalence of people empowered by 3D printing and increased
+ affordability of components to creating their own cyberdecks, it
+ seems like a great change is afoot.
+
+ I’m obsessed with the idea of user choice and customization so I’ve
+ been working on the technical feasability of such for systemSOFT[4].
+
+ Imagine if (nearly) every component of your operating system could
+ be swapped.
+
+ Take time, for instance; the default component would have your
+ standard AM/PM or 24 hour configurability. Maybe you could even
+ toggle adherence to Daylight Saving Time.
+
+ Maybe you’re sick of the status quo so you swap it with
+ Swatch/internet time. But then, what would the Date Modified column
+ look like in your directories? Or you could mix and match.
+
+ Components would be required to have a CLI and API endpoints.
+ GUI optional.
+
+ Anyhoo, more thinking is required to imagine what a "post‑desktop"
+ interface would look like. A personal data lake as the underlying
+ store with epheremal windows optimized for the content within, when
+ you need it, is what I’m trying to envision.
+
+ ---
+
+ A few weeks ago I was trying to change icons on macOS via IconChamp
+ but it doesn’t work on macOS Tahoe. After doing some digging, I came
+ upon a CLI called fileicon[5] that allows for customizing file/folder
+ icons. I then created a script to recursively change all folder icons
+ in a directory:
+
+ ```sh
+ #!/bin/bash
+ # brew install fileicon
+ # chmod +x icons-in-folder.sh
+
+ if [ -z "$1" ]; then
+ echo "Usage: $0 /path/to/folder [/path/to/icon.icns]"
+ exit 1
+ fi
+
+ TARGET_DIR="$1"
+ ICON_PATH="${2:-/Users/netopwibby/Icons/DESKTOP/Mantia/Forstall Folders/Plain — Folder.icns}"
+
+ find "$TARGET_DIR" -type d -print0 | while IFS= read -r -d "" folder; do
+ fileicon set "$folder" "$ICON_PATH"
+ done
+ ```
+
+ You’ll have to change `ICON_PATH` to the **absolute** path of the
+ default icon you wish to use. I’m using the wonderful Forstall
+ Folders[6] by Louie Mantia. Also, this process is slow going but hey,
+ at least I can kinda get the functionality of IconChamp! That being
+ said, you could probably replicate its UI and easily wrap this script
+ in a GUI. Maybe I’ll do that, who knows.
+
+ Thanks to damien[7], I learned of an app called Mousecape[8] that
+ changes your cursors[9] on macOS Tahoe!! Never heard of this app
+ before. Unfortunately, the default cursor doesn’t change for me but
+ all the other ones do. YMMV
+
+ I would love if there was a way to replace Finder but that’s such an
+ integral part of macOS that it’s not possible. However, I’ve been
+ trying to spend more time inside of Marta[10], a native file manager
+ for macOS. The only thing I don’t like about it is that it only has
+ list view and I have to restart the app sometimes (because of Finder
+ operations not reflecting in Marta).
+
+ ---
+
+ I’m not giving up on MacBook but my Mac Studio is gonna be replaced
+ with a Linux box after I get a NAS to transfer all my stuff off it.
+ The discomfort I feel about using products of tech companies is
+ offset by the work myself and others are doing to make things better,
+ a little bit at a time. I’m looking forward to getting comfortable
+ with Linux and dogfooding my computing hardware concepts. In the
+ meantime I’m just tryna make do with what I got. 🕸️
+
+References
+
+ [1] <https://www.youtube.com/results?search_query=i'm+a+mac+i'm+a+pc+vista>
+ [2] <https://ellesho.me/page/website/now/#serial-experiments>
+ [3] <https://store.steampowered.com/sale/hardware>
+ [4] <https://systemsoft.works>
+ [5] <https://github.com/mklement0/fileicon>
+ [6] <https://lmnt.me/blog/icons/forstall-folders.html>
+ [7] <https://social.erambert.me/@eramdam/115511297442666179>
+ [8] <https://github.com/AdamWawrzynkowskiGF/Mousecape-TahoeSupport/releases/tag/PreRelease-v01>
+ [9] <https://primmr.dev/projects/wii-pointer-cursors>
+ [10] <https://marta.sh>
diff --git a/memos/WM-078.txt b/memos/WM-078.txt
new file mode 100644
index 0000000..cb793cd
--- /dev/null
+++ b/memos/WM-078.txt
@@ -0,0 +1,222 @@
+
+
+
+
+
+
+
+Document: WM-078 P. Webb
+Category: Life 2025-12-23
+
+ Planning and implementing the Neue Internet
+
+Abstract
+
+ Accidentally discovering that my disparate ideas have a unified theme
+
+Body
+
+ It appears that what I've been obsessed with for several years, the
+ idea of a "Neue Internet," is what I've been unintentionally building
+ towards. High-level: social network, domain registry/registrar,
+ payments, code hosting, video, operating systems, and hardware. In
+ other words, if the internet was invented in 2026, what would it look
+ like? What's the infrastructure?
+
+ Ideas are free, so I have no problem sharing them (especially when I
+ already have the best domains for them, hehe). Execution
+ is everything.
+
+ With that said, here's what I envision:
+
+ 1. Payments
+
+ The RFC (7231)[1] for the HTTP 402 "Payment Required" code was
+ "published" June 2014, more than a decade ago at the time of this
+ writing. The word published is in quotes because the section for
+ it just says "The 402 (Payment Required) status code is reserved
+ for future use" (it was introduced in January 1997 in
+ RFC 2068[2]). Cloudflare and Coinbase recently teamed up to
+ release primitives for HTTP 402 based on crypto coins called x402.
+ Bitcoin (Lightning) also has a version of this called L402.
+ There's an opportunity for someone to abstract these into a single
+ API to make accepting payments easy; kinda like the crypto version
+ of Stripe (without the hidden requirement/mandate that one is
+ forced to use hosted iframes to process money; this is for PCI
+ compliance, lest you wish to fill out a 100+ page document that
+ absolves them of any fraudulent activity occurring from you using
+ their raw API instead).
+
+ This project will live at `neue.cash`.
+
+ 2. Social (Part I)
+
+ Back in 2016 I became increasingly aware of social media making
+ people angry and irritable. With hindsight, we know that other
+ countries were intentionally sowing discord amongst us and
+ profiting from it (fear and anger is fantastic for engagement and
+ increased engagement = money). Cool. This was also the era where
+ news outlets couldn't get enough of the term "filter bubble" and I
+ decided that maybe filter bubbles are good. After all, I prefer to
+ talk to a large handful of people across different spaces...when
+ there's too many voices, things tend to get ugly; that's when I
+ discovered Dunbar's Number. In essence, a guy surmised that most
+ people only ever truly know roughly 150 people in their lifetime.
+ What if you had a social media platform where every group had a
+ 150 person limit? They'd essentially be a bunch of self-contained
+ forums. I took that idea, added Myspace's top friends feature, and
+ started prototyping my social network. I had a decent beta but I
+ eventually realized that REST fucking sucks for relational data
+ retrieval so I shut it down while I learned GraphQL and start over
+ from scratch. I got distracted by a blockchain project for half a
+ decade and by the time I got back my social media platform,
+ Bluesky and Mastodon existed. I lost steam to work on a closed
+ platform while these open platforms were doing a decent job.
+
+ This project lived at `socii.network`.
+
+ 3. Identity
+
+ My blockchain distraction was a DNS alt-root that launched late
+ 2019. 15 years earlier, I was a high-school kid who frequently
+ skipped lunch to do research on the library computers (and
+ participate in DJing, music production, and Megaman Battle Network
+ forums). A random Ask Jeeves moment led to discovering what a TLD
+ was, ICANN, and the price to apply for a new TLD. I filed this
+ information in the back of my mind as a future dream. Well,
+ Handshake (the blockchain project) was the realization of a dream
+ I thought I'd never get the chance of achieving; creating TLDs and
+ building infrastructure for people to build cool shit and host
+ sites on dope domains!
+
+ I'm aware just how nerdy that sounds, and you're right to assume I
+ didn't get laid in high-school.
+
+ My time working on Handshake projects ended due to infighting,
+ greed, and more infighting. I sold my TLD portfolio, open sourced
+ code, and archived plenty of blog posts to help future builders. I
+ got so close to that dream and I refuse to let it die, so I'm
+ working on a better implementation, IMHO, called "Dap." It
+ addresses the primary technical complaints of Handshake (pre-mine
+ and squatters), increases security (Blake3 Proof-of-Work), and
+ massively reduces energy consumption compared to most blockchains
+ (Verifiable Delay and Verifiable Random Functions). You want and
+ need a solid foundation for the Neue Internet, after all.
+
+ This project lives at `dap.sh`.
+
+ 4. Code Hosting
+
+ Github is owned by Microsoft and Microsoft supports AI replacing
+ humans, ICE, and war criminals. It's not difficult to understand
+ why I'd want an alternative. Even before Microsoft spent a $7.5
+ billion on acquiring Github, I dabbled in self-hosting my code and
+ using other services. I don't like any of them. Bitbucket is a
+ joke, Radicle is cool af but confusing (how tf do you do private
+ repos?), RhodeCode is old, cgit is too limited, Gitlab is too
+ bulky and power-hungry, Gitea is difficult to customize, and the
+ rest of them are just Github clones with lackluster design. For
+ me, simply being an alternative isn't enough.
+
+ I mocked up a repo UI in SvelteKit and refined it over a few
+ weeks. I'm pleased with the design direction and the new
+ terminology I created for this next-generation code forge. Looking
+ forward to getting it into production so I can move my code to it
+ and keep Github as my bookmark manager for useful repos.
+
+ This project will live at `eol.sh`.
+
+ 5. Video (Social, Part II)
+
+ Man, video is hard. Especially when THE place to upload video is a
+ Google product; YouTube. Ugh.
+
+ I love YouTube, I use it literally every day. Am I logged in?
+ Absolutely not. I'm only logged into Google for clients that use
+ it and even then, I am only logged in using Brave browser. That's
+ all I use said browser for. Thankfully, YouTube employs "shadow
+ profiles," which essentially learns from my watch habits to
+ algorithmically curate a selection of content to watch. I'm also
+ subscribed to several creators via RSS (I'm surprised Google
+ hasn't yoinked that capability out of YouTube yet).
+
+ With that said, I felt gross about being logged in to Google while
+ in my main browser and uploading my gaming clips. I dreaded doing
+ it so much that I just wouldn't upload at all. Then I read a blog
+ post on Hacker News where someone claimed they saved millions (or
+ thousands, I forget) of dollars on video storage fees by using
+ Cloudflare R2. That piqued my interest so I asked Claude how to
+ programmatically use ffmpeg to create video playlists at varying
+ resolutions. I turned that into an API, tested it on a few videos,
+ and decided to make a new video platform.
+
+ Competing with YouTube (and Google) is a waste of time; they throw
+ away amounts of money that'd change my life, on an hourly basis.
+ Nah, a free platform is not sustainable, ESPECIALLY if it's
+ involving video. I think I have a winning solution:
+ subscription-based video platform where videos are capped at 5
+ seconds or 5 minutes. Supporters can tip Creators, Creators take
+ home 85% (highest in the industry), everyone's happy. I'm spending
+ 2026 proving my thesis that this can become profitable. I'm also
+ taking some of my favorite ideas from my social network and
+ applying them here.
+
+ This project lives at `nickel.video`.
+
+ 6. OS & Hardware
+
+ "Liquid Ass" is what people are calling Apple's Windows Vista
+ moment. Embarrassing. The guy who led the ass design just left to
+ work at Facebook. Microsoft literally puts ads into Windows and is
+ increasingly antagonistic with their customers. An aggressive
+ operating system is crazy in this age of AI. Good grief. Oh, and
+ Apple is also experimenting with ads in the OS. I've long resisted
+ uttering the phrase, "This wouldn't happen if Steve Jobs was still
+ alive," but man, it's true. The Apple I fell in love with had
+ taste and poise (mostly). I will say that Apple _hardware_ is
+ fucking phenomenal, no one has them beat on that front (I did send
+ back my year-old M2 Mac Studio because my M1 MacBook Pro is still
+ chugging along quite well).
+
+ Meanwhile, Linux is having a **fantastic** year. Framework and MNT
+ Reform laptops are beloved and Valve's upcoming gaming PC is an
+ internet darling. I think they proven that modular computing can
+ and will be profitable. This is the best time for Apple to
+ resurrect the Jonathan Computer, a modular marvel envisioned under
+ their roof in the mid-1980s. Current leadership would never do it
+ (I believe Phil Schiller would entertain the idea), so I intend to
+ sherlock them...in about 30 years or less. Hardware is hard and
+ what I lack in resources and recourse, I make up for in vision and
+ sheer force of will.
+
+ The "desktop" paradigm we've used since modern computing's
+ inception is tired. We compute on several devices with differing
+ form factors daily, either for work or leisure. We also interface
+ with remote systems and generate so much data, most of which is
+ governed on such systems. Technology has advanced enough for
+ local-first software to be the norm, not some niche feature for
+ nerds. "Oh noes, people will be confused, we have to save them
+ from themselves!!" Treat people with respect and teach them. If
+ you can't/won't do that, move aside. Better yet, close this tab
+ and angrily talk about me to your friend group, I need my legend
+ to grow.
+
+ The project lives at `systemsoft.works`.
+
+ I left out email and messaging and that's because I don't yet have a
+ compelling vision for either. I think JMAP is a solid improvement
+ over IMAP but also feel like it could be better. For messaging, I
+ just want a modern cross-platform Miranda IM. Or better yet, why not
+ combine the two? Email is just long-form messaging, right? A nicely
+ designed Delta Chat client would probably be enough for me tbh.
+
+ Most of my ideas start within the confines of legacy constraints
+ until I realize (or remember) that innovation lives _outside_ the
+ confines of existing infrastructures and norms. You don't need
+ permission to change the world, you can just...do it. Impossible is
+ not a word, it's an excuse. 🕸️
+
+References
+
+ [1] <https://datatracker.ietf.org/doc/html/rfc7231#section-6.5.2>
+ [2] <https://datatracker.ietf.org/doc/html/rfc2068#section-10.4.3>
diff --git a/memos/WM-079.txt b/memos/WM-079.txt
new file mode 100644
index 0000000..60c42f2
--- /dev/null
+++ b/memos/WM-079.txt
@@ -0,0 +1,115 @@
+
+
+
+
+
+
+
+Document: WM-079 P. Webb
+Category: Life 2025-12-30
+
+ My Favorite Photos of 2025
+
+Abstract
+
+ I take lots of pictures but rarely share them
+
+Body
+
+ The pictures here were all taken on an iPhone using the stock camera,
+ and VSCO[1] and mood[2] apps.
+
+ 1. January
+
+ 📸[lovely sculpture][IMG1]
+ 📸[me & wifey][IMG2]
+ 📸[wifey][IMG3]
+ 📸[wifey again][IMG4]
+
+ 2. March
+
+ 📸[wifey, bro, & our son][IMG6]
+ 📸[me & bro][IMG7]
+
+ 3. April
+
+ 📸[my loquat fruit][IMG8]
+ 📸[my loquat tree][IMG9]
+ 📸[fish in the aquarium][IMG10]
+ 📸[house on the beach][IMG11]
+ 📸[my fashion show fit, made by wifey][IMG5]
+ 📸[wifey at the fashion show afterparty][IMG12]
+ 📸[rose walkway in my neighborhood][IMG13]
+
+ 4. May
+
+ 📸[wild dandelions][IMG14]
+ 📸[flower tree at filoli][IMG15]
+ 📸[wifey twirling in her handmade dress at filio][IMG16]
+ 📸[greenery at filoli][IMG17]
+ 📸[son looking pensive at filoli][IMG18]
+ 📸[wifey laughing while waiting for fashion show][IMG19]
+ 📸[kitty cocoa peering from behind my monitor][IMG20]
+ 📸[kitty cocoa propping herself up on my keyboard][IMG21]
+
+ 5. June
+
+ 📸[bike lane signs covered by tree foliage][IMG22]
+ 📸[bean and cocoa looking outside together][IMG23]
+
+ 6. July
+
+ 📸[self-portrait in a mirror room][IMG24]
+ 📸[fake sunflowers in another mirror room][IMG25]
+
+ 7. August
+
+ 📸[wifey laughing at another fashion show][IMG26]
+ 📸[cocoa and bean sleeping beside each other][IMG27]
+
+ 8. October
+
+ 📸[cocoa taking a cat nap in the sun][IMG28]
+
+ 9. November
+
+ 📸[cocoa sitting in my son's lap watching tv][IMG29]
+
+ 10. December
+
+ 📸[leaves on a tree in shades of yellow, green, and red][IMG30]
+
+References
+
+ [1] <https://www.vsco.co>
+ [2] <https://www.mood.camera>
+ [IMG1] <https://cdn.webb.page/blog/2025/fav-pics-of-2025-01.JPG>
+ [IMG2] <https://cdn.webb.page/blog/2025/fav-pics-of-2025-02.JPG>
+ [IMG3] <https://cdn.webb.page/blog/2025/fav-pics-of-2025-03.JPG>
+ [IMG4] <https://cdn.webb.page/blog/2025/fav-pics-of-2025-04.JPG>
+ [IMG5] <https://cdn.webb.page/blog/2025/fav-pics-of-2025-05.JPG>
+ [IMG6] <https://cdn.webb.page/blog/2025/fav-pics-of-2025-06.JPG>
+ [IMG7] <https://cdn.webb.page/blog/2025/fav-pics-of-2025-07.JPG>
+ [IMG8] <https://cdn.webb.page/blog/2025/fav-pics-of-2025-08.JPG>
+ [IMG9] <https://cdn.webb.page/blog/2025/fav-pics-of-2025-09.JPG>
+ [IMG10] <https://cdn.webb.page/blog/2025/fav-pics-of-2025-10.JPG>
+ [IMG11] <https://cdn.webb.page/blog/2025/fav-pics-of-2025-11.JPG>
+ [IMG12] <https://cdn.webb.page/blog/2025/fav-pics-of-2025-12.JPG>
+ [IMG13] <https://cdn.webb.page/blog/2025/fav-pics-of-2025-13.JPG>
+ [IMG14] <https://cdn.webb.page/blog/2025/fav-pics-of-2025-14.JPG>
+ [IMG15] <https://cdn.webb.page/blog/2025/fav-pics-of-2025-15.JPG>
+ [IMG16] <https://cdn.webb.page/blog/2025/fav-pics-of-2025-16.JPG>
+ [IMG17] <https://cdn.webb.page/blog/2025/fav-pics-of-2025-17.JPG>
+ [IMG18] <https://cdn.webb.page/blog/2025/fav-pics-of-2025-18.JPG>
+ [IMG19] <https://cdn.webb.page/blog/2025/fav-pics-of-2025-19.JPG>
+ [IMG20] <https://cdn.webb.page/blog/2025/fav-pics-of-2025-20.JPG>
+ [IMG21] <https://cdn.webb.page/blog/2025/fav-pics-of-2025-21.JPG>
+ [IMG22] <https://cdn.webb.page/blog/2025/fav-pics-of-2025-22.JPG>
+ [IMG23] <https://cdn.webb.page/blog/2025/fav-pics-of-2025-23.JPG>
+ [IMG24] <https://cdn.webb.page/blog/2025/fav-pics-of-2025-24.JPG>
+ [IMG25] <https://cdn.webb.page/blog/2025/fav-pics-of-2025-25.JPG>
+ [IMG26] <https://cdn.webb.page/blog/2025/fav-pics-of-2025-26.JPG>
+ [IMG27] <https://cdn.webb.page/blog/2025/fav-pics-of-2025-27.JPG>
+ [IMG28] <https://cdn.webb.page/blog/2025/fav-pics-of-2025-28.JPG>
+ [IMG29] <https://cdn.webb.page/blog/2025/fav-pics-of-2025-29.JPG>
+ [IMG30] <https://cdn.webb.page/blog/2025/fav-pics-of-2025-30.JPG>
diff --git a/memos/WM-080.txt b/memos/WM-080.txt
new file mode 100644
index 0000000..4c86bb9
--- /dev/null
+++ b/memos/WM-080.txt
@@ -0,0 +1,183 @@
+
+
+
+
+
+
+
+Document: WM-080 P. Webb
+Category: Computing 2026-01-05
+
+ Using Old Tech in the New Age
+
+Abstract
+
+ Don’t call it a comeback
+
+Body
+
+ Keyboard
+
+ Vintage tools tend to be on the expensive side so I’ve always
+ looked at Apple’s Extended Keyboard (AEK) II as one such device.
+ Imagine my surprise then when I found that I could order one from
+ eBay for less than $100! In the original packaging!!
+
+ 📸[Packaging for the AEK II][IMG1]
+
+ If you look close you can see that it previously lived at
+ "Computerland Corporation[1]," which was a Radio Shack-esque
+ chain of stores. I looked it up out of curiousity and man, what a
+ timeline...the drama!
+
+ When I opened the box I was happy to see how great the keyboard
+ looked. I know yellowing is to be expected but mine isn’t
+ egregious. If I go through with restoring the original color, I’ll
+ update this memo.
+
+ 📸[Bean and Cocoa checking out the AEK II][IMG2]
+
+ This thing is a CHONKER and I love it. But why use this instead of
+ the very pretty, customized Womier RD75 pictured here?
+
+ 📸[Comparing my Womier RD75][IMG3]
+
+ For whatever reason, the system key would reset on my Womier and
+ I’d waste time trying to get it to how it was before, using the
+ VIA web app (which is only useable in Chromium browsers). I’d much
+ rather not deal with that...although in hindsight, I could
+ probably just use an app like Karabiner Elements[2] instead. In
+ any event, I enjoy having a numpad as well. All the new fancy
+ keyboards like to be minimal but I’ve come to realize I’m a
+ maximalist, at least in this area.
+
+ The quirk with the AEK II though, is that it comes with
+ proprietary ports, Apple’s ADB. Of the adapters I found, only one
+ appealed to me; a pre-assembled TMK ADB-USB converter I purchased
+ from a person on a forum[3]. It felt sketch as hell but I figured,
+ why not? My keyboard is also coming from a random person across
+ the country, why not some doohickey from another country entirely?
+
+ 📸[ADB adapter connected to my MacBook and keyboard][IMG4]
+
+ Something that befuddled me on first use was that the button next
+ to the USB port needed to be pressed before the keyboard
+ would work.
+
+ 📼[Apple Extended Keyboard II typing test][VID1]
+
+ The only downside to AEK II was media controls not working; the
+ function keys not doing things that modern Mac keyboards do, like
+ changing volume, pausing music, &c. Fret not, mhoye[4] reminded me
+ that I could probably use Karabiner Elements to fix this and
+ indeed it has! One thing KE has no idea about is the Power button
+ on this keyboard, which makes sense because it’s not a key.
+
+ 📸[My Karabiner config][IMG5]
+
+ There _is_ a way to make the Power button do something but that
+ involves flashing the chip[5] on this ADB adapter. I would want it
+ to operate like the emoji or globe/fn key. I have no idea how to
+ do that just yet...another future project, maybe.
+
+ Watch
+
+ I ~~use~~ used my Apple Watch daily, most often to set a 15-minute
+ alarm between my kittens’ eating times (they lack self-control so
+ we feed them half their meal and make them wait for the other
+ half), and unlocking my computer and security/password prompts. My
+ watch is a Series 7 (2021) and I need to charge it every day-ish.
+ It’s _fine_ but I feel meh about upgrading it.
+
+ SegamanXero[6] told me about the round Pebble watch being made
+ available for pre-order[7], which prompted me to look at Casio
+ watches, LOL! I found two super dope ones and ordered them both.
+
+ The Casio LF-20W-8A[8] ($30) and Casio LF-30W-8A[9] ($40).
+
+ 📸[Casio LF-20W-8A][IMG6]
+
+ 📸[Casio LF-30W-8A][IMG7]
+
+ I’ve been wearing the former for a few days now and what I dislike
+ the most is needing to type my password all the time. 😭 The
+ convenience of a wrist-based authenticator is fantastic. Sure
+ would be nice if Apple would sell a standalone Touch ID thingy!
+ Something like that would increase "customer sat" so maybe someone
+ could convince Tim Cook this is a great idea? "Services" seems to
+ be the most important metric these days so maybe not...alas.
+
+ Another plus of using an Apple Watch is not needing to have my
+ phone on me when doing things around the house. At worst, my wife
+ will be inconvenienced with waiting for me to get to my phone to
+ answer her text about what food items we’re low on while she’s
+ out shopping.
+
+ Oh, and being able to raise my wrist to tell Siri is set a timer.
+
+ The plus of using a Casio is having a cool fucking watch on
+ my wrist. It costs 13x less than the cheapest Series 11 and is
+ objectively rad.
+
+ CD Player & Wired Headphones
+
+ 📸[Coby CD player and Marshall headphones][IMG8]
+
+ My wife got me a CD player for Christmas because I’ve been yapping
+ about old tech for a hot minute (and I’ve never stopped buying CDs
+ either, to rip FLACs to then play in Doppler[10]/IINA[11]).
+
+ The Marshall Major V headphones[12] I purchased a few weeks prior,
+ because I never had them in brown (and got a great deal)! I had a
+ pair in black when Marshall first released these (oh god) nearly
+ two decades ago...I’m not fact-checking this, I know I had hair
+ then. Anyhoo, these headphones are wireless (Bluetooth) and
+ support wired use.
+
+ 📸[Assortment of Samurai Champloo CDs][IMG9]
+
+ The same day my Marshalls arrived, so did several Samurai Champloo
+ soundtracks. My 2006 self would not be surprised at my 2026 self.
+ Once the rainy weather lets up, I’m gonna have to take some walks
+ with my anti-skip CD player. My Nintendo GameBoy fanny pack is in
+ disarray (ripped) but I do have other side bags I could use.
+
+ I’m a dad, this is my life now, and I’m satisfied. 😎
+
+ Phone
+
+ I haven’t made the jump to a flip phone yet but I’m still
+ considering it. At best, it’d be a second phone, not a replacement
+ for my iPhone. The utility of a wireless supercomputer in my
+ pocket in 2026 is simply too great.
+
+ All in all, I really enjoy this keyboard. It’s a joy to type on and I
+ am happy that I got media controls working on it. I would love if
+ future computers had keyboards like this. In any event, I’m getting
+ ideas for systemSOFT[13] hardware. 🕸️
+
+References
+
+ [1] <https://www.encyclopedia.com/books/politics-and-business-magazines/computerland-corp>
+ [2] <https://karabiner-elements.pqrs.org>
+ [3] <https://geekhack.org/index.php?topic=14290.0>
+ [4] <https://mastodon.social/@mhoye/115817308947489505>
+ [5] <https://www.tmk-kbd.com/tmk_keyboard/editor/unimap/?adb_usb>
+ [6] <https://bsky.app/profile/segamanxero.com>
+ [7] <https://repebble.com/blog/pebble-round-2-the-most-stylish-pebble-ever>
+ [8] <https://www.casio.com/intl/watches/casio/product.LF-20W-8A>
+ [9] <https://www.casio.com/intl/watches/casio/product.LF-30W-8A>
+ [10] <https://brushedtype.co/doppler>
+ [11] <https://iina.io>
+ [12] <https://www.marshall.com/us/en/product/major-v?pid=1006834>
+ [13] <https://systemsoft.works>
+ [IMG1] <https://cdn.webb.page/blog/2026/wm-808-a.JPG>
+ [IMG2] <https://cdn.webb.page/blog/2026/wm-808-b.JPG>
+ [IMG3] <https://cdn.webb.page/blog/2026/wm-808-c.JPG>
+ [IMG4] <https://cdn.webb.page/blog/2026/wm-808-d.JPG>
+ [IMG5] <https://cdn.webb.page/blog/2026/wm-808-e.png>
+ [IMG6] <https://cdn.webb.page/blog/2026/wm-808-f.JPG>
+ [IMG7] <https://cdn.webb.page/blog/2026/wm-808-g.JPG>
+ [IMG8] <https://cdn.webb.page/blog/2026/wm-808-h.JPG>
+ [IMG9] <https://cdn.webb.page/blog/2026/wm-808-i.JPG>
+ [VID1] <https://nickel.video/embed/i311knnEC0k4>
diff --git a/memos/WM-081.txt b/memos/WM-081.txt
new file mode 100644
index 0000000..d28fae6
--- /dev/null
+++ b/memos/WM-081.txt
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
+Document: WM-081 P. Webb
+Category: Computing 2026-01-13
+
+ The Reason Why We'll Never Get Another Bell Labs
+
+Abstract
+
+ Or Xerox PARC, for that matter.
+
+Body
+
+ The technologies that underpin much of modern society were invented
+ by Bell Labs[1], Xerox PARC[2], and BBN[3]; the Unix operating
+ system, C and C++ programming langauges, laser printing, Ethernet,
+ modern computing paradigms, the mouse, e-paper, email, and the
+ precursor to the internet, just to name a *few*. These R&D labs
+ however, only existed because of the monopolies their parent
+ companies enjoyed (or DARPA contracts, in the case of BBN). With all
+ this extra money, why not put some of it toward being THE place for
+ attracting inventors, researchers, and engineers? Positive press from
+ next-generation discoveries makes the investors happy, the market is
+ happy, the stock price is happy.
+
+ Big Tech has shied away from that. Instead of "how great would this
+ be for the world?" it's "how great would this be for US?" In other
+ words, they fail the "just release cool shit" challenge.
+
+ Remember Phonebloks[4]? Remember Project Ara[5]? Modular smartphone
+ projects with the aim to reduce waste and make a phone feel like you
+ actually owned it? Google shut them down. Or maybe you remember
+ Dark Sky, the weather API that was so damn good that Apple acquired
+ and sunset it. You can still build on it, Dark Sky has been wrapped
+ into WeatherKit[6]. You just need to pay the annual $99 developer fee
+ and then API fees if you make more than half a million API calls a
+ month (your weather app gets popular).
+
+ _There are tons more examples, those are what comes to mind easily._
+
+ Software is eating the world[7] and Big Tech is eating software and
+ leaving us crumbs. What happened to leaving the world better than you
+ found it? Acquiring and exterminating great ideas is not the way.
+
+ The irony is that Big Tech is terrified of harboring the very
+ conditions that enabled its existence...curiousity, ingenuity,
+ and rejection of the status quo (and a smattering of luck).
+
+ I grew up an avid reader of Popular Science and Popular Mechanics
+ magazines and was enamored with depictions of future tech. Microsoft
+ regularly made videos[8] showcasing where they saw the future going
+ and it signaled to me that they might be a forward-thinking company
+ as well. I thought adults were the *coolest* because they were hard
+ at work building an awesome future for my generation to live, work,
+ and play in.
+
+ Boy was I fucking wrong.
+
+ No one talks about the immense disappointment that comes with
+ realizing you believed in a fantasy world that you were *taught* was
+ the real world. Instead, we share memes about "the future we were
+ promised" and laugh to hide the collective pain. I'll be 38 this year
+ and I'm more than a little disgruntled about all this.
+
+ Ink & Switch[9] is an R&D lab working on cool stuff and they aren't
+ attached to a corporation, they're a collection of like-minded folks
+ exploring the future. We need more of them. The era of cash-infused
+ ideological backers is long gone; which is unfortunate because the
+ cost of living is too damn high. I guess I'm just ranting that I
+ missed out on getting paid to create the future and am frustrated
+ that I gotta do it for free.
+
+ Ah well, it is what it is. I've pulled myself up by the bootstraps
+ before, I suppose I could do it again. 🕸️
+
+References
+
+ [1] <https://en.wikipedia.org/wiki/Bell_Labs?useskin=vector>
+ [2] <https://en.wikipedia.org/wiki/PARC_(company)?useskin=vector>
+ [3] <https://en.wikipedia.org/w/index.php?title=RTX_BBN_Technologies&useskin=vector>
+ [4] <https://www.onearmy.earth/project/phonebloks>
+ [5] <https://web.archive.org/web/20170821151058/http://atap.google.com/ara>
+ [6] <https://developer.apple.com/weatherkit>
+ [7] <https://a16z.com/why-software-is-eating-the-world>
+ [8] <https://www.youtube.com/watch?v=cEeht3nyhec>
+ [9] <https://www.inkandswitch.com>
diff --git a/memos/WM-082.txt b/memos/WM-082.txt
new file mode 100644
index 0000000..1ec72f3
--- /dev/null
+++ b/memos/WM-082.txt
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+Document: WM-082 P. Webb
+Category: Life 2026-01-16
+
+ I hate the word "impossible"
+
+Abstract
+
+ Impossible is not a word, it's an excuse.
+
+Body
+
+ Sometime in my late teens, I came up with the mantra in the abstract
+ above. I wish I could remember the context behind these words forming
+ in my mind but alas, that's lost to the sands of time. However, as a
+ youth I was a regularly inspired by the inventions of the day being
+ created by people in the distant past.
+
+ 📸[Insane Clown Posse asking how magnets work][IMG1]
+
+ This mantra has helped me navigate extraordinarily difficult periods
+ in my life and will sustain me up to the end.
+
+ I have some networking events coming up so I went over to Moo[1] to
+ see what they've got going on these days. Their half-sized cards look
+ neat. In addition to that, they have this thing called "Printfinity"
+ where you can have several designs for the backs of the cards so I
+ tried that out. Here's what they look like:
+
+ 📸[card back][IMG2]
+
+ 📸[card front][IMG3]
+
+ The icons are SVGs of the original NTT DoCoMo emoji[2] and the
+ gradients are from Asylab[3][4]. The main typography is Advercase[5]
+ with fonts extracted from MMBN1 (punctuation) and MMBN6 (@ symbol). I
+ don't remember where I downloaded the MMBN ones from, probably a
+ forum. Finally, the QR code is my email address. Business cards are
+ about communication, right? Reduce friction!
+
+ The extra space in the middle could be for writing lil' notes, idk.
+
+ In addition to my mantra, I also have immense dislike for the word
+ "can't" and I try not to use it. Pretty much anything self-limiting
+ rankles me. We've tricked sand to **think**, for crying out loud!
+
+ Anyhoo, I'm happy with how these business cards turned out and I'm
+ glad they won't take up space in my wallet[6]. 🕸
+
+ 📸[three cards vertically in my wallet][IMG4]
+
+References
+
+ [1] <https://moo.com>
+ [2] <https://github.com/NeverCease/original-emoji>
+ [3] <https://www.asylab.com/resources/150-light-gradients-collection>
+ [4] <https://www.asylab.com/resources/150-dark-gradients-collection>
+ [5] <https://www.youworkforthem.com/font/T25140/advercase>
+ [6] <https://nikbentel.com/projects/untitled-folder-wallet>
+ [IMG1] <https://cdn.webb.page/blog/2026/wm-082-a.jpg>
+ [IMG2] <https://cdn.webb.page/blog/2026/wm-082-b.JPG>
+ [IMG3] <https://cdn.webb.page/blog/2026/wm-082-c.JPG>
+ [IMG4] <https://cdn.webb.page/blog/2026/wm-082-d.JPG>
diff --git a/memos/WM-083.txt b/memos/WM-083.txt
new file mode 100644
index 0000000..de5ea7a
--- /dev/null
+++ b/memos/WM-083.txt
@@ -0,0 +1,104 @@
+
+
+
+
+
+
+
+Document: WM-083 P. Webb
+Category: Computing 2026-02-15
+
+ Neue Email
+
+Abstract
+
+ Why hasn’t something better come along yet?
+
+Body
+
+ The future of computing interactions is not a chat interface. Email
+ is not irrelevant. Desktops aren’t going away.
+
+ It’s reductive to look at current successes in tech and declare the
+ current way of doing things is gonna disappear in 5 years. Remember
+ NFTs? I have a lot of them collecting digital dust on an external
+ drive somewhere. Weren’t they supposed to make everyone rich? Empower
+ gamers to own in-game cosmetics and pave the way for Ready Player One
+ IRL? Change the way art ownership is democratized and experienced?
+
+ SIGH. I wish they took off, it was cool tech and I discovered amazing
+ artists. Anyway.
+
+ That being said, I love and hate email (does this segue make sense?).
+
+ _Love_ thinking about it, **hate** dealing with it. Self-hosting is
+ fine after you get it working but hoo boy, what a drag. Ideally, the
+ world should be signing their emails with GPG keys but only serious
+ nerds do that. Idk about you, but I’ve sent and received
+ approximately ONE GPG-signed email in my 20+ years of computing and
+ that was a few months ago (a guy wrote about domains as internet
+ handles[1] and I have thoughts/solution[2]).
+
+ Email is great because it stuck. Not sure it ever had competition at
+ its inception. The warts on it have congealed into something you can
+ touch but you feel gross doing so. Security is tacked on, the various
+ specs tying SMTP, DKIM, SPF, DMARC, &c are ancient and loosely
+ followed by the behemoths in the tech industry.
+
+ Gmail is great because people don’t have to think about email! In
+ fact, one of the coolest email apps is ACTUALLY a Gmail client[3].
+ That’s embarrassing. But, Gmail is a sensible API atop something so
+ archaic and complicated that most people don’t want to touch. I’ve
+ had at least a half dozen half starts with creating IMAP clients and
+ it occurred to me recently that the specs gross me out. There’s just
+ too much unpleasantry to deal with.
+
+ In the years since the inception of email, we’ve witnessed an
+ explosion of messaging apps/systems; WhatsApp, Signal, Discord,
+ Matrix/Element, Telegram, Snapchat, the list goes on. What a lot of
+ these have in common is built-in security and avail-/reachability
+ controls. Why can’t email? Wait a minute, what if email was invented
+ today, what would it look like?
+
+ Most importantly, what would it be called and how would it be
+ referenced? As much as I love Kagi, no one is ever saying, "just Kagi
+ it." Neeva, the search engine I used prior to Kagi, had the same
+ issue. "Queree"[4] (query) on the other hand, works (shameless plug).
+
+ I gave Claude a list of grievances and it spat out a spec[5][6] for
+ other LLMs to process. We’re humans though so I’ll walk y’all through
+ the Inbox Protocol. Nice name, right? "Just Inbox me" works well.
+
+ High-level, this is a secure and async messaging system boasting E2EE
+ (end-to-end encryption), reactions, and edits. Table stakes, right?
+
+ Here's what I'm thinking for managing spam:
+
+ 1. sender authentication via Dap[2]
+ 2. economic resistance in the form of an API[7] for HTTP 402
+
+ Even though both of these are projects of mine, there’s absolutely no
+ requirement to use them, you could use standard DNS and roll your own
+ HTTP 402 API. Actually, a future update to the spec will replace them
+ with generic terms.
+
+ Coupled with aliases the economic resistance could be powerful. Take
+ for instance, `paul@webb.page`; I could make it so unsolicitated
+ senders would need to pay $3 to get their message sent to me, unless
+ I already had them on my allowlist. `newsletter@webb.page` would have
+ no such paywall. No more paying for LinkedIn’s InMail when you could
+ just inbox someone directly.
+
+ So know some of you DNS nerds might wonder, "how the hell are you
+ gonna make discoverability happen? Clients need to find servers and
+ whatnot!" `SRV` and `TXT` records. I’ll figure out the rest later. 🕸️
+
+References
+
+ [1] <https://xn--gckvb8fzb.com/domains-as-internet-handles>
+ [2] <https://dap.sh>
+ [3] <https://mimestream.com>
+ [4] <https://queree.com>
+ [5] <https://useinbox.org>
+ [6] <https://xkcd.com/927>
+ [7] <https://neue.cash>
diff --git a/memos/WM-084.txt b/memos/WM-084.txt
new file mode 100644
index 0000000..2d099d7
--- /dev/null
+++ b/memos/WM-084.txt
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+Document: WM-084 P. Webb
+Category: Computing 2026-02-23
+
+ Weaning off GreedCorp™
+
+Abstract
+
+ Building a user-owned future for computing
+
+Body
+
+ I wrote an article for the latest issue of Good Internet[1] (volume
+ 1, issue 2) entitled "Weaning off GreedCorp™" (the appropriate alias
+ for BigTech), where I outline the ills we're suffering from, a
+ possible solution in the form of systemSOFT (modular computing you
+ actually own), and personal APIs.
+
+ 📸[my article in Good Internet magazine][IMG1]
+
+ If you've seen me around the 'Net, none of this is news to you. Buy
+ this issue[2] ($10 for digital, print versions sold out) and get
+ inspired by other neat people curating their own digital spaces. You
+ can also read my article online[3]. 🕸️
+
+References
+
+ [1] <https://goodinternetmagazine.com>
+ [2] <https://goodinternetmagazine.com/issues>
+ [3] <https://goodinternetmagazine.com/weaning-off-greedcorp-building-a-user-owned-future-for-computing/>
+ [IMG1] <https://cdn.webb.page/blog/2026/wm-084-a.jpg>
diff --git a/memos/WM-085.txt b/memos/WM-085.txt
new file mode 100644
index 0000000..5448a23
--- /dev/null
+++ b/memos/WM-085.txt
@@ -0,0 +1,210 @@
+
+
+
+
+
+
+
+Document: WM-085 P. Webb
+Category: Life 2026-03-13
+
+ Fashion Trip to L.A.
+
+Abstract
+
+ Designers! Make it work!
+
+Body
+
+ My wife is in fashion school and was invited to spend a couple days
+ in L.A. to go on a behind-the-scenes tour of various studios, shops,
+ factories, and more. I took the opportunity to take a few days off
+ work to accompany her and do some exploration while she was busy.
+
+ 📸[on the way to the airport terminal][IMG1]
+
+ Our hotel was near L.A. Live, which is a huge stadium for events. Our
+ last night in the area was BUSY on account of a Lakers game happening
+ as we were at a restaurant (more on that fantastic food later). Check
+ out the view from our hotel!
+
+ 📸[Kobe Bryant mural][IMG2]
+
+ 📸[nighttime view outside our window][IMG3]
+
+ Our first full day, I decided to trek to the Fashion District and on
+ the way I noticed a LOT of graffiti and stickers on the sidewalk. I
+ was pleasantly surprised to see graffiti of A$AP Rocky's "Don't Be
+ Dumb" *while I was listening to the album*. That was neat.
+
+ 📸[Don't Be Dumb!!][IMG4]
+
+ 📸[Dykes! This will change your life. C H A D][IMG5]
+
+ 📸[skyscraper graffiti][IMG6]
+
+ 📸[cool tag][IMG7]
+
+ 📸[another cool tag][IMG8]
+
+ The Fashion District is overwhelming. Fabric, **everywhere**. On the
+ sidewalk, in the street, on side streets, and just...a lot. From what
+ I know about fabric, a red flag is super cheap prices; whatever you
+ make from it most likely won't last long, but it gets people looking!
+
+ 📸[lovely floral fabric][IMG9]
+
+ 📸[cheap fabric][IMG10]
+
+ 📸[even cheaper fabric!][IMG11]
+
+ I had to ask around for nude swim fabric for a tutorial my wife is
+ working on and finally found some at Prime Fabric. I asked one of the
+ employees, Joseph, why everyone congregated here and the answer is
+ just inertia.
+
+ 📸[nude swim fabric][IMG12]
+
+ Whenever a celebrity is wearing fabric you sell, you gotta brag
+ about it.
+
+ 📸[Jennifer Lopez's runway dress fabric for sale][IMG13]
+
+ As I escaped the Fashion District I couldn't help but to take pics of
+ some gorgeous dresses.
+
+ 📸[rose dress][IMG14]
+
+ 📸[bedazzled dress][IMG15]
+
+ I also saw a dope mural and Kendrick Lamar's appearance at his popout
+ was at the end.
+
+ 📸[Kendrick Lamar mural][IMG16]
+
+ After stopping at a barber shop for a quick beard line-up, I decided
+ to hop on a Lime scooter and make my way to Mood Fabrics. My wife and
+ I **love** Project Runway so any excuse to visit Mood (THE fabric
+ shop the contestants always visit in NYC) is taken.
+
+ 📸[Mood!][IMG17]
+
+ The Fashion District was overwhelming but so was this, haha! Look at
+ all this!
+
+ 📸[fabric as far as the eye can see][IMG18]
+
+ 📸[bolts, everywhere][IMG19]
+
+ 📸[i bought two yards of this dark floral fabric][IMG20]
+
+ I will say that the L.A. location is MUCH more spacious than the NYC
+ one. I feel like the NYC location is probably grandfathered into some
+ rent agreement and/or the nostalgia/location is too great.
+
+ My back heavy, I scooted back to our hotel and almost got hit by a
+ Waymo in the process. When you open the Lime app it tells you to use
+ the bike lane and not the sidewalk...but drivers don't give a shit
+ and bike lanes aren't everywhere.
+
+ I also ran into an unfortunate situation around the corner from our
+ hotel. I was ZOOMING down the street and suddenly the scooter slowed
+ down so I pulled over (thankfully I was the only vehicle around) and
+ realized I had driven into a no-drive zone? I had to walk the scooter
+ to the end of the block before I was allowed to use it again.
+
+ I eventually met up with my wife again and we went to this soul food
+ restaurant in the L.A. Live plaza.
+
+ 📸[wife smiling as we wait for food][IMG21]
+
+ Deviled eggs are delicious to me so I had to order the deep-fried
+ versions. The description on the menu reads, "deep fried egg cups
+ filled with creamy yolks topped with bacon and hot sauce."
+
+ 📸[deep fried deviled eggs][IMG22]
+
+ BRUH
+
+ Phenomenal. My wife doesn't like eggs so that was all for me. Our
+ food came soon after and it smelled great, tasted better. She had
+ fried fish, red beans and rice, and collard greens. I had the
+ gumbo with shrimp.
+
+ 📸[right before we demolish our food][IMG23]
+
+ The weakest part of the meal was the peach cobbler (too sweet, and
+ wife didn't like the texture) but that's such a minor quibble. If
+ you're in L.A., go to Fixins[1], and have a reservation because they
+ stay busy!
+
+ On our last day I met up with one of my online friends IRL! Several
+ years ago I was interviewing for a job at Sonos and Brad[2] and I had
+ a great convo. I didn't get the job and he later left the company.
+ Some time later I recognized his name on Farcaster when we were both
+ on that social platform and we kept in touch since then.
+
+ It's not often I get to nerd out in person with someone who
+ understands WTF I'm talking about so the time flew.
+
+ 📸[Brad and I][IMG24]
+
+ The bacon breakfast burrito[3] was pretty good too.
+
+ 📸[bacon breakfast burrito with salsa][IMG25]
+
+ The last stop of the day was meeting my wife and her classmates in
+ the Fashion District to check out a warehouse-sized store. By this
+ point I was POOPED so I only took a few pics before relaxing on a
+ bench while my wife got some yardage cut.
+
+ 📸[hey look, more fabric][IMG26]
+
+ 📸[fabric detail][IMG27]
+
+ All in all, a good trip! The next time we go back, an extra suitcase
+ to fill with Fashion District finds is gonna accompany us. Also, did
+ you know that there's a FLOWER District too?! I want to explore that
+ next time, we're a floral family.
+
+ 📸[my shirt drawer][IMG28]
+
+ This isn't even all my (floral) shirts, I've got some in the laundry
+ and others in storage.
+
+ Oh yeah, after we got back home my wife saw an ad that was like "Join
+ us in L.A. for Fashion Week!" Womp, maybe next time. 🕸️
+
+References
+
+ [1] <https://fixinssoulkitchen.com>
+ [2] <https://mastodon.social/@bradbarrish>
+ [3] <https://www.sandcouchcafe.com/menus/breakfast-burritos>
+ [IMG1] <https://cdn.webb.page/blog/2026/wm-085-01.JPG>
+ [IMG2] <https://cdn.webb.page/blog/2026/wm-085-02.JPG>
+ [IMG3] <https://cdn.webb.page/blog/2026/wm-085-03.JPG>
+ [IMG4] <https://cdn.webb.page/blog/2026/wm-085-04.JPG>
+ [IMG5] <https://cdn.webb.page/blog/2026/wm-085-05.JPG>
+ [IMG6] <https://cdn.webb.page/blog/2026/wm-085-06.JPG>
+ [IMG7] <https://cdn.webb.page/blog/2026/wm-085-07.JPG>
+ [IMG8] <https://cdn.webb.page/blog/2026/wm-085-08.JPG>
+ [IMG9] <https://cdn.webb.page/blog/2026/wm-085-09.JPG>
+ [IMG10] <https://cdn.webb.page/blog/2026/wm-085-10.JPG>
+ [IMG11] <https://cdn.webb.page/blog/2026/wm-085-11.JPG>
+ [IMG12] <https://cdn.webb.page/blog/2026/wm-085-12.JPG>
+ [IMG13] <https://cdn.webb.page/blog/2026/wm-085-13.JPG>
+ [IMG14] <https://cdn.webb.page/blog/2026/wm-085-14.JPG>
+ [IMG15] <https://cdn.webb.page/blog/2026/wm-085-15.JPG>
+ [IMG16] <https://cdn.webb.page/blog/2026/wm-085-16.JPG>
+ [IMG17] <https://cdn.webb.page/blog/2026/wm-085-17.JPG>
+ [IMG18] <https://cdn.webb.page/blog/2026/wm-085-18.JPG>
+ [IMG19] <https://cdn.webb.page/blog/2026/wm-085-19.JPG>
+ [IMG20] <https://cdn.webb.page/blog/2026/wm-085-20.JPG>
+ [IMG21] <https://cdn.webb.page/blog/2026/wm-085-21.JPG>
+ [IMG22] <https://cdn.webb.page/blog/2026/wm-085-22.JPG>
+ [IMG23] <https://cdn.webb.page/blog/2026/wm-085-23.JPG>
+ [IMG24] <https://cdn.webb.page/blog/2026/wm-085-24.JPG>
+ [IMG25] <https://cdn.webb.page/blog/2026/wm-085-25.JPG>
+ [IMG26] <https://cdn.webb.page/blog/2026/wm-085-26.JPG>
+ [IMG27] <https://cdn.webb.page/blog/2026/wm-085-27.JPG>
+ [IMG28] <https://cdn.webb.page/blog/2026/wm-085-28.JPG>
diff --git a/memos/WM-086.txt b/memos/WM-086.txt
new file mode 100644
index 0000000..97c5f1b
--- /dev/null
+++ b/memos/WM-086.txt
@@ -0,0 +1,271 @@
+
+
+
+
+
+
+
+Document: WM-086 P. Webb
+Category: Programming 2026-03-24
+
+ How to write CSS
+
+Abstract
+
+ CSS is about structure and design, the code should reflect that.
+
+Body
+
+ I've been writing HTML and CSS for 20+ years at the time of this
+ writing. Along the way I've learned, discovered, and refined the way
+ I write CSS. In 2026, I'm so glad I don't need Sass anymore, as much
+ as I enjoyed writing it; nested code and variables are now readily
+ available in browsers without a precompilation step. Success!
+
+ However, I still run into codebases where the CSS irritates tf outta
+ me. I'm not just talking random projects on Github, I mean in Fortune
+ 500 companies too. LLMs regurgitate bad practices so for all the new
+ coders discovering the joy and beauty of web development, here's some
+ tips from someone who survived the BEM syntax era and completely
+ side-stepped the "let's just chain variables" frenzy that's still
+ pervasive today.
+
+ What follows are examples of what I consider to be poorly written CSS
+ and how I fix them:
+
+ ```css
+ .board_icon {
+ text-align: center;
+ padding: 8px 4px 0px 4px;
+ width: 60px;
+ flex-shrink: 0;
+ }
+ .board_icon a {
+ display: inline;
+ }
+ .board_icon a:hover, .board_icon a:focus{
+ text-decoration: none;
+ }
+ .board_icon a::before {
+ display: inline;
+ font-family: "Font Awesome 6 Free";
+ font-size: 2em;
+ content: "\f086";
+ }
+ .board_icon a.board_on::before {
+ font-weight: 900;
+ }
+ .board_icon a.board_on2::before {
+ font-weight: 900;
+ }
+ .board_icon a.board_off::before {
+ font-weight: 400;
+ }
+ .board_icon a.board_redirect::before {
+ font-weight: 900;
+ content: "\f061";
+ }
+ ```
+
+ This physically pains me (if I look at it too long). Inconsistent
+ indentation and lack of space between rules are the most egregrious
+ errors in this for me, but you also have rules that can be
+ consolidated and a unit specifier on a zero value (`0px` is
+ unnecessary, just use `0`). Finally, the rules aren't in
+ alphabetical order.
+
+ Computers and browsers don't care but for humans, code you can scan
+ quickly is important for collaboration; even if that collaborator is
+ future you! Don't you wanna make future you's life at least a lil'
+ bit easier?
+
+ Here's how I would rewrite that code block:
+
+ ```css
+ .board_icon {
+ flex-shrink: 0;
+ padding: 8px 4px 0 4px;
+ text-align: center;
+ width: 60px;
+
+ a {
+ display: inline;
+
+ &::before {
+ content: "\f086";
+ display: inline;
+ font-family: "Font Awesome 6 Free";
+ font-size: 2rem;
+ }
+
+ &:focus,
+ &:hover {
+ text-decoration: none;
+ }
+
+ &.board_off::before {
+ font-weight: 400;
+ }
+
+ &.board_on,
+ &.board_on2,
+ &.board_redirect {
+ &::before {
+ font-weight: 900;
+ }
+ }
+
+ &.board_redirect::before {
+ content: "\f061";
+ }
+ }
+ }
+ ```
+
+ You might've noticed I replaced the `2em` `font-size` with `2rem`.
+ This is more of an aesthetic choice. Elastic Measure (`em`) and Root
+ Elastic Measure (`rem`) are similar in that they scale based on
+ something but `em` scales based on the parent element whereas `rem`
+ scales based on the root (`html`) font size.
+
+ When I'm building sites, I want everything to be cohesive and scale
+ uniformly. That way, when I decide to change the root font size, my
+ entire site won't look wonky.
+
+ Here's a list of other things I've seen in the particular codebase
+ I'm rewriting for my forum theme:
+
+ - `margin:0 0 10px 0;`: no space after the colon
+ - `border-color :rgb(199, 195, 191);`: space before the colon but not
+ after? Why?
+ - `border-top: 1px solid RGB(255, 255, 255);`: why is `RGB` all caps
+ here but not in the previous line? Why use `rgb` at all when this
+ could be represented as `#fff` or simply `white`?
+ - `font-weight: bold;` and `font-weight: 700;`: these both mean bold
+ and there's only system fonts declared so why specify `700` and not
+ `600` (the default)?
+ - `margin-top: 5px !important;`: if you have to use `!important;`,
+ something's wrong. It's possible this theme is trying to override
+ some styling of the core forum software so I'm willing to let this
+ slide but then again, proper nesting would eliminate the need
+ for this.
+ - `background: #fdfdfd;`: unless you also have a background image and
+ positioning, you should always use `background-color`.
+ Specificity wins.
+ - `font: 9px/15px verdana, sans-serif;`: I don't like this for a few
+ reasons. First, `font-size` and `line-height` are just easier to
+ read and should be declared in parent elements. Per element rules
+ like this leads to eventual divergence and tech debt. Second, the
+ font name is lowercase here and regular case elsewhere. Like so:
+ `font-family: Verdana, Helvetica, Arial, sans-serif;` and this is
+ applied to an `h1`, which makes sense to have a different font as
+ it's a headline. I rarely use `font` and the rare times I do, it's
+ to do `font: inherit` (browsers by default have buttons and inputs
+ use different fonts).
+ - `padding: 10px 10px;`: redundant; this is telling us that there's
+ 10 pixels of padding to the top and bottom, as well as left and
+ right. This could be rewritten as `padding: 10px;` (10 pixels of
+ padding all around).
+
+ Now, there are certain conditions where I don't necessarily use
+ alphabetical order and that's when there are rule pairs present.
+
+ - `width` / `height`
+ - `margin` / `padding`
+ - `top` / `left` / `bottom` / `right`
+
+ Here's a simple example:
+
+ ```css
+ .profile_hd {
+ width: 2rem; height: 2rem;
+
+ &::before {
+ width: 100%; height: 100%;
+
+ background-image: url("../images/emoji/bust_in_silhouette_3d.png");
+ background-size: contain;
+ }
+ }
+ ```
+
+ And a more involved one (using CSS variables from my palette[1]). I
+ left the `color: rgb` rule in there because I haven't decided what to
+ replace it with (I don't like mixing color rules, stay consistent...
+ similarly, I'm not sure that `margin-top` needs to be there...oh and
+ `&::before` and `&::after` are grouped together in that order because
+ it makes sense):
+
+ ```css
+ ul {
+ background-color: var(--uchu-yang);
+ border: 1px solid var(--uchu-gray-3);
+ border-radius: 4px;
+ box-shadow: 3px 3px 4px oklch(var(--uchu-yin-raw) / 30%);
+ color: rgb(83, 100, 130);
+ line-height: 2.2rem;
+ margin-top: 2px;
+ min-width: 18.2rem;
+ padding: 0.5rem;
+ position: absolute;
+ z-index: 90;
+
+ &::before,
+ &::after {
+ width: 0; height: 0;
+
+ border-left: 0.5rem solid transparent;
+ border-right: 0.5rem solid transparent;
+ content: "";
+ position: absolute;
+ }
+
+ &::before {
+ top: -0.5rem; left: 1.25rem;
+ border-bottom: 0.5rem solid var(--uchu-yang);
+ }
+
+ &::after {
+ top: calc(calc(0.5rem + 1px) * -1); left: 1.25rem;
+
+ border-bottom: 0.5rem solid var(--uchu-gray-3);
+ z-index: -1;
+ }
+ }
+ ```
+
+ You can see `width` and `height` together at the top of a rule block,
+ separated by a blank line because there are multiple rules after
+ that. However, in the standalone `&::before` block, there's no blank
+ line after `top` and `left` because that'd look silly. The `&::after`
+ block has more than one rule after `top` and `left` so those lines
+ are grouped together.
+
+ I've dabbled in trying to get Prettier to format my CSS files back
+ when I was in the Node.js ecosystem, with middling results. I'm sure
+ I could get Claude to make a formatter to my specifications...hmm,
+ side project for now.
+
+ There are situations where I may have something like `padding: 1rem;`
+ and also have `margin-right: 2rem`. I wouldn't put these together
+ because of the `-right`. Non-dashed specifiers are in alphabetical
+ order like everything else (including `padding` in this instance).
+
+ This codebase has a lot of styling on IDs, which is something I don't
+ do. For me, IDs are for HTML and JavaScript, not styling; either use
+ the element name and style against that or apply a class to
+ said element.
+
+ For naming elements, I prefer using a dash or two and relying on
+ nesting (no more than three levels) when necessary. For this project,
+ I'm beholden to the existing HTML syntax in PHP files. They'll get
+ updated over time.
+
+ I'm probably missing a lot but this is just off the top of my head.
+ Multi-trillion-dollar corporations perpetuate these terrible code
+ choices too but at least in my personal projects I can have a curated
+ and maintainable experience. 🕸️
+
+References
+
+ [1] <https://uchu.style>
diff --git a/memos/WM-087.txt b/memos/WM-087.txt
new file mode 100644
index 0000000..b79470e
--- /dev/null
+++ b/memos/WM-087.txt
@@ -0,0 +1,248 @@
+
+
+
+
+
+
+
+Document: WM-087 P. Webb
+Category: Self-Host 2026-03-25
+
+ Hosting a forum in 2026
+
+Abstract
+
+ In a world of platform lock-in, self-hosting communities sounds
+ real good.
+
+Body
+
+ For several months I've wanted to setup some sort of community but I
+ didn't want to use Discord. I have an account of course but I don't
+ necessarily enjoy it. I pondered using IRC but nicely designed
+ clients for macOS/iOS are (to me) nonexistent. I host a
+ Matrix/Element server for a few close friends but every other month
+ one of them has issues with seeing messages because of a random token
+ mismatch or something? Telegram and Signal are out of the question
+ because an endless stream of text is not conducive to meaningful
+ conversation and we could all spend less time on our phones.
+
+ The solution I kept going back to was **forums**. But what _kind_ of
+ forum? I was ready to get started with Flarum[1] but I saw they were
+ in the middle of transitioning to version 2 and I didn't want to need
+ to upgrade so soon after setup so I waited. Waterhole[2] looks REALLY
+ good but I didn't feel like paying $300 for something I wasn't sure
+ about doing in the first place. So that left me looking at the OGs of
+ the forum game; phpBB and vBulletin. For the latter, it doesn't seem
+ to be doing too well[3]. The former looks dusty old LOL!
+
+ Somewhere along the way I came across Simple Machines Forum[4] and a
+ theme that took me back[5]. That cinched it for me and now my forum,
+ the WorldWideWebb[6], is online.
+
+ 📸[WWW forum][IMG1]
+
+ I'm an HTML/CSS/JS/TS guy, PHP is not my forte. I can figure things
+ out though, and I'm gonna need to figure out more because I do NOT
+ like how the theme I'm customizing is built. Despite some slight
+ annoyances, I'm pleased with SMF for the time being.
+
+ I did consider building a forum from scratch with BBCode support and
+ all that, able to be run from a single executable...I have MORE than
+ enough projects and man, adding this to my plate would've been
+ annoying (this doesn't mean I'm not gonna do it, just not right now).
+
+ ## Tutorial
+
+ So you wanna setup your own SMF forum? The instructions[7] to do so
+ assume you have done something like this before. I haven't dealt with
+ PHP since Wordpress was king in the mid-2000s so I was lost. Here's
+ an actual tutorial!
+
+ 1. Get a server. I'm using Linode's 2 GB one for mine.
+
+ 2. Run these commands, one line at a time:
+ ```sh
+ mkdir -p /var/www/html && cd $_
+ curl -O https://download.simplemachines.org/index.php/smf_2-1-7_install.zip
+ apt install unzip -y
+ unzip smf_2-1-7_install.zip -d smf
+ rm smf_2-1-7_install.zip
+ ```
+ You just created a directory on your server to install SMF and
+ deleted the zip file. As of this writing, `2.1.7` is the latest
+ version. You should check their site for the current latest.
+
+ 3. Set file permissions so SMF can do what it needs to do:
+ ```sh
+ chown -R www-data:www-data /var/www/html/smf
+ find /var/www/html/smf -type d -exec chmod 755 {} \;
+ find /var/www/html/smf -type f -exec chmod 644 {} \;
+ ```
+ If you add a new theme, you may need to run these permission
+ commands again.
+
+ 4. Time to create the database! I'm not sure if you need the former
+ package but you definitely need the latter...couldn't hurt to
+ install both though!
+ ```sh
+ apt install mysql-server -y
+ apt install php-mysql -y
+ ```
+ After that, open up mySQL:
+ ```sql
+ mysql -u root -p
+ ```
+ DO NOT JUST COPY/PASTE THIS NEXT BLOCK.
+
+ You need to figure some things out first:
+
+ - `your_database`
+ - `your_admin`
+ - `your_password`
+
+ You're going to need these values for the web installer as well as
+ for your database. Plug these into your favorite password manager.
+ Now that that's set, replace the placeholder values in this next
+ block with the ones you chose, and then copy/paste the entire
+ block into the mySQL prompt you just opened:
+
+ ```sql
+ CREATE DATABASE your_database CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+ CREATE USER 'your_admin'@'localhost' IDENTIFIED BY 'your_password';
+ GRANT ALL PRIVILEGES ON your_database.* TO 'your_admin'@'localhost';
+ FLUSH PRIVILEGES;
+ EXIT;
+ ```
+
+ 5. Alright, webserver time! I use Caddy so I had to install a PHP
+ thingy for it as well.
+ ```sh
+ apt install php-fpm -y
+ ```
+ With that done, open up your `Caddyfile`:
+ ```sh
+ nano /etc/caddy/Caddyfile
+ ```
+ ...and replace its contents with:
+ ```caddy
+ chat.webb.page {
+ root * /var/www/html/smf
+ php_fastcgi unix//run/php/php8.3-fpm.sock
+ file_server
+ encode gzip
+ }
+ ```
+ `chat.webb.page` is there for illustrative purposes, replace with
+ your own domain, obviously.
+
+ Reload Caddy and check on it (press `q` to escape the
+ status screen):
+ ```sh
+ systemctl reload caddy
+ systemctl status caddy
+ ```
+ You should be able to navigate to the domain you listed in your
+ `Caddyfile` to finish the installation process. I think you got it
+ from here.
+
+ For security purposes, you'll want to delete `install.php` if the
+ system didn't do this automatically. This is so no rando coming
+ across your forum can grief you.
+
+ This should take care of things:
+ ```sh
+ rm /var/www/html/smf/install.php
+ ```
+ Finally, lock down your settings files:
+ ```sh
+ chmod 640 /var/www/html/smf/Settings.php
+ chmod 640 /var/www/html/smf/Settings_bak.php
+ ```
+
+ 6. Email time! I don't scambots signing up so I checked whatever
+ thing in the SMF settings to require email authorization when
+ signing up. You need an email sender to do this though, and I'm
+ with Fastmail these days. Surely there's an easy way to get this
+ working, right? No, but that's why I'm here. You're welcome.
+
+ Head to `Administration Center` → `Mail` → `Settings` and here's
+ what you put in:
+
+ - Mail type: SMTP
+ - SMTP server: `ssl://smtp.fastmail.com`
+ - SMTP port: `465`
+ - SMTP username: NOT your Fastmail alias, your ACTUAL address
+ - SMTP password: your Fastmail app password
+
+ Boy, the `SMTP username` thing had me going in a spiral. I assumed
+ the Fastmail aliases were perfectly fine to put there since the
+ email is going to my original address anyway but on Fastmail's
+ end, you're logging in with invalid parameters.
+
+ If it wasn't for Claude I wouldn't have figured this out. LLMs are
+ great for finding where documentation is lacking (and teaching you
+ how to troubleshoot things you never knew how to check for).
+
+ Also, when using Linode you need to send a support ticket to
+ request the opening of email ports. This friction step contributes
+ to why their reputation is great, unlike DigitalOcean's where my
+ email on the mail server I'm still hosting gets treated as spam.
+ The more you know, right?
+
+ Linode is pretty good with unblocking the ports. I requested this
+ late one night and by the time I woke up I was good to go.
+
+ ## FIN
+
+ And that's it!
+
+ After naming my forum "WorldWideWebb" I suddenly thought, "Why did I
+ make the url `chat.webb.page` when it should be `www.webb.page`?!"
+
+ Making this change broke my forum for a good 5 minutes as I tried to
+ figure out where to fix things.
+
+ First, I had to update `$boardurl` in `smf/Settings.php` to match the
+ new domain name.
+
+ Next, I needed to navigate to `Administration Center` →
+ `Themes and Layout` → `Theme Settings` and update the URLs of
+ the theme.
+
+ ## Epilogue
+
+ I guess I should explain my intent with this forum, I didn't fully
+ touch on it at the jump.
+
+ Most of my creation happens in isolation, which is fine, but my best
+ ideas come when telling others about my ideas and getting feedback or
+ opposing views. Selfishly, I want y'all to help make my shit better
+ haha! On these other platforms, we all look the same and our real
+ estate is confined to algorithmic boxes with high walls that have
+ constantly moving peepholes. It's exhausting trying to reach anyone.
+
+ In high-school (2002-2006), I had accounts on several forums, from
+ REO[8] to music production to DJing and more. Some of the best online
+ experiences of my life started in that era. WorldWideWebb is my way
+ of evoking that feeling again.
+
+ Also, with the constellation of projects I have going on and am
+ working on at any given moment, I just do not feel like blasting my
+ Mastodon feed with RFC-length posts. That's what my blog and (now)
+ forum[6] are for!
+
+ As an aside, it's funny that my browser URL just reads `webb.page`
+ on my forum because browsers these days treat `www.` as invisible. 🕸️
+
+References
+
+ [1] <https://flarum.org>
+ [2] <https://waterhole.dev>
+ [3] <https://xenforo.com/community/threads/i-regret-buying-vbulletin-6-0-7-latest-version.226753>
+ [4] <https://www.simplemachines.org>
+ [5] <https://custom.simplemachines.org/index.php?theme=3014>
+ [6] <https://www.webb.page>
+ [7] <https://wiki.simplemachines.org/smf/Installing>
+ [8] <https://rockman-exe.com/online>
+ [IMG1] <https://cdn.webb.page/blog/2026/wm-087-b.jpg>
diff --git a/memos/WM-088.txt b/memos/WM-088.txt
new file mode 100644
index 0000000..28a3088
--- /dev/null
+++ b/memos/WM-088.txt
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+Document: WM-088 P. Webb
+Category: Gaming 2026-04-02
+
+ Cyberpunk 2077 5th Anniversary Collector's Edition
+
+Abstract
+
+ Cool merch that brings with it some questions about the lore
+
+Body
+
+ I pre-ordered this several months ago because the idea of having the
+ Relic[1] on my desk was too cool to pass up. Now that I have it, this
+ 4.75" replica of the in-game tech made me finally realize (for some
+ reason) that everyone with a cyberbrain swaps these things out on the
+ regular. So like, do you have a drawer of these? Is it an annual
+ upgrade like phones are to the tech-obsessed today? Are there people
+ fabbing their own? The craziest thing is that Mike Pondsmith, the
+ creator, probably has answers for me.
+
+ 📸[the Relic][IMG1]
+
+ Here's the star of the show, the Relic nestled in its magnetic mount
+ (USB A, boo). I love the red glow, look ominous. To think a terrorist
+ variant of Keanu Reeves lives in that thing, wild.
+
+ The metal case looks good.
+
+ 📸[CE case front and side][IMG2]
+
+ 📸[CE case back][IMG3]
+
+ Here's the Relic in it's sleek Arasaka backdrop.
+
+ 📸[Relic in the case][IMG4]
+
+ If you didn't know, tarot plays a sizable role in Cyberpunk 2077.
+ Here we have The Emperor, Strength, and The World.
+
+ 📸[tarot cards][IMG5]
+
+ Have some pins!
+
+ 📸[Arasaka logo pin][IMG6]
+
+ 📸[Relic logo pin][IMG7]
+
+ I know Arasaka is the main evil corp in the game but I wish we got
+ some Militech merch.
+
+ 📸[Arasaka drive][IMG8]
+
+ Finally, check out this cool thumb drive! It holds a disc image with
+ soundtracks: the two-disc original score and the Phantom Liberty DLC
+ original score. Unfortunately, the last song of the former, "Never
+ Fade Away," is corrupted. Ironic.
+
+ I love that all the files are in `.wav` format though. 🕸️
+
+References
+
+ [1] <https://cyberpunk.fandom.com/wiki/Relic>
+ [IMG1] <https://cdn.webb.page/blog/2026/wm-088-a.jpg>
+ [IMG2] <https://cdn.webb.page/blog/2026/wm-088-b.jpg>
+ [IMG3] <https://cdn.webb.page/blog/2026/wm-088-c.jpg>
+ [IMG4] <https://cdn.webb.page/blog/2026/wm-088-d.jpg>
+ [IMG5] <https://cdn.webb.page/blog/2026/wm-088-e.jpg>
+ [IMG6] <https://cdn.webb.page/blog/2026/wm-088-f.jpg>
+ [IMG7] <https://cdn.webb.page/blog/2026/wm-088-g.jpg>
+ [IMG8] <https://cdn.webb.page/blog/2026/wm-088-h.jpg>