New blog post
the_architech -
r75:323160e6280d master
Not Reviewed
Show More
Add another comment
TODOs: 0 unresolved 0 Resolved
COMMENTS: 0 General 0 Inline
1 NO CONTENT: new file 100644, binary diff hidden
NO CONTENT: new file 100644, binary diff hidden
1 NO CONTENT: new file 100644, binary diff hidden
NO CONTENT: new file 100644, binary diff hidden
1 NO CONTENT: new file 100644, binary diff hidden
NO CONTENT: new file 100644, binary diff hidden
1 NO CONTENT: new file 100644, binary diff hidden
NO CONTENT: new file 100644, binary diff hidden
1 NO CONTENT: new file 100644, binary diff hidden
NO CONTENT: new file 100644, binary diff hidden
1 NO CONTENT: new file 100644, binary diff hidden
NO CONTENT: new file 100644, binary diff hidden
1 NO CONTENT: new file 100644, binary diff hidden
NO CONTENT: new file 100644, binary diff hidden
@@ -0,0 +1,86
1 ---
2 title: Year in Review
3 date: 2019-12-29
4 tags: life
5 tldr: New experiences
6 color: purple
7 published: true
8 ---
9
10 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!
11
12
13
14 ## Visited Disney World
15
16 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.
17
18 The [lockscreen background](/assets/images/2019/year-in-review-g.jpg "This background is just *perfect*") on my phone is **still** an amazing shot I got of the EPCOT ball at night.
19
20 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.
21
22 ![Yummy Disney snacks](/assets/images/2019/year-in-review-a.jpg)
23 ![The EPCOT ball in daytime](/assets/images/2019/year-in-review-b.jpg)
24
25
26
27 ## Went bald 😱
28
29 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!
30
31 Also, my son had his first (barbershop) haircut! He took it a lot better than we expected.
32
33 ![My boy was a trooper!](/assets/images/2019/year-in-review-c.jpg)
34 ![He kept rubbing his head, not used to the buzz](/assets/images/2019/year-in-review-d.jpg)
35
36
37
38 ## Attended Comic-Con
39
40 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](https://www.asahiinryo.co.jp/mitsuya-cider/sp/cm "Mitsuya Cider marketing page"). 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!
41
42 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.
43
44
45
46 ## Warmed up to an abandoned kitten
47
48 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.
49
50 When we move into a bigger place I definitely want to get a similar-looking cat. After I get my Dalmatian.
51
52 ![Yung Chi Chi](/assets/images/2019/year-in-review-e.jpg)
53
54
55
56 ## Made it "big" on Hacker News
57
58 I love checking out [Hacker News (HN)](https://news.ycombinator.com "Hacker News homepage") as I find all sorts of neat projects and learn of interesting articles through it. I've been checking out [Lobsters](https://lobste.rs "Lobsters homepage") lately too (and got an invite as I drafted what you're reading).
59
60 I shared my [recent post](/2019/a-personal-api "My 'A personal API' post") about a "personal API" there and to my pleasant surprise it was [well-received](https://news.ycombinator.com/item?id=21684949 "Hacker News comment thread about 'A personal API'") (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.
61
62 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. 😬
63
64 As I proofread the post you're reading, [reception](https://lobste.rs/s/mgpx3w/personal_api "Lobsters comment thread about 'A personal API'") 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!
65
66
67
68 ## Started learning TypeScript
69
70 [TypeScript](https://www.typescriptlang.org "TypeScript homepage") 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.
71
72
73
74 ## Released a couple projects
75
76 - [`chronver.org`](https://chronver.org "Chronologic Versioning Specification"): A date-based versioning specification that makes more sense to me these days than SemVer.
77 - [`lefty.world`](https://lefty.world "A refuge against the tyranny of righteousness"): A fun site for left-handed people. I intend to do more with this in 2020.
78 - [`webb.page`](https://webb.page "My homepage"): My new homepage and probably the best domain I own.
79
80
81
82 ## FIN
83
84 As is customary, here are some of my favorite pics I snapped this year. 🕸
85
86 ![Some of my favorite photos from this year](/assets/images/2019/year-in-review-f.jpg)
@@ -2,7 +2,7
2 <feed xmlns="http://www.w3.org/2005/Atom">
2 <feed xmlns="http://www.w3.org/2005/Atom">
3 <id>https://blog.webb.page/</id>
3 <id>https://blog.webb.page/</id>
4 <title>the Webb blog</title>
4 <title>the Webb blog</title>
5 <updated>2019-12-13T05:23:57.130Z</updated>
5 <updated>2019-12-29T17:06:22.598Z</updated>
6 <generator>The 'Net</generator>
6 <generator>The 'Net</generator>
7 <author>
7 <author>
8 <name>Paul Anthony Webb</name>
8 <name>Paul Anthony Webb</name>
@@ -16,6 +16,52
16 <icon>https://blog.webb.page/assets/favicon.svg</icon>
16 <icon>https://blog.webb.page/assets/favicon.svg</icon>
17 <rights>All Rights Reserved, Paul Anthony Webb</rights>
17 <rights>All Rights Reserved, Paul Anthony Webb</rights>
18 <entry>
18 <entry>
19 <title type="html"><![CDATA[Year in Review]]></title>
20 <id>https://blog.webb.page/2019/year-in-review</id>
21 <link href="https://blog.webb.page/2019/year-in-review"/>
22 <updated>2019-12-29T00:00:00.000Z</updated>
23 <summary type="html"><![CDATA[New experiences]]></summary>
24 <content type="html"><![CDATA[<p>In my last &quot;Year in Review&quot; post I stated that Socii would have photo functionality. It does...it just isn&#39;t reliable, haha. I haven&#39;t cracked that bit quite yet and I&#39;ve also been spending time on getting other projects up to speed. Anyhoo, let&#39;s dig into what has happened this year!</p>
25 <h2 id="visited-disney-world">Visited Disney World</h2>
26 <p>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&#39;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.</p>
27 <p>The <a href="/assets/images/2019/year-in-review-g.jpg" title="This background is just *perfect*">lockscreen background</a> on my phone is <strong>still</strong> an amazing shot I got of the EPCOT ball at night.</p>
28 <p>In addition, the entire family got sunburnt. I had it the <em>worst</em> since I wasn&#39;t wearing a shirt at the beach. It was an interesting experience, one that I&#39;d rather not repeat. Melanin-enriched or not, sunscreen is good for you.</p>
29 <p><img src="/assets/images/2019/year-in-review-a.jpg" alt="Yummy Disney snacks"/><br/><img src="/assets/images/2019/year-in-review-b.jpg" alt="The EPCOT ball in daytime"/></p>
30 <h2 id="went-bald-😱">Went bald 😱</h2>
31 <p>I grow facial hair quite easily but on <em>top</em> of my head? Umm, let&#39;s just say it doesn&#39;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&#39;t sure how my head would look. Turned out great!</p>
32 <p>Also, my son had his first (barbershop) haircut! He took it a lot better than we expected.</p>
33 <p><img src="/assets/images/2019/year-in-review-c.jpg" alt="My boy was a trooper!"/><br/><img src="/assets/images/2019/year-in-review-d.jpg" alt="He kept rubbing his head, not used to the buzz"/></p>
34 <h2 id="attended-comic-con">Attended Comic-Con</h2>
35 <p>I&#39;ve been to PAX East a couple times so I was excited to finally check out Comic-Con and...it&#39;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 <em>craving</em> a wonderful drink called <a href="https://www.asahiinryo.co.jp/mitsuya-cider/sp/cm" title="Mitsuya Cider marketing page">Mitsuya Cider</a>. One of my best buddies and I trekked to at least <strong>three</strong> 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!</p>
36 <p>I don&#39;t do checked baggage when I&#39;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.</p>
37 <h2 id="warmed-up-to-an-abandoned-kitten">Warmed up to an abandoned kitten</h2>
38 <p>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 &quot;Chi Chi&quot; back to health and then put her up for adoption after a few weeks. Sadly, we just don&#39;t have the space for a pet at the moment and our daughter wasn&#39;t pulling her weight in taking care of the kitten she brought home. Fortunately, Chi Chi grew into a gorgeous lil&#39; cat and was promptly adopted. Turns out, she was quite popular amongst families visiting the animal shelter so I&#39;m glad she&#39;ll have the space and care she needs to explore and grow.</p>
39 <p>When we move into a bigger place I definitely want to get a similar-looking cat. After I get my Dalmatian.</p>
40 <p><img src="/assets/images/2019/year-in-review-e.jpg" alt="Yung Chi Chi"/></p>
41 <h2 id="made-it-big-on-hacker-news">Made it &quot;big&quot; on Hacker News</h2>
42 <p>I love checking out <a href="https://news.ycombinator.com" title="Hacker News homepage">Hacker News (HN)</a> as I find all sorts of neat projects and learn of interesting articles through it. I&#39;ve been checking out <a href="https://lobste.rs" title="Lobsters homepage">Lobsters</a> lately too (and got an invite as I drafted what you&#39;re reading).</p>
43 <p>I shared my <a href="/2019/a-personal-api" title="My &#39;A personal API&#39; post">recent post</a> about a &quot;personal API&quot; there and to my pleasant surprise it was <a href="https://news.ycombinator.com/item?id=21684949" title="Hacker News comment thread about &#39;A personal API&#39;">well-received</a> (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&#39;s not ready for prime-time). I&#39;ve also received requests for collaboration so that should be interesting.</p>
44 <p>The other feedback I got from HN was <em>intense</em> 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. 😬</p>
45 <p>As I proofread the post you&#39;re reading, <a href="https://lobste.rs/s/mgpx3w/personal_api" title="Lobsters comment thread about &#39;A personal API&#39;">reception</a> on Lobsters is quite good too. I spend more time coding than I do writing but when I <em>do</em> write I get more ideas and knowledge due to feedback. Note to future Paul: keep doing this writing thing!</p>
46 <h2 id="started-learning-typescript">Started learning TypeScript</h2>
47 <p><a href="https://www.typescriptlang.org" title="TypeScript homepage">TypeScript</a> 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&#39;m still no expert but I&#39;m having fun with it and I found egregious code patterns in existing projects thanks to TypeScript.</p>
48 <h2 id="released-a-couple-projects">Released a couple projects</h2>
49 <ul>
50 <li><a href="https://chronver.org" title="Chronologic Versioning Specification"><code>chronver.org</code></a>: A date-based versioning specification that makes more sense to me these days than SemVer.</li>
51 <li><a href="https://lefty.world" title="A refuge against the tyranny of righteousness"><code>lefty.world</code></a>: A fun site for left-handed people. I intend to do more with this in 2020.</li>
52 <li><a href="https://webb.page" title="My homepage"><code>webb.page</code></a>: My new homepage and probably the best domain I own.</li>
53 </ul>
54 <h2 id="fin">FIN</h2>
55 <p>As is customary, here are some of my favorite pics I snapped this year. 🕸</p>
56 <p><img src="/assets/images/2019/year-in-review-f.jpg" alt="Some of my favorite photos from this year"/></p>
57 ]]></content>
58 <author>
59 <name>Paul Anthony Webb</name>
60 <email>paul+blog@webb.page</email>
61 <uri>https://webb.page</uri>
62 </author>
63 </entry>
64 <entry>
19 <title type="html"><![CDATA[A personal API]]></title>
65 <title type="html"><![CDATA[A personal API]]></title>
20 <id>https://blog.webb.page/2019/a-personal-api</id>
66 <id>https://blog.webb.page/2019/a-personal-api</id>
21 <link href="https://blog.webb.page/2019/a-personal-api"/>
67 <link href="https://blog.webb.page/2019/a-personal-api"/>
@@ -11,6 +11,19
11 },
11 },
12 "items": [
12 "items": [
13 {
13 {
14 "id": "https://blog.webb.page/2019/year-in-review",
15 "content_html": "<p>In my last &quot;Year in Review&quot; post I stated that Socii would have photo functionality. It does...it just isn&#39;t reliable, haha. I haven&#39;t cracked that bit quite yet and I&#39;ve also been spending time on getting other projects up to speed. Anyhoo, let&#39;s dig into what has happened this year!</p>\n<h2 id=\"visited-disney-world\">Visited Disney World</h2>\n<p>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&#39;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.</p>\n<p>The <a href=\"/assets/images/2019/year-in-review-g.jpg\" title=\"This background is just *perfect*\">lockscreen background</a> on my phone is <strong>still</strong> an amazing shot I got of the EPCOT ball at night.</p>\n<p>In addition, the entire family got sunburnt. I had it the <em>worst</em> since I wasn&#39;t wearing a shirt at the beach. It was an interesting experience, one that I&#39;d rather not repeat. Melanin-enriched or not, sunscreen is good for you.</p>\n<p><img src=\"/assets/images/2019/year-in-review-a.jpg\" alt=\"Yummy Disney snacks\"/><br/><img src=\"/assets/images/2019/year-in-review-b.jpg\" alt=\"The EPCOT ball in daytime\"/></p>\n<h2 id=\"went-bald-😱\">Went bald 😱</h2>\n<p>I grow facial hair quite easily but on <em>top</em> of my head? Umm, let&#39;s just say it doesn&#39;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&#39;t sure how my head would look. Turned out great!</p>\n<p>Also, my son had his first (barbershop) haircut! He took it a lot better than we expected.</p>\n<p><img src=\"/assets/images/2019/year-in-review-c.jpg\" alt=\"My boy was a trooper!\"/><br/><img src=\"/assets/images/2019/year-in-review-d.jpg\" alt=\"He kept rubbing his head, not used to the buzz\"/></p>\n<h2 id=\"attended-comic-con\">Attended Comic-Con</h2>\n<p>I&#39;ve been to PAX East a couple times so I was excited to finally check out Comic-Con and...it&#39;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 <em>craving</em> a wonderful drink called <a href=\"https://www.asahiinryo.co.jp/mitsuya-cider/sp/cm\" title=\"Mitsuya Cider marketing page\">Mitsuya Cider</a>. One of my best buddies and I trekked to at least <strong>three</strong> 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!</p>\n<p>I don&#39;t do checked baggage when I&#39;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.</p>\n<h2 id=\"warmed-up-to-an-abandoned-kitten\">Warmed up to an abandoned kitten</h2>\n<p>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 &quot;Chi Chi&quot; back to health and then put her up for adoption after a few weeks. Sadly, we just don&#39;t have the space for a pet at the moment and our daughter wasn&#39;t pulling her weight in taking care of the kitten she brought home. Fortunately, Chi Chi grew into a gorgeous lil&#39; cat and was promptly adopted. Turns out, she was quite popular amongst families visiting the animal shelter so I&#39;m glad she&#39;ll have the space and care she needs to explore and grow.</p>\n<p>When we move into a bigger place I definitely want to get a similar-looking cat. After I get my Dalmatian.</p>\n<p><img src=\"/assets/images/2019/year-in-review-e.jpg\" alt=\"Yung Chi Chi\"/></p>\n<h2 id=\"made-it-big-on-hacker-news\">Made it &quot;big&quot; on Hacker News</h2>\n<p>I love checking out <a href=\"https://news.ycombinator.com\" title=\"Hacker News homepage\">Hacker News (HN)</a> as I find all sorts of neat projects and learn of interesting articles through it. I&#39;ve been checking out <a href=\"https://lobste.rs\" title=\"Lobsters homepage\">Lobsters</a> lately too (and got an invite as I drafted what you&#39;re reading).</p>\n<p>I shared my <a href=\"/2019/a-personal-api\" title=\"My &#39;A personal API&#39; post\">recent post</a> about a &quot;personal API&quot; there and to my pleasant surprise it was <a href=\"https://news.ycombinator.com/item?id=21684949\" title=\"Hacker News comment thread about &#39;A personal API&#39;\">well-received</a> (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&#39;s not ready for prime-time). I&#39;ve also received requests for collaboration so that should be interesting.</p>\n<p>The other feedback I got from HN was <em>intense</em> 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. 😬</p>\n<p>As I proofread the post you&#39;re reading, <a href=\"https://lobste.rs/s/mgpx3w/personal_api\" title=\"Lobsters comment thread about &#39;A personal API&#39;\">reception</a> on Lobsters is quite good too. I spend more time coding than I do writing but when I <em>do</em> write I get more ideas and knowledge due to feedback. Note to future Paul: keep doing this writing thing!</p>\n<h2 id=\"started-learning-typescript\">Started learning TypeScript</h2>\n<p><a href=\"https://www.typescriptlang.org\" title=\"TypeScript homepage\">TypeScript</a> 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&#39;m still no expert but I&#39;m having fun with it and I found egregious code patterns in existing projects thanks to TypeScript.</p>\n<h2 id=\"released-a-couple-projects\">Released a couple projects</h2>\n<ul>\n<li><a href=\"https://chronver.org\" title=\"Chronologic Versioning Specification\"><code>chronver.org</code></a>: A date-based versioning specification that makes more sense to me these days than SemVer.</li>\n<li><a href=\"https://lefty.world\" title=\"A refuge against the tyranny of righteousness\"><code>lefty.world</code></a>: A fun site for left-handed people. I intend to do more with this in 2020.</li>\n<li><a href=\"https://webb.page\" title=\"My homepage\"><code>webb.page</code></a>: My new homepage and probably the best domain I own.</li>\n</ul>\n<h2 id=\"fin\">FIN</h2>\n<p>As is customary, here are some of my favorite pics I snapped this year. 🕸</p>\n<p><img src=\"/assets/images/2019/year-in-review-f.jpg\" alt=\"Some of my favorite photos from this year\"/></p>\n",
16 "url": "https://blog.webb.page/2019/year-in-review",
17 "title": "Year in Review",
18 "summary": "New experiences",
19 "image": "https://blog.webb.page/assets/og.png",
20 "date_modified": "2019-12-29T00:00:00.000Z",
21 "author": {
22 "name": "Paul Anthony Webb",
23 "url": "https://webb.page"
24 }
25 },
26 {
14 "id": "https://blog.webb.page/2019/a-personal-api",
27 "id": "https://blog.webb.page/2019/a-personal-api",
15 "content_html": "<h2 id=\"inspiration\">Inspiration</h2>\n<p>Shortly after <a href=\"/2019/future-of-the-operating-system-revisited-i\" title=\"The Future of the Operating System: Revisited, Part 1\">revisiting</a> 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&#39;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 <a href=\"https://webb.page\" title=\"My web page is Webb.Page! Hehehe\">my personal web page</a> I didn&#39;t want to update the content manually. Rather, I&#39;d want to update an API and have my site(s) automatically update. <strong>Oh yeah</strong>, why <em>not</em> have multiple sites update?</p>\n<p>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&#39;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&#39;re migrating data to a new smartphone (well, if they did all this via a nice UI).</p>\n<h2 id=\"use-cases\">Use Cases</h2>\n<p>Here&#39;s a use case: I&#39;m signed up to several social networks, forums, and I have a couple websites. I&#39;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&#39;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.</p>\n<p>That example may be a little contrived so let&#39;s try another one: I&#39;m a developer who prefers to self-host things whenever possible. I am also quite lazy and live by DRY (don&#39;t repeat yourself) and KISS (keep it simple, silly) principles to the extent I can without much difficulty. I&#39;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.</p>\n<h2 id=\"version-alpha\">Version Alpha</h2>\n<p><em>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.</em></p>\n<p>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&#39;s Spaces, Amazon&#39;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.</p>\n<pre><code class=\"language-text\">api\n├─ …\n├─ modules\n│ ├─ purpose\n│ │ ├─ blog\n│ │ ├─ bookmarks\n│ │ ├─ music\n│ │ ├─ photos\n│ │ ├─ portfolio\n│ │ ├─ reminders\n│ │ ├─ scrobbler\n│ │ └─ status\n│ └─ utility\n│ ├─ database\n│ └─ storage\n└─ …</code></pre>\n<p>The purpose functions would be able to call the utility functions to, well, function. <code>webb.page</code> will be the guinea pig for the initial release of personalOS. Once it works there I will update parts of <code>inc.sh</code> and <code>dsgn.agency</code> to take advantage of it as well.</p>\n<h2 id=\"why-bother\">Why Bother?</h2>\n<p>You, dear reader, are probably not terribly interested in self-hosting and dev ops. Even developers/engineers who know <em>how</em> to do it aren&#39;t interested. Some of the common reasons against self-hosting are fear (of the work involved), apathy (&quot;my data isn&#39;t super important anyway&quot;), time (the only valid reason IMHO), or a combination of the three. While I understand I also think <strong>it is incredibly important to claim your space on the Internet</strong>. We&#39;re all <a href=\"https://info.ideagrove.com/knowledgebase/digital-marketing/what-is-digital-sharecropping-and-why-is-it-a-bad-thing\" title=\"What is &#39;digital sharecropping&#39; and why is it a bad thing?\">digital sharecroppers</a> so why not tend to <em>our own space on the &#39;Net</em>?</p>\n<p>It&#39;s a helluva lot easier to monetize your content when it lives on your platform, or personalOS in this case. Monetization doesn&#39;t have to be your focus though. How about this: something that irritates me about Apple&#39;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 <strong>should</strong> I?!</p>\n<h2 id=\"business-opportunity\">Business Opportunity?</h2>\n<p>Y&#39;know what would be nice? Having an easy way to share any files that you&#39;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 <code>personal.sh</code> to generate shareable links (probably via <code>personal.sh/are</code>, I&#39;m a fan of <a href=\"https://en.wikipedia.org/wiki/Domain_hack\" title=\"Explanation of &#39;Domain hack&#39; on Wikipedia\">domain hacking</a>).</p>\n<p>Because the Internet is open to all, there will inevitably be disturbing/disgusting/morally-bankrupt content shared through <code>personal.sh</code>. If/when that happens, the offending user will have their IP address blacklisted and put on display at <code>personal.sh/it</code>. It&#39;s no secret that anonymity gives some people courage to behave in a way that&#39;s unbecoming.</p>\n<h2 id=\"prior-art\">Prior Art</h2>\n<p>There&#39;s a company named Urbit whose mission is quite similar:</p>\n<blockquote>\n<p>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.</p>\n<p>When you’re ready.<br/>— <a href=\"https://twitter.com/urbitlive/status/1192262246384230400\" title=\"&#39;urbit live&#39; account on Twitter\">urbit live</a></p>\n</blockquote>\n<p>Only problem is, their official site makes their mission <a href=\"https://news.ycombinator.com/item?id=21672481\">quite</a> <a href=\"https://news.ycombinator.com/item?id=18908051\">confusing</a> <a href=\"https://news.ycombinator.com/item?id=6438320\">to many</a>. I don&#39;t know about you but if I&#39;m entrusting my data to something I run, I want to have more than a <em>general idea</em> of how it works.</p>\n<p><strong>EDIT (2019.12.05):</strong> This post has generated lively discussion on <a href=\"https://news.ycombinator.com/item?id=21684949\">HackerNews</a> and as a result we now have more examples of prior art!</p>\n<ul>\n<li><a href=\"https://github.com/cjdelisle/cjdns\">cjdns</a></li>\n<li><a href=\"https://dogsheep.github.io\">Dogsheep</a>, by Simon Willisons</li>\n<li><a href=\"https://www.infoq.com/presentations/strong-types-actor-iot\">Islet</a>, by Carl Hewitt</li>\n<li><a href=\"https://libp2p.io\">libp2p</a></li>\n<li><a href=\"https://github.com/danfang/me-api\">me-api</a>, by Daniel Fang</li>\n<li><a href=\"https://github.com/karlicoss/my\">my</a>, by Dmitrii Gerasimov</li>\n<li><a href=\"https://perkeep.org\">Perkeep</a></li>\n<li><a href=\"https://solid.mit.edu\">SOLID (Social Linked Data)</a>, by Tim Berners-Lee</li>\n<li><a href=\"https://github.com/rigoneri/Syte2\">Syte2</a> / <a href=\"https://github.com/jake-101/Syte2-4-Zeit2.0\">Syte2 for Zeit Now v2</a>, by Rodrigo Neri and Jake Peterson</li>\n<li><a href=\"https://unwalled.garden\">Unwalled Garden</a></li>\n<li><a href=\"https://github.com/yggdrasil-network/yggdrasil-go\">Yggdrasil Network</a></li>\n</ul>\n<h2 id=\"fin\">FIN</h2>\n<p>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&#39;ll see how it goes. 🕸</p>\n",
28 "content_html": "<h2 id=\"inspiration\">Inspiration</h2>\n<p>Shortly after <a href=\"/2019/future-of-the-operating-system-revisited-i\" title=\"The Future of the Operating System: Revisited, Part 1\">revisiting</a> 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&#39;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 <a href=\"https://webb.page\" title=\"My web page is Webb.Page! Hehehe\">my personal web page</a> I didn&#39;t want to update the content manually. Rather, I&#39;d want to update an API and have my site(s) automatically update. <strong>Oh yeah</strong>, why <em>not</em> have multiple sites update?</p>\n<p>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&#39;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&#39;re migrating data to a new smartphone (well, if they did all this via a nice UI).</p>\n<h2 id=\"use-cases\">Use Cases</h2>\n<p>Here&#39;s a use case: I&#39;m signed up to several social networks, forums, and I have a couple websites. I&#39;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&#39;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.</p>\n<p>That example may be a little contrived so let&#39;s try another one: I&#39;m a developer who prefers to self-host things whenever possible. I am also quite lazy and live by DRY (don&#39;t repeat yourself) and KISS (keep it simple, silly) principles to the extent I can without much difficulty. I&#39;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.</p>\n<h2 id=\"version-alpha\">Version Alpha</h2>\n<p><em>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.</em></p>\n<p>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&#39;s Spaces, Amazon&#39;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.</p>\n<pre><code class=\"language-text\">api\n├─ …\n├─ modules\n│ ├─ purpose\n│ │ ├─ blog\n│ │ ├─ bookmarks\n│ │ ├─ music\n│ │ ├─ photos\n│ │ ├─ portfolio\n│ │ ├─ reminders\n│ │ ├─ scrobbler\n│ │ └─ status\n│ └─ utility\n│ ├─ database\n│ └─ storage\n└─ …</code></pre>\n<p>The purpose functions would be able to call the utility functions to, well, function. <code>webb.page</code> will be the guinea pig for the initial release of personalOS. Once it works there I will update parts of <code>inc.sh</code> and <code>dsgn.agency</code> to take advantage of it as well.</p>\n<h2 id=\"why-bother\">Why Bother?</h2>\n<p>You, dear reader, are probably not terribly interested in self-hosting and dev ops. Even developers/engineers who know <em>how</em> to do it aren&#39;t interested. Some of the common reasons against self-hosting are fear (of the work involved), apathy (&quot;my data isn&#39;t super important anyway&quot;), time (the only valid reason IMHO), or a combination of the three. While I understand I also think <strong>it is incredibly important to claim your space on the Internet</strong>. We&#39;re all <a href=\"https://info.ideagrove.com/knowledgebase/digital-marketing/what-is-digital-sharecropping-and-why-is-it-a-bad-thing\" title=\"What is &#39;digital sharecropping&#39; and why is it a bad thing?\">digital sharecroppers</a> so why not tend to <em>our own space on the &#39;Net</em>?</p>\n<p>It&#39;s a helluva lot easier to monetize your content when it lives on your platform, or personalOS in this case. Monetization doesn&#39;t have to be your focus though. How about this: something that irritates me about Apple&#39;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 <strong>should</strong> I?!</p>\n<h2 id=\"business-opportunity\">Business Opportunity?</h2>\n<p>Y&#39;know what would be nice? Having an easy way to share any files that you&#39;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 <code>personal.sh</code> to generate shareable links (probably via <code>personal.sh/are</code>, I&#39;m a fan of <a href=\"https://en.wikipedia.org/wiki/Domain_hack\" title=\"Explanation of &#39;Domain hack&#39; on Wikipedia\">domain hacking</a>).</p>\n<p>Because the Internet is open to all, there will inevitably be disturbing/disgusting/morally-bankrupt content shared through <code>personal.sh</code>. If/when that happens, the offending user will have their IP address blacklisted and put on display at <code>personal.sh/it</code>. It&#39;s no secret that anonymity gives some people courage to behave in a way that&#39;s unbecoming.</p>\n<h2 id=\"prior-art\">Prior Art</h2>\n<p>There&#39;s a company named Urbit whose mission is quite similar:</p>\n<blockquote>\n<p>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.</p>\n<p>When you’re ready.<br/>— <a href=\"https://twitter.com/urbitlive/status/1192262246384230400\" title=\"&#39;urbit live&#39; account on Twitter\">urbit live</a></p>\n</blockquote>\n<p>Only problem is, their official site makes their mission <a href=\"https://news.ycombinator.com/item?id=21672481\">quite</a> <a href=\"https://news.ycombinator.com/item?id=18908051\">confusing</a> <a href=\"https://news.ycombinator.com/item?id=6438320\">to many</a>. I don&#39;t know about you but if I&#39;m entrusting my data to something I run, I want to have more than a <em>general idea</em> of how it works.</p>\n<p><strong>EDIT (2019.12.05):</strong> This post has generated lively discussion on <a href=\"https://news.ycombinator.com/item?id=21684949\">HackerNews</a> and as a result we now have more examples of prior art!</p>\n<ul>\n<li><a href=\"https://github.com/cjdelisle/cjdns\">cjdns</a></li>\n<li><a href=\"https://dogsheep.github.io\">Dogsheep</a>, by Simon Willisons</li>\n<li><a href=\"https://www.infoq.com/presentations/strong-types-actor-iot\">Islet</a>, by Carl Hewitt</li>\n<li><a href=\"https://libp2p.io\">libp2p</a></li>\n<li><a href=\"https://github.com/danfang/me-api\">me-api</a>, by Daniel Fang</li>\n<li><a href=\"https://github.com/karlicoss/my\">my</a>, by Dmitrii Gerasimov</li>\n<li><a href=\"https://perkeep.org\">Perkeep</a></li>\n<li><a href=\"https://solid.mit.edu\">SOLID (Social Linked Data)</a>, by Tim Berners-Lee</li>\n<li><a href=\"https://github.com/rigoneri/Syte2\">Syte2</a> / <a href=\"https://github.com/jake-101/Syte2-4-Zeit2.0\">Syte2 for Zeit Now v2</a>, by Rodrigo Neri and Jake Peterson</li>\n<li><a href=\"https://unwalled.garden\">Unwalled Garden</a></li>\n<li><a href=\"https://github.com/yggdrasil-network/yggdrasil-go\">Yggdrasil Network</a></li>\n</ul>\n<h2 id=\"fin\">FIN</h2>\n<p>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&#39;ll see how it goes. 🕸</p>\n",
16 "url": "https://blog.webb.page/2019/a-personal-api",
29 "url": "https://blog.webb.page/2019/a-personal-api",
@@ -15,7 +15,7
15 "dependencies": {
15 "dependencies": {
16 "chewit": "^2019.7.23",
16 "chewit": "^2019.7.23",
17 "fastify": "2.11.0",
17 "fastify": "2.11.0",
18 "fastify-compress": "^1.1.0",
18 "fastify-compress": "^2.0.0",
19 "fastify-helmet": "^3.0.2",
19 "fastify-helmet": "^3.0.2",
20 "fastify-static": "^2.5.1",
20 "fastify-static": "^2.5.1",
21 "feed": "^4.0.0",
21 "feed": "^4.0.0",
@@ -23,8 +23,8
23 },
23 },
24 "description": "Blog of Paul Anthony Webb",
24 "description": "Blog of Paul Anthony Webb",
25 "devDependencies": {
25 "devDependencies": {
26 "@babel/cli": "^7.7.5",
26 "@babel/cli": "^7.7.7",
27 "@babel/core": "^7.7.5",
27 "@babel/core": "^7.7.7",
28 "@babel/plugin-external-helpers": "7.7.4",
28 "@babel/plugin-external-helpers": "7.7.4",
29 "@babel/plugin-proposal-class-properties": "7.7.4",
29 "@babel/plugin-proposal-class-properties": "7.7.4",
30 "@babel/plugin-proposal-decorators": "7.7.4",
30 "@babel/plugin-proposal-decorators": "7.7.4",
@@ -36,15 +36,15
36 "@babel/plugin-syntax-dynamic-import": "7.7.4",
36 "@babel/plugin-syntax-dynamic-import": "7.7.4",
37 "@babel/plugin-syntax-import-meta": "7.7.4",
37 "@babel/plugin-syntax-import-meta": "7.7.4",
38 "@babel/polyfill": "^7.7.0",
38 "@babel/polyfill": "^7.7.0",
39 "@babel/preset-env": "^7.7.6",
39 "@babel/preset-env": "^7.7.7",
40 "@babel/register": "^7.7.4",
40 "@babel/register": "^7.7.7",
41 "@inc/eslint-config": "^2019.10.22",
41 "@inc/eslint-config": "^2019.10.22",
42 "@inc/stylelint-config": "^2019.12.1",
42 "@inc/stylelint-config": "^2019.12.1",
43 "alphabetic-compare": "^1.1.4",
43 "alphabetic-compare": "^1.1.4",
44 "chronver": "^2019.10.2-7.1",
44 "chronver": "^2019.10.2-7.1",
45 "colorette": "^1.1.0",
45 "colorette": "^1.1.0",
46 "cwd": "^0.10.0",
46 "cwd": "^0.10.0",
47 "eslint": "^6.7.2",
47 "eslint": "^6.8.0",
48 "glob": "^7.1.6",
48 "glob": "^7.1.6",
49 "graceful-fs": "^4.2.3",
49 "graceful-fs": "^4.2.3",
50 "html-minifier": "^4.0.0",
50 "html-minifier": "^4.0.0",
@@ -55,13 +55,13
55 "npm-run-all": "^4.1.5",
55 "npm-run-all": "^4.1.5",
56 "pino-pretty": "^3.5.0",
56 "pino-pretty": "^3.5.0",
57 "recursive-readdir": "^2.2.2",
57 "recursive-readdir": "^2.2.2",
58 "sass": "^1.23.7",
58 "sass": "^1.24.0",
59 "snazzy": "^8.0.0",
59 "snazzy": "^8.0.0",
60 "standardx": "^5.0.0",
60 "standardx": "^5.0.0",
61 "stylelint": "^12.0.0",
61 "stylelint": "^12.0.1",
62 "stylelint-order": "^3.1.1",
62 "stylelint-order": "^3.1.1",
63 "tiny-relative-date": "^1.3.0",
63 "tiny-relative-date": "^1.3.0",
64 "updates": "^9.3.2",
64 "updates": "^9.3.3",
65 "viperhtml": "^2.17.1"
65 "viperhtml": "^2.17.1"
66 },
66 },
67 "engines": {
67 "engines": {
@@ -98,5 +98,5
98 "app/dist"
98 "app/dist"
99 ]
99 ]
100 },
100 },
101 "version": "2019.12.12"
101 "version": "2019.12.29"
102 }
102 }
Comments 0
You need to be logged in to leave comments. Login now