From 8c34d810af95fae0ef846f54370a8c88bfab7123 Mon Sep 17 00:00:00 2001 From: "netop://ウィビ" Date: Sat, 11 Apr 2026 14:24:49 -0700 Subject: initial commit --- memos/WM-001.txt | 51 +++++ memos/WM-002.txt | 141 ++++++++++++ memos/WM-003.txt | 103 +++++++++ memos/WM-004.txt | 251 ++++++++++++++++++++++ memos/WM-005.txt | 114 ++++++++++ memos/WM-006.txt | 69 ++++++ memos/WM-007.txt | 89 ++++++++ memos/WM-008.txt | 203 ++++++++++++++++++ memos/WM-009.txt | 158 ++++++++++++++ memos/WM-010.txt | 95 +++++++++ memos/WM-011.txt | 60 ++++++ memos/WM-012.txt | 86 ++++++++ memos/WM-013.txt | 242 +++++++++++++++++++++ memos/WM-014.txt | 430 +++++++++++++++++++++++++++++++++++++ memos/WM-015.txt | 63 ++++++ memos/WM-016.txt | 92 ++++++++ memos/WM-017.txt | 348 ++++++++++++++++++++++++++++++ memos/WM-018.txt | 312 +++++++++++++++++++++++++++ memos/WM-019.txt | 125 +++++++++++ memos/WM-020.txt | 635 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ memos/WM-021.txt | 124 +++++++++++ memos/WM-022.txt | 134 ++++++++++++ memos/WM-023.txt | 120 +++++++++++ memos/WM-024.txt | 119 +++++++++++ memos/WM-025.txt | 217 +++++++++++++++++++ memos/WM-026.txt | 157 ++++++++++++++ memos/WM-027.txt | 69 ++++++ memos/WM-028.txt | 143 +++++++++++++ memos/WM-029.txt | 125 +++++++++++ memos/WM-030.txt | 107 ++++++++++ memos/WM-031.txt | 111 ++++++++++ memos/WM-032.txt | 241 +++++++++++++++++++++ memos/WM-033.txt | 144 +++++++++++++ memos/WM-034.txt | 71 +++++++ memos/WM-035.txt | 101 +++++++++ memos/WM-036.txt | 100 +++++++++ memos/WM-037.txt | 181 ++++++++++++++++ memos/WM-038.txt | 155 ++++++++++++++ memos/WM-039.txt | 183 ++++++++++++++++ memos/WM-040.txt | 293 +++++++++++++++++++++++++ memos/WM-041.txt | 330 +++++++++++++++++++++++++++++ memos/WM-042.txt | 206 ++++++++++++++++++ memos/WM-043.txt | 167 +++++++++++++++ memos/WM-044.txt | 312 +++++++++++++++++++++++++++ memos/WM-045.txt | 247 ++++++++++++++++++++++ memos/WM-046.txt | 176 +++++++++++++++ memos/WM-047.txt | 70 ++++++ memos/WM-048.txt | 169 +++++++++++++++ memos/WM-049.txt | 94 ++++++++ memos/WM-050.txt | 96 +++++++++ memos/WM-051.txt | 181 ++++++++++++++++ memos/WM-052.txt | 89 ++++++++ memos/WM-053.txt | 97 +++++++++ memos/WM-054.txt | 204 ++++++++++++++++++ memos/WM-055.txt | 123 +++++++++++ memos/WM-056.txt | 101 +++++++++ memos/WM-057.txt | 124 +++++++++++ memos/WM-058.txt | 94 ++++++++ memos/WM-059.txt | 65 ++++++ memos/WM-060.txt | 90 ++++++++ memos/WM-061.txt | 159 ++++++++++++++ memos/WM-062.txt | 73 +++++++ memos/WM-063.txt | 206 ++++++++++++++++++ memos/WM-064.txt | 89 ++++++++ memos/WM-065.txt | 73 +++++++ memos/WM-066.txt | 130 ++++++++++++ memos/WM-067.txt | 347 ++++++++++++++++++++++++++++++ memos/WM-068.txt | 399 ++++++++++++++++++++++++++++++++++ memos/WM-069.txt | 148 +++++++++++++ memos/WM-070.txt | 78 +++++++ memos/WM-071.txt | 143 +++++++++++++ memos/WM-072.txt | 93 ++++++++ memos/WM-073.txt | 48 +++++ memos/WM-074.txt | 110 ++++++++++ memos/WM-075.txt | 119 +++++++++++ memos/WM-076.txt | 43 ++++ memos/WM-077.txt | 123 +++++++++++ memos/WM-078.txt | 222 +++++++++++++++++++ memos/WM-079.txt | 115 ++++++++++ memos/WM-080.txt | 183 ++++++++++++++++ memos/WM-081.txt | 91 ++++++++ memos/WM-082.txt | 69 ++++++ memos/WM-083.txt | 104 +++++++++ memos/WM-084.txt | 37 ++++ memos/WM-085.txt | 210 ++++++++++++++++++ memos/WM-086.txt | 271 ++++++++++++++++++++++++ memos/WM-087.txt | 248 ++++++++++++++++++++++ memos/WM-088.txt | 77 +++++++ 88 files changed, 13605 insertions(+) create mode 100644 memos/WM-001.txt create mode 100644 memos/WM-002.txt create mode 100644 memos/WM-003.txt create mode 100644 memos/WM-004.txt create mode 100644 memos/WM-005.txt create mode 100644 memos/WM-006.txt create mode 100644 memos/WM-007.txt create mode 100644 memos/WM-008.txt create mode 100644 memos/WM-009.txt create mode 100644 memos/WM-010.txt create mode 100644 memos/WM-011.txt create mode 100644 memos/WM-012.txt create mode 100644 memos/WM-013.txt create mode 100644 memos/WM-014.txt create mode 100644 memos/WM-015.txt create mode 100644 memos/WM-016.txt create mode 100644 memos/WM-017.txt create mode 100644 memos/WM-018.txt create mode 100644 memos/WM-019.txt create mode 100644 memos/WM-020.txt create mode 100644 memos/WM-021.txt create mode 100644 memos/WM-022.txt create mode 100644 memos/WM-023.txt create mode 100644 memos/WM-024.txt create mode 100644 memos/WM-025.txt create mode 100644 memos/WM-026.txt create mode 100644 memos/WM-027.txt create mode 100644 memos/WM-028.txt create mode 100644 memos/WM-029.txt create mode 100644 memos/WM-030.txt create mode 100644 memos/WM-031.txt create mode 100644 memos/WM-032.txt create mode 100644 memos/WM-033.txt create mode 100644 memos/WM-034.txt create mode 100644 memos/WM-035.txt create mode 100644 memos/WM-036.txt create mode 100644 memos/WM-037.txt create mode 100644 memos/WM-038.txt create mode 100644 memos/WM-039.txt create mode 100644 memos/WM-040.txt create mode 100644 memos/WM-041.txt create mode 100644 memos/WM-042.txt create mode 100644 memos/WM-043.txt create mode 100644 memos/WM-044.txt create mode 100644 memos/WM-045.txt create mode 100644 memos/WM-046.txt create mode 100644 memos/WM-047.txt create mode 100644 memos/WM-048.txt create mode 100644 memos/WM-049.txt create mode 100644 memos/WM-050.txt create mode 100644 memos/WM-051.txt create mode 100644 memos/WM-052.txt create mode 100644 memos/WM-053.txt create mode 100644 memos/WM-054.txt create mode 100644 memos/WM-055.txt create mode 100644 memos/WM-056.txt create mode 100644 memos/WM-057.txt create mode 100644 memos/WM-058.txt create mode 100644 memos/WM-059.txt create mode 100644 memos/WM-060.txt create mode 100644 memos/WM-061.txt create mode 100644 memos/WM-062.txt create mode 100644 memos/WM-063.txt create mode 100644 memos/WM-064.txt create mode 100644 memos/WM-065.txt create mode 100644 memos/WM-066.txt create mode 100644 memos/WM-067.txt create mode 100644 memos/WM-068.txt create mode 100644 memos/WM-069.txt create mode 100644 memos/WM-070.txt create mode 100644 memos/WM-071.txt create mode 100644 memos/WM-072.txt create mode 100644 memos/WM-073.txt create mode 100644 memos/WM-074.txt create mode 100644 memos/WM-075.txt create mode 100644 memos/WM-076.txt create mode 100644 memos/WM-077.txt create mode 100644 memos/WM-078.txt create mode 100644 memos/WM-079.txt create mode 100644 memos/WM-080.txt create mode 100644 memos/WM-081.txt create mode 100644 memos/WM-082.txt create mode 100644 memos/WM-083.txt create mode 100644 memos/WM-084.txt create mode 100644 memos/WM-085.txt create mode 100644 memos/WM-086.txt create mode 100644 memos/WM-087.txt create mode 100644 memos/WM-088.txt (limited to 'memos') 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] + [2] + [3] + [4] + [5] + [6] 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] + [2] + [3] + [4] + [5] + [6] + [7] + [8] + [9] + [10] + [11] + [12] + [13] + [14] + [15] + [16] + [17] + [18] + [19] + [IMG1] + [IMG2] + [IMG3] 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] + [2] + [3] + [IMG1] 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] + [2] + [3] + [4] + [5] + [6] + [7] + [8] + [9] + [10] + [11] + [IMG1] + [IMG2] + [IMG3] + [IMG4] + [IMG5] + [IMG6] + [IMG7] 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] + [2] + [3] + [4] + [5] + [6] 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] + [2] + [3] + [4] + [IMG1] 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] + [2] + [3] + [IMG1] + [IMG2] 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] + [2] + [3] + [4] + [5] + [6] + [7] + [8] + [IMG1] + [IMG2] + [IMG3] + [IMG4] + [IMG5] + [IMG6] + [IMG7] + [IMG8] + [IMG9] + [IMG10] + [IMG11] + [IMG12] 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] + [2] + [3] + [4] + [5] + [IMG1] + [IMG2] + [IMG3] 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] + [2] + [3] + [IMG1] + [IMG2] + [IMG3] + [IMG4] 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] + [2] + [3] + [4] + [5] + [6] + [7] 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] + [IMG1] + [IMG2] 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] + [2] + [3] + [4] + [5] + [6] + [7] + [8] + [IMG1] + [IMG2] + [IMG3] + [IMG4] 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] + [2] + [3] + [4] + [5] + [6] + [7] + [8] + [9] + [10] + [11] + [12] + [13] + [IMG1] + [IMG2] + [IMG3] + [IMG4] + [IMG5] + [IMG6] + [IMG7] + [IMG8] + [IMG9] + [IMG10] + [IMG11] 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] + [2] + [3] + [IMG1] + [IMG2] 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] + [2] + [3] 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] + [2] + [3] + [4] + [5] + [6] + [7] + [8] + [9] + [IMG1] + [IMG2] + [IMG3] + [IMG4] + [VID1] 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] + [2] + [3] + [4] + [5] + [6] + [7] + [8] + [9] + [IMG1] + [IMG2] + [IMG3] + [IMG4] + [IMG5] 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] + [2] 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 + + - ✅ `` 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] + [2] 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] + [IMG1] + [IMG2] + [IMG3] + [IMG4] + [IMG5] + [IMG6] + [IMG7] + [IMG8] + [IMG9] + [IMG10] + [IMG11] + [IMG12] + [IMG13] + [IMG14] 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] + [2] + [3] + [4] 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] + [2] + [IMG1] 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] + [2] + [3] + [4] + [5] + [IMG1] + [IMG2] + [IMG3] + [IMG4] + [IMG5] + [IMG6] + [IMG7] + [IMG8] + [IMG9] + [IMG10] + [IMG11] + [IMG12] + [IMG13] 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] + [2] + [3] + [4] 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] + [2] + [3] + [4] + [IMG1] + [IMG2] + [IMG3] + [IMG4] + [IMG5] 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] + [2] 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] + [2] + [3] + [4] + [5] + [6] 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] 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] + [2] + [3] + [4] + [5] + [IMG1] + [IMG2] + [IMG3] 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] + [IMG1] + [IMG2] 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] + [2] + [3] + [4] + [5] + [6] + [7] + [8] + [9] + [10] + [11] + [12] + [13] + [14] 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] + [2] + [3] + [4] + [5] + [6] 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] 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] + [2] + [3] + [4] + [5] + [6] + [7] + [8] + [9] + [10] + [11] + [12] + [13] + [14] + [15] + [IMG1] 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] + [2] + [3] + [4] + [5] + [6] + [7] + [8] + [9] + [10] + [11] + [12] + [13] + [14] 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] + [2] + [3] + [4] + [5] + [6] + [7] 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] + [2] + [3] + [4] + [5] + [6] + [7] + [8] + [9] + [10] + [11] + [12] + [13] + [14] + [IMG1] + [IMG2] + [IMG3] + [IMG4] + [IMG5] + [IMG6] + [IMG7] + [IMG8] + [IMG9] + [IMG10] + [IMG11] 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] + [2] + [3] + [4] + [5] + [6] + [7] + [8] + [9] + [10] + [11] + [12] + [13] + [14] + [15] + [16] + [17] + [18] + [19] + [20] + [21] + [22] + [23] 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] + [2] + [3] + [4] + [5] + [6] + [7] + [8] + [9] + [10] + [11] + [IMG1] 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] + [2] + [3] + [4] + [5] + [6] + [7] + [8] + [9] + [10] + [11] + [12] + [13] + [14] + [15] + [16] + [17] + [18] + [19] + [20] + [21] 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] + [2] + [3] + [4] + [5] + [6] + [7] + [8] + [9] + [10] + [11] + [IMG1] + [IMG2] + [IMG3] + [IMG4] + [IMG5] + [IMG6] 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] + [2] + [3] + [4] 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] + [2] + [3] + [4] + [5] + [6] + [7] + [8] + [9] + [10] 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] + [2] + [3] + [4] + [5] + [6] + [7] + [8] + [9] + [10] + [11] + [12] 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] + [2] + [3] + [4] 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] 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 + 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:// 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] + [2] + [3] + [4] + [5] + [6] + [7] + [8] 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] + [2] + [3] + [4] + [5] + [6] + [7] + [8] + [9] + [10] + [11] 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] + [2] + [3] + [4] + [5] + [6] + [7] + [8] 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] + [2] + [3] + [4] 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] + [2] + [3] + [4] + [5] 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] + [2] 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] + [2] + [3] + [4] + [5] + [6] + [7] 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] + [2] + [3] + [4] + [5] + [6] + [7] 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] + [2] + [3] + [4] + [5] + [6] + [7] + [8] + [9] + [10] + [11] + [12] + [13] + [14] + [15] 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] + [2] + [3] + [4] + [5] + [6] + [7] + [8] + [9] + [10] 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] + [2] + [3] + [4] + [5] + [6] + [7] + [8] + [9] + [10] + [11] 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] + [2] + [3] + [4] + [5] + [6] + [7] + [8] 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] + [2] + [3] + [4] + [5] + [6] + [7] + [8] + [9] + [10] + [11] + [12] + [13] + [14] + [15] + [16] + [17] + [18] + [19] + [20] 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] + [2] + [3] + [4] + [5] + [6] + [7] + [8] + [9] + [10] + [11] + [12] + [13] + [14] 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] + [2] 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] + [2] + [3] + [4] + [5] + [6] 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] + [2] + [3] + [4] 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] + [2] + [3] + [4] + [5] + [6] + [7] 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] + [2] + [3] + [4] + [5] + [6] + [7] 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] 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] + [2] + [3] + [4] + [5] + [6] + [7] + [8] + [9] + [10] 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] + [2] 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] + [2] + [IMG1] + [IMG2] + [IMG3] + [IMG4] + [IMG5] + [IMG6] + [IMG7] + [IMG8] + [IMG9] + [IMG10] + [IMG11] + [IMG12] + [IMG13] + [IMG14] + [IMG15] + [IMG16] + [IMG17] + [IMG18] + [IMG19] + [IMG20] + [IMG21] + [IMG22] + [IMG23] + [IMG24] + [IMG25] + [IMG26] + [IMG27] + [IMG28] + [IMG29] + [IMG30] 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] + [2] + [3] + [4] + [5] + [6] + [7] + [8] + [9] + [10] + [11] + [12] + [13] + [IMG1] + [IMG2] + [IMG3] + [IMG4] + [IMG5] + [IMG6] + [IMG7] + [IMG8] + [IMG9] + [VID1] 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] + [2] + [3] + [4] + [5] + [6] + [7] + [8] + [9] 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] + [2] + [3] + [4] + [5] + [6] + [IMG1] + [IMG2] + [IMG3] + [IMG4] 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] + [2] + [3] + [4] + [5] + [6] + [7] 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] + [2] + [3] + [IMG1] 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] + [2] + [3] + [IMG1] + [IMG2] + [IMG3] + [IMG4] + [IMG5] + [IMG6] + [IMG7] + [IMG8] + [IMG9] + [IMG10] + [IMG11] + [IMG12] + [IMG13] + [IMG14] + [IMG15] + [IMG16] + [IMG17] + [IMG18] + [IMG19] + [IMG20] + [IMG21] + [IMG22] + [IMG23] + [IMG24] + [IMG25] + [IMG26] + [IMG27] + [IMG28] 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] 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] + [2] + [3] + [4] + [5] + [6] + [7] + [8] + [IMG1] 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] + [IMG1] + [IMG2] + [IMG3] + [IMG4] + [IMG5] + [IMG6] + [IMG7] + [IMG8] -- cgit v1.2.3